Po wielu majstrowaniach i eksperymentach znalazłem rozwiązanie, choć z dość dużym kompromisem.
Po pierwsze, opcje, które musiałem wykluczyć:
Posiadanie drugiego zewnętrznego serwera ZFS z pulą lustrzaną nie było opcją ze względu na koszty. Gdyby była to opcja, byłoby to zdecydowanie najlepsze podejście, wykorzystujące wysyłanie / odbieranie ZFS do wysyłania migawek do zdalnej puli.
Mając drugą, lustrzaną pulę ZFS, z której mógłbym usunąć dyski, aby zabrać je do domu. Jest to bardziej wykonalne niż pierwsza opcja, ale potrzebowałbym drugiej puli, aby zawsze mieć dwa dyski u klienta (lub użyć dwóch kopii danych na jednym dysku u klienta). Obecnie mam cztery dyski i nie ma już miejsca na jedną piątą na serwerze. To byłoby uczciwe podejście, ale wciąż nie idealne.
Za pomocą ZFS podłącz i odłącz, aby obrócić dysk kopii zapasowej do i z lustrzanej puli. Działa to dobrze, ale musi wykonywać pełny resilver za każdym razem, gdy dysk jest dodawany. To trwa niedopuszczalnie długo, więc nie mogłem na tym polegać.
Moje rozwiązanie jest podobne do używania attach
i detach
, jakkolwiek używa online
i offline
. Ma to tę zaletę, że wykonuje resilvering delta w porównaniu do pełnego resilveringu, ale wadą jest to, że pula zawsze zgłasza DEGRADED
stan (pula zawsze ma dwa dyski; obracające się dyski zewnętrzne są zaznaczone, offline
gdy znajdują się w zdalnym magazynie i resilver, a następnie wchodzą w tryb online kiedy są na miejscu).
Krótkie podsumowanie i przegląd mojej konfiguracji:
Mam jeden serwer ZFS i cztery identyczne dyski. ZFS jest skonfigurowany do korzystania z puli lustrzanej. Dwa z czterech dysków są stałymi członkami tej puli. Pozostałe dwa dyski się obracają; jeden jest zawsze w magazynie zewnętrznym, drugi jest częścią puli, która ma służyć jako gotowa kopia zapasowa.
Kiedy przychodzi czas na obracanie kopii zapasowych:
Czekam na zfs scrub
zakończenie, aby upewnić się, że dysk kopii zapasowej jest wolny od błędów
I zfs offline
dysk, który zostanie pobrany zdalnie. Po jego wyłączeniu musiałbym go rozwinąć hdparm -Y /dev/id
. Po minucie częściowo wyjmuję sanie dyskowe (na tyle, aby zapewnić utratę mocy), a następnie daję mu kolejną minutę przed całkowitym wyciągnięciem napędu, aby upewnić się, że przestał się obracać. Dysk trafia do torby statycznej, a następnie do etui ochronnego i wychodzi poza miejsce.
Przynoszę drugi dysk zewnętrzny. Zostaje zainstalowany w zasobniku Hotswap i obraca się. Używam zfs online
do przywracania dysku do puli i rozpoczynam częściowe resilverowanie, aby było współbieżne.
Ten system gwarantuje, że w danym momencie mam dwa ONLINE
dyski lustrzane i jeden OFFLINE
dysk zdalny (który został wyczyszczony). Czwarty dysk jest albo przeskalowany, albo w trybie online, co ma tę zaletę, że w przypadku awarii działającego dysku prawdopodobnie pula będzie nadal składać się z dwóch dysków online.
Działa dobrze przez ostatnie kilka tygodni, ale nadal uważam to za hackish podejście. Sprawdzę, czy napotkam jakieś poważne problemy.
Aktualizacja: Po kilku miesiącach pracy z tym stwierdziłem, że w moim rzeczywistym użyciu resilvering zajmuje tyle samo czasu na odłączenie / dołączenie i offline / online. W moich testach nie sądzę, żebym uruchomił szorowanie - mam przeczucie, że jeśli dysk jest niedostępny dla szorowania, to wymaga pełnej resilver.