Natrafiłem na tę odpowiedź przez pomyłkę, ale jeśli ktoś jest ciekawy, oto odpowiedź poparta eksperymentami.
Krótka wersja
Pytanie dodatkowe: czy mogę utworzyć md(4)
macierz RAID z urządzeń blokowych o nierównej wielkości? Tak, ale macierz RAID będzie miała rozmiar najmniejszego urządzenia blokowego (plus pewne koszty ogólne na własne utrzymanie). Jeśli rozmiary urządzeń nie różnią się od siebie o 1%, pojawi się ostrzeżenie.
Pytanie 1: Czy mogę dodać do istniejącej md(4)
macierzy RAID urządzenie mniejsze niż najmniejszy aktualny członek? Nie, przykro mi. mdadm
całkowicie odmówi, aby to zrobić, aby chronić twoje dane.
Pytanie 2: czy możesz zmienić rozmiar istniejącej tablicy MD? Tak (przeczytaj mdadm
manpge!), Ale może nie być warte wysiłku. Będziesz musiał wykonać kopię zapasową wszystkiego, następnie zmienić rozmiar zawartości urządzenia RAID, a następnie zmienić rozmiar samego urządzenia - wszystko to jest dość podatne na błędy, błędne obliczenia i inne rzeczy, które będą cię kosztować twoje dane (bolesne doświadczenie rozmowy) .
To nie jest warte ryzyka i wysiłku. Jeśli masz nowy, pusty dysk, oto jak go zmienić, a także zachować jedną lub dwie kopie wszystkich danych w stanie nienaruszonym przez cały czas (zakładając, że masz 2-dyskowy RAID1):
- Utwórz na nim nową
md(4)
tablicę (bez jednego dysku).
- Odtwórz strukturę zawartości tablicy (Crypto, LVM, tabele partycji, dowolna ich kombinacja, cokolwiek unosi twoją łódź).
- Skopiuj dane z istniejącego dysku na nowy.
- Uruchom ponownie, używając nowego dysku.
- Wyczyść tablicę partycji starego dysku (lub
md(4)
wyzeruj superblok). W razie potrzeby utwórz wymagane partycje zgodne ze schematem na nowym dysku.
- Dodaj stary dysk do nowej tablicy.
- Poczekaj, aż elementy tablicy zostaną zsynchronizowane. Napić się kawy Leć do Ameryki Łacińskiej i wybierz własne ziarna kawy. :) (Jeśli mieszkasz w Ameryce Łacińskiej, wybierz się do Afryki).
Uwaga: tak, jest to ta sama technika 0xC0000022L opisana w jego odpowiedzi.
Pytanie 3. Co zrobić, jeśli dysk ma 1G? :) Nie martw się tym. Możliwe, że twój dysk zastępczy będzie większy. W rzeczywistości przy strategii takiej jak wyżej opłaca się uzyskać tańsze większe dyski za każdym razem, gdy jeden z nich ulegnie awarii (lub za tańszą aktualizację). Możesz uzyskać stopniowe uaktualnienie.
Dowód eksperymentalny
Zestaw doświadczalny
Najpierw sfałszujmy niektóre urządzenia blokowe. Użyjemy /tmp/sdx
i /tmp/sdy
(każde 100 mln) i /tmp/sdz
(99 mln).
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
Te trzy zestawy plików jak trzech urządzeń blokowych sprzężenia zwrotnego: /dev/loop0
, /dev/loop1
i /dev/loop2
, odwzorowywania sdx
, sdy
i sdz
odpowiednio. Sprawdźmy rozmiary:
sudo grep loop[012] /proc/partitions
7 0 102400 loop0
7 1 102400 loop1
7 2 101376 loop2
Zgodnie z oczekiwaniami mamy dwa urządzenia pętlowe o dokładności 100 M (102400 KiB = 100 MiB) i jedno o pojemności 99 M (dokładnie 99 × 1024 bloków 1K).
Tworzenie macierzy RAID z urządzeń o identycznych rozmiarach
Tutaj idzie:
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 /dev/loop1
mdadm: array /dev/md100 started.
Sprawdź rozmiar:
sudo grep md100 /proc/partitions
9 100 102272 md100
To precicely czego oczekujemy: jedno spojrzenie na instrukcji mdadm przypomina nam, że wersja 1.2 metadane potrwać 128K: 128 + 102272 = 102400. Teraz zniszczyć go w ramach przygotowań do drugiego eksperymentu.
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop1
Tworzenie macierzy RAID z urządzeń o nierównej wielkości
Tym razem użyjemy małego urządzenia blokowego.
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.
Zostaliśmy ostrzeżeni, ale tablica została stworzona. Sprawdźmy rozmiar:
sudo grep md100 /proc/partitions
9 100 101248 md100
Dostajemy tutaj 101 248 bloków. 101248 + 128 = 101376 = 99 × 1024. Powierzchnia użytkowa to najmniejsze urządzenie (plus metadane RAID 128K). Sprowadźmy to jeszcze raz do naszego ostatniego eksperymentu:
sudo mdadm --stop /dev/md100
sudo mdadm --misc --zero-superblock /dev/loop0
sudo mdadm --misc --zero-superblock /dev/loop2
I wreszcie: dodanie mniejszego urządzenia do działającej macierzy
Najpierw stwórzmy macierz RAID1 tylko z jednym ze 100M dysków. Tablica ulegnie degradacji, ale tak naprawdę nas to nie obchodzi. Chcemy tylko rozpoczętą tablicę. Te missing
słowa kluczowe to symbol zastępczy, który mówi: „Nie mam urządzenie do was jeszcze, zacznij teraz he tablicę i dodam jedną później”.
sudo mdadm --create -e 1.2 -n 2 -l 1 /dev/md100 /dev/loop0 missing
Ponownie sprawdźmy rozmiar:
sudo grep md100 /proc/partitions
9 100 102272 md100
Rzeczywiście, brakuje 128K i 102400 bloków. Dodawanie mniejszego dysku:
sudo mdadm --add /dev/md100 /dev/loop2
mdadm: /dev/loop2 not large enough to join array
Bum! Nie pozwoli nam, a błąd jest bardzo wyraźny.