磁盘分区的UUID

事情起源于最近在工作中碰到的一个人为故障:因为磁盘盘柜的问题,热插拔磁盘之后,磁盘的顺序发生颠倒,传统的/dev/sda的标示方法全部混乱。最终导致数据的丢失。很是郁闷的事情。

故障的原因真的很明显,解决这个问题的方法也很明确——用uuid代替path,在fstab中重新标注挂装位置。话说回来,其实很多年前,Litrin就发现了fstab中可以使用uuid代替硬件文件:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda1 during installation
UUID=08be81ed-4e84-4038-901c-47842389cb54 / ext4 errors=remount-ro 0 1
#/dev/vda3 /home ext4 errors=remount-ro 0 2
/dev/vdb2 /home ext4 errors=remount-ro 0 2
#/dev/vda2 none swap sw
/dev/vdb1 none swap sw

不过可惜的是,当时我并没有觉得UUID除了带来麻烦,不直观的毛病之外,并没有看到它还有这个优势。

如何获得磁盘分区的uuid?可以直接ls -l /dev/disk/by-uuid:

ilab@litrin-dev:~$ ls /dev/disk/by-uuid -lh
total 0
lrwxrwxrwx 1 root root 10 Oct 9 13:08 08be81ed-4e84-4038-901c-47842389cb54 -> ../../vda1
lrwxrwxrwx 1 root root 10 Oct 9 13:08 40a3c10d-2973-4db0-8440-8bc8bb431867 -> ../../vdb1
lrwxrwxrwx 1 root root 10 Oct 9 13:08 b67d0e9e-f5fa-4b12-a363-12910e26d6c8 -> ../../vdb2
lrwxrwxrwx 1 root root 9 Oct 9 13:08 e7ad9818-d645-496e-ad89-062bd8e88f99 -> ../../vdb

这里,可以看到分区uuid到硬件文件的链接关系。

类似的,可以通过 ls /dev/disk/by-path -l 得到,磁盘的PCI接口映射关系

trin-dev:~$ ls /dev/disk/by-path -lh
total 0
lrwxrwxrwx 1 root root 9 Oct 9 13:08 pci-0000:00:04.0-virtio-pci-virtio1 -> ../../vda
lrwxrwxrwx 1 root root 10 Oct 9 13:08 pci-0000:00:04.0-virtio-pci-virtio1-part1 -> ../../vda1
lrwxrwxrwx 1 root root 9 Oct 9 13:08 pci-0000:00:05.0-virtio-pci-virtio2 -> ../../vdb
lrwxrwxrwx 1 root root 10 Oct 9 13:08 pci-0000:00:05.0-virtio-pci-virtio2-part1 -> ../../vdb1
lrwxrwxrwx 1 root root 10 Oct 9 13:08 pci-0000:00:05.0-virtio-pci-virtio2-part2 -> ../../vdb2

磁盘uuid的优势是它是唯一的,无论你怎么换磁盘的接口,它不会出现因为盘符错乱导致的挂装位置出错的问题,反而适合那些有N多磁盘的存储机头。

“磁盘分区的UUID”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据