web-dev-qa-db-ja.com

lsblkリストデバイスをIDで作成する

私は常に、/dev/sdXYのスキーム内の名前とドライブの/dev/disk/by-id/名でツリー内のデバイスを出力するlsblkの出力を関連付けたい状況にあります。

2
Rovanion

By-id名は、lsblkにリストするように指示できるシリアルなものと一緒にドライブモデルで構成されます。

lsblk -o name,model,serial

このコマンドの出力は次のようになります。

NAME   MODEL            SERIAL
sda    SAMSUNG HD203WI  S1UYJ1VZ500792                                       
├─sda1                  
└─sda9                  
sdb    ST500DM002-1BD14 W2APGFP8
├─sdb1                  
└─sdb9                  
sdc    ST500DM002-1BD14 W2APGFS0
├─sdc1                  
└─sdc9 

後世のために、いくつかの一般的に使用される列を使用したより長いコマンドもここにあります:

Sudo lsblk -o name,size,fstype,label,model,serial,mountpoint

出力は次のようになります。

NAME     SIZE FSTYPE            LABEL         MODEL            SERIAL          MOUNTPOINT
sda      1,8T zfs_member                      SAMSUNG HD203WI  S1UYJ1VZ500792
├─sda1   1,8T zfs_member        storage                                        /home    
└─sda9     8M zfs_member                                                       
sdb    465,8G btrfs                           ST500DM002-1BD14 W2APGFP8        
├─sdb1 465,8G btrfs                                                            
└─sdb9     8M btrfs                                                            
sdc    465,8G btrfs                           ST500DM002-1BD14 W2APGFS0        
├─sdc1 465,8G btrfs             rpool                                          /      
└─sdc9     8M btrfs 
4
Rovanion

見つかりました here 、デバイスIDはls -l /dev/disk/by-idで確認できます。
それで、あなたの仕事は達成できます。次のようなもので:

lsblk |awk 'NR==1{print $0" DEVICE-ID(S)"}NR>1{dev=$1;gsub("[^[:alnum:]]","",dev);printf $0"\t\t";system("find /dev/disk/by-id -lname \"*"dev"\" -printf \" %p\"");print "";}'

または

lsblk -r|awk 'NR==1{print $0" DEVICE-ID(S)"}NR>1{dev=$1;printf $0" ";system("find /dev/disk/by-id -lname \"*"dev"\" -printf \" %p\"");print "";}'
1
Gerald Schade