据说 udev 创建了识别实际设备的符号链接,/dev/disk/by-uuid 就是一个例子。
[root@centos1 by-uuid]# pwd
/dev/disk/by-uuid
[root@centos1 by-uuid]# ls -l
总计 0 lrwxrwxrwx 1 root root 10 六月 26 00:59 4cfc879d-1d4e-4289-856c-5f532a74bb2d -> ../../sda
上述是否意味着 a) /dev/sda 指向 uuid 4cfc879d-1d4e-4289-856c-5f532a74bb2d
或者
b)uuid 4cfc879d-1d4e-4289-856c-5f532a74bb2d 指向 /dev/sda 吗?
==================================================
如果答案是 a,我一直认为链接应该是从左到右的?那么有人将如何引用 uuid 转到 /dev/sda 呢?我还认为 /dev/sda 应该是由 udev 动态添加的,并且它的命名基于某些规则。
如果答案是 b,那么 sda 指向哪里?据说内核动态地将设备添加到 /dev/ 文件夹,并且使用 udev 我们可以保留其中设备的命名。
[root@centos1 dev]# 密码
/dev
[root@centos1 dev]# ls -lt星展银行
brw-rw---- 1 根磁盘 8, 0 6月 26 00:59 sda
==================================================
我尝试在 /etc/udev/rules.d/ 中查找规则,但无济于事。我在 CentOS 上。
我正在尝试 /lib/udev/rules.d/,但看不到将 sda 添加到 /dev/ 的规则
请指教。
答案1
链接是到/dev/sda1. 您可以使用文件命令:例如,在我的系统中,
# file *
ff28e743-4409-41b3-99ea-f133cdcc86be: symbolic link to `../../sda1'
因此,你的选择b是正确的。/dev/sda 是不是一个链接,因此它根本不指向任何其他东西:它只是一个特殊的(设备)文件,例如这篇维基百科文章。
我没有使用 CentOS,但在我的 Debian/Kubuntu 系统中,磁盘规则位于/lib/udev/rules.d, 在下面
# ls -lh 60-per*
-rw-r--r-- 1 root root 616 apr 15 22:33 60-persistent-alsa.rules
-rw-r--r-- 1 root root 2,5K apr 15 22:33 60-persistent-input.rules
-rw-r--r-- 1 root root 947 apr 15 22:33 60-persistent-serial.rules
-rw-r--r-- 1 root root 929 mag 4 2012 60-persistent-storage-dm.rules
-rw-r--r-- 1 root root 5,6K apr 15 22:33 60-persistent-storage.rules
-rw-r--r-- 1 root root 1,4K apr 15 22:33 60-persistent-storage-tape.rules
-rw-r--r-- 1 root root 769 apr 15 22:33 60-persistent-v4l.rules
相关文件当然是60-持久存储.规则。如果您无法在系统中找到它,我建议您尝试:
find / -type f -name '*persistent-storage*.rules'
编辑:
那么 /sda 是否被 udev 添加到 /dev 中?
是的。
我们如何确保“sda”始终保持为“sda”?
我们没有。规则由udev在安装时。事实上,上述文件包含以下规则:
# scsi devices
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi"
编辑2
最简单的事情,因为你无法下定决心,就是制定自己的规则。假设你有一个设备,叫做现在sdd,但您想在下次重启时将其称为 sda。
首先需要找出一些参数:
udevadm info -a -p $(udevadm info -q path -n /dev/sdd)
这将输出大量信息。搜索如下行(当然,您的搜索内容会有所不同):
ATTRS{idVendor}=="18a5"
ATTRS{idProduct}=="0302"
ATTRS{serial}=="TT0E4E008XW3DT9H"
您现在可以使用这些参数来制定自己的规则,并将其插入到/etc/udev/rules.d/10-local.rules:
ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0302", ATTRS{serial}=="TT0E4E008XW3DT9H", KERNEL=="sd?", NAME="sda", RUN+="/home/my_name/bin/my_program"
最后一部分,RUN+="/home/my_name/bin/my_program",是可选的:如果您愿意,您可以使用它来运行命令,但您也可以完全省略它。