Linux: диски, разделы, файловые системы и монтирование

Просмотр дисков, создание разделов и файловых систем, монтирование, fstab, место на диске и swap

Просмотр устройств

КомандаВариантЧто делает
lsblklsblkДерево дисков, разделов и точек монтирования.
lsblk -flsblk -fДобавляет файловые системы, UUID и метки.
lsblk -olsblk -o NAME,SIZE,TYPE,MOUNTPOINTСвой набор колонок.
lsblk -dlsblk -d -o NAME,ROTA,SIZEТолько диски; ROTA=1 — HDD, 0 — SSD.
blkidsudo blkidUUID, тип файловой системы и метка каждого раздела.
fdisk -lsudo fdisk -l /dev/sdaТаблица разделов диска (только чтение).
parted -lsudo parted -lРазделы всех дисков, включая GPT-большие диски.
smartctl -asudo smartctl -a /dev/sdaСостояние диска по SMART (пакет smartmontools).
udevadm infoudevadm info -q all /dev/sdbВсе атрибуты устройства из udev.

Разделы и файловые системы

КомандаВариантЧто делает
fdisksudo fdisk /dev/sdbИнтерактивно создать раздел в MBR (m — справка, n — новый, w — записать).
gdisksudo gdisk /dev/sdbИнтерактивно создать раздел в GPT.
parted mklabelsudo parted /dev/sdb mklabel gptСоздать таблицу разделов GPT (удаляет все разделы!).
parted mkpartsudo parted -a optimal /dev/sdb mkpart data ext4 0% 100%Создать раздел на весь диск.
mkfs.ext4sudo mkfs.ext4 -L data /dev/sdb1Создать ext4 с меткой data.
mkfs.xfssudo mkfs.xfs -L data /dev/sdb1Создать XFS (часто для больших данных).
mkfs.vfatsudo mkfs.vfat -F 32 /dev/sdc1FAT32 для флешек и EFI-раздела.
mkfs.ext4 -msudo mkfs.ext4 -m 1 /dev/sdb1Зарезервировать 1% под root вместо 5% по умолчанию (для больших данных).
wipefssudo wipefs -a /dev/sdb1Удалить сигнатуры файловой системы (перед переформатированием).
e2labelsudo e2label /dev/sdb1 newlabelСменить метку ext2/3/4.
tune2fs -lsudo tune2fs -l /dev/sdb1Параметры ext-файловой системы.
tune2fs -csudo tune2fs -c 0 -i 0 /dev/sdb1Отключить периодическую принудительную проверку (ext).
fsck -nsudo fsck -n /dev/sdb1Проверка без исправлений (безопасно).
fsck -ysudo fsck -y /dev/sdb1Проверка и автоматическое исправление (раздел должен быть размонтирован).
xfs_repairsudo xfs_repair -n /dev/sdb1Проверка XFS (раздел размонтирован, -n — без правок).

Монтирование

КомандаВариантЧто делает
mountsudo mount /dev/sdb1 /dataСмонтировать раздел в каталог (каталог должен существовать).
mount -tsudo mount -t ext4 /dev/sdb1 /dataУказать тип файловой системы явно.
mount -o rosudo mount -o ro /dev/sdb1 /mnt/rescueТолько чтение.
mount -o remountsudo mount -o remount,ro /Изменить опции уже смонтированного раздела.
mount -Usudo mount UUID=xxxx-xxxx /dataМонтировать по UUID (надёжнее, чем /dev/sdX).
mount --bindsudo mount --bind /srv/src /srv/viewПоказать одну папку в другом месте.
mount -asudo mount -aСмонтировать всё из /etc/fstab (проверка fstab перед перезагрузкой).
umountsudo umount /dataРазмонтировать (раздел не должен быть занят).
umount -lsudo umount -l /dataОтцепить сразу, фактическое размонтирование — когда раздел освободится.
findmntfindmnt /dataДерево точек монтирования, с опциями и источником.
lsof +Dsudo lsof +D /dataКто держит файлы в каталоге (почему не размонтируется).
fuser -msudo fuser -vm /dataПроцессы, использующие точку монтирования.

/etc/fstab

#                                           
UUID=3f2a-9b1c-0000-1111                    /              ext4    errors=remount-ro  0      1
UUID=7d4e-aaaa-2222-3333                    /data          ext4    defaults,noatime   0      2
//nas/share                                 /mnt/nas       cifs    credentials=/root/.smb,uid=1000  0  0
/swapfile                                   none           swap    sw                 0      0
tmpfs                                       /tmp           tmpfs   defaults,noexec,nosuid  0  0
ПолеЗначение
optionsdefaults, noatime (не писать время доступа), nofail (не падать при загрузке без диска), noexec, nosuid, ro
dump0 — не использовать утилитой dump (почти всегда 0)
passпорядок fsck при загрузке: 1 — корень, 2 — остальные, 0 — не проверять

Перед перезагрузкой обязательно выполните sudo mount -a: если строка в fstab неверна, система может не загрузиться.

Место на диске

КомандаВариантЧто делает
df -hdf -hСвободное место по разделам.
df -hTdf -hTС типом файловой системы.
df -idf -iСвободные inode. Диск может быть полон по inode, хотя место есть.
df --outputdf -h --output=target,pcent,availВыбрать колонки.
du -shdu -sh /var/*Суммарный размер каждого элемента.
du --max-depthdu -h --max-depth=1 /var | sort -hВложенность на один уровень, по возрастанию.
du -xdu -xh / --max-depth=1 | sort -hНе переходить на другие разделы (-x).
du -adu -ah /var/log | sort -rh | headВсе файлы, самые большие сверху.
ncdusudo ncdu /varИнтерактивный анализатор (пакет ncdu).
lsof +L1sudo lsof +L1Удалённые, но открытые процессами файлы: место не освобождается, пока процесс не завершён.
journalctl --vacuumsudo journalctl --vacuum-size=200MОсвободить место под журналом.

Swap и память

КомандаВариантЧто делает
free -hfree -hПамять и swap в читаемом виде.
swapon --showswapon --showАктивные разделы подкачки.
fallocatesudo fallocate -l 4G /swapfileСоздать файл для swap быстро.
chmod 600 + mkswapsudo chmod 600 /swapfile && sudo mkswap /swapfileПодготовить swap-файл (права обязательны).
swaponsudo swapon /swapfileВключить swap.
swapoffsudo swapoff /swapfileВыключить (нужно достаточно свободной RAM).
sysctl vm.swappinesssysctl vm.swappiness=10Насколько охотно ядро уходит в swap (0–100).

LVM

КомандаВариантЧто делает
pvs / pvcreatesudo pvcreate /dev/sdbФизический том для LVM.
vgs / vgcreatesudo vgcreate vg_data /dev/sdbГруппа томов.
lvs / lvcreatesudo lvcreate -L 20G -n lv_app vg_dataЛогический том фиксированного размера.
lvcreate -l 100%FREEsudo lvcreate -l 100%FREE -n lv_all vg_dataЗанять всё свободное место.
lvextend -rsudo lvextend -r -L +10G /dev/vg_data/lv_appУвеличить том и файловую систему одной командой (-r).
resize2fssudo resize2fs /dev/vg_data/lv_appРастянуть ext4 под размер тома вручную.
xfs_growfssudo xfs_growfs /dataРастянуть XFS (работает по точке монтирования).

Пример: новый диск под данные

sudo lsblk                                      # найти новый диск, например sdb
sudo parted -s /dev/sdb mklabel gpt
sudo parted -s -a optimal /dev/sdb mkpart data ext4 0% 100%
sudo mkfs.ext4 -L data /dev/sdb1
sudo mkdir -p /data
sudo mount /dev/sdb1 /data
sudo blkid /dev/sdb1                            # взять UUID
echo 'UUID=ВАШ-UUID /data ext4 defaults,noatime,nofail 0 2' | sudo tee -a /etc/fstab
sudo mount -a && df -hT /data
mkfs, wipefs, parted mklabel и fdisk с записью удаляют данные на устройстве без возможности восстановления. Всегда проверяйте имя устройства через lsblk перед запуском: /dev/sdb и /dev/sda легко перепутать. Ошибка в /etc/fstab может не дать системе загрузиться, поэтому проверяйте mount -a до перезагрузки.
Для дисков с данными добавляйте в fstab опцию nofail: если диск не подключён, система всё равно загрузится. А для SSD полезна опция noatime, которая снижает лишние записи.