BTRFS to system plików oparty na zakresie kopiowania (COW). Duże pliki są przechowywane w wielu zakresach danych; A po modyfikowaniu tych dużych plików, zakresy modyfikowania są kopiowane do nowych, pustych zakresów w innej lokalizacji urządzenia pamięci i są modyfikowane w nowej lokalizacji. Następnie zakres dużych plików jest ponownie połączony, aby wskazać zaktualizowane zakres. Stare zakresy nigdy nie są usuwane natychmiast.
W ten sposób funkcja kopiowania (COW) systemu plików BTRFS powoduje fragmentację. Fragmentacja oznacza, że zakresy danych dużych plików są rozproszone wokół całego urządzenia pamięci masowej. Nie są natychmiastowe. Tak więc wydajność (prędkość odczytu/zapisu) systemu plików może zostać zmniejszona.
Aby rozwiązać ten problem, konieczne jest od czasu do czasu defragment system plików BTRFS. W tym artykule pokazuje, jak defragować system plików BTRFS.
Skróty
Skróty (krótkie formy) zastosowane w tym artykule są następujące:
Wymagania wstępne
Aby wypróbować przykłady zawarte w tym artykule:
Mam dysk twardy 20 GB SDB na mojej maszynie Ubuntu. Utworzę system plików BTRFS na dysku twardym SDB.
$ sudo lsblk -e7Notatka: Twój dysk twardy/ds. SSD prawdopodobnie będzie miała inną nazwę niż moja, podobnie jak partycje. Pamiętaj, aby odtąd zastąpić je swoimi.
Możesz utworzyć system plików BTRFS na HDD/SSD (bez partycjonowania), jeśli masz zapasowy twardy. Możesz także utworzyć partycję na HDD/SSD i utworzyć tam system plików BTRFS.
Aby uzyskać pomoc w instalacji systemu plików BTRFS w Ubuntu, sprawdź artykuł Zainstaluj i użyj BTRFS na Ubuntu 20.04 LTS.
Aby uzyskać pomoc w instalacji systemu plików BTRFS w Fedora, sprawdź artykuł Zainstaluj i użyj BTRFS na Fedora 33.
Tworzenie systemu plików BTRFS
Możesz utworzyć system plików BTRFS na HDD/SSD (bez partycji HDD/SSD.
Aby utworzyć system plików BTRFS na SDB HDD (cała dysk twardy, bez partycji) i podaj etykietę systemu plików dane, Uruchom następujące polecenie:
$ sudo mkfs.BTRFS -L Data /Dev /SDBNa system plików BTRFS powinien być teraz utworzony na SDB HDD.
Utwórz katalog /dane Aby zamontować system plików BTRFS, który właśnie utworzyłeś za pomocą następującego polecenia:
$ sudo mkdir -v /daneAby zamontować system plików BTRFS utworzony na SDB HDD na /dane Directory, uruchom następujące polecenie:
$ sudo mount /dev /sdb /daneSystem plików BTRFS powinien być teraz zamontowany, jak widać na zrzucie ekranu poniżej:
$ df -h /daneDefragmentowanie systemu plików BTRFS ręcznie
Jak widać na zrzucie ekranu poniżej, skopiowałem dwa pliki na systemie plików BTRFS zamontowanych na /dane Directory w celu zademonstrowania procesu defragmentacji systemu plików BTRFS:
$ ls -lh /daneMożesz odprowadzać jeden plik lub cały podwolu/katalog rekurencyjnie.
Aby zdefragmentować pojedynczy plik /Data/Ubuntu-20.04.1-Live-Server-AMD64.ISO, Uruchomymy następujące polecenie:
$ sudo btrfs system plików defragment -vf /data /Ubuntu -20.04.1-Live-Server-AMD64.ISOPlik /Data/Ubuntu-20.04.1-Live-Server-AMD64.ISO powinno być defragmentowane.
Aby defragować każdy plik lub katalog /dane Katalog rekurencyjnie uruchom następujące polecenie:
$ sudo btrfs FileSystem defragment -rvf /DataJak widać, wszystkie pliki /dane Direktoryczne są defragmentowane.
W ten sam sposób, jeśli miałeś podwpos /Data/Osimages, Następnie możesz zdenerwować wszystkie pliki /Data/Osimages subvolume rekurencyjnie z następującym poleceniem:
$ sudo btrfs system plików defragment -rvf /data /osimagesKompresowanie systemu plików BTRFS podczas defragmentacji
BTRFS FileSystem umożliwia kompresję plików podczas ich defragmentacji.
Aby defragować wszystkie pliki w /dane katalog i kompresuj je za pomocą Zlib Algorytm kompresji w tym samym czasie, uruchom polecenie defragmentacji -czlib Opcja, jak następuje:
$ sudo Btrfs FileSystem defragment -rvf -czlib /DataAby defragować wszystkie pliki w /dane katalog i kompresuj je za pomocą Zstd Algorytm kompresji w tym samym czasie, uruchom polecenie defragmentacji -CZSTD Opcja, jak następuje:
$ sudo btrfs system plików defragment -rvf -czstd /dataAby defragować wszystkie pliki w /dane katalog i kompresuj je za pomocą LZO Algorytm kompresji w tym samym czasie, uruchom polecenie defragmentacji -Clzo Opcja, jak następuje:
$ sudo btrfs system plików defragment -rvf -clzo /danePliki w /dane KATALOG powinien być jednocześnie defragmentowany i kompresowany.
W ten sam sposób możesz również defragmentować i kompresować pliki podwole BTRFS.
Automatycznie defragmentowanie systemu plików BTRFS
Możesz włączyć automatyczną defragmentację w systemie plików BTRFS w czasie montażu. Ta funkcja systemu plików BTRFS zostanie automatycznie defragmentuje wszystkie pliki systemu plików BTRFS.
Aby zamontować system plików BTRFS utworzony na SDB HDD w /dane katalog z automatyczną defragmentacją włączoną w czasie rozruchu, musisz dodać wpis dla systemu plików BTRFS w /etc/fstab plik.
Najpierw znajdź UUID systemu plików BTRFS utworzonego na SDB HDD, jak następuje:
$ sudo blkid /dev /sdbJak widać, UUID systemu plików BTRFS utworzonego na SDB HDD jest 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE.
Będzie dla Ciebie inaczej. Pamiętaj, aby odtąd zastąpić go swoim.
Otworzyć /etc/fstab plik z Nano Edytor tekstu, w następujący sposób:
$ sudo nano /etc /fstabDodaj następujący wiersz do końca /etc/fstab plik:
UUID = 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE /DATA BTRFS AutodeFrag 0 0 0 0
Po zakończeniu naciśnij + X śledzony przez Y I Aby uratować /etc/fstab plik.
Aby zmiany zaczęły się uruchomić, ponownie uruchom komputer za pomocą następującego polecenia:
$ sudo restartJak widać, system plików BTRFS utworzony na SDB HDD jest zamontowany na /dane katalog z włączoną automatyczną defragmentacją.
Problemy z defragmentowaniem systemu plików BTRFS
Chociaż może się wydawać, że defragmentacja poprawia wydajność systemu plików, istnieją pewne problemy z defragmentowaniem systemu plików BTRFS.
Ponieważ BTRFS jest systemem plików kopiowania (COW), aby zrozumieć problemy z defragmentacją systemu plików BTRFS, musisz zrozumieć funkcję kopiowania systemu plików BTRFS.
Załóżmy, że masz duży plik (plik 1), który wykorzystuje 100 zakresów (możesz myśleć o zakresie jako bloków plików) systemu plików BTRFS. Jeśli utworzysz kolejną kopię tego dużego pliku (plik2) W tym samym systemie plików BTRFS zobaczysz, że nie jest używane dodatkowe miejsce na dysku. To dlatego, że pliki są identyczne, a 100 zakresów każdego pliku jest takie same. Tak więc system plików BTRFS używa tych samych zakresów dla obu plików.
Rysunek 1: plik 1 I plik2 są identyczne i dzielą się tym samym systemem systemu btrfs, aby zapisać miejsce na dysku
Teraz powiedzmy, zmodyfikowałeś jedną z kopii dużego pliku (plik2). Modyfikacja musi zmienić 10 ze 100 zakresów. System plików BTRFS skopiuje wymagane 10 zakresów w innej nieużywanej lokalizacji (powiedzmy, E101-E110) systemu plików i zmień je tam. Po zapisaniu zmian na dysku, system plików BTRFS ponownie łączy zakres, aby zmiany zostały odzwierciedlone w dużym pliku. Proces jest zilustrowany na poniższym rysunku:
Rysunek 2: 10 Zakres jest zmieniany w plik2. Tak więc zakresy są ponownie połączone w systemie plików BTRFS.
Z ryc. 1 i 2 możesz zrozumieć, jak działa kopia-na-wci (krowa) i jak system plików BTRFS używa kopii na zapis.
Teraz, gdy wiesz, jak działa funkcja systemu plików BTRFS (COW).
Wniosek
W tym artykule nauczyłeś się, jak defragmentować pojedynczy plik i pliki w katalogu/podwolumnie rekurencyjnym systemie plików BTRFS. Nauczyłeś się także, jak włączyć automatyczną defragmentację na systemie plików BTRFS w czasie montażu. Wreszcie w artykule omówiono niektóre problemy z defragmentowaniem systemu plików BTRFS.