Я натрапив на цю відповідь помилково, але у випадку, коли комусь цікаво, ось відповідь, яку підтримують експерименти.
Коротка версія
Бонусне запитання: чи можу я створити md(4)
масив RAID з блокових пристроїв неоднакового розміру? Так, але RAID масив матиме розмір найменшого блокового пристрою (плюс деякі накладні витрати для його власного ведення господарства). Якщо розміри пристрою не в межах 1% один від одного, ви отримуєте попередження.
Питання 1: чи можна додати до наявного md(4)
масиву RAID пристрій менший за найменший поточний член? Ні, вибач. mdadm
відмовиться робити це, щоб захистити ваші дані.
Запитання 2: чи можете ви змінити розмір існуючого масиву md? Так (читайте mdadm
manpge!), Але це може бути не вартим зусиль. Вам доведеться створити резервну копію всього, потім змінити розмір вмісту RAID-пристрою, а потім змінити розмір самого пристрою - все це досить схильне до помилок, прорахунків та інших речей, які коштують ваших даних (болісний досвід спілкування) .
Не варто ризикувати і докладати зусиль. Якщо у вас новий порожній диск, ось як змінити його розмір, а також зберігати між однією та двома копіями всіх своїх даних неушкодженими в будь-який час (якщо у вас є 2-дисковий RAID1):
- Створіть на ній новий
md(4)
масив (при цьому відсутній один диск).
- Відтворіть структуру вмісту масиву (Crypto, LVM, таблиці розділів, будь-яка їх комбінація, що б не плавав ваш човен).
- Скопіюйте дані з існуючого диска на новий.
- Перезавантажте, використовуючи новий диск.
- Протріть таблицю розділів старого диска (або нульовий
md(4)
суперблок). При необхідності створіть необхідні розділи, щоб вони відповідали схемі на новому диску.
- Додайте старий диск до нового масиву.
- Зачекайте, поки члени масиву синхронізуються. Випити кави. Прилетіть до Латинської Америки і виберіть собі власні кавові зерна. :) (Якщо ви живете в Латинській Америці, летіть натомість до Африки).
Примітка: так, це та сама техніка 0xC0000022L, описана у його відповіді.
Питання 3. Що робити, якщо накопичувач 1G короткий? :) Не хвилюйся з цього приводу. Швидше за все, ваш привід заміни буде більшим. Насправді, зі стратегією , як вище він платить , щоб отримати більш дешеві великі диски , коли один виходить з ладу (або для більш дешевої модернізації). Ви можете отримати прогресивне оновлення.
Експериментальне підтвердження
Експериментальне встановлення
Спочатку давайте підробимо кілька блокових пристроїв. Ми будемо використовувати /tmp/sdx
і /tmp/sdy
(кожен 100 млн.), І /tmp/sdz
(99 млн.).
cd /tmp
dd if=/dev/zero of=sdx bs=1M count=100
sudo losetup -f sdx
dd if=/dev/zero of=sdy bs=1M count=100
sudo losetup -f sdy
dd if=/dev/zero of=sdz bs=1M count=99 # Here's a smaller one!
sudo losetup -f sdz
Це створює три файли в якості три петльових блокових пристроїв: /dev/loop0
, /dev/loop1
і /dev/loop2
, відображення на sdx
, sdy
і sdz
відповідно. Давайте перевіримо розміри:
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
Як і очікувалося, у нас є два контурні пристрої розміром рівно 100 М (102400 КіБ = 100 МіБ) і один з 99 М (рівно 99 × 1024 1К блоків).
Виведення масиву RAID з ідентично розмірних пристроїв
Ось:
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
Перевірте розмір:
sudo grep md100 /proc/partitions
9 100 102272 md100
Це точно, чого ми очікуємо: один погляд на посібник з mdadm нагадує нам, що метадані версії 1.2 містять 128K: 128 + 102272 = 102400. Тепер давайте знищимо їх під час підготовки до другого експерименту.
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
Здійснення масиву RAID з нерівномірних пристроїв
На цей раз ми використаємо пристрій невеликого блоку.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop2
mdadm: largest drive (/dev/loop0) exceeds size (101248K) by more than 1%
Continue creating array? y
mdadm: array /dev/md100 started.
Ну, нас попередили, але масив був зроблений. Давайте перевіримо розмір:
sudo grep md100 /proc/partitions
9 100 101248 md100
Що ми отримуємо тут, це 101 248 блоків. 101248 + 128 = 101376 = 99 × 1024. Корисний простір - це найменший пристрій (плюс метадані RAID 128K). Давайте повернемо все це для нашого останнього експерименту:
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
І наостанок: Додавання меншого пристрою до запущеного масиву
Спочатку давайте зробимо масив RAID1 лише з одного з 100M дисків. Масив буде деградовано, але нас це насправді не хвилює. Ми просто хочемо розпочати масив. У missing
ключових слів є заповнювачем , який говорить : «Я не пристрій для вас все ж, почати він масив , і тепер я додам один пізніше.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
Ще раз перевіримо розмір:
sudo grep md100 /proc/partitions
9 100 102272 md100
Звичайно, це не більше 128 Кб з 102400 блоків. Додавання меншого диска:
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
Бум! Це не дозволить нам, і помилка дуже зрозуміла.