bash 中使用 dbus/udisks 的分区标签与设备列表

bash 中使用 dbus/udisks 的分区标签与设备列表

我有一个问题,使用 dbus 和 udisks 似乎是最好的方法。所以我发明了一个问题:为每个“安装”的分区创建一个标签和设备表ala:

  ""      /dev/sda1
  "ROOT"   /dev/sda2
  "BACKUP" /dev/sdb1
   ...

问题是,我越想如何解决这个问题,我就越困惑。有人可以提出一些建议吗?

答案1

也许是这样的:

udevadm info --export-db | sed  '
  /^E: DEVNAME=/{s///;h;d;}
  /^E:[^=]*LABEL=/!d
  G;s/[^=]*=\(.*\)\n/"\1" /'

等价udisks的是:

udisks --dump | sed '
  /^[[:blank:]]*device-file:[[:blank:]]*/{s///;h;d;}
  /^[[:blank:]]*label:.*[^[:blank:]]/!d
  G;s/[^:]*:[[:blank:]]*\(.*\)\n/"\1" /'

答案2

我认为您正在寻找的内容已经由命令提供blkid

/dev/sda1: LABEL="SYSTEM_DRV" UUID="10BE12331238FD148" TYPE="ntfs" 
/dev/sda2: LABEL="Windows7_OS" UUID="5CF2E12AD3438B42" TYPE="ntfs" 
/dev/sda3: LABEL="Lenovo_Recovery" UUID="C43211B2399007C54" TYPE="ntfs" 
/dev/sda5: UUID="4835b90f-4845-1234-8dcd-fbcf332338f8" TYPE="ext4" 
/dev/sda6: UUID="av6WTb-CU69-4Ump-10dD-sudd-fTtC-Gf12AL" TYPE="LVM2_member" 
/dev/mapper/vg_grinchy-lv_root: UUID="75e0a75d-45d3-463c-bd87-9f7e123fd456" TYPE="ext4"

如果您想获取特定的信息列表,您可以使用blkid -o list一些awk命令来获取它,如下所示:

$ blkid -o list|tail -n +3|awk '{print "\""$3"\"", $1}'|sed 's/(not//'|column -t
"SYSTEM_DRV"       /dev/sda1
"Windows7_OS"      /dev/sda2
"Lenovo_Recovery"  /dev/sda3
"/boot"            /dev/sda5
""                 /dev/sda6
"/"                /dev/mapper/vg_grinchy-lv_root
"<swap>"           /dev/mapper/vg_grinchy-lv_swap
"/home"            /dev/mapper/vg_grinchy-lv_home

请参阅blkid手册页了解更多详细信息

答案3

awk '$4 ~ /^sd[a-z][1-9][0-9]?/ {label="";
  cmd="blkid -o value -s LABEL /dev/" $4;
  cmd | getline label;
  printf "\"%s\": /dev/%s\n",label,$4;}' /proc/partitions

相关内容