Команда lsblk: структура дисков и разделов и проверка UUID

Тестовая средаСемейство RHELAlmaLinux 9.8Учётная запись root
Команды для дисков · монтированияlsblkРасположение/usr/bin/lsblk

Команда lsblk выводит в виде дерева диски и разделы, подключённые к серверу, и их точки монтирования, а также сразу показывает размер дисков, тип файловой системы и даже UUID. Когда мы запустили lsblk на сервере AlmaLinux 9, устройства loop, созданные пакетами snap, вывелись раньше диска, поэтому мы отфильтровали их с помощью -e 7. Затем с помощью -f мы проверили файловую систему xfs и UUID корневого раздела.

Размеры дисков и UUID в выводе ниже — примерные значения.

1️⃣ Как читать базовый вывод команды lsblk

На сервере, где программы установлены через snap, lsblk без опций выводит перед диском вереницу устройств loop, смонтированных для каждой версии пакета. Поэтому номер устройства loop, 7, указывают в -e, чтобы исключить их.

lsblk -e 7
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0   80G  0 disk 
├─nvme0n1p1 259:1    0    1M  0 part 
├─nvme0n1p2 259:2    0  200M  0 part /boot/efi
├─nvme0n1p3 259:3    0    1G  0 part /boot
└─nvme0n1p4 259:4    0 78.8G  0 part /

nvme0n1 в столбце NAME — это диск. Строки с nvme0n1p1 по nvme0n1p4, соединённые под ним знаками [├─] и [└─], — это разделы, на которые разбит этот диск. Это как указатель этажей у входа в здание, где под названием здания перечислено, что находится на каждом этаже.

В столбце TYPE диски обозначены как [disk], а разделы — как [part], а столбец MOUNTPOINTS показывает папку, в которую смонтирован раздел. На проверенном сервере корневой раздел nvme0n1p4 был смонтирован в /, а nvme0n1p3 — в /boot. nvme0n1p1 размером 1M — это загрузочный раздел BIOS, который нужен для загрузки с диска GPT, поэтому у него нет точки монтирования.

MAJ:MIN — это старший и младший номера, которые ядро присваивает устройству; у устройств loop это 7, а у проверенного диска NVMe было 259. RM показывает значением 1 или 0, съёмное ли устройство, а RO — доступно ли оно только для чтения.

SIZE легко принять за свободное место, но SIZE — это полный размер диска или раздела. Свободное место файловой системы смотрят в столбце FSAVAIL, который появляется при добавлении -f.

На схеме ниже можно по шагам сравнить, как меняются строки и столбцы вывода в зависимости от опции.

🧭 Вывод lsblk по опциям: диски и разделы
Поясняющая схема
⚙️ Опция
$ lsblk -f -d -p -e 7
Имя устройства
Размер
Файловая система
Точка монтирования
/dev/nvme0n1
80G
├─/dev/nvme0n1p1
1M
├─/dev/nvme0n1p2
200M
vfat, 5A1E-…
/boot/efi
├─/dev/nvme0n1p3
1G
xfs, 6d2f…
/boot
└─/dev/nvme0n1p4
78.8G
xfs, 2b9e…
/
🖥️ Что выводится на экран
1 строка диска и 4 строки разделов, 7 базовых столбцов (от NAME до MOUNTPOINTS)
1 строка диска и 4 строки разделов, 8 столбцов файловой системы (FSTYPE, UUID, FSAVAIL и др.)
Только 1 строка диска, 7 базовых столбцов
1 строка диска и 4 строки разделов, имена начинаются с /dev/
Без опций разделы ветвятся под диском. Размер и точка монтирования тоже выводятся.
-f вместо размера выводит тип файловой системы, UUID и свободное место. Диск nvme0n1 и nvme0n1p1 без файловой системы остаются пустыми.
-d убирает строки разделов и выводит только строку диска.
С -p перед именами устройств добавляется /dev/, поэтому выведенные пути можно сразу передавать другим командам.

2️⃣ lsblk -f: проверка файловых систем и UUID

Базовый вывод не показывает тип файловой системы, поэтому то, в каком формате отформатирован раздел, проверяют с помощью -f. -f выводит восемь столбцов: NAME, FSTYPE, FSVER, LABEL, UUID, FSAVAIL, FSUSE% и MOUNTPOINTS.

lsblk -f -e 7
NAME        FSTYPE FSVER LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
nvme0n1                                                                            
├─nvme0n1p1                                                                        
├─nvme0n1p2 vfat   FAT16       5A1E-3B7C                             192.1M     4% /boot/efi
├─nvme0n1p3 xfs                6d2f0c4e-8b1a-4f3d-a7e2-9c5b1d0e4f28  691.4M    28% /boot
└─nvme0n1p4 xfs                2b9e7f41-c3d6-4a85-b0f1-7e4a2c9d6b13   68.5G    13% /

При запуске корневой раздел и /boot оказались xfs, а /boot/efi — vfat версии FAT16. У диска nvme0n1 и nvme0n1p1 нет файловой системы, поэтому они остались пустыми. UUID — это уникальный номер, присваиваемый каждой файловой системе; в /etc/fstab с его помощью указывают раздел для монтирования по UUID вместо имени устройства.

Чтобы проверить сведения о файловой системе точнее всего, используйте команду blkid.

FSAVAIL и FSUSE% — это свободное место и процент использования смонтированной файловой системы. У несмонтированных разделов значения не выводятся. Команда df выводит только размер и использование смонтированных файловых систем. lsblk выводит ещё и структуру дисков и разделов, независимо от того, смонтированы они или нет.

3️⃣ lsblk -o для выбора столбцов и -b для байтов

Если после -o перечислить имена столбцов через запятую, выведутся только эти столбцы в указанном порядке. Доступные имена столбцов есть в списке в конце [lsblk --help].

lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT -e 7
NAME         SIZE FSTYPE MOUNTPOINT
nvme0n1       80G        
├─nvme0n1p1    1M        
├─nvme0n1p2  200M vfat   /boot/efi
├─nvme0n1p3    1G xfs    /boot
└─nvme0n1p4 78.8G xfs    /

MOUNTPOINT выводит только одну точку монтирования, а MOUNTPOINTS — все, если одна и та же файловая система смонтирована в нескольких местах. Чтобы добавить всего один столбец после базовых, поставьте + перед именем столбца, как в [-o +UUID].

-b выводит размеры целыми числами в байтах. Для сравнения на глаз базовые единицы читать проще, поэтому -b подходит для скриптов, которые вычисляют или сравнивают размеры.

lsblk -b -o NAME,SIZE -e 7
NAME               SIZE
nvme0n1     85899345920
├─nvme0n1p1     1048576
├─nvme0n1p2   209715200
├─nvme0n1p3  1073741824
└─nvme0n1p4 84613774848

G и M в базовом выводе — это единицы по 1024, поэтому диск 80G выводится как 85 899 345 920 байт.

4️⃣ lsblk -d для списка дисков и -p для полных путей

На сервере с несколькими дисками строки разделов перемешиваются и список дисков трудно читать, поэтому с помощью -d разделы убирают и выводят только строки дисков.

lsblk -d -e 7
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0    0  80G  0 disk 

В выводе осталась только одна строка диска nvme0n1, а четыре строки разделов под ним не появились.

С -p перед именами устройств добавляется /dev/, и они выводятся полными путями. Эти пути можно сразу передавать другим командам, например mount.

lsblk -p -e 7
NAME             MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
/dev/nvme0n1     259:0    0   80G  0 disk 
├─/dev/nvme0n1p1 259:1    0    1M  0 part 
├─/dev/nvme0n1p2 259:2    0  200M  0 part /boot/efi
├─/dev/nvme0n1p3 259:3    0    1G  0 part /boot
└─/dev/nvme0n1p4 259:4    0 78.8G  0 part /

Только столбец NAME меняется на полные пути — от /dev/nvme0n1 до /dev/nvme0n1p4, а остальные столбцы такие же, как в базовом выводе.

Если передать путь к устройству как аргумент, выводятся только это устройство и разделы под ним; если передать путь к разделу, выводится только строка этого раздела.

lsblk /dev/nvme0n1p4
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n1p4 259:4    0 78.8G  0 part /

В выводе появляется только одна строка nvme0n1p4, без строки диска и знаков ветвления. Когда мы передали путь к несуществующему устройству, появилась ошибка [not a block device], а код выхода был 32.

5️⃣ Вывод и опции команды lsblk для скриптов

Базовый вывод заманчиво нарезать в скриптах, но состав столбцов базового вывода и -f может измениться в будущем, поэтому в скриптах столбцы задают явно через -o.

-n убирает строку заголовка и выводит только значения, поэтому подходит, когда нужно одно значение, например тип файловой системы одного раздела.

lsblk -no FSTYPE /dev/nvme0n1p4
xfs

Без строки заголовка выводится одно слово — xfs, тип файловой системы корневого раздела, поэтому его можно сразу записать в переменную оболочки.

-P выводит каждый столбец в одной строке в виде [имя=”значение”]. В util-linux 2.37 на AlmaLinux 9 достаточно добавить -P, чтобы имена изменились и легко читались как переменные оболочки: например, MAJ:MIN становится MAJ_MIN, а FSUSE% — FSUSE_PCT.

lsblk -P -o NAME,FSTYPE,MOUNTPOINT /dev/nvme0n1p4
NAME="nvme0n1p4" FSTYPE="xfs" MOUNTPOINT="/"

Три указанных столбца выводятся в одной строке в порядке NAME, FSTYPE, MOUNTPOINT. Все значения заключены в двойные кавычки.

-J выводит результат в JSON. Без -d разделы попадают в массив children под диском. Вместе с -b числом становится только size, а другие столбцы размера, например FSAVAIL, остаются строками.

lsblk -J -d -o NAME,SIZE,TYPE -e 7
{
   "blockdevices": [
      {
         "name": "nvme0n1",
         "size": "80G",
         "type": "disk"
      }
   ]
}

С -d массив blockdevices содержит только диск, а массив children не появляется.

🔲 Опции команды lsblk

ОпцияКопироватьОписание
-e, --excludeИсключает устройства с указанным старшим номером. При указании 7 исключаются устройства loop.
-f, --fsВыводит тип файловой системы, UUID, свободное место и процент использования.
-o, --outputВыводит по порядку только столбцы, указанные через запятую.
-b, --bytesВыводит столбец SIZE целыми числами в байтах.
-d, --nodepsУбирает строки разделов и выводит только строки дисков.
-p, --pathsВыводит имена устройств полными путями, начинающимися с /dev/.
-n, --noheadingsУбирает строку заголовка и выводит только значения.
-P, --pairsВыводит имена столбцов и значения парами в одной строке.
-J, --jsonВыводит результат в формате JSON.
-a, --allВыводит также пустые устройства размером 0.
ОпцияКопироватьОписание
-I, --includeВыводит только устройства с указанным старшим номером.
-l, --listВыводит результат списком вместо дерева.
-r, --rawВыводит результат в формате raw без выравнивания столбцов.
-i, --asciiВыводит линии дерева символами ASCII.
-s, --inverseОбращает зависимости и выводит диски под разделами.
-S, --scsiВыводит только сведения об устройствах SCSI.
-t, --topologyВыводит сведения о топологии, например размер сектора и планировщик ввода-вывода.
-m, --permsВыводит владельца, группу и права доступа устройств.
-x, --sortСортирует по указанному столбцу и выводит результат списком.
-O, --output-allВыводит все доступные столбцы.

🔲 Симулятор команды lsblk

В симуляторе ниже вы можете сами ввести команды из статьи и проверить, как меняется вывод при каждой опции.

Симулятор команды lsblkutil-linux 2.37.4
[root@server work]#
Клавишами ↑↓ можно вызвать ранее введённые команды.

🔢 FAQ & рекомендуемые материалы

При запуске -f от обычной учётной записи UUID и FSAVAIL вывелись так же, как от учётной записи root. lsblk читает сведения из sysfs и udev. Если сведения udev недоступны, приходится читать устройство напрямую, а для этого нужны права root.

Сразу после добавления или замены устройства udev может ещё не собрать все сведения, поэтому выполните udevadm settle, а затем снова запустите lsblk.

-a выводит также пустые устройства размером 0, поэтому её используют, чтобы проверить, не пропало ли какое-то устройство из базового вывода. На том же сервере с -a вывелась ещё одна строка: устройство loop размером 0B, к которому ничего не подключено.

ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Докажите, что вы человек: 2   +   10   =