MDAdm. Робота з RAID в Ubuntu
- Деталі
- Категорія: Servers (uk)
- Опубліковано: Понеділок, 07 січня 2019, 18:28
- Автор: Super User
- Перегляди: 3416
Рано чи пізно при налаштуванні серверів доводиться зіткнутися з такою річчю як RAID.
На брендових серверах вони часто повністю хардварні, але тим не менш дуже часто доводиться стикатися і з софтварним рейдом.
Побудова RAID
Побудуємо на сервері RAID1.
Спочатку створимо однакові розділи на дисках sdb і sdc
#fdisk /dev/sdb
command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +5G
Command (m for help): t
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
Аналогічно зробимо і для диска sdc
Встановимо утиліту роботи з RAID
# apt-get install mdadm
Тепер зберемо RAID 1
# mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
Після збірки стан RAID можна переглянути за допомогою команди
# cat /proc/mdstat
В результаті ми повинні отримати виведення щось схоже на
personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
5238720 blocks super 1.2 [2/2] [UU]
unused devices: <none>
Тепер можна на створеному RAID-розділі створювати файлову систему і підключати її до системи.
# mkfs.ext4 /dev/md0
# mkdir /mnt/raid
# mount /dev/md0 /mnt/raid
Так само для подальшої перевірки коректності роботи рейду створимо на RAID-розділі файл:
# touch /mnt/raid/test.txt
Помилка при роботі з RAID
Після того, як ми створили RAID він у нас визначається як пристрій /dev/md0, проте після перезавантаження такого пристрою в системі не буде, а замість нього з'явиться / dev / md127. Тут можна або в подальшому використовувати саме таке ім'я пристрою, або, що як правило зручніше, насильно пояснити системі, що наш RAID-розділ саме /dev/md0 і ні як інакше. Для цього виконаємо команду:
# mdadm -Db /dev/md0 > /etc/mdadm/mdadm.conf
В результаті виконання цієї команди у файлі /etc/mdadm/mdadm.conf буде рядок
ARRAY /dev/md0 metadata=1.2 name=ub-4:0 UUID=7da67e34:3d29e3a1:bdf36edd:6be26e60
Після цього необхідно оновити образ initramfs:
# update-initramfs -u
Тепер після перезавантаження наш RAID-розділ буде визначатися як /dev/md0.
Деградація та відновлення RAID
Подивимося як можна провести деградацію рейду. Природно, в реальній системі диск зазвичай вилітає сам і немає необхідності спеціально оголошувати його збійним, але ми скористаємося можливостями утиліти mdadm і оголосимо частину RAID - /dev/sdb1 збійним.
# mdadm /dev/md0 --fail /dev/sdb1
Подивимося тепер на стан RAID
# cat /proc/mdstat
Ми повинні побачити, що /dev/sdb1 має якісь проблеми і рейд деградований:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[2](F) sdc1[1]
5238720 blocks super 1.2 [2/1] [_U]
unused devices: <none>
Тепер за допомогою fdisk створимо на пристрої /dev/sdd розділ такого ж розміру, як і /dev/sdс1. Після цього видалимо /dev/sdb1 з RAID
# mdadm /dev/md0 --remove /dev/sdb1
І додамо новий розділ /dev/sdd1
# mdadm /dev/md0 --add /dev/sdd1
Якщо ми відразу ж подивимося на стан RAID
# cat /proc/mdstat
То ми побачимо, що RAID у нас знову складається з двох нормальних дисків і в даний момент відбувається його синхронізація:
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdd1[2] sdc1[1]
5238720 blocks super 1.2 [2/1] [_U]
[=>...................] recovery = 6.2% (329984/5238720) finish=1.2min speed=65996K/sec
unused devices: <none>
Якщо ми тепер примонтуємо наш RAID
# mount /dev/md0 /mnt/raid/
То побачимо, що файл, який ми до цього створювали на місці і нічого нікуди не пропало.
# ls /mnt/raid/
lost+found test.txt