为什么 fstab 使用 UUID 而不是实际的文件系统名称?

为什么 fstab 使用 UUID 而不是实际的文件系统名称?

例如,这是我的第一行/etc/fstab

UUID=050e1e34-39e6-4072-a03e-ae0bf90ba13a    /    ext4    errors=remount-ro    0    1

这是命令的输出df -h(报告可用磁盘空间):

honey@bunny:~$ df -T

Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/vda       ext4      30832636 4884200  24359188  17% /
none           tmpfs            4       0         4   0% /sys/fs/cgroup
udev           devtmpfs    498172      12    498160   1% /dev
tmpfs          tmpfs       101796     320    101476   1% /run
none           tmpfs         5120       0      5120   0% /run/lock
none           tmpfs       508972       0    508972   0% /run/shm
none           tmpfs       102400       0    102400   0% /run/user
  1. 鉴于第一列是,从这两个可以推断出UUID=050e1e34-39e6-4072-a03e-ae0bf90ba13a代表吗?/dev/vdafstab<file system>

  2. /etc/fstab那么,如果我修改成这样可以吗?

    /dev/vda    /    ext4    errors=remount-ro    0    1
    
  3. 编辑:如果是(对于上述问题),为什么该sudo blkid命令显示不同的 UUID /dev/vda

    $ sudo blkid
    
    /dev/vda: LABEL="DOROOT" UUID="6f469437-4935-44c5-8ac6-53eb54a9af26" TYPE="ext4"
    

    我在这里缺少什么?

    回答:我的结论是(3)是我的主机云中的一个错误。所以是的, blkid(或)报告的 UUIDls -l /dev/disk/by-uuid应该与 中使用的 UUID 相同/etc/fstab

答案1

使用 UUID 的优点是它独立于操作系统为硬盘提供的实际设备编号。

想象一下,您向系统添加了另一个硬盘,并且由于某种原因,操作系统决定您的旧磁盘现在sdb而不是sda.

fstab如果指向设备名称,您的引导过程将会被搞砸。但对于 UUID 来说,那就没问题了。

有关 UUID 的更多详细信息也可以在博客文章中找到“UUID 和 Linux:你需要知道的一切”

答案2

那么,我可以将/etc/fstab修改为这个吗?

它将大概没问题,但很可能最好保留 UUID。

UUID在本例中,是用于标识块设备上的分区的任意字符串;它与分区本身一起存储,并且可以根据需要分配不同的分区(类似于 MAC 地址)。

使用UUID的优点是它是明确无误的,反之则/dev/vda不然;它可以碰巧它在启动时最终成为不同的驱动器,尽管这在上下文中可能完全是理论上的(例如,因为您只有一个特定类型的驱动器)。

另一个使用设备名称可能导致问题的更微妙的例子是最近在某些系统上切换到使用一致的网络设备名称。如果这是作为升级发生的,并且您在某个网络脚本中使用了硬编码的设备名称,那么它就会崩溃。并行示例 WRT 块设备可能是更改命名方案的内核或 udev 升级。

UUID 的一点就是让这些事情变得可能并且轻松。所以当你使用设备名称,这样做没有任何好处除非(例如)您有一个可以交换不同驱动器的系统。换句话说,如果您没有充分的理由这样做,坚持使用 UUID

答案3

您可以man fstab对文件的内容和语义进行相当简洁的阅读/etc/fstab。在我的 x86 上,相当最新的 Arch Linux 服务器上,man fstab给了我这个:

The second field ... describes  the mount point for the filesystem.

所以,是的,/dev/vda显然是某些设备的众多名称之一,UUID=050e1e34-39e6-4072-a03e-ae0bf90ba13a因为这两个名称似乎都安装在“/”上。

如果您查看该目录,/dev/disk/by-uuid/您可以看到指向我的服务器上的/dev/sda1,之类的符号链接。/dev/sdb1这可能是检验你的假设的另一种方法。/dev/disk有子目录by-id, by-pathby-uuid它们似乎都是同一设备的备用名称。

相关内容