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.
Istnieje kilka sposobów konfigurowania
mdX
urządzeń. Metodą byłoby użyciegdisk
(lubsgdisk
jeśli wolisz wersję tylko wiersza poleceń) do podzielenia go na partycje jako GPT. Jeśli chcesz uruchomić system z tablicy, utwórz „partycję rozruchową systemu BIOS”, wpisz kodef02
. Jest to konieczne tylko, jeśli chcesz uruchomić tę tablicę, w przeciwnym razie nie musisz się tym przejmować. Następnie utwórz partycję tego samego rozmiaru lub mniejszą niż najmniejszy dysk, który ma zostać dodany do tablicy. Na koniec skopiuj dane GPT na inny dysk (menu eksperta wgdisk
, za pomocąx
, a następnieu
określ urządzenie docelowe). To destrukcyjny proces.Powinno być możliwe - jeśli system plików na to pozwala - zmienić rozmiar istniejącej partycji na coś mniejszego, a następnie użyć tej samej metody do skopiowania danych GPT. To jednak prowadzi cię do kerfuffla. Ponieważ teraz masz dwa dyski, ale wciąż nie masz
mdX
urządzenia. Jeden z nich musi być przygotowany jakomdX
partycjonowany (co sugerowałem powyżej) lub dyskowy), a następnie dane muszą zostać przeniesione z istniejącego dysku na ten dysk.Więc:
/dev/sda
) zawiera dane, dane są mniejsze niż 3001 GB, partycje nie/dev/sdb
zostanie dodany do systemu/dev/sdb
pomocągdisk
mdadm -C /dev/md2 -l 1 -n 1 /dev/sdb2
)/dev/sdb
do/dev/sda
/dev/sda
istniejących tablic/proc/mdstat
pokazanie, że synchronizacja została zakończonaJeśli wykonałeś wszystkie kroki, powinieneś być w stanie uruchomić się w nowym systemie z tablic mdX. Na wszelki wypadek miej pod ręką ratunkową płytę CD lub opcję rozruchu PXE.
GRUB2 nie będzie w stanie rozpoznać konfiguracji z ręki. Potrzebujesz więc „magii”. Oto jedna linijka:
Albo bądźmy bardziej gadatliwi:
Spowoduje
/boot/grub/devicemap
to utworzenie (lub zastąpienie) wartości domyślnej informacją GRUB2, gdzie znaleźć każdy odpowiedni dysk. Wynik byłby mniej więcej taki:Jeśli korzystasz ze starszej wersji GRUB, musisz również utworzyć „partycję rozruchową systemu BIOS” z metadanymi w wersji 0.9, używając,
mdadm -e 0 ...
a proces będzie się różnić. Jednak tego nie zrobiłem.źródło
mdadm
odmówiłaby zbudowania tablicy w pierwszej kolejności, jeśli jest niezgodna. W RAID 5 w końcu potrzebujesz więcej dysków, aw RAID 0 nie przejmujesz się tym, dlatego założyłem RAID 1. Tak, sensownie jest pozostawić miejsce.mdadm
toleruje arbitralną różnicę wielkości 1% w elementach tablicy.