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)
nospace_cache
?