Програмний RAID1 (дзеркало) за допомогою mdadm

На практиці, найімовірніше джерело проблем з комп'ютерами, що працюють 24х7 – це диски. За 12 років я зіткнувся з двома мережевими картами, що вийшли з ладу на серверах, але диски, навіть серверних серій, виходять з ладу регулярно. Що WD, що Seagate, що Hitahi. Тому питання із мотивацією використання дзеркального raid1 вважаємо закритим.
Багато материнських плат зараз заявляють функціонал raid. Тільки якщо ви точно знаєте, навіщо вам використовувати raid вашої motherboard, робіть це. До того ж, найчастіше це специфічні варіації на тему програмного raid, тільки ніхто-не-знає-як-зроблені. Тобто. не факт, що погано зроблено. Але не факт, що ви знайдете вичерпну інформацію щодо вирішення проблеми. Далі спеціальні контролери raid. Знову ж таки, якщо ви знаєте, що саме ви хочете, використовуйте їх. Але ви повинні розуміти, що будь-який пристрій (що материнка, що окремий контролер) можуть бризкати і тоді можуть бути проблеми з отриманням даних з дисків масиву. Причому у вас можуть виникнути проблеми з пошуком інформації щодо вирішення проблеми, т.к. що розбираються у конкретній залізці чи лінійки устаткування негаразд велике.
Одним із найпоширеніших рішень, за яким ви завжди знайдете допомогу на форумах, є використання програмного raid, не прив'язаного до заліза. Що стосується Linux це raid масив, створений mdadm.
Зробимо найпростішу систему захисту від збою жорсткого диска – дзеркальний raid масив. Для цього додамо до системи два диски: /dev/sdb /dev/sdd
Припустимо, на дисках ми розмістимо файлову кулю чи ресурс для бази даних. Диски нові, розділів на них немає.
Перевіримо, що диски насправді без розділів:
Не повинно бути ніяких /dev/sdb1 та інших! Аналогічно /dev/sdd.
Переконайтеся, що ви збираєтеся створювати розділи саме на тих дисках, які для цього додали. Перевірити модель диска та його S/N: smartctl -i /dev/sdb
На кожному диску створимо розділ на весь диск із прицілом на raid.
Приблизно так: Спочатку n (add a new partition), потім p (primary), номер розділу 1 (partition number). Усі цифри можна залишити за замовчуванням. Записали зміни та вийшли: w
Змінюємо тип розділу /dev/sdb1 на "Linux raid autodetect":
Спочатку t (change a partition's system id), потім fd (Linux raid auto), потім p (перевіримо зміни) і w (зберегли зміни та вийшли):
Аналогічно надаємо з диском /dev/sdd (тобто створюємо primary розділ /dev/sdd1 і змінюємо тип на "Linux raid autodetect").
Створюємо RAID1 масив
Якщо у вашій системі є інші диски, уважно і ретельно перевіряйте назви пристроїв. На моєму комп'ютері це вже не перший масив, тому я вкажу ім'я новоствореного масиву "/dev/md2".
# mdadm --create --verbose /dev/md2 --level=1 --ra >
--create - створити --verbose - більше інформації! /dev/md2 - ім'я нового raid-масиву (фактично, це пристрій, на ньому потім можна створювати розділи lvm і все, що завгодно ще) --ra >
Перевірити, що сталося:
# cat /proc/mdstat Personalities : [raid1] md2 : active raid1 sdd1[1] sdb1[0] 976630464 blocks super 1.2 [2/2] [UU] [> . ] resync = 1.4% (13876288/976630464) finish=85.1min speed=188512K/sec bitmap: 8/8 pages [32KB], 65536KB chunk
Йде синхронізація. Дочекаємось її закінчення.
Після завершення синхронізації перегляньте параметри вашого масиву:
# mdadm --detail --scan --verbose
ARRAY /dev/md2 level=ra > devices=/dev/sdb1,/dev/sdd1
Щоб raid після ребута нікуди не подівся, зберігаємо конфіг у файл /etc/mdadm.conf (шлях до файлу вірний для CentOS 7):
# mdadm --detail --scan --verbose >> /etc/mdadm.conf
Зверніть увагу на ">>" (Додати, а не перезаписати). Не варто перезаписувати конфіг mdadm, там можуть бути важливі відомості про інші масиви, які вже працюють у вас в системі.
Що за UUID "3eaa3e42:6f083fc4:0c9281a3:1b9b7452"? Перегляньте UUID блокових пристроїв, що починаються на "3eaa3e42":
# blkid grep 3eaa3e42 /dev/sdb1: UU /dev/sdd1: UU
Тобто. є прив'язка в конфізі raid1 масиву не тільки на ім'я /dev/sdb1, але і по унікальному ідентифікатору пристрою. Тому якщо ви просто виймете диски і на їх місце увімкнете інші, то нічого хорошого не вийде.
Так, тепер ось що: можна просто відформатувати створений диск (mkfs.ext4 /dev/md2) та вказати у файлі /etc/fstab точку його монтування, а можна погратись із LVM. LVM може надати певні переваги, наприклад, якщо ви вирішите змінити розмір розділу або навіть додати до нього інші диски, раптом місця буде зовсім мало.
Створюємо фізичний том на пристрої /dev/md2 (тобто працюємо вже з об'єктом масиву, а не конкретними розділами типу /dev/sdb1):
# pvcreate /dev/md2 Physical volume "/dev/md2" успішно створений.
# pvscan PV /dev/md2 lvm2 [931.39 GiB]
На томі створюємо групу томів (volume group) з ім'ям "datavg" (довільно можете брати іншу назву:
# vgcreate datavg /dev/md2
У групі "datavg" створюємо логічний том "datalv" (ім'я обрано довільно) розміром 931Гб (розмір взятий з лістингу команди pvscan):
# lvcreate --name datalv --size 931G datavg
[не вдаючись у відмінності ext4, ext3, xfs таін.] форматуємо кінцевий логічний том /dev/datavg/datalv xfs:
Проміжний підсумок: у нас є "диск" із файловою системою xfs, який можна примонтувати та використовувати. Наприклад, щоб наш raid1 обслуговував якусь директорію (нехай буде /data), в /etc/fstab додайте, наприклад:
/dev/mapper/datavg-datalv /data xfs defaults 0 0
Створіть саму директорію / data:
Перевірте перед перезавантаженням:
# mount /dev/mapper/datavg-datalv /data
Запишіть файл у /data і перезавантажтеся.
Перевіряємо. Тестовий файл має бути на місці.
Вперше завжди робіть це на тестовому чи не важливому сервері.