Зачем
Когда подключил новый диск, нужен ответ:
- Какой это
/dev/sdXили/dev/nvmeXnY? - Как разбит, есть ли уже разделы?
- Какие на нём ФС (если есть)?
- Какие UUID/LABEL у разделов - чтобы вписать в [[mount-and-fstab|fstab]]?
- Где сейчас смонтировано?
lsblk отвечает на 1, 2, 5. blkid - на 3, 4. Часто используются
вместе.
lsblk - дерево
$ 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
$ 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. Полезные опции:
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 - кастомный набор
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 |
# Все SSD на хосте
lsblk -d -o NAME,ROTA,MODEL | awk '$2==0'
blkid - детали ФС
$ 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
Запрос конкретного устройства:
blkid /dev/sda2
blkid -U <uuid> # найти устройство по 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-строку:
echo "UUID=$(blkid -o value -s UUID /dev/sda2) /boot ext4 defaults 0 2"
Когда /dev/disk/by-*/
Альтернатива blkid - смотреть symlinks udev'а:
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, но более явный.
После создания нового раздела
# 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-awareudevadm info /dev/sdX- всё что udev знает об устройствеsmartctl -a /dev/sdX- SMART-данные диска (отдельный пакет)