- Вступ
- Серія Linux Administration
- Архітектура стека сховища Linux
- Блокові пристрої та архітектура дисків
- Розбиття дисків на розділи
- Типи файлових систем
- Монтування файлових систем
- Logical Volume Manager (LVM)
- Конфігурація RAID
- Шифрування дисків з LUKS
- Дискові квоти
- Моніторинг сховища та стану
- Кращі практики для Production
- Усунення типових проблем
- Висновок
- Часті запитання
Вступ
Управління сховищами є фундаментальним аспектом системного адміністрування Linux. Правильна конфігурація сховища забезпечує цілісність даних, оптимальну продуктивність та ефективне використання простору. Цей комплексний посібник охоплює розбиття дисків на розділи, типи файлових систем, Logical Volume Manager (LVM), конфігурації RAID, шифрування та дискові квоти.
Ми розглянемо архітектуру блокових пристроїв, схеми розділів (GPT vs MBR), вибір файлових систем (ext4, XFS, Btrfs), LVM для гнучкого управління сховищами, програмний RAID для надмірності, шифрування LUKS для безпеки та застосування квот для багатокористувацьких систем. Кожен розділ включає практичні приклади та production сценарії.
Серія Linux Administration
📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.
Це Частина VII нашого комплексного 7-частинного посібника з адміністрування Linux:
- ← Частина I: Файлова система та управління процесами
- Частина II: Аутентифікація користувачів та LDAP
- Частина III: Фаєрвол UFW та мережі
- Частина IV: systemd та SSH Hardening
- Частина V: Поштовий сервер Postfix
- Частина VI: Віртуалізація QEMU KVM
- Частина VII: Сховище LVM та RAID ← Ви тут
Архітектура стека сховища Linux
Огляд рівнів сховища
Ключові компоненти сховища:
- Апаратний рівень - Фізичні диски (HDD, SSD, NVMe)
- Блокові пристрої - Представлення пристроїв сховища в ядрі
- Розділи - Логічні поділи фізичних дисків
- Управління томами - LVM, RAID, рівень шифрування
- Файлові системи - Структура організації даних (ext4, XFS, Btrfs)
- Точки монтування - Інтеграція з деревом каталогів
Блокові пристрої та архітектура дисків
Розуміння блокових пристроїв
Блокові пристрої - це пристрої зберігання, які дозволяють доступ до даних блоками фіксованого розміру. Linux представляє їх як файли в /dev/:
Загальні конвенції іменування пристроїв:
| Тип пристрою | Шаблон іменування | Приклад |
|---|---|---|
| SATA/SCSI | /dev/sd[a-z] | /dev/sda, /dev/sdb |
| NVMe | /dev/nvme[0-9]n[0-9] | /dev/nvme0n1 |
| Virtual | /dev/vd[a-z] | /dev/vda (KVM/QEMU) |
| MMC/SD | /dev/mmcblk[0-9] | /dev/mmcblk0 |
| RAID | /dev/md[0-9] | /dev/md0 |
| LVM | /dev/mapper/* | /dev/mapper/vg0-lv0 |
Дослідження блокових пристроїв:
# Список всіх блокових пристроїв з ієрархією (документація lsblk: https://man7.org/linux/man-pages/man8/lsblk.8.html)
lsblk
# Приклад виводу:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 238.5G 0 disk
# ├─sda1 8:1 0 512M 0 part /boot/efi
# ├─sda2 8:2 0 230G 0 part
# │ └─vg0-root 254:0 0 230G 0 lvm /
# └─sda3 8:3 0 8G 0 part [SWAP]
# Список з типом файлової системи та UUID
lsblk -f
# Показати детальну інформацію про блокові пристрої
sudo blkid
# Вивід:
# /dev/sda1: UUID="A1B2-C3D4" TYPE="vfat" PARTUUID="..."
# /dev/sda2: UUID="..." TYPE="LVM2_member" PARTUUID="..."
# Отримати інформацію про пристрій
sudo fdisk -l /dev/sda
sudo parted /dev/sda print
# Перевірити ємність пристрою та використання
df -h # змонтовані файлові системи
sudo df -h # включити системні монтування
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
# Переглянути статистику вводу/виводу
iostat
iostat -x 1 5 # розширена статистика, інтервал 1с, 5 ітерацій
# Перевірити стан SMART (для фізичних дисків)
sudo apt install smartmontools
sudo smartctl -H /dev/sda # статус стану
sudo smartctl -a /dev/sda # вся інформація
sudo smartctl -t short /dev/sda # запустити короткий тест
Розбиття дисків на розділи
Типи таблиць розділів
Порівняння MBR vs GPT:
| Характеристика | MBR | GPT |
|---|---|---|
| Макс. розмір диска | 2 TB | 9.4 ZB (зетабайт) |
| Макс. розділів | 4 первинні (+ розширені) | 128 |
| Режим завантаження | BIOS | UEFI (сумісний з BIOS) |
| Надмірність | Ні | Резервна таблиця розділів |
| Захист даних | Немає CRC | Контрольні суми CRC32 |
| Підтримка ОС | Всі | Сучасні Linux, Windows 8+ |
Розбиття на розділи з fdisk (MBR)
# Запустити fdisk для /dev/sdb
sudo fdisk /dev/sdb
# команди fdisk:
m # меню допомоги
p # вивести таблицю розділів
n # створити новий розділ
d # видалити розділ
t # змінити тип розділу
l # список типів розділів
w # записати зміни та вийти
q # вийти без збереження
# Приклад робочого процесу:
# 1. Створити новий розділ
n
# Вибрати: первинний (p) або розширений (e)
p
# Номер розділу: 1
# Перший сектор: (натисніть Enter для значення за замовчуванням)
# Останній сектор: +10G (розділ 10 ГБ)
# 2. Встановити тип розділу
t
# Номер розділу: 1
# Hex код: 83 (Linux), 82 (swap), 8e (LVM)
# 3. Переглянути зміни
p
# 4. Записати зміни
w
# Перезавантажити таблицю розділів
sudo partprobe /dev/sdb
# або
sudo partx -u /dev/sdb
Розбиття на розділи з parted (GPT)
# Запустити parted (документація parted: https://www.gnu.org/software/parted/manual/parted.html)
sudo parted /dev/sdb
# Команди Parted:
print # показати таблицю розділів
mklabel gpt # створити таблицю розділів GPT
mklabel msdos # створити таблицю розділів MBR
mkpart # створити розділ
rm 1 # видалити розділ 1
resizepart # змінити розмір розділу
quit # вийти
# Приклад: Створити диск GPT з 3 розділами
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 1MiB 20GiB
sudo parted /dev/sdb mkpart primary ext4 20GiB 50GiB
sudo parted /dev/sdb mkpart primary ext4 50GiB 100%
# Переглянути результат
sudo parted /dev/sdb print
# Приклади однорядкових команд
sudo parted /dev/sdb mklabel gpt
sudo parted -a optimal /dev/sdb mkpart primary ext4 0% 100%
# Оптимально вирівняти розділ
sudo parted -a optimal /dev/sdb mkpart primary 1MiB 100%
Коди типів розділів
# Загальні типи розділів (hex коди fdisk)
83 # Файлова система Linux
82 # Linux swap
8e # Linux LVM
fd # Linux RAID auto
ef # EFI System Partition
# GUID типів розділів GPT (parted)
# Файлова система Linux: 0FC63DAF-8483-4772-8E79-3D69D8477DE4
# Linux swap: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
# Linux LVM: E6D6D379-F507-44C2-A23C-238F2A3DF928
Типи файлових систем
Порівняння файлових систем
Детальне порівняння файлових систем:
| Характеристика | ext4 | XFS | Btrfs | FAT32 |
|---|---|---|---|---|
| Макс. розмір файлу | 16 TB | 8 EB | 16 EB | 4 GB |
| Макс. файлова система | 1 EB | 8 EB | 16 EB | 2 TB |
| Журналювання | Так | Так | Так | Ні |
| Знімки | Ні | Ні | Так | Ні |
| Стиснення | Ні | Ні | Так | Ні |
| Зміна розміру онлайн | Лише збільшення | Лише збільшення | Збільшення/Зменшення | Ні |
| Найкраще для | Загальне використання | Великі файли, бази даних | Розширені функції | USB накопичувачі |
| Зрілість | Стабільна | Стабільна | Стабільна (обережно) | Застаріла |
Створення файлових систем
# Створити файлову систему ext4 (документація ext4: https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html)
sudo mkfs.ext4 /dev/sdb1
sudo mkfs.ext4 -L mydata /dev/sdb1 # з міткою
sudo mkfs.ext4 -m 1 /dev/sdb1 # 1% зарезервовано для root
sudo mkfs.ext4 -j /dev/sdb1 # з журналом
# Створити файлову систему XFS
sudo mkfs.xfs /dev/sdb2
sudo mkfs.xfs -L mydata /dev/sdb2 # з міткою
sudo mkfs.xfs -f /dev/sdb2 # примусово (якщо розділ не порожній)
# Створити файлову систему Btrfs
sudo mkfs.btrfs /dev/sdb3
sudo mkfs.btrfs -L mydata /dev/sdb3 # з міткою
sudo mkfs.btrfs -f /dev/sdb3 # примусово
# Створити FAT32 (для USB/сумісності)
sudo mkfs.vfat -F 32 /dev/sdb4
sudo mkfs.vfat -F 32 -n MYUSB /dev/sdb4 # з міткою
# Створити розділ підкачки
sudo mkswap /dev/sdb5
sudo mkswap -L swap /dev/sdb5 # з міткою
sudo swapon /dev/sdb5 # активувати підкачку
sudo swapon -s # показати активну підкачку
# Перевірити файлову систему
sudo tune2fs -l /dev/sdb1 # інформація про ext4
sudo xfs_info /dev/sdb2 # інформація про XFS
sudo btrfs filesystem show /dev/sdb3 # інформація про Btrfs
Мітки файлових систем та UUID
# Встановити/змінити мітку файлової системи
sudo e2label /dev/sdb1 mydata # ext2/3/4
sudo xfs_admin -L mydata /dev/sdb2 # XFS
sudo btrfs filesystem label /dev/sdb3 mydata # Btrfs
sudo fatlabel /dev/sdb4 MYUSB # FAT32
# Переглянути мітку
sudo e2label /dev/sdb1
lsblk -o NAME,LABEL
# Переглянути UUID
sudo blkid /dev/sdb1
lsblk -o NAME,UUID
# Згенерувати новий UUID (ext4)
sudo tune2fs -U random /dev/sdb1
Монтування файлових систем
Процес монтування
Ручне монтування
# Створити точку монтування
sudo mkdir -p /mnt/data
# Змонтувати файлову систему
sudo mount /dev/sdb1 /mnt/data
sudo mount -t ext4 /dev/sdb1 /mnt/data # вказати тип файлової системи
# Монтування з опціями
sudo mount -o rw,noexec,nosuid /dev/sdb1 /mnt/data
# Загальні опції монтування:
# rw/ro - читання-запис / лише читання
# noexec - запобігти виконанню бінарних файлів
# nosuid - ігнорувати біти suid/sgid
# nodev - не інтерпретувати файли пристроїв
# user - дозволити звичайним користувачам монтувати
# auto/noauto - монтувати автоматично з mount -a
# defaults - rw, suid, dev, exec, auto, nouser, async
# Монтування за UUID
sudo mount UUID=a1b2c3d4-e5f6-... /mnt/data
# Монтування за міткою
sudo mount LABEL=mydata /mnt/data
# Перемонтування з різними опціями (без розмонтування)
sudo mount -o remount,ro /mnt/data
# Розмонтувати
sudo umount /mnt/data
sudo umount /dev/sdb1
# Примусове розмонтування (якщо зайнято)
sudo umount -l /mnt/data # ліниве розмонтування
sudo fuser -km /mnt/data # вбити процеси, що використовують монтування
sudo umount -f /mnt/data # примусове розмонтування
# Переглянути змонтовані файлові системи
mount | grep ^/dev
df -h
findmnt
Постійні монтування з /etc/fstab
# Редагувати fstab
sudo vim /etc/fstab
# Формат: <пристрій> <точка_монтування> <тип> <опції> <dump> <pass>
# Приклади записів:
# Монтування за UUID (рекомендується)
UUID=a1b2c3d4-e5f6-1234-5678-abcdef123456 /mnt/data ext4 defaults 0 2
# Монтування за пристроєм (не рекомендується - назви пристроїв можуть змінюватися)
/dev/sdb1 /mnt/data ext4 defaults 0 2
# Монтування за міткою
LABEL=mydata /mnt/data ext4 defaults 0 2
# Монтування з конкретними опціями
UUID=... /mnt/storage ext4 rw,noexec,nosuid 0 2
# Монтування NFS
192.168.1.100:/export/share /mnt/nfs nfs defaults 0 0
# Розділ підкачки
UUID=... none swap sw 0 0
# tmpfs (файлова система в RAM)
tmpfs /tmp tmpfs defaults,size=4G 0 0
# Пояснення полів:
# <dump>: 0=не робити резервну копію, 1=резервна копія з dump
# <pass>: 0=не перевіряти, 1=перевірити кореневу ФС першою, 2=перевірити після кореневої
# Протестувати fstab перед перезавантаженням
sudo mount -a # змонтувати все з fstab
sudo findmnt --verify # перевірити синтаксис fstab
# Отримати UUID для fstab
sudo blkid /dev/sdb1
Автоматичне монтування з autofs
# Встановити autofs
sudo apt install autofs
# Налаштувати головну карту
sudo vim /etc/auto.master
# Додати:
/mnt/auto /etc/auto.misc --timeout=60
# Налаштувати карту монтування
sudo vim /etc/auto.misc
# Додати:
data -fstype=ext4 :/dev/sdb1
usb -fstype=vfat,rw,uid=1000 :/dev/sdc1
# Перезапустити autofs
sudo systemctl restart autofs
# Доступ (автоматично змонтується)
ls /mnt/auto/data
# Автоматично розмонтується після таймауту
Logical Volume Manager (LVM)
Архітектура LVM
Переваги LVM:
- Гнучка зміна розміру - Збільшення/зменшення томів онлайн
- Знімки - Копії на момент часу для резервних копій
- Чергування - Підвищення продуктивності на декількох дисках
- Дзеркалювання - Надмірність даних
- Легке управління - Додавання/видалення дисків динамічно
Створення томів LVM
# Встановити інструменти LVM (документація LVM: https://man7.org/linux/man-pages/man8/lvm.8.html)
sudo apt install lvm2
# 1. Створити фізичні томи (PV)
sudo pvcreate /dev/sdb
sudo pvcreate /dev/sdc
sudo pvcreate /dev/sdd
# Або створити PV на розділі
sudo pvcreate /dev/sdb1
# Показати PV
sudo pvdisplay
sudo pvs # зведення
# 2. Створити групу томів (VG)
sudo vgcreate vg0 /dev/sdb /dev/sdc
# vg0 - назва групи томів
# Показати VG
sudo vgdisplay
sudo vgs # зведення
# 3. Створити логічні томи (LV)
sudo lvcreate -L 100G -n lv_root vg0 # том 100ГБ
sudo lvcreate -L 500G -n lv_home vg0 # том 500ГБ
sudo lvcreate -l 100%FREE -n lv_var vg0 # використати залишковий простір
# Показати LV
sudo lvdisplay
sudo lvs # зведення
# 4. Створити файлову систему на LV
sudo mkfs.ext4 /dev/vg0/lv_root
sudo mkfs.ext4 /dev/vg0/lv_home
sudo mkfs.xfs /dev/vg0/lv_var
# 5. Змонтувати LV
sudo mkdir -p /mnt/root /mnt/home /mnt/var
sudo mount /dev/vg0/lv_root /mnt/root
sudo mount /dev/vg0/lv_home /mnt/home
sudo mount /dev/vg0/lv_var /mnt/var
# Додати до /etc/fstab
/dev/vg0/lv_root /mnt/root ext4 defaults 0 2
/dev/vg0/lv_home /mnt/home ext4 defaults 0 2
/dev/vg0/lv_var /mnt/var xfs defaults 0 2
Розширення томів LVM
# Розширити групу томів (додати новий диск)
sudo pvcreate /dev/sde
sudo vgextend vg0 /dev/sde
# Перевірити вільний простір VG
sudo vgs
sudo vgdisplay vg0 | grep Free
# Розширити логічний том
sudo lvextend -L +50G /dev/vg0/lv_home # додати 50ГБ
sudo lvextend -L 600G /dev/vg0/lv_home # змінити розмір до 600ГБ загалом
sudo lvextend -l +100%FREE /dev/vg0/lv_home # використати весь вільний простір
# Змінити розмір файлової системи (онлайн, без розмонтування)
# Для ext4:
sudo resize2fs /dev/vg0/lv_home
# Для XFS:
sudo xfs_growfs /mnt/var
# Однорядковий варіант: розширити LV та змінити розмір файлової системи
sudo lvextend -r -L +50G /dev/vg0/lv_home
# -r = автоматично змінити розмір файлової системи
Зменшення томів LVM
# ПОПЕРЕДЖЕННЯ: Може призвести до втрати даних! Завжди робіть резервну копію!
# 1. Розмонтувати файлову систему (необхідно для зменшення)
sudo umount /mnt/home
# 2. Перевірити файлову систему
sudo e2fsck -f /dev/vg0/lv_home
# 3. Спочатку зменшити файлову систему (лише ext4 - XFS не можна зменшити)
sudo resize2fs /dev/vg0/lv_home 400G
# 4. Зменшити логічний том
sudo lvreduce -L 400G /dev/vg0/lv_home
# 5. Перемонтувати
sudo mount /dev/vg0/lv_home /mnt/home
# Примітка: XFS не підтримує зменшення!
# Лише ext2/3/4 можна зменшити
Знімки LVM
# Створити знімок (10ГБ простору для знімка)
sudo lvcreate -L 10G -s -n lv_home_snap /dev/vg0/lv_home
# Змонтувати знімок (лише для читання, резервна копія)
sudo mkdir /mnt/home_snapshot
sudo mount -o ro /dev/vg0/lv_home_snap /mnt/home_snapshot
# Резервна копія зі знімка
sudo tar czf /backup/home_backup.tar.gz -C /mnt/home_snapshot .
# Видалити знімок
sudo umount /mnt/home_snapshot
sudo lvremove /dev/vg0/lv_home_snap
# Відновити зі знімка (відкотити зміни)
sudo lvconvert --merge /dev/vg0/lv_home_snap
# Необхідне перезавантаження для злиття кореневого тому
Видалення компонентів LVM
# Видалити логічний том
sudo umount /mnt/home
sudo lvremove /dev/vg0/lv_home
# Видалити групу томів
sudo vgremove vg0
# Видалити фізичний том
sudo pvremove /dev/sdb
Конфігурація RAID
Порівняння рівнів RAID
Детальна інформація про рівні RAID:
| RAID | Мін. дисків | Ємність | Надмірність | Швидкість читання | Швидкість запису | Випадок використання |
|---|---|---|---|---|---|---|
| 0 | 2 | 100% | Немає | Відмінна | Відмінна | Продуктивність (тимчасові дані) |
| 1 | 2 | 50% | 1 диск | Добра | Задовільна | ОС/завантажувальні диски |
| 5 | 3 | 67-94% | 1 диск | Добра | Задовільна | Загальне сховище |
| 6 | 4 | 50-88% | 2 диски | Добра | Погана | Висока надійність |
| 10 | 4 | 50% | 1 на пару | Відмінна | Добра | Бази даних, високий I/O |
Створення програмного RAID
# Встановити mdadm
sudo apt install mdadm
# Створити RAID 1 (дзеркалювання з 2 дисками) (документація RAID: https://raid.wiki.kernel.org/index.php/Linux_Raid)
sudo mdadm --create /dev/md0 \
--level=1 \
--raid-devices=2 \
/dev/sdb /dev/sdc
# Створити RAID 5 (парність з 3+ дисками)
sudo mdadm --create /dev/md0 \
--level=5 \
--raid-devices=3 \
/dev/sdb /dev/sdc /dev/sdd
# Створити RAID 10 (дзеркало + чергування з 4+ дисками)
sudo mdadm --create /dev/md0 \
--level=10 \
--raid-devices=4 \
/dev/sdb /dev/sdc /dev/sdd /dev/sde
# Створити RAID 0 (чергування - без надмірності)
sudo mdadm --create /dev/md0 \
--level=0 \
--raid-devices=2 \
/dev/sdb /dev/sdc
# Відстежити створення масиву (займає час для великих дисків)
cat /proc/mdstat
watch cat /proc/mdstat
# Переглянути деталі RAID
sudo mdadm --detail /dev/md0
# Створити файлову систему на RAID
sudo mkfs.ext4 /dev/md0
# Змонтувати масив RAID
sudo mkdir /mnt/raid
sudo mount /dev/md0 /mnt/raid
# Зберегти конфігурацію RAID
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
# Оновити initramfs
sudo update-initramfs -u
# Додати до fstab
/dev/md0 /mnt/raid ext4 defaults 0 2
Управління та моніторинг RAID
# Перевірити статус RAID
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# Моніторинг RAID (безперервні оновлення)
watch -n 1 cat /proc/mdstat
# Позначити диск як несправний (симуляція збою)
sudo mdadm --manage /dev/md0 --fail /dev/sdb
# Видалити несправний диск
sudo mdadm --manage /dev/md0 --remove /dev/sdb
# Додати новий диск до масиву
sudo mdadm --manage /dev/md0 --add /dev/sdf
# RAID автоматично перебудується
# Відстежити прогрес перебудови:
cat /proc/mdstat
# Збільшити масив RAID (додати диск до RAID 5)
sudo mdadm --add /dev/md0 /dev/sdf
sudo mdadm --grow /dev/md0 --raid-devices=4
# Зупинити масив RAID
sudo umount /mnt/raid
sudo mdadm --stop /dev/md0
# Запустити масив RAID
sudo mdadm --assemble /dev/md0 /dev/sdb /dev/sdc /dev/sdd
# Повністю видалити масив RAID
sudo mdadm --stop /dev/md0
sudo mdadm --remove /dev/md0
sudo mdadm --zero-superblock /dev/sdb /dev/sdc /dev/sdd
Шифрування дисків з LUKS
Потік шифрування LUKS
Створення зашифрованих розділів
# Встановити cryptsetup
sudo apt install cryptsetup
# Створити зашифрований розділ
sudo cryptsetup luksFormat /dev/sdb1
# ПОПЕРЕДЖЕННЯ: Це безповоротно перезапише дані на /dev/sdb1.
# Введіть 'YES' для підтвердження
# Введіть парольну фразу: ********
# Переглянути інформацію заголовка LUKS
sudo cryptsetup luksDump /dev/sdb1
# Відкрити (розшифрувати) зашифрований розділ
sudo cryptsetup open /dev/sdb1 secret
# Введіть парольну фразу: ********
# Це створює /dev/mapper/secret
# Створити файлову систему на розшифрованому пристрої
sudo mkfs.ext4 /dev/mapper/secret
# Змонтувати зашифрований розділ
sudo mkdir /mnt/secret
sudo mount /dev/mapper/secret /mnt/secret
# Використовувати звичайним чином
echo "sensitive data" | sudo tee /mnt/secret/file.txt
# Розмонтувати та закрити
sudo umount /mnt/secret
sudo cryptsetup close secret
Автоматичне розблокування під час завантаження
# Створити файл ключа (замість парольної фрази)
sudo dd if=/dev/urandom of=/root/luks-key bs=512 count=1
sudo chmod 400 /root/luks-key
# Додати файл ключа до LUKS
sudo cryptsetup luksAddKey /dev/sdb1 /root/luks-key
# Введіть існуючу парольну фразу: ********
# Налаштувати crypttab
sudo vim /etc/crypttab
# Додати запис:
secret /dev/sdb1 /root/luks-key luks
# Додати до fstab
sudo vim /etc/fstab
# Додати запис:
/dev/mapper/secret /mnt/secret ext4 defaults 0 2
# Оновити initramfs
sudo update-initramfs -u
# Тест (розблокується під час завантаження)
sudo reboot
Шифрування з LVM
# Спочатку зашифрувати розділ
sudo cryptsetup luksFormat /dev/sdb1
sudo cryptsetup open /dev/sdb1 crypt_sdb1
# Створити LVM на зашифрованому пристрої
sudo pvcreate /dev/mapper/crypt_sdb1
sudo vgcreate vg_secure /dev/mapper/crypt_sdb1
sudo lvcreate -L 100G -n lv_data vg_secure
# Створити файлову систему
sudo mkfs.ext4 /dev/vg_secure/lv_data
# Змонтувати
sudo mount /dev/vg_secure/lv_data /mnt/secure
# Це забезпечує: шифрування → LVM → файлова система
Управління ключами LUKS
# Список слотів ключів
sudo cryptsetup luksDump /dev/sdb1
# Додати нову парольну фразу/ключ
sudo cryptsetup luksAddKey /dev/sdb1
# Введіть існуючу парольну фразу
# Введіть нову парольну фразу
# Видалити слот ключа
sudo cryptsetup luksRemoveKey /dev/sdb1
# Введіть парольну фразу для видалення
# Змінити парольну фразу
sudo cryptsetup luksChangeKey /dev/sdb1
# Введіть існуючу парольну фразу
# Введіть нову парольну фразу
# Резервна копія заголовка LUKS (критично!)
sudo cryptsetup luksHeaderBackup /dev/sdb1 --header-backup-file /root/luks-header-backup
# Відновити заголовок LUKS
sudo cryptsetup luksHeaderRestore /dev/sdb1 --header-backup-file /root/luks-header-backup
Дискові квоти
Архітектура застосування квот
Увімкнення дискових квот
# Встановити інструменти квот
sudo apt install quota
# Увімкнути квоту на файловій системі (змінити /etc/fstab)
sudo vim /etc/fstab
# Додати опції usrquota та/або grpquota:
# До:
/dev/sdb1 /mnt/data ext4 defaults 0 2
# Після:
/dev/sdb1 /mnt/data ext4 defaults,usrquota,grpquota 0 2
# Перемонтувати файлову систему
sudo mount -o remount /mnt/data
# Створити файли квот
sudo quotacheck -cugm /mnt/data
# -c = створити файли квот
# -u = користувацькі квоти
# -g = групові квоти
# -m = не перемонтовувати лише для читання
# Це створює:
# /mnt/data/aquota.user
# /mnt/data/aquota.group
# Увімкнути квоти
sudo quotaon /mnt/data
# Перевірити, чи увімкнено квоту
sudo quotaon -p /mnt/data
Встановлення користувацьких квот
# Редагувати квоту для користувача
sudo edquota -u username
# Відкриває редактор з:
# Filesystem blocks soft hard inodes soft hard
# /dev/sdb1 1024 100000 110000 10 1000 1100
# Поля:
# blocks - поточне використання диска (КБ)
# soft - м'який ліміт для дискового простору (КБ)
# hard - жорсткий ліміт для дискового простору (КБ)
# inodes - поточна кількість файлів
# soft - м'який ліміт для кількості файлів
# hard - жорсткий ліміт для кількості файлів
# Встановити квоту безпосередньо
sudo setquota -u username 100000 110000 1000 1100 /mnt/data
# Формат: setquota -u КОРИСТУВАЧ БЛОК_М'ЯКИЙ БЛОК_ЖОРСТКИЙ ІНОДИ_М'ЯКИЙ ІНОДИ_ЖОРСТКИЙ ФАЙЛОВА_СИСТЕМА
# Приклад: 10ГБ м'який, 12ГБ жорсткий, 5000 файлів м'який, 6000 жорсткий
sudo setquota -u john 10485760 12582912 5000 6000 /mnt/data
# Скопіювати квоту від одного користувача до іншого
sudo edquota -p john -u jane
# Встановити пільговий період
sudo edquota -t
# Приклад пільгового періоду:
# Block grace period: 7days
# Inode grace period: 7days
Встановлення групових квот
# Редагувати квоту для групи
sudo edquota -g developers
# Встановити квоту безпосередньо
sudo setquota -g developers 524288000 629145600 50000 60000 /mnt/data
# 500ГБ м'який, 600ГБ жорсткий для групи
# Скопіювати квоту від однієї групи до іншої
sudo edquota -p developers -g designers
Моніторинг квот
# Переглянути користувацьку квоту
quota -u username
sudo quota -u username # як root
# Переглянути групову квоту
quota -g groupname
# Переглянути власну квоту
quota
# Звіт про всі користувацькі квоти
sudo repquota -a # всі файлові системи
sudo repquota /mnt/data # конкретна файлова система
sudo repquota -aug # всі користувачі та групи
# Приклад виводу:
# *** Report for user quotas on device /dev/sdb1
# Block grace time: 7days; Inode grace time: 7days
# Block limits File limits
# User used soft hard grace used soft hard grace
# ----------------------------------------------------------------------
# john -- 102400 100000 110000 6days 850 1000 1100
# jane -- 45000 100000 110000 320 1000 1100
# Перевірити статус квоти
sudo quotaon -p /mnt/data
Попередження про квоти та застосування
# Користувач перевищує м'який ліміт:
$ dd if=/dev/zero of=/mnt/data/bigfile bs=1M count=200
sdb1: warning, user block quota exceeded.
# Користувач перевищує жорсткий ліміт:
$ dd if=/dev/zero of=/mnt/data/bigfile bs=1M count=250
sdb1: write failed, user block quota exceeded.
dd: error writing '/mnt/data/bigfile': Disk quota exceeded
# Перевірити, які користувачі перевищили квоту
sudo repquota -a | grep '++'
# ++ вказує на перевищення м'якого ліміту
# +- вказує на закінчення пільгового періоду
Вимкнення квот
# Тимчасово вимкнути квоти
sudo quotaoff /mnt/data
# Постійно вимкнути квоти
# 1. Вимкнути квоти
sudo quotaoff /mnt/data
# 2. Редагувати /etc/fstab (видалити usrquota,grpquota)
sudo vim /etc/fstab
# 3. Перемонтувати
sudo mount -o remount /mnt/data
# 4. Необов'язково: видалити файли квот
sudo rm /mnt/data/aquota.*
Моніторинг сховища та стану
Моніторинг використання диска
# Використання дискового простору за файловою системою
df -h # зручний для читання
df -i # використання inode
df -T # показати тип файлової системи
# Використання диска за каталогом
du -sh /home/* # зведення для кожного користувача
du -h --max-depth=1 /var # один рівень вглиб
du -h /var | sort -hr | head -20 # топ 20 найбільших
# Знайти великі файли
find / -type f -size +1G # файли більше 1ГБ
find / -type f -size +100M -exec ls -lh {} \; | sort -k5 -hr
# Статистика вводу/виводу диска
iostat -x 1 5 # розширена статистика, інтервал 1с, 5 ітерацій
iostat -d 2 # статистика пристроїв, інтервал 2с
# Ввід/вивід за процесами
sudo iotop
sudo iotop -o # показувати лише процеси, що виконують I/O
Моніторинг SMART
# Встановити smartmontools
sudo apt install smartmontools
# Перевірити, чи ввімкнено SMART
sudo smartctl -i /dev/sda
# Статус стану
sudo smartctl -H /dev/sda
# Вивід: PASSED або FAILED
# Переглянути всі атрибути SMART
sudo smartctl -A /dev/sda
# Ключові атрибути для моніторингу:
# 5 Reallocated_Sector_Ct - Перемаповані погані сектори
# 10 Spin_Retry_Count - Спроби повторного обертання шпинделя
# 187 Reported_Uncorrect - Невиправні помилки
# 188 Command_Timeout - Таймаути команд
# 196 Reallocated_Event_Count - Події перерозподілу
# 197 Current_Pending_Sector - Сектори, що очікують перемаппінгу
# 198 Offline_Uncorrectable - Невиправні офлайн
# Запустити короткий самотест
sudo smartctl -t short /dev/sda
# Запустити довгий самотест
sudo smartctl -t long /dev/sda
# Переглянути результати тесту
sudo smartctl -l selftest /dev/sda
# Переглянути журнал помилок
sudo smartctl -l error /dev/sda
# Увімкнути демон моніторингу SMART
sudo systemctl enable smartd
sudo systemctl start smartd
Моніторинг LVM
# Стан фізичного тому
sudo pvs
sudo pvdisplay
# Статус групи томів
sudo vgs
sudo vgdisplay
# Статус логічного тому
sudo lvs
sudo lvdisplay
# Перевірити на помилки
sudo dmesg | grep -i 'I/O error'
sudo dmesg | grep -i 'failed'
Моніторинг RAID
# Статус RAID
cat /proc/mdstat
# Детальна інформація про RAID
sudo mdadm --detail /dev/md0
# Перевірити на збої дисків
sudo mdadm --examine /dev/sdb
# Моніторинг подій RAID
sudo tail -f /var/log/syslog | grep mdadm
# Сповіщення електронною поштою про події RAID
sudo vim /etc/mdadm/mdadm.conf
# Додати:
MAILADDR your-email@example.com
sudo systemctl restart mdadm
Кращі практики для Production
-
Вибір розділів та файлової системи:
- Використовувати GPT для сучасних систем (диски >2ТБ)
- Вибирати ext4 для загального призначення, XFS для великих файлів
- Окремі розділи: /, /home, /var, /tmp
- Використовувати LVM для гнучкості в production
- Резервувати 5-10% вільного простору для оптимальної продуктивності
-
Стратегія LVM:
- Не виділяти весь простір VG одразу
- Залишити 20% вільним для зростання та знімків
- Використовувати описові назви VG/LV (vg_data, lv_mysql)
- Створювати знімки перед важливими змінами
- Ретельно моніторити тонкий provisioning
-
Конфігурація RAID:
- RAID 1 для ОС/завантажувальних дисків
- RAID 10 для баз даних та високого I/O
- RAID 5/6 для масового зберігання
- Використовувати апаратний RAID для найкращої продуктивності
- Регулярне сканування для виявлення тихого пошкодження
- Гарячі резервні диски для автоматичної перебудови
-
Шифрування:
- Шифрувати розділи з конфіденційними даними
- Резервне копіювання заголовків LUKS у безпечне місце
- Використовувати файли ключів для серверів (з безпечними правами)
- Тестувати процедури відновлення
- Безпечно документувати ключі шифрування
-
Дискові квоти:
- Впроваджувати квоти на багатокористувацьких системах
- Встановлювати м'які ліміти на рівні 90% від жорстких лімітів
- 7-денний пільговий період є стандартним
- Моніторити використання квот з сповіщеннями
- Документувати політики квот
-
Моніторинг та обслуговування:
- Моніторити дисковий простір з сповіщеннями (поріг 80%)
- Перевіряти статус SMART щотижня
- Тестувати резервні копії щомісяця
- Сканування RAID щомісяця
- Переглядати журнали на помилки I/O
- Планування ємності: прогноз на 6-12 місяців вперед
-
Стратегія резервного копіювання:
- Правило 3-2-1: 3 копії, 2 типи носіїв, 1 поза офісом
- Використовувати знімки LVM для послідовних резервних копій
- Тестувати процедури відновлення щоквартально
- Документувати процедури відновлення
- Автоматизувати перевірку резервних копій
Усунення типових проблем
Файлова система заповнена, але df показує доступний простір:
# Перевірити використання inode
df -i
# Знайти каталоги з багатьма файлами
find / -xdev -type d -exec bash -c 'echo "{}: $(find "{}" -maxdepth 1 | wc -l)"' \; | sort -t: -k2 -nr | head
# Видалити старі файли
find /var/log -type f -mtime +30 -delete
Неможливо розмонтувати зайняту файлову систему:
# Знайти процеси, що використовують файлову систему
sudo lsof /mnt/data
sudo fuser -m /mnt/data
# Вбити процеси
sudo fuser -km /mnt/data
# Ліниве розмонтування
sudo umount -l /mnt/data
Том LVM не активується:
# Сканувати групи томів
sudo vgscan
# Активувати групу томів
sudo vgchange -ay vg0
# Перевірити журнали
sudo dmesg | grep -i lvm
Деградований масив RAID:
# Перевірити статус
cat /proc/mdstat
sudo mdadm --detail /dev/md0
# Замінити несправний диск
sudo mdadm /dev/md0 --fail /dev/sdb
sudo mdadm /dev/md0 --remove /dev/sdb
# Фізично замінити диск
sudo mdadm /dev/md0 --add /dev/sdb
# Моніторити перебудову
watch cat /proc/mdstat
Розділ LUKS не розблоковується:
# Перевірити заголовок LUKS
sudo cryptsetup luksDump /dev/sdb1
# Спробувати інший слот ключа
sudo cryptsetup open --key-slot 1 /dev/sdb1 secret
# Відновити з резервної копії заголовка
sudo cryptsetup luksHeaderRestore /dev/sdb1 --header-backup-file /backup/luks-header
Проблеми з продуктивністю вводу/виводу диска:
# Перевірити очікування I/O
top # шукати високий %wa (очікування I/O)
# Визначити вузьке місце I/O
sudo iotop -o
# Перевірити на помилки диска
sudo dmesg | grep -i error
sudo smartctl -A /dev/sda
# Тестувати продуктивність диска
sudo hdparm -Tt /dev/sda
sudo dd if=/dev/zero of=/tmp/test bs=1M count=1024 oflag=direct
Висновок
Управління сховищами Linux охоплює розбиття на розділи, файлові системи, LVM, RAID, шифрування та квоти. Розуміння цих технологій дозволяє вам створювати надійні, гнучкі та безпечні системи зберігання.
Використовуйте розбиття GPT для сучасних систем, вибирайте відповідні файлові системи для вашого навантаження, використовуйте LVM для гнучкості, впроваджуйте RAID для надмірності, шифруйте конфіденційні дані за допомогою LUKS та застосовуйте квоти в багатокористувацьких середовищах. Регулярний моніторинг, проактивне обслуговування та перевірені процедури резервного копіювання забезпечують цілісність та доступність даних.
Опануйте ці основи сховища, щоб створювати надійну інфраструктуру, яка масштабується відповідно до ваших потреб, зберігаючи безпеку та продуктивність.
Часті запитання
П: Яка різниця між MBR та GPT розбиттям?
MBR (Master Boot Record) підтримує до 4 первинних розділів та максимальний розмір диска 2TB з використанням 32-бітної адресації секторів. GPT (GUID Partition Table) підтримує необмежену кількість розділів (128 за замовчуванням), диски більше 2TB та включає резервні таблиці розділів для відновлення. Використовуйте GPT для сучасних систем та великих дисків.
П: Що таке LVM і навіщо його використовувати?
LVM (Logical Volume Manager) забезпечує гнучке управління сховищем з групами томів та логічними томами. Переваги включають онлайн зміну розміру, знімки для резервних копій, об'єднання кількох фізичних дисків в один том та легку міграцію. Створіть через pvcreate, vgcreate, lvcreate. Використовуйте LVM для продакшн систем, що вимагають гнучкості сховища без простою.
П: Як працює програмний RAID у Linux?
Програмний RAID Linux використовує mdadm для об'єднання кількох дисків для надмірності або продуктивності. RAID 0 розподіляє для швидкості, RAID 1 дзеркалює для надмірності, RAID 5 використовує парність з мінімум 3 дисками, RAID 10 поєднує дзеркалення та розподіл. Створіть через "mdadm --create", моніторте через /proc/mdstat. Витончено обробляє збої дисків.
П: Що таке LUKS шифрування і як його використовувати?
LUKS (Linux Unified Key Setup) забезпечує повне шифрування диска для даних у спокої. Ініціалізуйте через "cryptsetup luksFormat /dev/sdX", відкрийте через "cryptsetup open", потім форматуйте та монтуйте як звичайні розділи. Підтримує кілька слотів ключів для різних паролів. Важливо для безпеки ноутбуків та вимог відповідності.
П: Яку файлову систему вибрати для Linux?
Ext4 - це типова, зріла та надійна для більшості робочих навантажень. XFS відмінно справляється з великими файлами та паралельним I/O для баз даних та відео. Btrfs пропонує знімки, стиснення та самовідновлення, але менш зріла. ZFS надає корпоративні функції, але складність ліцензування. Використовуйте ext4 для загального призначення, XFS для баз даних, Btrfs для розширених функцій.
П: Як працюють дискові квоти в Linux?
Дискові квоти обмежують використання сховища на користувача або групу, запобігаючи вичерпанню диска. Налаштуйте через інструменти quota на файлових системах ext4 або XFS. Встановіть м'які ліміти (попередження) та жорсткі ліміти (примус). Увімкніть через "quotaon", редагуйте через "edquota". Критично важливо для середовищ спільного хостингу та запобігання споживанню всього простору окремими користувачами.
П: Яка різниця між розміром блоку та inode?
Розмір блоку визначає мінімальну одиницю виділення простору для файлів (зазвичай 4KB). Менші блоки зменшують втрачений простір для малих файлів, але збільшують накладні витрати метаданих. Inode зберігають метадані файлів, як дозволи та мітки часу. Кожен файл потребує одного inode. Встановлюється при створенні файлової системи через mkfs -b для розміру блоку, -i для співвідношення inode.