To jest „kontynuacja” odpowiedzi ewwhite:
Będziesz musiał przepisać swoje dane do rozszerzonego zpool, aby je ponownie zrównoważyć
Napisałem skrypt PHP ( dostępny na github ), aby zautomatyzować to na moim hoście Ubuntu 14.04.
Wystarczy zainstalować narzędzie PHP CLI sudo apt-get install php5-cli
i uruchomić skrypt, przekazując ścieżkę do danych puli jako pierwszy argument. Na przykład
php main.php /path/to/my/files
Najlepiej byłoby uruchomić skrypt dwukrotnie we wszystkich danych w puli. Pierwsze uruchomienie zrównoważy wykorzystanie dysku, ale poszczególne pliki zostaną nadmiernie przydzielone do dysków, które zostały dodane jako ostatnie. Drugie uruchomienie zapewni, że każdy plik zostanie „sprawiedliwie” rozłożony na dyski. Mówię uczciwie zamiast równomiernie, ponieważ będzie on równomiernie rozłożony tylko wtedy, gdy nie miksujesz pojemności dysku, tak jak ja z moją rajdą 10 par różnych rozmiarów (lustro 4 TB + lustro 3 TB + lustro 3 TB).
Powody używania skryptu
- Muszę rozwiązać problem „na miejscu”. Np. Nie mogę zapisać danych do innego systemu, usuń je tutaj i napisz wszystko ponownie.
- Wypełniłem moją pulę w ponad 50%, więc nie mogłem po prostu skopiować całego systemu plików jednocześnie przed usunięciem oryginału.
- Jeśli istnieją tylko niektóre pliki, które muszą działać dobrze, można po prostu uruchomić skrypt dwa razy nad tymi plikami. Drugi przebieg jest jednak skuteczny tylko wtedy, gdy uda mu się zrównoważyć wykorzystanie dysków.
- Mam dużo danych i chcę widzieć oznaki postępu.
Jak sprawdzić, czy osiągnięto równomierne wykorzystanie dysku?
Używaj narzędzia iostat przez pewien czas (np. iostat -m 5
) I sprawdzaj zapisy. Jeśli są takie same, osiągnąłeś równomierny spread. Nie są idealnie nawet na poniższym zrzucie ekranu, ponieważ korzystam z pary 4 TB z 2 parami dysków 3 TB w RAID 10, więc dwa 4 zostaną zapisane nieco więcej.
Jeśli wykorzystanie dysku jest „niezrównoważone”, iostat pokaże poniżej coś więcej, jak zrzut ekranu, na którym nowe dyski są zapisywane nieproporcjonalnie. Możesz także powiedzieć, że są to nowe dyski, ponieważ odczyty mają wartość 0, ponieważ nie zawierają na nich danych.
Skrypt nie jest doskonały, tylko obejście, ale w międzyczasie działa dla mnie, dopóki ZFS pewnego dnia nie wdroży funkcji równoważenia, takiej jak BTRFS (kciuki).