Ludzie, proszę, pomóżcie - jestem nowicjuszem z dużym bólem głowy pod ręką (idealna sytuacja sztormowa).
Mam 3 1 TB HDD na moim Ubuntu 11.04 skonfigurowanym jako Raid oprogramowania 5. Dane były kopiowane co tydzień na inny oddzielny dysk twardy komputera, aż całkowicie się nie powiodło i został wyrzucony. Kilka dni temu mieliśmy awarię zasilania, a po ponownym uruchomieniu moje pudełko nie zniosło nalotu. W mojej nieskończonej mądrości weszłam
mdadm --create -f...
polecenie zamiast
mdadm --assemble
i nie zauważyłem parodii, którą zrobiłem później. Rozpoczęła degradację tablicy i przystąpiła do jej budowy i synchronizacji, co zajęło ~ 10 godzin. Po powrocie zobaczyłem, że tablica działa poprawnie, ale nalot nie
Mam na myśli, że poszczególne dyski są podzielone na partycje (typ partycji f8
), ale md0
urządzenie nie. Z przerażeniem zdając sobie sprawę z tego, co zrobiłem, próbuję znaleźć jakieś rozwiązania. Po prostu modlę się, aby --create
nie zastąpiło to całej zawartości twardego sterownika.
Czy ktoś mógłby mi w tym pomóc - dane na dysku są bardzo ważne i unikalne ~ 10 lat zdjęć, dokumentów itp.
Czy jest możliwe, że poprzez określenie uczestniczących dysków twardych w niewłaściwej kolejności można je mdadm
zastąpić? kiedy robię
mdadm --examine --scan
Dostaję coś takiego ARRAY /dev/md/0 metadata=1.2 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b name=<hostname>:0
Co ciekawe, nazwa była „nalotowa”, a nie nazwa hosta z dodatkiem: 0.
Oto „skonfigurowane” wpisy konfiguracji:
DEVICE /dev/sdf1 /dev/sde1 /dev/sdd1
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST <system>
MAILADDR root
ARRAY /dev/md0 metadata=1.2 name=tanserv:0 UUID=f1b4084a:720b5712:6d03b9e9:43afe51b
Here is the output from mdstat
cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid5 sdd1[0] sdf1[3] sde1[1]
1953517568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
fdisk shows the following:
fdisk -l
Disk /dev/sda: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000bf62e
Device Boot Start End Blocks Id System
/dev/sda1 * 1 9443 75846656 83 Linux
/dev/sda2 9443 9730 2301953 5 Extended
/dev/sda5 9443 9730 2301952 82 Linux swap / Solaris
Disk /dev/sdb: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000de8dd
Device Boot Start End Blocks Id System
/dev/sdb1 1 91201 732572001 8e Linux LVM
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00056a17
Device Boot Start End Blocks Id System
/dev/sdc1 1 60801 488384001 8e Linux LVM
Disk /dev/sdd: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000ca948
Device Boot Start End Blocks Id System
/dev/sdd1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/dm-0: 1250.3 GB, 1250254913536 bytes
255 heads, 63 sectors/track, 152001 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Disk /dev/dm-0 doesn't contain a valid partition table
Disk /dev/sde: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x93a66687
Device Boot Start End Blocks Id System
/dev/sde1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/sdf: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xe6edc059
Device Boot Start End Blocks Id System
/dev/sdf1 1 121601 976760001 fd Linux raid autodetect
Disk /dev/md0: 2000.4 GB, 2000401989632 bytes
2 heads, 4 sectors/track, 488379392 cylinders
Units = cylinders of 8 * 512 = 4096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes
Disk identifier: 0x00000000
Disk /dev/md0 doesn't contain a valid partition table
Zgodnie z sugestiami wyczyściłem superbloki i odtworzyłem tablicę z --assume-clean
opcją, ale bez powodzenia.
Czy jest jakieś narzędzie, które pomoże mi odzyskać przynajmniej część danych? Czy ktoś może mi powiedzieć, co i jak robi mdadm -create, gdy synchronizuje się, aby zniszczyć dane, abym mógł napisać narzędzie do cofnięcia się co zrobiono?
Po odtworzeniu nalotu uruchamiam fsck.ext4 / dev / md0 i oto wyjście
root @ tanserv: / etc / mdadm # fsck.ext4 / dev / md0 e2fsck 1.41.14 (22 grudnia 2010) fsck.ext4: Niepoprawny superblok, próba wykonania kopii zapasowej bloków ... fsck.ext4: Zła liczba magiczna w super- blokuj podczas próby otwarcia / dev / md0
Nie można odczytać superbloku lub nie opisuje on prawidłowego systemu plików ext2. Jeśli urządzenie jest prawidłowe i naprawdę zawiera system plików ext2 (a nie swap, ufs lub coś innego), to superblok jest uszkodzony i możesz spróbować uruchomić e2fsck z alternatywnym superblokiem: e2fsck -b 8193
Sugestię Per Shanesa próbowałem
root@tanserv:/home/mushegh# mkfs.ext4 -n /dev/md0
mke2fs 1.41.14 (22-Dec-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
122101760 inodes, 488379392 blocks
24418969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
14905 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
i uruchamiam fsck.ext4 z każdym blokiem kopii zapasowej, ale wszystkie zwróciły:
root@tanserv:/home/mushegh# fsck.ext4 -b 214990848 /dev/md0
e2fsck 1.41.14 (22-Dec-2010)
fsck.ext4: Invalid argument while trying to open /dev/md0
The superblock could not be read or does not describe a correct ext2
filesystem. If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
e2fsck -b 8193 <device>
Jakieś sugestie?
Pozdrowienia!
źródło
Odpowiedzi:
Ok - coś mnie wkurzało w związku z twoim problemem, więc odpaliłem maszynę wirtualną, aby zanurkować w zachowanie, którego należy się spodziewać. Zaraz dojdę do tego, co mnie wkurzało; najpierw pozwól mi powiedzieć:
Wykonaj kopię zapasową tych dysków przed próbą czegokolwiek !!
Możliwe, że już wyrządziłeś szkody poza tym, co zrobiła ponowna synchronizacja; czy możesz wyjaśnić, co miałeś na myśli, mówiąc:
Jeśli prowadziłeś a
mdadm --misc --zero-superblock
, powinieneś być w porządku.W każdym razie, odszukaj kilka nowych dysków i chwyć ich dokładne bieżące obrazy, zanim zrobisz cokolwiek, co może zrobić więcej zapisu na tych dyskach.
To powiedziawszy ... wygląda na to, że dane przechowywane na tych rzeczach są szokująco odporne na błędne resynchronizacje. Czytaj dalej, jest nadzieja i może to być dzień, w którym osiągnąłem limit długości odpowiedzi.
Najlepszy scenariusz
Rzuciłem maszynę wirtualną, aby odtworzyć scenariusz. Dyski mają tylko 100 MB, więc nie czekałbym wiecznie przy każdej ponownej synchronizacji, ale w przeciwnym razie powinna to być dość dokładna reprezentacja.
Zbuduj tablicę tak ogólnie i domyślnie, jak to możliwe - fragmenty 512 tys., Układ symetryczny lewy, dyski w kolejności literowej. Nic specjalnego.
Jak na razie dobrze; stwórzmy system plików i umieśćmy na nim trochę danych.
Dobrze. Mamy na nim system plików i niektóre dane („dane”
datafile
i losowe dane o wartości 5 MB z tym hashem SHA1randomdata
); zobaczmy, co się stanie, gdy dokonamy odtworzenia.Ponowna synchronizacja zakończyła się bardzo szybko z tymi małymi dyskami, ale tak się stało. Oto, co mnie wcześniej denerwowało; twój
fdisk -l
wynik.md
Oczekuje się, że brak tablicy partycji na urządzeniu nie stanowi żadnego problemu. Twój system plików znajduje się bezpośrednio na fałszywym urządzeniu blokowym bez tablicy partycji.Tak, brak tablicy partycji. Ale...
Idealnie poprawny system plików po ponownej synchronizacji. To dobrze; sprawdźmy nasze pliki danych:
Solidny - w ogóle brak uszkodzenia danych! Ale dzieje się tak z dokładnie tymi samymi ustawieniami, więc nic nie było odwzorowane inaczej między dwiema grupami RAID. Opuśćmy to, zanim spróbujemy to zepsuć.
Cofając się
Zanim spróbujemy to przełamać, porozmawiajmy o tym, dlaczego trudno to przełamać. RAID 5 działa przy użyciu bloku parzystości, który chroni obszar o tym samym rozmiarze co blok na każdym innym dysku w macierzy. Parzystość nie jest tylko na jednym konkretnym dysku, jest równomiernie obracana wokół dysków, aby lepiej rozłożyć obciążenie odczytu na dyskach podczas normalnej pracy.
Operacja XOR do obliczenia parzystości wygląda następująco:
Zatem parzystość jest rozłożona na dyski.
Ponowna synchronizacja jest zwykle wykonywana podczas wymiany martwego lub brakującego dysku; Robi się to również w
mdadm create
celu zapewnienia, że dane na dyskach są zgodne z geometrią RAID. W takim przypadku ostatnim dyskiem w specyfikacji macierzy jest dysk „zsynchronizowany” - do synchronizacji wykorzystywane są wszystkie istniejące dane na innych dyskach.Zatem wszystkie dane na „nowym” dysku są usuwane i odbudowywane; albo budowanie świeżych bloków danych z bloków parzystości dla tego, co powinno tam być, albo budowanie świeżych bloków parzystości.
Fajne jest to, że procedura dla obu tych rzeczy jest dokładnie taka sama: operacja XOR na danych z reszty dysków. Proces resynchronizacji w tym przypadku może mieć w swoim układzie, że określony blok powinien być blokiem parzystości, i myślę, że buduje nowy blok parzystości, podczas gdy w rzeczywistości odtwarza stary blok danych. Więc nawet jeśli myśli, że to buduje:
... może to być po prostu przebudowa
DISK5
z powyższego układu.Dlatego dane mogą pozostać spójne, nawet jeśli tablica jest źle zbudowana.
Rzucanie małpy w dzieła
(nie klucz; cała małpa)
Test 1:
Zróbmy tablicę w niewłaściwej kolejności!
sdc
, asdd
następniesdb
…Ok, to wszystko dobrze i dobrze. Czy mamy system plików?
Nie! Dlaczego? Ponieważ chociaż wszystkie dane są dostępne, są one w niewłaściwej kolejności; to, co kiedyś było 512 KB A, a następnie 512 KB B, A, B i tak dalej, zostało teraz przetasowane do B, A, B, A. Dysk wygląda teraz jak szarpanie się do kontrolera systemu plików, nie będzie działać. Dane wyjściowe
mdadm --misc -D /dev/md1
dają nam więcej szczegółów; To wygląda tak:Kiedy powinno to wyglądać tak:
To wszystko dobrze i dobrze. Tym razem nadpisaliśmy całą masę bloków danych nowymi blokami parzystości. Utwórz ponownie, teraz we właściwej kolejności:
Zgrabnie, wciąż tam jest system plików! Nadal masz dane?
Sukces!
Test 2
Ok, zmieńmy wielkość porcji i zobaczmy, czy to nas zepsuje.
Tak, tak, jest ustawiony tak, jak skonfigurowano w ten sposób. Ale czy możemy wyzdrowieć?
Sukces ponownie!
Test 3
To jest ten, o którym myślałem, że na pewno zabije dane - zróbmy inny algorytm układu!
Straszne i złe - myśli, że coś znalazło i chce coś naprawić! Ctrl+ C!
Ok, kryzys uniknął. Zobaczmy, czy dane są nadal nienaruszone po ponownej synchronizacji z niewłaściwym układem:
Sukces!
Test 4
Udowodnijmy również, że zerowanie superbloku nie jest szkodliwe naprawdę szybko:
Tak, nic wielkiego.
Test 5
Rzućmy na to wszystko, co mamy. Wszystkie 4 poprzednie testy łącznie.
Naprzód!
Werdykt?
Łał.
Wygląda więc na to, że żadne z tych działań w żaden sposób nie uszkodziło danych. Szczerze mówiąc, byłem bardzo zaskoczony tym wynikiem; Spodziewałem się umiarkowanych szans na utratę danych przy zmianie wielkości porcji i pewną wyraźną utratę przy zmianie układu. Nauczyłem się dziś czegoś.
Więc .. Jak mogę uzyskać moje dane?
Bardzo dużo informacji na temat starego systemu byłoby bardzo pomocne. Jeśli znasz typ systemu plików, jeśli masz jakieś stare kopie
/proc/mdstat
z informacjami o kolejności dysków, algorytmie, wielkości porcji i wersji metadanych. Czy masz skonfigurowane powiadomienia e-mail mdadm? Jeśli tak, znajdź starą; jeśli nie, sprawdź/var/spool/mail/root
. Sprawdź,~/.bash_history
czy jest tam oryginalna wersja.Lista rzeczy, które powinieneś zrobić:
dd
przed zrobieniem czegokolwiek !!fsck
użyć bieżącego, aktywnego md - być może właśnie zdarzyło Ci się budować w takiej samej kolejności jak poprzednio. Jeśli znasz typ systemu plików, jest to pomocne; użyj tego konkretnegofsck
narzędzia. Jeśli którekolwiek z narzędzi oferuje coś do naprawy, nie pozwól im, dopóki nie masz pewności, że faktycznie znalazły prawidłowy system plików! Jeślifsck
oferujesz coś dla ciebie, nie wahaj się zostawić komentarza z pytaniem, czy to rzeczywiście pomaga, czy tylko nuke danych./proc/mdstat
, możesz po prostu naśladować to, co pokazuje; jeśli nie, to jesteś trochę w ciemności - wypróbowanie wszystkich różnych zamówień dysków jest rozsądne, ale sprawdzanie każdego możliwego rozmiaru porcji przy każdym możliwym zamówieniu jest daremne. Dla każdegofsck
sprawdź, czy dostaniesz coś obiecującego.To tyle. Przepraszamy za powieść, jeśli masz pytania, zostaw komentarz. Powodzenia!
przypis: poniżej 22 tysięcy znaków; 8k + powyżej limitu długości
źródło
Jeśli masz szczęście, możesz odzyskać swoje pliki dzięki oprogramowaniu do odzyskiwania, które może odczytać uszkodzoną macierz RAID-5. Zero Assumption Recovery to taki, z którym miałem wcześniej sukces.
Nie jestem jednak pewien, czy proces tworzenia nowej tablicy przeszedł i zniszczył wszystkie dane, więc może to być wysiłek ostatniej szansy.
źródło
Miałem podobny problem:
po awarii programowej macierzy RAID5 odpaliłem
mdadm --create
ją--assume-clean
, nie dając jej , i nie mogłem już zamontować macierzy. Po dwóch tygodniach kopania w końcu przywróciłem wszystkie dane. Mam nadzieję, że poniższa procedura pozwoli komuś zaoszczędzić czas.Krótko mówiąc
Problem był spowodowany faktem, że
mdadm --create
powstała nowa tablica, która różniła się od oryginału w dwóch aspektach:Jak pokazuje wspaniała odpowiedź Shane'a Maddena ,
mdadm --create
w większości przypadków nie niszczy danych! Po znalezieniu kolejności partycji i przesunięcia danych mogłem przywrócić tablicę i wyodrębnić z niej wszystkie dane.Wymagania wstępne
Nie miałem kopii zapasowych superbloków RAID, więc wiedziałem tylko, że była to macierz RAID5 na 8 partycjach utworzonych podczas instalacji Xubuntu 12.04.0. Miał system plików ext4. Inną ważną wiedzą była kopia pliku, który również był przechowywany w macierzy RAID.
Przybory
Do wykonania całej pracy wykorzystano live CD Xubuntu 12.04.1. W zależności od sytuacji możesz potrzebować niektórych z następujących narzędzi:
wersja mdadm, która pozwala określić przesunięcie danych
bgrep - wyszukiwanie danych binarnych
hexdump, e2fsck, mount i kalkulator szesnastkowy - standardowe narzędzia z repozytoriów
Zacznij od pełnej kopii zapasowej
Nazwy plików urządzeń, np.
/dev/sda2
/dev/sdb2
Itp., Nie są trwałe, dlatego lepiej zapisać numery seryjne dysków podane przezNastępnie podłącz zewnętrzny dysk twardy i wykonaj kopię zapasową każdej partycji macierzy RAID w następujący sposób:
Określ oryginalny układ RAID5
Różne układy są opisane tutaj: http://www.accs.com/p_and_p/RAID/LinuxRAID.html
Aby dowiedzieć się, jak pasy danych zostały zorganizowane w oryginalnej tablicy, potrzebujesz kopii losowo wyglądającego pliku, o którym wiesz, że był przechowywane w tablicy. Domyślnie używany obecnie rozmiar porcji
mdadm
to 512 KB. W przypadku tablicy N partycji potrzebny jest plik o rozmiarze co najmniej (N + 1) * 512 KB. Plik JPEG lub wideo jest dobry, ponieważ zapewnia stosunkowo unikatowe ciągi danych binarnych. Załóżmy, że nasz plik nazywa siępicture.jpg
. Czytamy 32 bajty danych w pozycjach N + 1, zaczynając od 100k i zwiększając o 512k:Następnie wyszukujemy wystąpienia wszystkich tych bajtów na wszystkich naszych surowych partycjach, więc łącznie (N + 1) * N poleceń, jak poniżej:
Te polecenia można uruchamiać równolegle dla różnych dysków. Skanowanie partycji 38 GB zajęło około 12 minut. W moim przypadku każdy 32-bajtowy ciąg został znaleziony tylko raz spośród wszystkich ośmiu dysków. Porównując odsunięcia zwrócone przez bgrep, uzyskuje się taki obraz:
Widzimy normalny układ symetryczny lewy , który jest domyślny
mdadm
. Co ważniejsze, teraz znamy kolejność partycji. Nie wiemy jednak, która partycja jest pierwsza w tablicy, ponieważ można je cyklicznie przenosić.Zwróć także uwagę na odległość między znalezionymi odsunięciami. W moim przypadku było to 512 KB. Rozmiar porcji może być faktycznie mniejszy niż ta odległość, w takim przypadku rzeczywisty układ będzie inny.
Znajdź oryginalny rozmiar porcji
Używamy tego samego pliku
picture.jpg
do odczytu 32 bajtów danych w różnych odstępach czasu. Wiemy z góry, że dane przy przesunięciu 100k leżą/dev/sdh2
, przy przesunięciu 612k jest na/dev/sdb2
, a na 1124k jest na/dev/sdd2
. To pokazuje, że wielkość porcji nie jest większa niż 512 KB. Sprawdzamy, czy nie jest mniejszy niż 512 KB. W tym celu zrzucamy testowanie z przesunięciem 356k i sprawdzamy, na której partycji on siedzi:Jest na tej samej partycji co offset 612k, co wskazuje, że wielkość porcji nie jest 256KB. W podobny sposób eliminujemy mniejsze porcje. Skończyło się na tym, że fragmenty 512 KB są jedyną możliwością.
Znajdź pierwszą partycję w układzie
Teraz znamy kolejność partycji, ale nie wiemy, która partycja powinna być pierwsza i jakie przesunięcie danych RAID zostało użyte. Aby znaleźć te dwie niewiadome, stworzymy macierz RAID5 z poprawnym układem porcji i małym przesunięciem danych, i szukamy początku naszego systemu plików w tej nowej macierzy.
Na początek tworzymy tablicę z prawidłową kolejnością partycji, którą znaleźliśmy wcześniej:
Sprawdzamy, czy zamówienie jest przestrzegane przez wystawienie
Teraz określamy przesunięcia znanych bajtów N + 1 w macierzy RAID. Na noc uruchamiam skrypt (Live CD nie pyta o hasło w sudo :):
Dane wyjściowe z komentarzami:
Na podstawie tych danych widzimy, że trzeci ciąg nie został znaleziony. Oznacza to, że porcja
/dev/sdd2
jest używana do parzystości. Oto ilustracja pozycji parzystości w nowej tablicy:Naszym celem jest ustalenie, z której partycji należy uruchomić tablicę, aby przesunąć porcje parzystości we właściwe miejsce. Ponieważ parzystość powinna zostać przesunięta o dwa fragmenty w lewo, sekwencja podziału powinna zostać przesunięta o dwa kroki w prawo. Dlatego poprawny układ dla tego przesunięcia danych to
ahbdcefg
:W tym momencie nasza macierz RAID zawiera dane we właściwej formie. Możesz mieć szczęście, że przesunięcie danych RAID jest takie samo jak w oryginalnej macierzy, a wtedy najprawdopodobniej będziesz w stanie zamontować partycję. Niestety to nie był mój przypadek.
Sprawdź spójność danych
Sprawdzamy, czy dane są spójne na pasku fragmentów, wyodrębniając kopię
picture.jpg
z tablicy. W tym celu znajdujemy przesunięcie 32-bajtowego ciągu o wartości 100k:Następnie odejmujemy od wyniku 100 * 1024 i używamy uzyskanej wartości dziesiętnej w
skip=
parametrze dladd
. Jestcount=
to rozmiarpicture.jpg
w bajtach:Sprawdź, czy
extract.jpg
to samo copicture.jpg
.Znajdź przesunięcie danych RAID
Drobna sprawa: domyślne przesunięcie danych dla
mdadm
wersji 3.2.3 wynosi 2048 sektorów. Ale z czasem wartość ta uległa zmianie. Jeśli pierwotna tablica używała mniejszego przesunięcia danych niż bieżącamdadm
, wówczasmdadm --create
bez--assume-clean
może zastąpić początek systemu plików.W poprzedniej sekcji utworzyliśmy macierz RAID. Sprawdź, jakie przesunięcie danych RAID miał, wydając dla niektórych poszczególnych partycji:
2048 512-bajtowych sektorów to 1 MB. Ponieważ wielkość porcji wynosi 512 KB, bieżące przesunięcie danych to dwie porcje.
Jeśli w tym momencie masz przesunięcie dwuczęściowe, prawdopodobnie jest ono wystarczająco małe i możesz pominąć ten akapit.
Tworzymy macierz RAID5 z przesunięciem danych o jeden fragment 512 KB. Rozpoczęcie jednego fragmentu wcześniej przesuwa parzystość o krok w lewo, dlatego kompensujemy przesunięcie sekwencji podziału o krok w lewo. Dlatego dla przesunięcia danych 512 KB prawidłowy układ to
hbdcefga
. Używamy wersjimdadm
obsługującej przesunięcie danych (patrz sekcja Narzędzia). To zajmuje przesunięcie w kilobajtach:Teraz szukamy prawidłowego superbloku ext4. Strukturę superbloku można znaleźć tutaj: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#The_Super_Block
Skanujemy początek tablicy pod kątem występowania liczby magicznej,
s_magic
a następnies_state
is_errors
. Do obejrzenia są:Przykładowe polecenie:
Magiczna liczba rozpoczyna 0x38 bajtów w superbloku, więc odejmujemy 0x38, aby obliczyć przesunięcie i zbadać cały superblok:
To wydaje się być prawidłowym superblokiem.
s_log_block_size
pole 0x18 ma wartość 0002, co oznacza, że rozmiar bloku wynosi 2 ^ (10 + 2) = 4096 bajtów.s_blocks_count_lo
pod 0x4 jest blokami 03f81480, co stanowi 254 GB. Wygląda dobrze.Teraz skanujemy występowanie pierwszych bajtów superbloku, aby znaleźć jego kopie. Zwróć uwagę na przerzucanie bajtów w porównaniu z wyjściem zrzutu heksowego:
Jest to idealnie dopasowane do oczekiwanych pozycji zapasowych bloków superblokowych:
Dlatego system plików zaczyna się od przesunięcia 0xdc80000, tj. 225792 KB od początku partycji. Ponieważ mamy 8 partycji, z których jedna służy do parzystości, dzielimy przesunięcie przez 7. Daje to 33030144 bajtów przesunięcia na każdej partycji, czyli dokładnie 63 porcje RAID. A ponieważ obecne przesunięcie danych RAID to jedna porcja, dochodzimy do wniosku, że pierwotne przesunięcie danych wynosiło 64 porcje lub 32768 KB. Przesunięcie
hbdcefga
63 razy w prawo daje układbdcefgah
.W końcu budujemy prawidłową macierz RAID:
Voilà!
źródło
Miałem podobny problem. Sformatowałem i ponownie zainstalowałem dysk OS / boot z czystą instalacją Ubuntu 12.04, a następnie uruchomiłem polecenie mdadm --create ... i nie mogłem go zamontować.
Powiedział, że nie ma prawidłowego superbloku lub partycji.
Co więcej, kiedy zatrzymałem nalot mdadm, nie mogłem już zamontować zwykłego urządzenia.
Byłem w stanie naprawić superblok za pomocą mke2fs i e2fsck:
Następnie pobiegł:
To przywróciło superblok, żebym mógł zamontować i odczytać dysk.
Aby tablica działała bez niszczenia superbloku lub partycji, użyłem kompilacji:
Po weryfikacji danych dodam drugi dysk:
źródło
Właśnie aktualizuję niektóre informacje podane wcześniej. Miałem 3-dyskową macierz RAID5 działającą poprawnie, gdy moja płyta główna uległa awarii. Tablica zawierała / dev / md2 jako partycję / home 1.2TB i / dev / md3 jako partycję / var 300GB.
Miałem dwie kopie zapasowe „ważnych” rzeczy i kilka przypadkowych rzeczy, które wziąłem z różnych części Internetu, które naprawdę powinienem było przejrzeć i selektywnie zrzucić. Większość kopii zapasowych została podzielona na pliki .tar.gz o wielkości 25 GB lub mniejszej, a także utworzono kopię zapasową oddzielnej kopii pliku / etc.
Reszta systemu plików była przechowywana na dwóch małych dyskach RAID0 o pojemności 38 GB.
Mój nowy komputer był podobny do starego sprzętu i uruchomiłem go po prostu podłączając wszystkie pięć dysków i wybierając stare ogólne jądro. Miałem więc pięć dysków z czystymi systemami plików, chociaż nie byłem pewien, czy dyski są w odpowiedniej kolejności, i musiałem zainstalować nową wersję Debian Jessie, aby mieć pewność, że będę mógł zaktualizować maszynę w razie potrzeby i uporządkować inne problemy.
Po zainstalowaniu nowego systemu ogólnego na dwóch dyskach Raid0 zacząłem ponownie układać tablice. Chciałem mieć pewność, że mam dyski w odpowiedniej kolejności. Powinienem był wydać:
Ale ja nie. Wygląda na to, że mdadm jest całkiem sprytny i ma identyfikator użytkownika, może dowiedzieć się, które dyski idą gdzie. Nawet jeśli bios oznacza / dev / sdc jako / sda, mdadm poprawnie go połączy (choć YMMV).
Zamiast tego wydałem:
mdadm --create /dev/md2 without the --assume-clean
i zezwoliłem na resynchronizację na / dev / sde1, aby zakończyć. Kolejnym błędem, jaki popełniłem, była praca na / dev / sdc1 zamiast na ostatnim dysku w / dev / md2, / sde1. Za każdym razem, gdy mdadm pomyśli, że jest problem, jest to ostatni dysk, który zostaje wyrzucony lub zsynchronizowany.Po tym mdadm nie mógł znaleźć żadnego superbloku, a e2fsck -n też nie mógł.
Po znalezieniu tej strony przeszedłem procedurę próby znalezienia sekwencji napędów (gotowe), sprawdzenia poprawności danych (zweryfikowano 6 MB pliku 9 MB), dostałem dyski we właściwej kolejności, cde, złapałem uuida z / md2 i / md3 ze starego pliku /etc/mdadm.conf i próbowałem asemblowania.
Cóż,
/dev/md3
zaczął imdadm --misc -D /dev/md3
pokazał trzy zdrowe partycje oraz dyski w odpowiedniej kolejności./dev/md2
też wyglądał dobrze, dopóki nie próbowałem zamontować systemu plików.System plików odmówił zamontowania, a e2fsck nie mógł znaleźć żadnych superbloków. Ponadto, podczas sprawdzania superbloków, jak opisano powyżej, całkowita liczba bloków znaleziona jako a880 0076 lub a880 0076 lub 5500 1176 nie zgadza się z pojemnością dysku wynoszącą 1199,79, zgłosiła mój mdadm. Również żadna z lokalizacji „superbloków” nie była zgodna z danymi w powyższych postach.
Utworzyłem kopię zapasową wszystkich plików / var i przygotowałem się do wyczyszczenia dysków. Aby sprawdzić, czy można wyczyścić tylko / md2, (w tym momencie nie miałem już nic do stracenia), wyłączam następujące elementy:
Wszystko wydawało się w porządku, z wyjątkiem zmiany na UUID. Po kilku kolejnych sprawdzeniach zapisałem 600 GB danych z kopii zapasowej na / dev / md2. Następnie odmontowano i próbował ponownie zamontować dysk:
Czy ty żartujesz? co z moim 600 GB na pliku?
Ah - łatwo naprawić. odkomentowano jedną linię w /etc/mdadm.conf
Yippie!
źródło