2016年4月1日 星期五

Ubuntu udevadm用法

使用 lspci 將所有pci列出來
$lspci

這個 SATA Controller有 6-port
PHY ID: 1,2,3,4 是 SATA 6G
PHY ID: 5,6 是 SATA 3G


udevadm Source Code:
  How To Compiler udev 


===========================================================
使用 udevadm 列出 HDD 連結到那個 SATA Port
下面是SATA Port 1,2,3,4 連接HDD;  SATA Port 5 連接  CD-ROM
可以很容易看出來 是從 Host 0 排到 5
也就是 SATA Controller的  PHY ID: 1,2,3,4 連接HDD;  PHY ID:5 連接  CD-ROM

$ udevadm info -q all -n /dev/sda | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda

$ udevadm info -q all -n /dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb

$ udevadm info -q all -n /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata3/host2/target2:0:0/2:0:0:0/block/sdc

$ udevadm info -q all -n /dev/sdd | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata4/host3/target3:0:0/3:0:0:0/block/sdd

$ udevadm info -q all -n /dev/sde | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata5/host4/target4:0:0/4:0:0:0/block/sde

$ udevadm info -q all -n /dev/sr0 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0





# udevadm info -q all -n /dev/sda



===========================================================
下面是把 SATA Port 3的HDD 實體移除
只剩下 SATA Port 1,2,4 連接HDD;  PHY-5 連接  CD-ROM
SATA Port 3 是空的, 沒有接 HDD


# udevadm info -q all -n /dev/sda | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
# udevadm info -q all -n /dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sdb
# udevadm info -q all -n /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata4/host3/target3:0:0/3:0:0:0/block/sdc
# udevadm info -q all -n /dev/sdd | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata5/host4/target4:0:0/4:0:0:0/block/sdd
# udevadm info -q all -n /dev/sde | grep DEVPATH
device node not found
# udevadm info -q all -n /dev/sr0 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0



很明顯看到 /host2/ 不見了
表示這個 Host X 就是連接到 PHY ID


===========================================================
下面是把 SATA Port 2的HDD 實體直接插到  SATA Port 3
只剩下 SATA Port 1,3,4 連接HDD;  PHY-5 連接  CD-ROM
SATA Port 2 是空的, 沒有接 HDD
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sda | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata3/host2/target2:0:0/2:0:0:0/block/sdb
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata4/host3/target3:0:0/3:0:0:0/block/sdc
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sdd | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata5/host4/target4:0:0/4:0:0:0/block/sdd
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sr0 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sde | grep DEVPATH

 

===========================================================
如果主機版的 BIOS 的 SATA Port Hot Plug 有打開
可以將原來 SASATA Port 2 是空的, 不關電狀態下, 直接插上一顆 HDD
這樣 SATA Port 2 會自動連接

root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sda | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata3/host2/target2:0:0/2:0:0:0/block/sdb
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata4/host3/target3:0:0/3:0:0:0/block/sdc
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sdd | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata5/host4/target4:0:0/4:0:0:0/block/sdd
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sde | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sde
root@jun-ubuntu-prg:~# udevadm info -q all -n /dev/sr0 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1f.2/ata6/host5/target5:0:0/5:0:0:0/block/sr0



每一個 Port 的 Hot Plug 都是獨力的
也就是說Hot Plug打開後
SATA Controller 只要通電開機會
SATA PHY都會不停的一直發出偵測訊號
又因為是空 Channel 訊號, 對面的無人接收
這會造成那個Channel的壽命減短
(一個類比訊號專長同事告知的, 但不知是否真的是這樣)


可以使用 udevadm監控Hot Plug的狀態
$ udevadm  monitor
也可以參考這篇
http://blog.csdn.net/fjb2080/article/details/5009791
http://www.signal11.us/oss/udev/

這還一篇 Windows 版本
http://blog.csdn.net/fjb2080/article/details/5428589


Mode 1: 已連接的 HDD 列表








Mode 2: 移除 HDD


Mode 3: 重新連接HDD


















重新連接上HDD後, Target ID會自動增加, 並非原來的 Target ID
/dev/sdx 也和原來的不一樣
也就是說 當發生HOT-PLUG後, Device 一定要重新 scan一次







===========================================================

連接 HDD 時























移除 HDD 時








===========================================================
請注意, MAX Target ID 並不是只有 254, 可以一直增加




===========================================================

如果有兩片以上的 SATA Controller
想要分辨 HDD 是那一片的
請參考 lspci 或者 lshw 程式




===========================================================
如果是 LSI SAS Controler 則不適用這種方法
$ udevadm info -q all -n /dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host4/port-4:0/end_device-4:0/target4:0:0/4:0:0:0/block/sdb
$ udevadm info -q all -n /dev/sdc | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:01.0/0000:01:00.0/host4/port-4:1/end_device-4:1/target4:0:1/4:0:1:0/block/sdc

要使用 udevadm 列出 HDD 連結到那個 SAS Port
請看用另一篇 lsiutil 的文章







沒有留言:

張貼留言