我正在寻找一种方法来列出 Linux 上特定类型的所有分区。(具体来说:所有 EFI 系统分区)。
我知道blkid
可以根据文件系统类型进行过滤:该命令blkid -t TYPE=vfat
返回正确的结果,但不是很强大:可能存在其他不是 ESP 的 vfat 文件系统,或者可能存在使用不同文件系统格式化的 ESP。
那么,是否存在一个等效的命令,可以列出设备但根据分区类型进行过滤?
编辑
我需要所有 EFI 系统分区(或 ESP)的列表。这些分区EF00
在 gdisk 中具有分区类型,ef
在 fdisk 中具有分区类型。它们最常见的格式是 vfat。现在,我可以使用blkid
列出所有使用 vfat 格式化的分区,但这留下了两个问题:
a) 可能存在未使用 vfat 格式化(或根本没有格式化)的 EFI 分区,这些分区将不包含在列表中,并且
b) 可能存在格式化为 vfat 的常规文件系统,这些文件系统将错误地包含在列表中。因此匹配文件系统类型不是解决问题的办法。所以我在寻找可以匹配的东西分区类型,所以EF00
或ef
。
如果不存在这样的命令,我可能需要执行以下操作来获取我想要的信息:
- 列出所有磁盘
- 对于每个磁盘,找出它是否有 MBR 或 GPT 分区表
- 列出分区表
- 过滤结果以仅打印 ESP 分区
这很麻烦而且容易出错,所以如果blkid
存在能够匹配分区类型的等效物,我愿意使用它。
答案1
lsblk -o +PARTTYPE
列表中包含分区类型 UUID。EFI 系统分区类型 UUID 是C12A7328-F81F-11D2-BA4B-00A0C93EC93B
,因此 grep 搜索此信息(小写,或使用-i
带有 grep 的标志)会列出您的 ESP。
答案2
1)对于特定类型的列表分区:
:~# lsblk -ln -o NAME,TYPE
...
sda disk
sda1 part
sda1_crypt crypt
vg0xa-system lvm
vg0xa-swap lvm
vg0xa-tmp lvm
vg0xa-var lvm
vg0xa-usr lvm
...
也可以看看:lsblk -ln -o NAME,PARTTYPE
2)或者更具体地说:
:~# lsblk -ln -o NAME,TYPE | grep sda1_crypt
sda1_crypt crypt
答案3
为了列出 EFI 分区,您可以使用:
$ lsblk -ln -o NAME,LABEL | grep EFI_SYSPART | awk '{print $1}'
nvme0n1p1
nvme1n1p1
或按文件系统分类FSTYPE
:
lsblk -ln -o NAME,FSTYPE | grep vfat
nvme0n1p1 vfat
nvme1n1p1 vfat
- 对于每个磁盘,查明其上是否有 MBR 或 GPT 分区表
尝试解析 JSON 输出lsblk -J
(您需要版本> 2.25
,2.33
似乎支持此功能)。
您可以使用jq
Python/Ruby/Perl 脚本来处理它:
$ lsblk -J -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL | jq .blockdevices
[
{
"name": "sr0",
"fstype": null,
"size": "1024M",
"mountpoint": null,
"label": null
},
{
"name": "nvme0n1",
"fstype": null,
"size": "894,3G",
"mountpoint": null,
"label": null,
"children": [
{
"name": "nvme0n1p1",
"fstype": "vfat",
"size": "511M",
"mountpoint": "/boot/efi",
"label": "EFI_SYSPART"
},
{
"name": "nvme0n1p2",
"fstype": "linux_raid_member",
"size": "29,3G",
"mountpoint": null,
"label": null,
"children": [
{
"name": "md2",
"fstype": "ext4",
"size": "29,3G",
"mountpoint": "/",
"label": "/"
}
]
},
...
答案4
lsblk -o NAME,SIZE,PARTUUID,PARTLABEL,FSTYPE \
--filter 'PARTTYPENAME == "EFI System"'
NAME SIZE PARTUUID PARTLABEL FSTYPE
sda1 512M 31a252ad-d88e-432e-a9e9-30583242f063 EFI vfat
sdb1 512M 7e83a5d5-085e-4bae-b19a-a8da609143e1 EFI vfat