我有一个问题,使用 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