Логічні томи LVM Linux та конфігурації RAID керівництво

Управління сховищами в Linux: Розділи, LVM, RAID, Файлові системи та Дискові квоти

Вступ

Управління сховищами є фундаментальним аспектом системного адміністрування Linux. Правильна конфігурація сховища забезпечує цілісність даних, оптимальну продуктивність та ефективне використання простору. Цей комплексний посібник охоплює розбиття дисків на розділи, типи файлових систем, Logical Volume Manager (LVM), конфігурації RAID, шифрування та дискові квоти.

Ми розглянемо архітектуру блокових пристроїв, схеми розділів (GPT vs MBR), вибір файлових систем (ext4, XFS, Btrfs), LVM для гнучкого управління сховищами, програмний RAID для надмірності, шифрування LUKS для безпеки та застосування квот для багатокористувацьких систем. Кожен розділ включає практичні приклади та production сценарії.

Серія Linux Administration

📚 Переглянути повний посібник Linux Administration - Опануйте всі 7 частин з нашим комплексним шляхом навчання.

Це Частина VII нашого комплексного 7-частинного посібника з адміністрування Linux:

  1. ← Частина I: Файлова система та управління процесами
  2. Частина II: Аутентифікація користувачів та LDAP
  3. Частина III: Фаєрвол UFW та мережі
  4. Частина IV: systemd та SSH Hardening
  5. Частина V: Поштовий сервер Postfix
  6. Частина VI: Віртуалізація QEMU KVM
  7. Частина VII: Сховище LVM та RAID ← Ви тут

Архітектура стека сховища Linux

Огляд рівнів сховища

   Block Layer   

   Volume Management   

   Virtual Filesystem Layer   

  Applications  

  Files, Databases  

  Mount Points  

  /home, /var  

  Filesystem  

  ext4, XFS, Btrfs  

  LVM  

  Logical Volumes  

  Software RAID  

  md devices  

  dm-crypt/LUKS  

  Encryption  

  Partitions  

  sda1, sda2  

  Block Devices  

  sda, nvme0n1  

  Physical Storage  

  HDD, SSD, NVMe  

Ключові компоненти сховища:

  • Апаратний рівень - Фізичні диски (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    # запустити короткий тест

Розбиття дисків на розділи

Типи таблиць розділів

   GPT Modern   

   MBR Legacy   

  Boot Sector  

  512 bytes  

  Partition Table  

  4 primary max  

  Size Limit  

  2 TB max  

  GPT Header  

  LBA 1  

  Partition Entries  

  128 partitions  

  Backup GPT  

  End of disk  

  Size Limit  

  9.4 ZB max  

  Physical Disk  

Порівняння 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

Типи файлових систем

Порівняння файлових систем

   Modern Filesystems   

   ext Family   

   Compatibility   

  FAT32  

  Cross-platform  

  NTFS  

  Windows  

  exFAT  

  Large files  

  ext2  

  No journaling  

  ext3  

  Journaling  

  ext4  

  Extents, 1EB  

  XFS  

  Large files, 8EB  

  Btrfs  

  CoW, snapshots  

  ZFS  

  Advanced features  

  Use Case  

Детальне порівняння файлових систем:

Характеристика 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

Монтування файлових систем

Процес монтування

   Mount Process   

   boot time   

  Block Device  

  /dev/sdb1  

  Filesystem  

  ext4  

  Mount Point  

  /mnt/data  

  Kernel VFS  

  Mount Options  

  rw, noexec  

  /etc/fstab  

  Persistent mounts  

  File Access  

  /mnt/data/file.txt  

Ручне монтування

# Створити точку монтування
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

   Filesystems   

   Logical Volumes   

   Volume Group   

   Physical Volumes   

   Physical Layer   

  /dev/sda  

  /dev/sdb  

  /dev/sdc  

  PV: /dev/sda1  

  PV: /dev/sdb1  

  PV: /dev/sdc1  

  VG: vg0  

  Total: 900GB  

  LV: lv_root  

  100GB  

  LV: lv_home  

  500GB  

  LV: lv_var  

  200GB  

  / root ext4  

  /home ext4  

  /var xfs  

Переваги 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 10 - Mirror+Stripe   

  Disk 1  

  A1 A3  

  Disk 2  

  A1 A3  

  Disk 3  

  A2 A4  

  Disk 4  

  A2 A4  

  Performance: 2x  

  Redundancy: 1 per pair  

   RAID 5 - Parity   

  Disk 1  

  A1 B2  

  Disk 2  

  A2 P  

  Disk 3  

  P B1  

  Performance: Good  

  Redundancy: 1 disk  

   RAID 1 - Mirroring   

  Disk 1  

  A1 A2  

  Disk 2  

  A1 A2  

  Performance: 1x  

  Redundancy: 1 disk  

   RAID 0 - Striping   

  Disk 1  

  A1 A3  

  Disk 2  

  A2 A4  

  Performance: 2x  

  Redundancy: None  

Детальна інформація про рівні 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

   LUKS Encryption Layer   

   unlock   

  Plaintext Data  

  Sensitive files  

  Master Key  

  Passphrase  

  User enters  

  dm-crypt  

  Kernel module  

  AES-256  

  Encryption  

  Encrypted Device  

  /dev/sdb1  

  Mapped Device  

  /dev/mapper/secret  

Створення зашифрованих розділів

# Встановити 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

Дискові квоти

Архітектура застосування квот

   Quota System   

   under soft   

   over soft   

   over hard   

   within grace   

   grace expired   

  User/Group  

  Write Operation  

  Check Quota  

  Soft Limit  

  Warning only  

  Hard Limit  

  Enforce  

  Grace Period  

  7 days  

  Allow Write  

  Deny Write  

  Disk quota exceeded  

  Allow + Warning  

Увімкнення дискових квот

# Встановити інструменти квот
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

  1. Вибір розділів та файлової системи:

    • Використовувати GPT для сучасних систем (диски >2ТБ)
    • Вибирати ext4 для загального призначення, XFS для великих файлів
    • Окремі розділи: /, /home, /var, /tmp
    • Використовувати LVM для гнучкості в production
    • Резервувати 5-10% вільного простору для оптимальної продуктивності
  2. Стратегія LVM:

    • Не виділяти весь простір VG одразу
    • Залишити 20% вільним для зростання та знімків
    • Використовувати описові назви VG/LV (vg_data, lv_mysql)
    • Створювати знімки перед важливими змінами
    • Ретельно моніторити тонкий provisioning
  3. Конфігурація RAID:

    • RAID 1 для ОС/завантажувальних дисків
    • RAID 10 для баз даних та високого I/O
    • RAID 5/6 для масового зберігання
    • Використовувати апаратний RAID для найкращої продуктивності
    • Регулярне сканування для виявлення тихого пошкодження
    • Гарячі резервні диски для автоматичної перебудови
  4. Шифрування:

    • Шифрувати розділи з конфіденційними даними
    • Резервне копіювання заголовків LUKS у безпечне місце
    • Використовувати файли ключів для серверів (з безпечними правами)
    • Тестувати процедури відновлення
    • Безпечно документувати ключі шифрування
  5. Дискові квоти:

    • Впроваджувати квоти на багатокористувацьких системах
    • Встановлювати м'які ліміти на рівні 90% від жорстких лімітів
    • 7-денний пільговий період є стандартним
    • Моніторити використання квот з сповіщеннями
    • Документувати політики квот
  6. Моніторинг та обслуговування:

    • Моніторити дисковий простір з сповіщеннями (поріг 80%)
    • Перевіряти статус SMART щотижня
    • Тестувати резервні копії щомісяця
    • Сканування RAID щомісяця
    • Переглядати журнали на помилки I/O
    • Планування ємності: прогноз на 6-12 місяців вперед
  7. Стратегія резервного копіювання:

    • Правило 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.