1,115 瀏覽數

Linux – udev(2) 為什麼採用 udev(sysfs)

為什麼採用 udev(sysfs)?

因為 udev(sysfs) 採用比較彈性而且較有效的方式管理 /dev/ 裝置,所以 Linux 在 2.6.15 kernel 之後採用了 udev(sysfs) .原因很多大可以包括下面幾個:

  • 從前的裝置名稱是固定的 sda 代表第一個 SCSI 的硬碟,但是 udev 可以依據需求將 sda 任意改成你想要的名稱 如:my_first_scsi_disk
  • 採用連結(symbolic link)的方式儲存裝置的別名.
  • 在 /sys 可以看到依據 id / label / path / uuid 所對應出來的名稱.
  • 裝置(device node)的permissions and ownership 也都可以修改.
  • 當裝置在連接或移除時,可以執行相對應的程式(script).
  • network 裝置可以依需求修改成想要命名的方式.

預設命名規則
系統已經有一套規則命名所有的裝置,而且很好懂.基本上我們除非有特別需求其實是不用再去修改規則.比如在 /dev/disk 就代表所有的硬碟裝置,依 id / label / path / uuid 規則的擺放.

[root@benjr ~]#  ll -lR /dev/disk/
/dev/disk/:
total 0
drwxr-xr-x 2 root root 100 Mar 13 03:43 by-id
drwxr-xr-x 2 root root  60 Mar 13 03:43 by-label
drwxr-xr-x 2 root root 120 Mar 13 03:43 by-path
drwxr-xr-x 2 root root  60 Mar 13 03:43 by-uuid
/dev/disk/by-id:
total 0
lrwxrwxrwx 1 root root  9 Mar 13 03:43 scsi-3500000e01d93f8c0 -> ../../sda
lrwxrwxrwx 1 root root 10 Mar 13 03:43 scsi-3500000e01d93f8c0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 13 03:43 scsi-3500000e01d93f8c0-part2 -> ../../sda2

/dev/disk/by-label:
total 0
lrwxrwxrwx 1 root root 10 Mar 13 03:43 boot -> ../../sda1

/dev/disk/by-path:
total 0
lrwxrwxrwx 1 root root  9 Mar 13 03:43 ide-0:0 -> ../../hdc
lrwxrwxrwx 1 root root  9 Mar 13 03:43 pci-0000:0c:00.0-sas-0x5005076b06400f24:1:0-0x500000e01d93f8c2:1 -> ../../sda
lrwxrwxrwx 1 root root 10 Mar 13 03:43 pci-0000:0c:00.0-sas-0x5005076b06400f24:1:0-0x500000e01d93f8c2:1-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 Mar 13 03:43 pci-0000:0c:00.0-sas-0x5005076b06400f24:1:0-0x500000e01d93f8c2:1-part2 -> ../../sda2

/dev/disk/by-uuid:
total 0
lrwxrwxrwx 1 root root 10 Mar 13 03:43 d9a68a3e-8b89-485e-97c9-d147d6601059 -> ../../sda1

你可以看到光是一個硬碟就又這麼完整的方式來呈現,其中大部分都是連結(symbolic link)的方式儲存裝置的別名並對應到真實的裝置名稱.
如: boot -> ../../sda1 就很清楚知道 boot 這個 partition 是在 sda1 上面.

網友的想法

  1. 自動參照通知: Linux – udev | Benjr.tw

發表迴響