linux - как составить список разделов определенного типа?

Я ищу способ вывести список всех разделов определенного типа в Linux. (В частности: все системные разделы EFI.)

Я знаю, что blkid может фильтровать по типу файловой системы: команда blkid -t TYPE = vfat возвращает правильные результаты, но не очень надежный: могут быть другие файловые системы vfat, которые не являются ESP, или могут быть ESP, отформатированные с другой файловой системой.

Итак, есть ли эквивалентная команда, которая может выводить список устройств, но фильтровать по типу раздела?

EDIT

Мне нужен список всех системных разделов EFI (или ESP). Эти разделы имеют тип раздела EF00 в gdisk или тип раздела ef в fdisk. Чаще всего они форматируются как vfat. Теперь я могу использовать blkid для вывода списка всех разделов, отформатированных с помощью vfat, но это оставляет две проблемы:
a) Могут быть разделы EFI, не отформатированные с помощью vfat (или не отформатированные вообще), которые отсутствуют в списке, и
б) могут быть обычные файловые системы, отформатированные как vfat, которые будут включены в список неправильно. Поэтому сопоставление по типу файловой системы - не лучший вариант. Вот почему я ищу что-то, что может соответствовать типу раздела , поэтому EF00 или ef .

Если такой команды нет, я бы возможно, мне потребуется сделать следующее, чтобы получить нужную мне информацию:
- список всех дисков
- для каждого диска узнать, есть ли на нем таблица разделов MBR или GPT
- перечислить таблицу разделов
- filter the results to only print the ESP partitions

This is cumbersome and error-prone, so if an equivalent of blkid exists that is able to match partition types, I would like to use that.

1
задан 23 November 2016 в 14:40
3 ответа

lsblk -o +PARTTYPE включает в листинг тип UUID раздела. Тип UUID системного раздела EFI - C12A7328-F81F-11D2-BA4B-00A0C93EC93B, поэтому смазка для этого (в нижнем регистре, или используйте флаг -i с смазкой) перечисляет ваши ESP.

.
2
ответ дан 3 December 2019 в 20:32

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
0
ответ дан 3 December 2019 в 20:32

Чтобы вывести список разделов 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": "/"
          }
        ]
      },
...
0
ответ дан 11 February 2021 в 09:06

Теги

Похожие вопросы