Чи можу я створити програмне забезпечення RAID 1 за допомогою одного пристрою


20

У мене є один диск, з якого я хочу створити дзеркало; давайте назвемо цей диск sda. Щойно я придбав ще один диск однакового розміру, який ми можемо назвати sdb. sdaі sdbє один розділ під назвою sda1і sdb1відповідно.

Створюючи рейд, я не хочу видаляти sdaочищення та починати заново, я просто хочу, щоб це почалося дзеркальне відображення sdb. Мій потяг думок повинен був зробити:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... щоб створити масив без sdbдиска, а потім запустити щось на зразок (я думаю, що наступна команда вголос, тому що я не впевнений, як досягти цього кроку)

mdadm /dev/md0 --add /dev/sdb1

Примітка sdb1передбачається, що вона відформатована аналогічноsda1

Чи можливо це?


Так, ти можеш. Це не так просто --add, і потрібно бути обережним, але це не дуже складно. Див. Як налаштувати дзеркальне відображення диска в Ubuntu? (Я не можу запропонувати це питання як дублікат через нові правила.)
Жил "ТАК - перестань бути злим"

Відповіді:


28

Проста відповідь на запитання в заголовку - «Так». Але те, що ви насправді хочете зробити, - це наступний крок, який дає відображення наявних даних.

Можна конвертувати існуючий диск, але це, як було сказано, ризиковано через розташування метаданих. Набагато краще створити порожнє (розбите) дзеркало з новим диском і скопіювати на нього наявні дані. Потім, якщо це не працює, ви просто завантажуєтесь до оригіналу, який не відображається.

По-перше, ініціалізуйте /dev/sdb1як нове /dev/md0з відсутнім диском та ініціалізуйте файлову систему (я припускаю, що ext3, але вибір за вами)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Тепер, /dev/sda1швидше за все, ваша коренева файлова система ( /), тому для безпеки вам слід зробити наступний крок із живого компакт-диска, рятувального диска або іншої завантажувальної системи, яка може отримати доступ до обох, /dev/sda1і /dev/md0хоча я це успішно зробив, перейшовши в режим одного користувача.

Скопіюйте весь вміст файлової системи на /dev/sda1до /dev/md0. Наприклад:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Відредагуйте /etc/fstabабо іншим чином переконайтесь, що на наступному завантаженні /dev/md0замість цього встановлено /dev/sda1. Ваша система, ймовірно, налаштована на завантаження з, /dev/sda1а параметри завантаження, ймовірно, визначають це як кореневий пристрій, тому під час перезавантаження слід змінити це вручну, щоб корень був /dev/md0(припускаючи, що він /dev/sda1був root). Після перезавантаження перевірте, що /dev/md0зараз встановлено ( df) та чи працює він як деградоване дзеркало ( cat /proc/mdstat). Додати /dev/sda1до масиву:

mdadm /dev/md0 --add /dev/sda1

Оскільки відновлення буде перезаписано /dev/sda1, яку версію метаданих ви не використовуєте. Як завжди, вносячи основні зміни, візьміть повну резервну копію (якщо можливо) або принаймні переконайтесь, що все, що неможливо відтворити, є безпечним.

Вам потрібно буде відновити конфігурацію завантаження, щоб використовувати /dev/md0як root (якщо він /dev/sda1був root), і, ймовірно, потрібно відновити, mdadm.confщоб переконатися /dev/md0, що завжди запущено.


Ідеально саме те, що мені потрібно: D
whoami

2
Не використовуйте cpдля копіювання файлових систем, ви пропустите деякі речі, як жорсткі посилання, розширені атрибути ... Використовуйте tarабо rsyncза допомогою відповідних параметрів. Під час завантаження живого компакт-диска слід пам’ятати, що відображення uid-користувачів відрізняється (див. Параметри - числові власники tar / rsync). Дивіться також clone2fs для клонування файлових систем extx.
Стефан Шазелас

1
Варіанти cpобробляти збереження посилань (-d), режим, право власності та часові позначки (-p), робити це рекурсивно (-R) та залишатися в одній файловій системі (-x), але я думаю, ви можете мати рацію щодо жорстких посилань та розширених атрибути.
StarNamer

rsync -aH --delete /mnt/olddisk/ /mnt/newarray/- хороший варіант. Додайте, -vih --progressякщо ви хочете реально побачити, що це робить.
rudolfbyker

4

Звичайно, ви можете створити його, вказавши, що другий диск зараз missing:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1

Солодке спасибі, я, ймовірно, OCD тут, але чи є причина, чому ви додали пропущені до / dev / sda1, чи важливий порядок?
whoami

Я думаю, що порядок не має значення.
eppesuig

3
Обережно з цим! з --metadata = 1,2 (новий за замовчуванням), метадані RAID (1 МБ) будуть вставлені на початку (переосмисливши вміст там). І запуск md масиву почнеться на 1 МБ в межах / dev / sda1 (/ dev / md0 буде на 1 МБ коротше / dev / sda1). З метаданими = 0,9 (старий за замовчуванням) метадані (64 КБ) будуть вставлені в кінці, що переосмислює те, що там є. Тому використовуйте --metaдані = 0,9 та змініть розмір FS спочатку. Що б ви не робили, заздалегідь візьміть резервну копію.
Stéphane Chazelas

3

Ви можете це зробити. Вам потрібно бути трохи обережним, але це не небезпечно¹, якщо ви дуже обережні, щоб нічого не вводити в оману, і це не залишає жодних проблем у налаштуваннях.

Я настійно рекомендую не робити жодних маніпуляцій на живій системі. Це можливо в деяких випадках, але вимагає додаткового догляду. Завантаження з liveCD / liveUSB, таких як Parted або SystemRescueCD .

Спочатку потрібно трохи зменшити гучність, щоб звільнити метадані mdraid (суперблок). Існує кілька форматів метаданих , ви повинні використовувати той, який розміщує метадані в кінці диска. (У деяких налаштуваннях у вас може бути достатньо місця для розміщення суперблоку на початку, але це складніше і схильне до ризику, тому я заходжу в це.)

Ви повинні переконатися, що останні 128 КБ із блочного пристрою не використовуються, щоб звільнити місце для суперблока. Тому вам потрібно буде зменшити файлову систему /dev/sda1. Якщо це файлова система ext2 / ext3 / ext4, отримайте поточний розмір файлової системи tune2fs /dev/sda1, а потім запустіть, resize2fs /dev/sda1 NNNде NNN - це розмір мінус 128 кБ. Ви можете зробити це замість Parted . Якщо вам потрібно скоротити файлову систему extN, спочатку потрібно її відключити; файлову систему btrfs можна зменшити в прямому ефірі.

Після того, як ви переконаєтесь, що останні 128 КБ блокового пристрою вільні, зателефонуйте, mdadm --createщоб створити том RAID-1. Це не торкається жодної частини гучності окрім суперблока. Спочатку том буде мати один компонент: всі інші встановлюються як невдалі. Ви повинні пройти --level=1(або рівнозначно -n 1) (такий підхід працює лише для RAID-1) і --metadata=0.9або --metadata=1.0(за замовчуванням формат superblock 1.2 ставить суперблок біля початку пристрою, який може перезаписати дані). Аргументом до --raid-devices( -n) є кількість компонентів (включаючи відсутні) в томі RAID.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Тепер ви можете активувати масив та додати інші компоненти.

mdadm --add /dev/md0 /dev/sdb1

Примітка до завантажувачів: Grub2 розуміє Linux RAID-1 і може завантажуватися з нього. Завантажувачі, такі як Grub1, які не розуміють RAID, читають прозоро з дзеркальних томів, але ваша система не завантажиться, якщо привід завантажувача завантажується з помилки. Якщо об'єм RAID знаходиться на розділі, не забудьте встановити завантажувальний сектор Grub на обох дисках.

¹ Обов’язково мати резервні копії. "Не небезпечно" означає "вам, ймовірно, не знадобляться", а не "азартні ігри".

Повідомлення та злегка адаптовані в розділі Як налаштувати дзеркальне відображення (RAID-1)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.