• 使用UUID管理磁盘


    How To Manage Your Disk By UUID On Linux

    Hey There,

    Today's post is about something I think is pretty cool on Linux (since about kernel 2.1.x, when /proc/partitions was introduced, or made standard). It has to do with disk mounting (both on the command line or through the fstab) by UUID (Universal Unique Identifier). UUID notation, when used as a means to access disk, is just one more way that Linux has moved ahead of the pack to (depending on your way of thinking ;) either make disk management more accessible or make the fstab and disk identification even more confusing ;) NOTE: Skip the next paragraph if you don't care about Open Solaris' slight support for this functionality, to date. Skip to the numbered list if you just want to check out the commands and have had your fair share of my opinion ;)

    For those of you who got here by catching the Solaris and Unix tags on this post, I want to address your concerns immediately, since you may no longer be concerned with this text after the next few sentences ;) Although Solaris does "understand" UUID addressing, the level on which Solaris addresses the issue (with regards to disk management) isn't user-friendly enough to fit in the scope of this post. Basically, and this is putting it very generically, the getting and setting of object UUID's on Solaris is still only resident at the code-base layer. I'm glad to see that Sun is addressing the issue with C functions like wsreg_set_id() and wsreg_get_id(), but, since the functionality provided by this layer of access hasn't been implemented in any relevant user tools, we won't be looking at Solaris' implementation of it for the remainder of this dialogue. Ok, I'll give Solaris 10 points for having expanded greatly upon the previous version's acceptance of the standard by implementing a lot of new C routines, a "makeuuid" binary and support for UUID's of zones, but, again, since we're going to be looking at mounting disk using the UUID (without re-writing the OS), Solaris (Open and Regular) is out for now (8/20/2008 just in case the future makes me incorrect, which it has a nasty habit of doing ;)

    While Linux boasts most of the same C routines and headers as Solaris (which it must, of course, since the OS supports UUID identification), they're named slightly differently and - the biggest plus - Linux (RedHat and Ubuntu, at least) come with plenty of programs to work with disk UUID's and plenty of hooks to allow other programs to make use of the disk UUID's as well!

    The most basic program (that Solaris has picked up on) is called "uuidgen." This program will generate a UUID for you based on the output from a decent randomness-generator (like /dev/random) or resort to time-and-MAC-based randomization ( Generally, the only random factor used is time, unless you have the privilege to view your ethernet adapter's MAC address). The program can be forced to use one or the other, if you have a specific preference (with the "-r" and "-t" flags, respectively). This seemingly extraneous program does have one very important area of application, which we'll look at below.

    Where you really see the benefit with Linux is in how they've worked it into their basic hard disk management facilities. They've made it very simple for you to keep track of your disks by UUID using any number of methods. I'll be listing several different means to some "ends" you may want to achieve, as every command may not be available in your Linux distro, but at least one probably is.

    One, often unmentioned (but highly valuable), benefit of using UUID's to deal with your disks is that you don't have to worry about system naming conventions and the hassles inherent with using them. For instance, if you have a disk with a specific UUID and a block device name of /dev/sda3, if you do all your work (and system/application customization) with that disk, as the name /dev/sda3, you might be in for a big headache if you have a system problem (or just install some new hardware and reconfigure) and Linux decides to rename /dev/sda3 as /dev/sdb3 (or "anything" else). If you're using UUID's, you can simply use the "tune2fs" command (shown below) to assign the original UUID back to the new logical device name, so /dev/sdb3 would function exactly as if it were /dev/sda3, without causing any issues with your Linux OS :):

    1. If you don't know the UUID of your disk, you can find it by using one of the several commands below:

    host # vol_id /dev/sda3
    ...
    ID_FS_UUID=a1331d73-d640-4bac-97b4-cf33a375ae5b
    ...

    or:

    host # blkid /dev/sda3 <-- Leave blank to show all disks
    /dev/sda3: LABEL="/" UUID="a1331d73-d640-4bac-97b4-cf33a375ae5b" SEC_TYPE="ext3" TYPE="ext2"

    also:

    host # ls -l /dev/disk/by-uuid|grep sda3
    lrwxrwxrwx 1 root root 10 11. Okt 18:02 a1331d73-d640-4bac-97b4-cf33a375ae5b-> ../../sda3

    2. If you prefer to generate your own UUID's (see above), you can use the uuidgen command and couple it with tune2fs to change the default UUID assigned to your disk by the system, like this:

    host # uuidgen
    1d721189-7b71-4315-95a7-1c3abc90d379
    host # tune2fs -U 1d721189-7b71-4315-95a7-1c3abc90d379 /dev/sda3

    3. Then again, if you already know the UUID, you might want to find out what disk it's associated with. You can generally get this information with the "findfs" command, like so:

    host # findfs UUID=a1331d73-d640-4bac-97b4-cf33a375ae5b
    /dev/sda3

    Of course, using some of the commands above and grepping out part of the UUID will also get you your answer, like:

    host # ls -l /dev/disk/by-uuid|grep a1331d73-d640-4bac-97b4-cf33a375ae5b
    lrwxrwxrwx 1 root root 10 11. Okt 18:02 a1331d73-d640-4bac-97b4-cf33a375ae5b-> ../../sda3

    or

    host # blkid|grep a1331d73-d640-4bac-97b4-cf33a375ae5b <-- remember that blkid with no arguments returns all of the system disk
    /dev/sda3: LABEL="/" UUID="a1331d73-d640-4bac-97b4-cf33a375ae5b" SEC_TYPE="ext3" TYPE="ext2"

    4. And, lastly (for this post, at least ;), you can mount your disks using the UUID, and even incorporate that automated UUID mounting into your /etc/fstab. To mount directly from the command line, you can do something like this:

    host # mount -U a1331d73-d640-4bac-97b4-cf33a375ae5b /directory/you/mount/this/disk/on

    and you could instruct your system to mount this partition by UUID from within the fstab, as well. It works basically the same way that the LABEL keyword does:

        host # cat /etc/fstab
        ...
        UUID=a1331d73-d640-4bac-97b4-cf33a375ae5b /directory/you/mount/this/disk/on ext3fs defaults 1 1



    And, at this point, you should be able to figure your way around using UUID's to manipulate your disk on Linux with no problem. Enjoy, and please "be careful" :)

    Cheers,

    , Mike

    查看硬盘UUID

    1
    root [ /dev/disk/by-uuid ]# ls -l /dev/disk/by-uuid


    查看硬盘UUID

    1
    blkid /dev/sda5

    uuidgen 会返回一个合法的 uuid,结合 tune2fs 可以新生成一个 uuid 并写入 ext2,3,4 分区中:
    比如新建或改变 sda5 的 uuid (需要 root 权限)

    1
    uuidgen | xargs tune2fs /dev/sda5 -U

    你也可以把 fstab 里找到的原 uuid 写回分区:

    1
    tune2fs -U c1b9d5a2-f162-11cf-9ece-0020afc76f16 /dev/sda5
  • 相关阅读:
    恕我直言,你可能误解了微服务
    准备情人节礼物比写代码难?来看看IT直男给女友们的礼物
    2019年微服务5大趋势,你pick哪个?
    拼多多通用优惠券漏洞被薅羊毛数千万 你的系统有反作弊防护吗?
    知物由学 | AI在Facebook清理有害内容上扮演了什么角色?
    打造业界最牛微服务,网易云这两位“大神”获了大奖
    网易云轻舟微服务斩获“创新产品奖”等两项大奖
    GIS中栅格数据结构的显示与计算
    未能找到tempselect2.cur的一部分
    地图下载3之超图瓦片下载工具
  • 原文地址:https://www.cnblogs.com/cute/p/2041475.html
Copyright © 2020-2023  润新知