BTRFS er et utstrekningsbasert copy-on-write (COW) filsystem. Store filer lagres i flere dataomfang; Og når disse store filene blir endret, blir omfanget som blir endret kopiert til nye, tomme omfang på et annet sted av lagringsenheten og endres på det nye stedet. Deretter blir omfanget av de store filene koblet på nytt for å peke på de oppdaterte omfangene. De gamle omfangene blir aldri fjernet øyeblikkelig.
Slik har kopien av kopiering (COW) i BTRFS-filsystemet forårsaker fragmentering. Fragmentering betyr at dataomtrengene av store filer er spredt rundt hele lagringsenheten. De er ikke øyeblikkelige. Så ytelsen (lese/skrivehastighet) på filsystemet kan reduseres.
For å løse dette problemet er det nødvendig å defragmentere BTRFS -filsystemet innimellom. Denne artikkelen viser deg hvordan du defragmenter BTRFS -filsystemet.
Forkortelser
Forkortelsene (korte skjemaer) som brukes i denne artikkelen er som følger:
Forutsetninger
For å prøve ut eksemplene som er inkludert i denne artikkelen:
Jeg har en 20 GB HDD SDB på Ubuntu -maskinen min. Jeg vil lage et BTRFS -filsystem på HDD SDB.
$ sudo lsblk -e7Merk: Din HDD/SSD vil sannsynligvis ha et annet navn enn mitt, og det samme vil partisjonene. Så husk å erstatte dem med dine fra nå av.
Du kan opprette et BTRFS -filsystem på HDD/SSD (uten partisjonering) hvis du har en ekstra HDD/SSD. Du kan også opprette en partisjon på HDD/SSD og opprette et BTRFS -filsystem der.
For hjelp med å installere BTRFS -filsystemet i Ubuntu, sjekk ut artikkelinstallasjonen og bruk BTRF -er på Ubuntu 20.04 LTS.
For hjelp med å installere BTRFS -filsystemet i Fedora, sjekk ut artikkelinstallasjonen og bruk BTRFS på Fedora 33.
Opprette et BTRFS -filsystem
Du kan opprette et BTRFS -filsystem på HDD/SSD (upartisjonert) eller på din HDD/SSD -partisjon.
Å lage et BTRFS -filsystem på SDB HDD (hele HDD, ingen partisjoner) og gi den filsystemetiketten data, Kjør følgende kommando:
$ sudo mkfs.btrfs -l data /dev /sdbEt BTRFS -filsystem skal nå opprettes på SDB HDD.
Lag katalogen /data For å montere BTRFS -filsystemet har du nettopp opprettet med følgende kommando:
$ sudo mkdir -v /dataÅ montere BTRFS -filsystemet som er opprettet på SDB HDD på /data Katalog, kjør følgende kommando:
$ sudo mount /dev /sdb /dataBTRFS -filsystemet skal nå monteres, som du kan se på skjermdumpen nedenfor:
$ df -h /dataDefragmentering av et BTRFS -filsystem manuelt
Som du kan se på skjermbildet nedenfor, har jeg kopiert to filer på BTRFS -filsystemet montert på /data Katalog for å demonstrere prosessen med BTRFS -filsystem -defragmentering:
$ ls -lh /dataDu kan defragmentere en enkelt fil eller et helt undervolum/katalog rekursivt.
Å defragmentere enkeltfilen /data/ubuntu-20.04.1-liv-server-amd64.ISO, Vi kjører følgende kommando:
$ sudo btrfs filesystem defragment -vf /data /ubuntu -20.04.1-liv-server-amd64.ISOFilen /data/ubuntu-20.04.1-liv-server-amd64.ISO skal defragmenteres.
Å defragmentere hver fil eller katalog for /data Katalog rekursivt, kjør følgende kommando:
$ sudo btrfs filesystem defragment -rvf /dataSom du kan se, alle filene til /data Katalogen er defragmentert.
På samme måte, hvis du hadde undervolumet /data/osimages, Da kan du frage alle filene til /data/osimages Subvolume rekursivt med følgende kommando:
$ sudo btrfs filesystem defragment -rvf /data /osimagesKomprimerer et BTRFS -filsystem mens defragmentering
BTRFS -filsystemet lar deg komprimere filer mens du defragmenterer dem.
Å defragmentere alle filene i /data katalog og komprimere dem med Zlib komprimeringsalgoritme samtidig, kjør defragment -kommandoen med -Czlib Alternativ, som følger:
$ sudo btrfs filesystem defragment -rvf -czlib /dataÅ defragmentere alle filene i /data katalog og komprimere dem med ZSTD komprimeringsalgoritme samtidig, kjør defragment -kommandoen med -CZSTD Alternativ, som følger:
$ sudo btrfs filesystem defragment -rvf -czstd /dataÅ defragmentere alle filene i /data katalog og komprimere dem med LZO komprimeringsalgoritme samtidig, kjør defragment -kommandoen med -Clzo Alternativ, som følger:
$ sudo btrfs filesystem defragment -rvf -clzo /dataFilene i /data Katalogen skal defragmenteres og komprimeres samtidig.
På samme måte kan du også defrage og komprimere filene til et BTRFS -undervolum.
Defragmentering av et BTRFS -filsystem automatisk
Du kan aktivere automatisk defragmentering på BTRFS -filsystemet ditt på monteringstidspunktet. Denne funksjonen i BTRFS -filsystemet vil defragmentere alle filene på BTRFS -filsystemet ditt automatisk.
Å montere BTRFS -filsystemet som er opprettet på SDB HDD i /data Katalog med automatisk defragmentering aktivert ved oppstartstidspunktet, må du legge til en oppføring for BTRFS -filsystemet i /etc/fstab fil.
Først, finn UUID av BTRFS -filsystemet som er opprettet på SDB HDD, som følger:
$ sudo blkid /dev /sdbSom du kan se, er UUID av BTRFS -filsystemet opprettet på SDB HDD er 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE.
Det vil være annerledes for deg. Så husk å erstatte den med din fra nå av.
Åpne /etc/fstab fil med Nano Text Editor, som følger:
$ sudo nano /etc /fstabLegg til følgende linje til slutten av /etc/fstab fil:
UUID = 60AFC092-E0FA-4B65-81FD-5DFD7DD884DE /DATA BTRFS AUTODEFRAG 0 0
Når du er ferdig, trykk + X etterfulgt av Y og For å redde /etc/fstab fil.
For at endringene skal tre i kraft, start datamaskinen på nytt med følgende kommando:
$ sudo omstartSom du kan se, BTRFS -filsystemet opprettet på SDB HDD er montert på /data Katalog med automatisk defragmentering aktivert.
Problemer med defragmentering av et BTRFS -filsystem
Selv om det kan se ut til at defragmentering forbedrer filsystemets ytelse, er det noen problemer med å defragmentere et BTRFS -filsystem.
Siden BTRFS er et kopiering av kopiering (COW), for å forstå problemene med BTRFS-filsystem-defragmentering, må du forstå kopien-på-skriv-funksjonen i BTRFS-filsystemet.
Anta at du har en stor fil (fil1) som bruker 100 omfang (du kan tenke på omfang som filblokker) av et BTRFS -filsystem. Hvis du oppretter en annen kopi av den store filen (File2) I samme BTRFS -filsystem vil du se at det ikke brukes ekstra diskplass. Det er fordi filene er identiske, og de 100 omfangene av hver fil er de samme. Så BTRFS -filsystemet bruker samme omfang for begge filene.
Figur 1: fil1 og File2 er identiske og deler de samme BTRFS -filsystemets omfang for å spare diskplass
Nå, for eksempel, har du endret et av kopiene av den store filen (File2). Modifiseringen må endre 10 av 100 omfang. BTRFS -filsystemet vil kopiere de nødvendige 10 omfangene på et annet ubrukt sted (si, E101-E110) av filsystemet og endre dem der. Når endringene er skrevet til disken, vil BTRFS-filsystemet koble om omfanget av omfangene slik at endringene gjenspeiles i den store filen. Prosessen er illustrert i figuren nedenfor:
Figur 2: 10 Utgiftene endres i File2. Så omfanget blir koblet på nytt i BTRFS-filsystemet.
Fra figur 1 og 2 kan du forstå hvordan Copy-on-Write (Cow) fungerer og hvordan BTRFS-filsystemet bruker Copy-on-Write (COW) for å spare diskplass.
Nå som du vet hvordan Copy-on-Write (COW) -funksjonen i BTRFS-filsystemet fungerer, vil du forstå problemene med defragmentering av et BTRFS-filsystem.
Konklusjon
I denne artikkelen lærte du hvordan du fragner en enkelt fil og filene i en katalog/undervolum rekursivt av et BTRFS -filsystem. Du lærte også hvordan du aktiverer automatisk defragmentering på et BTRFS -filsystem på monteringstidspunktet. Til slutt diskuterte artikkelen noen av problemene med defragmentering av et BTRFS -filsystem.