# lsblk и blkid - block-устройства и UUID _Команды · LinuxLab Knowledge Base_ **TL;DR:** lsblk показывает дерево block-устройств (диск → раздел → LVM/crypt → mountpoint). blkid печатает UUID/LABEL/TYPE ФС. Связка для написания строки в [[mount-and-fstab|/etc/fstab]] по UUID. ## Зачем Когда подключил новый диск, нужен ответ: - Какой это `/dev/sdX` или `/dev/nvmeXnY`? - Как разбит, есть ли уже разделы? - Какие на нём ФС (если есть)? - Какие UUID/LABEL у разделов - чтобы вписать в [[mount-and-fstab|fstab]]? - Где сейчас смонтировано? `lsblk` отвечает на 1, 2, 5. `blkid` - на 3, 4. Часто используются вместе. ## lsblk - дерево ```bash $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 930G 0 part └─cryptroot 252:0 0 930G 0 crypt ├─vg-root 252:1 0 50G 0 lvm / ├─vg-swap 252:2 0 8G 0 lvm [SWAP] └─vg-data 252:3 0 872G 0 lvm /data nvme0n1 259:0 0 476.9G 0 disk └─nvme0n1p1 259:1 0 476.9G 0 part /home ``` Колонки: - **NAME** - имя устройства - **MAJ:MIN** - major:minor номера (для `mknod`) - **RM** - removable (флешка, USB) - **SIZE** - размер - **RO** - read-only - **TYPE** - `disk`, `part`, `lvm`, `crypt`, `raid1/5/...`, `loop`, `rom` - **MOUNTPOINTS** - где смонтировано (несколько при bind-mount'ах) Дерево показывает **stack**: диск → раздел → LUKS-crypt → LVM-volume → mount. ## lsblk -f - с ФС и UUID ```bash $ lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINTS sda ├─sda1 vfat EFI 1234-ABCD /boot/efi ├─sda2 ext4 boot a1b2c3... /boot └─sda3 crypto_LUKS d4e5f6... └─cryptroot LVM2_member 7890ab... ├─vg-root ext4 root 3344cc... / ├─vg-swap swap swap 5566dd... [SWAP] └─vg-data xfs data 7788ee... /data ``` За один вызов всё что нужно для fstab. Полезные опции: ```bash lsblk -f # FSTYPE/LABEL/UUID lsblk -p # полные пути (/dev/sda1, не sda1) lsblk -P # KEY="value" (для скриптов) lsblk -J # JSON lsblk -O # "all columns" - всё что есть lsblk -d # только диски, без разделов lsblk -e7 # исключить loop-устройства (major 7) lsblk /dev/sda # только дерево этого диска ``` ## lsblk -o - кастомный набор ```bash lsblk -o NAME,SIZE,FSTYPE,UUID,MOUNTPOINTS,MODEL lsblk -o NAME,ROTA,DISC-MAX,SCHED,FSTYPE ``` Полезные не-default колонки: | Поле | Что | |------|-----| | `MODEL`, `SERIAL` | вендор/модель/SN диска | | `ROTA` | 1 = HDD, 0 = SSD | | `TRAN` | sata/nvme/usb | | `WWN` | World-Wide Name (для multipath) | | `MIN-IO`, `OPT-IO`, `PHY-SEC`, `LOG-SEC` | размеры I/O и сектора | | `DISC-MAX`, `DISC-GRAN` | поддержка trim/discard | | `SCHED` | I/O-scheduler (mq-deadline, none, bfq, kyber) | | `RQ-SIZE` | глубина очереди I/O | ```bash # Все SSD на хосте lsblk -d -o NAME,ROTA,MODEL | awk '$2==0' ``` ## blkid - детали ФС ```bash $ blkid /dev/sda1: UUID="1234-ABCD" TYPE="vfat" PARTUUID="aabbccdd-01" /dev/sda2: LABEL="boot" UUID="a1b2c3..." TYPE="ext4" PARTUUID="aabbccdd-02" /dev/sda3: UUID="d4e5f6..." TYPE="crypto_LUKS" PARTUUID="aabbccdd-03" /dev/mapper/vg-root: LABEL="root" UUID="3344cc..." TYPE="ext4" ``` Поля: - **UUID** - filesystem UUID (от mkfs); меняется при `mkfs` повторном - **PARTUUID** - GPT partition UUID (от parted/sgdisk); стабилен на разделе - **LABEL** - пользовательская метка из `mkfs -L` или `tune2fs -L` - **PARTLABEL** - GPT partition label (gdisk-set, не filesystem-label!) - **TYPE** - тип ФС: `ext4`, `xfs`, `vfat`, `swap`, `crypto_LUKS`, `LVM2_member`, `linux_raid_member` Запрос конкретного устройства: ```bash blkid /dev/sda2 blkid -U # найти устройство по UUID blkid -L boot # найти по LABEL blkid -o value -s UUID /dev/sda2 # только UUID без шума blkid -o export /dev/sda2 # формат UUID=...\nTYPE=... для eval ``` ## UUID vs PARTUUID vs LABEL - что выбрать в fstab | Идентификатор | Когда | |---------------|-------| | UUID | большинство случаев - стабилен, уникален | | PARTUUID | для swap-раздела без ФС или сырых разделов | | LABEL | человекочитаемо, но **может конфликтовать** между дисками | | `/dev/sdaX` | **не используй** - меняется при добавлении дисков | Сгенерировать fstab-строку: ```bash echo "UUID=$(blkid -o value -s UUID /dev/sda2) /boot ext4 defaults 0 2" ``` ## Когда `/dev/disk/by-*/` Альтернатива blkid - смотреть symlinks udev'а: ```bash ls -l /dev/disk/by-uuid/ ls -l /dev/disk/by-label/ ls -l /dev/disk/by-partuuid/ ls -l /dev/disk/by-id/ # серийники, multipath ls -l /dev/disk/by-path/ # PCI/USB-путь ``` В fstab можно писать прямо `/dev/disk/by-uuid/abcd-1234`. Эквивалент `UUID=abcd-1234`, но более явный. ## После создания нового раздела ```bash # 1. Создать раздел (parted/sgdisk/cfdisk) sudo parted /dev/sdb mklabel gpt mkpart data ext4 1MiB 100% # 2. Дать ядру перечитать таблицу разделов sudo partprobe /dev/sdb # или blockdev --rereadpt /dev/sdb # 3. Создать ФС sudo mkfs.ext4 -L data /dev/sdb1 # 4. Узнать UUID blkid /dev/sdb1 # 5. Добавить в fstab echo "UUID=$(blkid -o value -s UUID /dev/sdb1) /mnt/data ext4 defaults 0 2" \ | sudo tee -a /etc/fstab # 6. Создать mountpoint и проверить sudo mkdir /mnt/data sudo mount -a lsblk -f /dev/sdb ``` ## Когда что-то пошло не так - **lsblk не показывает новый диск** - не было `partprobe`/перезагрузки после parted; либо в hotswap-bay контроллер не сообщил ядру. `dmesg | tail` подскажет. - **`Device or resource busy`** - диск используется (mounted, в LVM, в RAID, в crypt). `lsof /dev/sdX` или `fuser`. - **Два устройства с одинаковым UUID** - скопировал диск через `dd`, UUID не уникален. `tune2fs -U random /dev/sdX1` (для ext) или пересоздать ФС. - **`/dev/sdb` вдруг стал `/dev/sda`** - именно поэтому в fstab UUID или PARTUUID, не sdX. Перезагрузка изменила порядок probing. - **blkid пуст после mkfs** - кэш udev. `blkid -p /dev/sdX1` парсит сразу, без кэша. Или `udevadm trigger`. ## Альтернативы и связанные - **`fdisk -l`** - старый-добрый, показывает таблицу разделов одним списком - **`parted -l`** - то же что fdisk, но GPT-aware - **`udevadm info /dev/sdX`** - всё что udev знает об устройстве - **`smartctl -a /dev/sdX`** - SMART-данные диска (отдельный пакет) ## Команды ```bash lsblk -f ``` Дерево + ФС + UUID + mountpoint - чаще всего этого достаточно ```bash lsblk -d -o NAME,SIZE,MODEL,SERIAL,TRAN ``` Только диски с моделью и SN - инвентаризация физической части ```bash blkid /dev/sda1 ``` UUID и тип ФС конкретного раздела ```bash blkid -o value -s UUID /dev/sda1 ``` Только UUID - удобно для подстановки в скрипт fstab ```bash lsblk -p -o NAME,FSTYPE,UUID,MOUNTPOINTS ``` Полные пути устройств - для копирования в скрипты mount/dd ```bash ls -l /dev/disk/by-uuid/ ``` udev-симлинки UUID → device - альтернатива blkid ```bash lsblk -J | jq '.blockdevices[] | select(.children)' ``` JSON-вывод для скриптинга через jq - только устройства с разделами ## См. также - [Block devices - диски в Linux](/kb/block-devices.md) - [mount и /etc/fstab - подключение ФС](/kb/mount-and-fstab.md) - [LVM - Logical Volume Manager](/kb/lvm.md) - [RAID - software-raid через mdadm](/kb/raid.md) - [Filesystem Hierarchy Standard (FHS)](/kb/fhs.md)