Mała ilość historii:
Mam mały system plików multimedialnych, w którym przechowuję różne filmy i programy telewizyjne używane do konfiguracji HTPC. Zostało to pierwotnie skonfigurowane przy użyciu btrfs
zewnętrznego dysku WD 1 TB.
Później zdecydowałem się na zakup innego dysku, aby dać temu systemowi plików możliwość kopiowania RAID1. Ten dysk to Seagate Barracuda (2 TB, BARRACUDA 7200.14 FAMILY). Niestety nie był to dobry wybór napędu. Dysk zaczął wkrótce rozwijać dużą liczbę błędów odczytu, chociaż BTRFS był w stanie je naprawić.
Ostatnio wzrosła liczba błędów odczytu z tego dysku, a jego stan stale się pogarsza. BTRFS zaczyna się teraz zawieszać:
kernel: RSP: 0018:ffff88005f0e7cc0 EFLAGS: 00010282
kernel: RIP: 0010:[<ffffffffa0081736>] [<ffffffffa0081736>] btrfs_check_repairable+0xf6/0x100 [btrfs]
kernel: task: ffff88001b5c4740 ti: ffff88005f0e4000 task.ti: ffff88005f0e4000
kernel: Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
kernel: CPU: 1 PID: 3136 Comm: kworker/u8:3 Tainted: G O 4.5.3-1-ARCH #1
kernel: invalid opcode: 0000 [#1] PREEMPT SMP
kernel: kernel BUG at fs/btrfs/extent_io.c:2309!
kernel: ------------[ cut here ]------------
kernel: BTRFS info (device sdc1): csum failed ino 73072 extent 1531717287936 csum 3335082470 wanted 3200325796 mirror 0
kernel: ata3: EH complete
kernel: BTRFS error (device sdc1): bdev /dev/sda3 errs: wr 0, rd 18, flush 0, corrupt 0, gen 0
kernel: blk_update_request: I/O error, dev sda, sector 2991635296
Chciałbym usunąć wadliwy dysk z macierzy RAID1, wracając do braku nadmiarowości na jednym dysku. Niestety wydaje się, że brakuje dokumentacji, jak to zrobić.
Wiem, że można uruchomić następujące czynności:
sudo btrfs balance start -dconvert=single /media
przekonwertować profil danych do single
trybu, ale nie jestem pewien, gdzie GDZIE dane zostaną umieszczone. Ponieważ jeden z dysków ulega awarii, chciałbym być w stanie zapewnić, że BTRFS nie usunie sumiennie wszystkich danych z dobrego dysku i umieści jedną kopię na złym dysku - zamiast tego chciałbym po prostu zachowywać się tak, jakby drugi dysk nigdy nie istniał (jak w, przekonwertować z powrotem do mojej starej konfiguracji)
To nie działa:
$ sudo btrfs device delete /dev/sda3 /media
ERROR: error removing device '/dev/sda3': unable to go below two devices on raid1
Co mam zrobić Pomoc byłaby bardzo mile widziana.
TL; DR: zacząłem z 1 dyskiem w BTRFS single
, dodałem inny dysk, sprawiłem , że RAID1
inny dysk jest teraz w błędzie, w jaki sposób powrócić do tylko jednego dysku (w szczególności znanego dobrego) z single
?
dconvert=single
dla jednego fragmentu robi tylko to, czego się obawiałem i usuwa znaną dobrą kopię. :(Odpowiedzi:
W porządku, zrozumiałem to za pomocą tego linku Trello . Jeśli ktoś chce to zrobić, oto procedura.
Procedura
Z macierzy RAID1 dwóch dysków, z
/dev/sda
których jeden jest wadliwy, a drugi/dev/sdc
znany jako dobry:/etc/fstab
, uruchom ponownie . Zasadniczo chcemy, aby btrfs zapomniał o istnieniu tej tablicy, ponieważ istnieje błąd, w którym nadal będzie próbował użyć jednego z dysków, jeśli jest odłączony.Teraz, gdy tablica jest odmontowana, wykonaj:
echo 1 | sudo tee /sys/block/sda/device/delete
zastępując
sda
wadliwą nazwą urządzenia. Powoduje to, że dysk się obraca (powinieneś to sprawdzić w dmesg) i staje się niedostępny dla jądra.Alternatywnie : po prostu wyjmij dysk z komputera przed uruchomieniem! Nie zdecydowałem się na tę metodę, ponieważ powyższe działa dla mnie dobrze.
-o degraded
trybie.sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint
. Spowoduje to reorganizację zakresu na znanym dobrym dysku, przekształcając je wsingle
(inne niż RAID). Zajmie to prawie dzień, w zależności od prędkości dysku i wielkości macierzy. (mój miał ~ 700 GiB i został ponownie zbilansowany w tempie 1 1GiB na minutę) Na szczęście operacja ta może zostać wstrzymana i utrzyma tablicę w trybie online, gdy się pojawi.sudo btrfs device remove missing /mountpoint
polecenie usunięcia „brakującego” wadliwego urządzenia.sudo btrfs balance start -mconvert=dup /mountpoint
aby przywrócić nadmiarowość metadanych. To zajmuje kilka minut w moim systemie.single
trybie, z usuniętą nadmiarowością.Rozwiązywanie problemów
źródło
,soft
po każdym,convert=
aby pominąć fragmenty, które mają już profil docelowy (którym powinny być wszystkie).Dzięki za twój post. Wpadłem na pomysł, że mogę przetestować nalot, wyjąć dysk z wnęki Hotswap, użyć innego dysku, a następnie ponownie wsadzić dysk RAID. Z perspektywy czasu był to zły pomysł i teraz potrzebuję mojej zatoki Hotswap.
Oto co znalazłem. Jako root:
Zwróć uwagę na devid wymienione dla każdego dysku. Man for brtrfs balance doprowadził mnie do opcji devid, podjął kilka prób, aby dowiedzieć się, jak działają filtry (początkowo próbowałem devid = / dev / sdb1). Więc twoja pierwsza próba będzie wyglądać mniej więcej tak.
Co dało mi błąd.
Oto błąd z dmesg:
Więc to jest finał, który zadziałał:
Mam nadzieję, że pomoże to komuś innemu.
źródło
btrfs replace
.devid=
, co-sconvert
aby przekonwertować fragmenty systemu.|
zamiast strony,
podręcznika do bilansu:profiles=<profiles>
Balances only block groups with the given profiles. Parameters are a list of profile names separated by "|" (pipe)