Czy istnieje sposób na monitowanie ZFS o redystrybucję danego systemu plików na wszystkich dyskach w jego zpool?
Myślę o scenariuszu, w którym mam wolumin ZFS o stałym rozmiarze, który jest eksportowany jako LUN przez FC. Obecny zpool jest mały, tylko dwa dyski dublowane 1 TB, a zvol ma łącznie 750 GB. Gdybym nagle zwiększył rozmiar zpool do, powiedzmy, 12 dysków 1 TB, wierzę, że zvol nadal byłby skutecznie „umieszczony” tylko na dwóch pierwszych wrzecionach.
Biorąc pod uwagę, że więcej wrzecion = więcej IOPS, jakiej metody mógłbym użyć do „redystrybucji” Zvola na wszystkie 12 wrzecion, aby z nich skorzystać?
zfs send | zfs recv
Nie ma powodu, aby Zvol był przechowywany tylko na urządzeniach początkowych. Jeśli powiększysz pulę, ZFS obejmie zaktualizowane dane na wszystkich dostępnych urządzeniach bazowych. Nie ma stałego partycjonowania w ZFS.
źródło
To jest „kontynuacja” odpowiedzi ewwhite:
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ładphp 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
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).
źródło
Cóż, to trochę włamanie, ale biorąc pod uwagę, że zatrzymałeś maszynę za pomocą zvol, możesz zfs wysłać system plików do lokalnego pliku na localhost o nazwie bar.zvol, a następnie ponownie otrzymać system plików. To powinno przywrócić dane dla Ciebie.
źródło
najlepszym rozwiązaniem, jakie znalazłem, było zduplikowanie połowy danych w rozszerzonej puli, a następnie usunięcie oryginalnych zduplikowanych danych.
źródło