当分区加密时,使用 lsblk 或类似命令返回根分区名称

当分区加密时,使用 lsblk 或类似命令返回根分区名称

这是我的lsblk输出:

NAME          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1       259:0    0 465.8G  0 disk  
├─nvme0n1p1   259:1    0   512M  0 part  /efi
├─nvme0n1p2   259:2    0   420G  0 part  
│ └─cryptroot 254:0    0   420G  0 crypt /
└─nvme0n1p3   259:3    0  45.3G  0 part

我需要检索其“crypt”与挂载点“/”关联的“part”,而不事先知道“crypt”或“part”:

nvme0n1p2 /

这可以通过单个命令来实现吗?

答案1

lsblk可以输出 JSON,您可以通过管道传输到该 JSONjqjq是一个 JSON 处理器,您可以用它执行任意数量的复杂查询。所以这样的事情应该有效:

lsblk --json | \
  jq -r '.blockdevices[] | .children[] | select( .. | objects | .mountpoints[]? == "/" ) | .name'

例如:

$ lsblk
NAME                MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINTS
nvme0n1             259:0    0 953.9G  0 disk  
├─nvme0n1p1         259:1    0   512M  0 part  /boot/efi
├─nvme0n1p2         259:2    0   3.9G  0 part  /boot
└─nvme0n1p3         259:3    0 949.5G  0 part  
  └─nvme0n1p3_crypt 253:0    0 949.5G  0 crypt /

$ lsblk --json | \
  jq -r '.blockdevices[] | .children[] | select( .. | objects | .mountpoints[]? == "/" ) | .name'
nvme0n1p3

相关内容