是什么导致 /dev/disk/by-label 被填充?

Lor*_*ein 15 linux filesystems devices

我注意到 Linux 发行版通常有一个 /dev/disk/by-label 目录,但情况并非总是如此(例如,CirrOS Linux 测试映像没有)。

在 Linux 系统上正确填充 /dev/disk/by-label 目录需要什么?

der*_*ert 12

在大多数现代 Linux 系统上,几乎所有内容/dev都由 udev 放在那里。

在我的 Debian 机器上,/dev/disk/by-label来自下面的几个文件/lib/udev/rules.d例如,这里有一条规则来自60-persistent-storage.rules

ENV{ID_FS_LABEL_ENC}=="?*",     ENV{ID_FS_USAGE}=="filesystem|other", \
        SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
Run Code Online (Sandbox Code Playgroud)

前面几行是ID_FS_LABEL_ENC从哪里来的:

# probe filesystem metadata of disks
KERNEL!="sr*", IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
Run Code Online (Sandbox Code Playgroud)

您可以blkid自己运行以查看它传递给 udev 的数据:

root@Zia:~# /sbin/blkid -o udev -p /dev/sda2
ID_FS_SEC_TYPE=msdos
ID_FS_LABEL=xfer1
ID_FS_LABEL_ENC=xfer1
ID_FS_UUID=B140-C934
ID_FS_UUID_ENC=B140-C934
ID_FS_VERSION=FAT16
ID_FS_TYPE=vfat
ID_FS_USAGE=filesystem
ID_PART_ENTRY_SCHEME=dos
ID_PART_ENTRY_TYPE=0xc
ID_PART_ENTRY_NUMBER=2
ID_PART_ENTRY_OFFSET=257040
ID_PART_ENTRY_SIZE=257040
ID_PART_ENTRY_DISK=8:0
Run Code Online (Sandbox Code Playgroud)

确实:

root@Zia:~# ls -l /dev/disk/by-label/xfer1 
lrwxrwxrwx 1 root root 10 Nov 19 10:02 /dev/disk/by-label/xfer1 -> ../../sda2
Run Code Online (Sandbox Code Playgroud)

/etc/udev/rules.d/如果您想为设备创建其他名称、更改权限等,您可以将其他规则文件放入其中。例如,这里我们有一个在/dev/disk/for-asm.