sysfs 文件夹符号链接行为

sysfs 文件夹符号链接行为

我遇到了这种我无法解释的行为。在 sysfs 中,有一个符号链接,但对我来说似乎不可能:

me@test:/sys/block/sde$ ll
...
lrwxrwxrwx 1 root root    0 Oct  1  2019 device -> ../../../8:0:0:0
...

me@test:/sys/block/sde$ cd ../../../8:0:0:0
me@test:/sys/devices/pci0000:00/0000:00:17.0/usb2/2-1/2-1:1.3/host8/target8:0:0/8:0:0:0$

但显然三级可以让我到达根文件夹,那么这是怎么发生的呢?

me@test:/sys/block/sde$ cd ../../../
me@test:/$

答案1

有同样的问题。符号链接 to/sys/block/sda/device是相对于的,/sys/devices因为/sys/block/sda它本身就是一个符号链接。例子:

连接到 USB 的 SATA 驱动器 -> SATA 适配器

# ls -l /sys/block/sda
/sys/block/sda -> ../devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/0:0:0:0/block/sda/

# readlink /sys/block/sda/device
../../../0:0:0:0

# readlink -e /sys/block/sda/device
/sys/devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/0:0:0:0

/sys/block/sda是 中该设备的符号链接/sys/devices,因此当您应用../../..../该完整路径时,它会将您带到/sys/devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/,其中是符号链接0:0:0:0后缀引用的目录/sys/block/sda/device

旁注:/sys/devices源自该设备的 UDEV 路径,可以通过以下方式获取udevadm

# udevadm info --query=path /sys/block/sda
/devices/pci0000:00/0000:00:08.1/0000:06:00.3/usb5/5-2/5-2.2/5-2.2:1.0/host0/target0:0:0/0:0:0:0/block/sda

另一个示例,这次是连接到平面(主板)NVMe 端口的 NVME 驱动器:

# ls -l /sys/block/nv*
/sys/block/nvme0n1 -> ../devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0/nvme0n1/

# readlink /sys/block/nvme0n1/device
../../nvme0

# readlink -e /sys/block/nvme0n1/device
/sys/devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0

# udevadm info --query=path /sys/block/nvme0n1
/devices/pci0000:00/0000:00:02.1/0000:01:00.0/nvme/nvme0/nvme0n1

相关内容