Zastępuję uszkodzony dysk twardy w lustrzanym pliku btrfs.
btrfs device delete missing /[mountpoint]
trwa bardzo długo, więc zakładam, że w rzeczywistości przywraca dane do dysku zastępczego.
Czy jest jakiś sposób na monitorowanie postępu takiej operacji?
Niekoniecznie oczekuję ładnie wyglądającego GUI, ani nawet licznika%; i jestem gotów napisać kilka wierszy skryptu powłoki, jeśli to konieczne, ale nawet nie wiem, od czego zacząć szukać odpowiednich danych. btrfs filesystem show
na przykład po prostu się zawiesza, prawdopodobnie czeka na zakończenie operacji wyważenia, zanim wyświetli jakiekolwiek informacje o lustrzanym fs.
Balance on '/volume1' is running
28 out of about 171 chunks balanced (1156 considered), 84% left
. Niezwykle procent się odlicza.spowoduje to wyświetlenie czegoś takiego:
A jeśli zauważysz, że identyfikator urządzenia nr 4 wygląda nieco inaczej niż reszta. kiedy zrobisz „btrfs device delete missing / mntpoint”, wówczas zacznie się regeneracja metadanych / danych raidu niezbędnych do zwolnienia tego „brakującego” dysku.
jeśli zrobisz coś takiego
wtedy zobaczysz, że miejsce na „zaginionym” urządzeniu naruszającym stopniowo maleje, aż do zakończenia operacji i zostanie usunięte z fi.
źródło
BTRFS może potrzebować trochę czasu na odczyt lub zmianę kolejności danych przed zapisaniem danych na dysku, na którym chcesz je zapisać.
Możesz zobaczyć, ile czasu procesora przeznacza się na operacje BTRFS, w tym przywracanie równowagi, dodawanie, usuwanie, konwersję itp .:
Aby zobaczyć, jak zajęty jest każdy dysk, zainstaluj sysstat i uruchom:
Dodaj kilka opcji, aby iostat wyświetlał statystyki w megabajtach i aktualizował co 30 sekund:
Przykładowe dane wyjściowe ze szorowania, aby nie zapisywać w tym okresie:
Zainstaluj i uruchom munina, aby zobaczyć historyczne wykresy aktywności dysku i wiele innych informacji. https://www.digitalocean.com/community/tutorials/how-to-install-the-munin-monitoring-tool-on-ubuntu-14-04
źródło
Zastanawiałem się także, kiedy skończy się długotrwałe usuwanie, więc wymyśliłem ten mały fragment kodu powłoki:
To da ci fajny pasek postępu taki jak ten:
Ogólnym pomysłem jest użycie
pv
do wyświetlenia postępu. Ponieważ to polecenie pozwala tylko monitorować bajty przepływające przez potok, używamydd
do generowania odpowiedniej liczby zer i przesyłania ich do potokupv
.Zaletą tej metody jest to, że masz ładny pasek postępu. Ponieważ jednak wydaje się, że
btrfs
zawsze usuwa dane jeden GB na raz, potrzeba czasu, zanim można zaobserwować nową różnicę w rozmiarach bajtów.Aby rozwiązać ten problem, flaga
-a
jest dodawana do domyślnych flag,pv
aby wyświetlać średnią szybkość transmisji (ponieważ normalna bieżąca szybkość transmisji będzie wynosić 0 przez większość czasu).Zdaję sobie sprawę, że nie jest to najlepsze rozwiązanie, ale najlepsze, jakie mogłem wymyślić. Jeśli ktoś ma pomysły na ulepszenia, daj mi znać! :)
źródło