Jak odzyskać partycję BTRFS, która nie zostanie zamontowana?

13

Instalacja 12.04 nadal nie działa, a rozwiązaniem było zignorowanie przez instalatora partycji btrfs, której wcześniej używałem dla / home.

Teraz, gdy jest zainstalowany, próbowałem go zmusić do zamontowania partycji btrfs, aby uzyskać dostęp do moich 70 GB plików. Nie można go zamontować, a błędy btrfsck występują w następujących trzech wierszach:

parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456
parent transid verify failed on 31302336512 wanted 62455 found 62456

Czy ktoś może mi powiedzieć, jak uruchomić tę partycję? Przeczytałem online, że prawdopodobnie mogę odzyskać dane za pomocą btrfs-restore, ale nigdzie nie mogę znaleźć tego programu.

Tony
źródło

Odpowiedzi:

10

Najprostszy sposób

btrfs-zero-log /dev/sda5

Ten problem występuje, ponieważ transakcja (zapis lub usunięcie) utknęła w dzienniku dziennika, a dysk nie pasuje.

Jak to działa:

Więc kiedy dane są zapisywane jako pierwsze, są zapisywane w dzienniku, a następnie na dysku (lub w tym samym czasie, ale dziennik po prostu zapisuje metadane dotyczące nadchodzącego zapisu - nie jestem pewien ... potrzebuję więcej badań w tej części) ...

Tak czy inaczej, jeśli wyłączyć system w środku tego zapisu / kasowania lub zrobić coś hickups systemu (zdemontować USB, które posiada swój Btrfs punkt montowania), a następnie po powrocie, że mocowanie nie będzie działać nie powiedzie ( dmesg i btrfsck wola pokaże Ci błędy bardziej szczegółowo) ...

Patrząc na dmesg zobaczysz te same transid wiadomości.

Zobaczysz coś takiego:

parent transid verify failed on 109973766144 wanted 1823 found 1821

Oznacza to, że btrfs chciał transif 1826 (To było w dzienniku), ale na dysku zobaczył 1821. Tak więc dysk był o 2 transakcje poza synchronizacją z dziennikiem. Osobiście zaryzykowałbym tutaj brtfs-zero-log tylko dlatego, że są to tylko dwie transakcje. Ale, aby być w 100% bezpiecznym, jeśli są to twoje jedyne dane (tak na marginesie, jeśli masz krytyczne dane, NIGDY nie powinieneś mieć tylko 1 kopii, zawsze przechowuj kopię / kopię zapasową w bezpiecznym innym miejscu - obwiniając twórców btrfs uzasadnij brak odpowiedzialności osoby za brak kopii zapasowej - btrfs nie jest rozwiązaniem do tworzenia kopii zapasowych, jest to system plików - nic nie jest prawdziwym rozwiązaniem do tworzenia kopii zapasowych poza posiadaniem kopii w innym miejscu, gdzie - nawet parzystości lub dysków lustrzanych - prawdziwa kopia zapasowa jest siedząc gdzieś pod ziemią w Alpach, podczas gdy jego aktywna kopia znajduje się w biurze w Teksasie)

parent transid verify failed on 31302336512 wanted 62455 found 62456

Tutaj dziennik chce 62455, ale dysk ma przewagę 62456, więc w twoim przypadku po prostu wyczyściłem dziennik. Tym razem Journal nie zaktualizował się. Znowu powiedziałem ci, że jesteś bezpieczną rzeczą, jeśli to twoje jedyne dane i jej mega krytyczne (wstydź się), i najpierw wykonałbym poniższe operacje, aby być bezpiecznym.

Uruchomienie btrfsck / dev / sda5 (które przy okazji sprawdza tylko do odczytu, więc jest całkowicie bezpieczne, to jedyne opcje btrfsck, o które musisz się martwić) również pokaże ci te wiadomości.

Ale uważaj, jeśli te dane są krytyczne, najpierw bym to zrobił (jak powiedzieli inni mężczyźni)

mount -t btrfs -o rootflags=recovery,nospace_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o rootflags=recovery,nospace_cache,clear_cache /dev/sda3 /mnt/sda3

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

Następnie cp lub rsync wszystkie pliki do bezpiecznej lokalizacji, a następnie, gdy jest to bezpieczne, wykonaj btrfs-zero-log, jeśli to udana operacja, po prostu zmarnowałeś dużo czasu na tworzenie kopii zapasowej systemu (ale jeśli nie powiedzie się, po prostu zapisałeś swój tyłek)

Następnie, jeśli montowanie nie powiodło się, wykonaj przywracanie btrfs (zrzut systemu, ponieważ rozumiem, że jest to operacja możliwa do wznowienia, jednak od czasu do czasu pyta o Y lub Y, więc obserwuj wynik)

btrfs restore /dev/sda5 /USB

Następnie, gdy jest to bezpieczne (po zakończeniu przywracania btrfs), wykonaj dziennik btrfs-zero-log, jeśli operacja zakończyła się powodzeniem, zmarnowałeś dużo czasu na tworzenie kopii zapasowej systemu (ale jeśli nie powiedzie się, po prostu zapisałeś tyłek)

Najpierw możesz uruchomić ekran

screen /bin/bash

btrfs restore /dev/sda5 /USB

UWAGA NA STRONIE EKRANU

Aby odłączyć (polecenie nadal będzie działać): CONTROL-a, a następnie wpisz „: odłącz” bez cudzysłowów, a następnie naciśnij ENTER

Kolejny sposób na odłączenie: Następnie zamknij kit lub terminal, a on się odłączy (polecenie / przywracanie nadal będzie działać).

Aby to sprawdzić, po prostu ponownie wyświetl ekran:

screen -x

screen -x dołącza się do sesji, nawet jeśli jest odłączony, i w przeciwieństwie do -h mówi, dołącza się nawet jeśli jest już dołączony)

Jeśli masz kilka ekranów, screen -x powie, że musisz być bardziej szczegółowy, aby dołączyć do sesji:

screen -ls

Aby wyświetlić wszystkie sesje, łatwo to zapamiętać.

aby zobaczyć PID, możesz również to zrobić:

ps aux | grep screen

Gdy znajdziesz swój PID, uruchom następujący ekran:

screen -x PID

To zostanie dołączone do konkretnej sesji. Możesz mieć kilka sesji / kitów podłączonych do tego samego ekranu (będą wyświetlać ten sam tekst, możesz wpisać polecenia w jednym, a będą one dublowane na drugim kitie)

kossboss
źródło
7

Montuj przy rozruchu, używając opcji montowania root fs:

rootflags=recovery,nospace_cache

lub

rootflags=recovery,nospace_cache,clear_cache

Pełna lista opcji montowania btrfs powinna być tutaj https://btrfs.wiki.kernel.org/index.php/Mount_options i inne rzeczy mogą być również przydatne, takie jak noatime, nodatacow (naprawiono błąd jądra dla mnie dając mi szansa na skopiowanie moich plików).

Dodaj go do pliku grub.cfg / menu.lst lub wpisz podczas uruchamiania.

Nospace_cache sprawi, że wszystko będzie strasznie wolne. Po prostu uruchom komputer, poczekaj (długo), zamknij i uruchom normalnie.

Miałem to samo kilka dni temu, a powyższe to naprawiło. Ale potem pojawiły się pewne problemy z przestrzenią ... zgłoszone miejsce nie jest w 100%, ale wciąż można powiedzieć o braku miejsca.

==

Myślę, że możesz dodać te same opcje do swojego fstab, na przykład:

UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf /home btrfs defaults,recovery,nospace_cache,clear_cache,subvol=@home 0  
 2

Jeśli próbujesz odzyskać katalog / home zamontowany na partycji z UUID=0237alksfadg-lhdfkj3624-4fdfjb-9dsfe2d-dfddaf.

Piotr
źródło
Dlaczego dwa nospace_cache?
CVn
to była literówka, miała być wyczyszczona pamięć podręczna
Peter,
:) Właśnie zapisałeś kopię zapasową!
derflocki
1

Odpowiedź Petera rozwiązała dla mnie problem, choć nie na Ubuntu. Miałem /homepartycję btrfs, która oczywiście uległa uszkodzeniu. System nie uruchomił się, ponieważ był włączony fstab. Wszedłem w tryb konserwacji, wykasowałem linię z tą partycją i uruchomiłem się normalnie (miałem zapasową partycję ext4, której mogłem użyć jako /home).

Partycję zamontowałem ręcznie za pomocą następującego polecenia:

mount -t btrfs -o recovery,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3i był w stanie zapisać moje dane. Chociaż montaż nie zajął tak długo. DZIĘKUJE Peter.

Nikos
źródło
3
Możesz po prostu opublikować to jako komentarz do odpowiedzi Petera, mówiąc „To zadziałało”, a następnie po prostu oznaczyć to jako prawdziwą odpowiedź. w przeciwnym razie Peter nie dostanie żadnego „prawdziwego” kredytu (punktów rep)
Thomas Ward
1
mount -t btrfs -o ro,nospace_cache,nospace_cache /dev/sda3 /mnt/sda3

ro = tylko do odczytu

To praca dla mnie

Dan
źródło
1
Czy czytałeś komentarz Władcy Czasu do podobnego komentarza, który został dodany jako odpowiedź? Tutaj znowu jest, jeśli nie - „Możesz po prostu opublikować to jako komentarz do odpowiedzi Petera, mówiąc„ To zadziałało ”, a następnie po prostu oznaczyć to jako prawdziwą odpowiedź. W przeciwnym razie Peter nie uzyska żadnej„ prawdziwej ” kredyt (punkty rep) ”
geezanansa
1

Miałem ten sam problem. Po ponownym uruchomieniu nie byłem już w stanie zamontować partycji btrfs. Jednak żadne z wymienionych tu rozwiązań nie mogło go rozwiązać.

Naprawiłem to, aktualizując jądro z wersji 3.10 do 3.12. Po ponownym uruchomieniu partycja btrfs może zostać ponownie zamontowana.

Fabian Jakobs
źródło