Jak defragmentować system plików XFS

Jak defragmentować system plików XFS
Fragmentacja jest od dawna problemem, jeśli chodzi o przechowywanie. Powstaje, gdy, z powodu przedłużającego się użycia, media magazynowe dostają fragmenty przydzielonych bloków o wolnej przestrzeni. Dzieje się tak, ponieważ różne programy żądają pamięci w różnej kolejności, a następnie uwolnić pamięć w różnych momentach. Posiadanie fragmentów nie do zorganizowanej przestrzeni pomiędzy danymi zmniejsza całkowitą dostępną przestrzeń na dysku (wydajność przechowywania), a także wydajność dysku, ponieważ dane nie są przechowywane w dużym ciągłym fragmencie, ale rozmieszczone na dysku.

Ten problem jest szczególnie widoczny w mediach magnetyczny. Spróbujmy oddzielić system plików XFS w tym poście.

Konfiguracja piaskownicy

Po pierwsze, aby eksperymentować z systemem plików XFS, postanowiłem utworzyć test BEDBENT zamiast pracować z danymi krytycznymi na dysku. Ten test testowy składa się z maszyny wirtualnej Ubuntu, do której podłącza się dysk wirtualny, zapewniając surową pamięć. Możesz użyć VirtualBox do utworzenia maszyny wirtualnej, a następnie utworzyć dodatkowy dysk do przymocowania do maszyny wirtualnej

Po prostu przejdź do ustawień maszyn wirtualnych i poniżej Ustawienia → Przechowywanie Sekcja Możesz dodać nowy dysk do kontrolera SATA, możesz utworzyć nowy dysk. Jak pokazano poniżej, ale upewnij się, że maszyna wirtualna jest wyłączona, kiedy to zrobisz.

Po utworzeniu nowego dysku włącz maszynę wirtualną i otwórz terminal. Komenda lsblk wymienia wszystkie dostępne urządzenia blokowe.

$ lsblk
SDA 8: 0 0 60G 0 Dysk
├tsda1 8: 1 0 1m 0 część
└tsda2 8: 2 0 60g 0 część /
SDB 8:16 0 100G 0 Dysk
sr0 11: 0 1 1024m 0 rom

Oprócz głównego urządzenia blokowego SDA, Tam, gdzie system operacyjny jest zainstalowany, jest teraz nowe urządzenie SDB. Szybko utwórzmy z niego partycję i sformatuj ją za pomocą systemu plików XFS.

Otwórz rozstanie narzędzie jako użytkownik root:

$ rozstał -a optymalny /dev /sdb

Utwórzmy najpierw tabelę partycji za pomocą MKLABEL, po tym następuje utworzenie pojedynczej partycji z całego dysku (który ma rozmiar 107 GB). Możesz sprawdzić, czy partycja jest tworzona, wymieniając ją za pomocą polecenia drukuj:

(rozdzielny) MKLABEL GPT
(rozdzielny) Mkpart Primary 0 107
(rozdzielenie) wydruku
(rozdzielił się) zrezygnować

Okej, teraz widzimy za pomocą LSBLK, że pod urządzeniem SDB znajduje się nowe urządzenie blokowe o nazwie SDB1.

Sformatujmy tę pamięć jako XFS i zamontuj go w katalogu /mnt. Ponownie wykonaj następujące działania jako root:

$ mkfs.xfs /dev /sdb1
$ Mount /dev /sdb1 /mnt
$ df -h

Ostatnie polecenie wydrukuje wszystkie zamontowane systemy plików i możesz sprawdzić, czy /dev /sdb1 jest zamontowany na /mnt.

Następnie piszemy wiązkę plików jako manekin do defragmentacji tutaj:

$ dd if =/dev/urandom o =/mnt/myfile.liczba txt = 1024 BS = 1024

Powyższe polecenie zapisałoby plik myfile.TXT o rozmiarze 1 MB. Możesz zautomatyzować to polecenie w prostej pętli za pomocą BASH i generować więcej takich plików. Rozłóż je w różnych katalogach, jeśli chcesz. Usuń kilka z nich losowo. Wykonaj to wszystko w systemie plików XFS (zamontowany at /mnt), a następnie sprawdź fragmentację. Wszystko to jest oczywiście opcjonalne.

Defragment swój system plików

Pierwszą rzeczą, którą musimy zrobić, to dowiedzieć się, jak sprawdzić ilość fragmentacji. Na przykład system plików XFS, który utworzyliśmy wcześniej, znajdował się w węźle urządzenia /dev /sdb. Możemy użyć narzędzia XFS_DB (oznacza debugowanie XFS), aby sprawdzić poziom fragmentacji.

$ xfs_db -c frag -r /dev /sdb1

Flaga -C przyjmuje różne polecenia, w których jest polecenie fraga, aby sprawdzić poziom fragmentacji. Flaga -R używana do upewnienia się, że operacja jest całkowicie tylko odczytu.

Jeśli stwierdzimy, że w tym systemie plików jest fragmentacja, uruchamiamy polecenie XFS_FSR w węźle urządzenia:

$ xfs_fsr /dev /sdb1

To ostatnie polecenie jest wszystkim, aby zdefragmentować system plików, możesz dodać to jako cronjob, który regularnie monitoruje Twój system plików. Ale robienie tego dla XFS nie ma sensu. Połączenie XFS oparte na zakresie zapewnia, że ​​problemy takie jak fragmentacja pozostaje minimalna.

Przypadków użycia

Przypadki użycia, w których należy się najbardziej martwić o fragmentację systemu plików, obejmują aplikacje, w których wiele małych fragmentów danych jest pisanych i przepisywanych. Baza danych jest klasycznym przykładem tego, a bazy danych są znane z pozostawienia wielu „dziur” w pamięci. Bloki pamięci nie są ciągle wypełnione, dzięki czemu ilość dostępnej przestrzeni jest coraz mniejsza w czasie.

Problem pojawia się nie tylko pod względem zmniejszonej przestrzeni użytecznej, ale także pod względem zmniejszonych IOP, które mogą zaszkodzić wydajności Twojej aplikacji. Posiadanie skryptu do ciągłego monitorowania poziomu fragmentacji jest konserwatywnym sposobem utrzymania systemu. Nie chcesz, aby zautomatyzowany skrypt losowo uruchomił defragmentowanie systemu plików, szczególnie gdy jest używany przy szczytowym obciążeniu.