Btrfs

Sådan defragmenteres et Btrfs-filsystem

Sådan defragmenteres et Btrfs-filsystem

Btrfs er et omfangsbaseret CoW-filsystem (Copy-on-Write). Store filer gemmes i flere dataudvidelser; og når disse store filer ændres, kopieres de udvidelser, der skal ændres, til nye, tomme udgaver på et andet sted på lagerenheden og ændres på den nye placering. Derefter linkes omfanget af de store filer igen for at pege på de opdaterede udvidelser. De gamle strækninger fjernes aldrig med det samme.

Sådan forårsager Copy-on-Write (CoW) -funktionen i Btrfs-filsystemet fragmentering. Fragmentering betyder, at dataforlængelsen af ​​store filer er spredt rundt i hele lagerenheden. De er ikke øjeblikkelige. Så filsystemets ydeevne (læse / skrivehastighed) kan blive reduceret.

For at løse dette problem er det nødvendigt at defragmentere Btrfs-filsystemet hver gang imellem. Denne artikel viser dig, hvordan du defragmenterer Btrfs-filsystemet.

Forkortelser

Forkortelserne (korte formularer), der anvendes i denne artikel, er som følger:

Forudsætninger

For at prøve eksemplerne i denne artikel:

Jeg har en 20 GB harddisk sdb på min Ubuntu-maskine. Jeg opretter et Btrfs-filsystem på harddisken sdb.

$ sudo lsblk -e7

Bemærk: Din harddisk / SSD vil sandsynligvis have et andet navn end mit, og det samme vil partitionerne. Så sørg for at erstatte dem med din fra nu af.

Du kan oprette et Btrfs-filsystem på din HDD / SSD (uden partitionering), hvis du har en ekstra HDD / SSD. Du kan også oprette en partition på din HDD / SSD og oprette et Btrfs-filsystem der.

For hjælp til installation af Btrfs-filsystemet i Ubuntu, se artiklen Installer og brug Btrfs på Ubuntu 20.04 LTS.

For hjælp til installation af Btrfs-filsystemet i Fedora, se artiklen Installer og brug Btrfs på Fedora 33.

Oprettelse af et Btrfs-filsystem

Du kan oprette et Btrfs-filsystem på din HDD / SSD (upartitioneret) eller på din HDD / SSD-partition.

For at oprette et Btrfs-filsystem på sdb HDD (hele harddisken, ingen partitioner), og giv den filsystemetiketten data, kør følgende kommando:

$ sudo mkfs.btrfs -L data / dev / sdb

Der skal oprettes et Btrfs-filsystem på sdb HDD.

Opret biblioteket /data at montere det Btrfs-filsystem, du lige har oprettet, med følgende kommando:

$ sudo mkdir -v / data

At montere Btrfs-filsystemet oprettet på sdb HDD på /data bibliotek, kør følgende kommando:

$ sudo mount / dev / sdb / data

Btrfs-filsystemet skal nu monteres, som du kan se på skærmbilledet nedenfor:

$ df -h / data

Defragmentering af et Btrfs-filsystem manuelt

Som du kan se på skærmbilledet nedenfor, har jeg kopieret to filer på Btrfs-filsystemet monteret på /data katalog for at demonstrere processen med Btrfs-filsystemdefragmentering:

$ ls -lh / data

Du kan defragmentere en enkelt fil eller et helt undervolumen / bibliotek rekursivt.

For at defragmentere den enkelte fil / data / ubuntu-20.04.1-live-server-amd64.iso, vi kører følgende kommando:

$ sudo btrfs filsystem defragmentering -vf / data / ubuntu-20.04.1-live-server-amd64.iso

Filen / data / ubuntu-20.04.1-live-server-amd64.iso skal defragmenteres.

For at defragmentere hver fil eller katalog i /data katalog rekursivt, kør følgende kommando:

$ sudo btrfs filsystem defragmentering -rvf / data

Som du kan se, er alle filerne i /data mappe er defragmenteret.

På samme måde, hvis du havde undervolumen / data / osimages, så kunne du defragmentere alle filerne i / data / osimages subvolume rekursivt med følgende kommando:

$ sudo btrfs filsystem defragmentering -rvf / data / osimages

Komprimering af et Btrfs-filsystem under defragmentering

Btrfs-filsystemet giver dig mulighed for at komprimere filer, mens du defragmenterer dem.

For at defragmentere alle filerne i /data mappe og komprimere dem med ZLIB komprimeringsalgoritme på samme tid, skal du køre defragmenteringskommandoen med -czlib mulighed som følger:

$ sudo btrfs filsystem defragmentering -rvf -czlib / data

For at defragmentere alle filerne i /data mappe og komprimere dem med ZSTD komprimeringsalgoritme på samme tid, skal du køre defragmenteringskommandoen med -czstd mulighed som følger:

$ sudo btrfs filsystem defragmentering -rvf -czstd / data

For at defragmentere alle filerne i /data mappe og komprimere dem med LZO komprimeringsalgoritme på samme tid, skal du køre defragmenteringskommandoen med -clzo mulighed som følger:

$ sudo btrfs filsystem defragmentering -rvf -clzo / data

Filerne i /data mappe skal defragmenteres og komprimeres på samme tid.

På samme måde kan du også defragmentere og komprimere filerne i et Btrfs-undervolumen.

Defragmentering af et Btrfs-filsystem automatisk

Du kan aktivere automatisk defragmentering på dit Btrfs-filsystem ved monteringstidspunktet. Denne funktion i Btrfs-filsystemet defragmenterer automatisk alle filerne i dit Btrfs-filsystem.

At montere Btrfs-filsystemet oprettet på sdb HDD i /data bibliotek med automatisk defragmentering aktiveret ved opstartstid, skal du tilføje en post til Btrfs-filsystemet i / etc / fstab fil.

Find først UUID for Btrfs-filsystemet oprettet på sdb HDD som følger:

$ sudo blkid / dev / sdb

Som du kan se, blev UUID for Btrfs-filsystemet oprettet på sdb HDD er 60afc092-e0fa-4b65-81fd-5dfd7dd884de.

Det vil være anderledes for dig. Så sørg for at erstatte den med din fra nu af.

Åbn / etc / fstab fil med nano teksteditor, som følger:

$ sudo nano / etc / fstab

Tilføj følgende linje til slutningen af / etc / fstab fil:

UUID = 60afc092-e0fa-4b65-81fd-5dfd7dd884de / data btrfs autodefrag 0 0

Når du er færdig, skal du trykke på + x efterfulgt af Y og for at redde / etc / fstab fil.

For at ændringerne skal træde i kraft, skal du genstarte din computer med følgende kommando:

$ sudo genstart

Som du kan se, blev Btrfs-filsystemet oprettet på sdb HDD er monteret på /data bibliotek med automatisk defragmentering aktiveret.

Problemer med defragmentering af et Btrfs-filsystem

Selvom det kan synes, at defragmentering forbedrer filsystemets ydeevne, er der nogle problemer med at defragmentere et Btrfs-filsystem.

Da Btrfs er et Copy-on-Write (CoW) -filsystem, skal du forstå Btrfs-filsystemets defragmentering for at forstå problemerne med Btrfs-filsystemdefragmentering.

Antag, du har en stor fil (fil1), der bruger 100 extents (du kan tænke på extents som filblokke) af et Btrfs-filsystem. Hvis du opretter en anden kopi af den store fil (fil2) i det samme Btrfs-filsystem, vil du se, at der ikke bruges yderligere diskplads. Det er fordi filerne er identiske, og de 100 udvidelser af hver fil er de samme. Så Btrfs-filsystemet bruger de samme udstrækninger til begge filer.

Figur 1: fil1 og fil2 er identiske og deler de samme Btrfs-filsystemudvidelser for at spare diskplads

Sig, du har nu ændret en af ​​kopierne af den store fil (fil2). Ændringen skal ændre 10 af de 100 udvidelser. Btrfs-filsystemet kopierer de krævede 10 udvidelser et andet ubrugt sted (f.eks, e101-e110) af filsystemet og skift dem der. Når ændringerne er skrevet til disken, vil Btrfs-filsystemet genforbinde omfanget, så ændringerne afspejles i den store fil. Processen er illustreret i nedenstående figur:

Figur 2: 10 Omfang ændres i fil2. Så udvidelserne er genlinket i Btrfs-filsystemet.

Fra figur 1 og 2 kan du forstå, hvordan Copy-on-Write (CoW) fungerer, og hvordan Btrfs-filsystemet bruger Copy-on-Write (CoW) til at spare diskplads.

Nu hvor du ved, hvordan Copy-on-Write (CoW) -funktionen i Btrfs-filsystemet fungerer, vil du forstå problemerne med at defragmentere et Btrfs-filsystem.

  1. Defragmentering af filer flytter Btrfs-dataforlængelser og forsøger at justere dem efter hinanden. Så linkene Copy-on-Write mellem kopierne af filen går i stykker. Dette øger overflødige dataforlængelser samt diskforbruget af et Btrfs-filsystem, der tidligere blev gemt ved at dele dataudvidelser mellem identiske (eller næsten identiske) kopier af filen.
  2. Hvis et Btrfs-undervolumen har flere snapshots, vil defragmentering af subvolumen bryde Copy-on-Write-linkene mellem subvolumen og snapshots. Dette øger diskbrugen af ​​et Btrfs-filsystem.
  3. Hvis du bruger Btrfs-filsystemet til store databaser eller virtuelle maskinbilleder (til lagring af VM-data / diske), vil defragmentering af filsystemet også have en negativ indvirkning på filsystemets ydeevne.

Konklusion

I denne artikel lærte du, hvordan du defragmenterer en enkelt fil og filerne i et bibliotek / undervolumen rekursivt af et Btrfs-filsystem. Du lærte også, hvordan du aktiverer automatisk defragmentering på et Btrfs-filsystem ved monteringstidspunktet. Endelig diskuterede artiklen nogle af problemerne med at defragmentere et Btrfs-filsystem.

Mus Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Sådan ændres musemarkør og markørstørrelse, farve og skema på Windows 10
Musemarkøren og markøren i Windows 10 er meget vigtige aspekter af operativsystemet. Dette kan også siges om andre operativsystemer, så i sandhed er d...
Gratis og open source-spilmotorer til udvikling af Linux-spil
Denne artikel dækker en liste over gratis og open source-spilmotorer, der kan bruges til at udvikle 2D- og 3D-spil på Linux. Der er mange sådanne spil...
Shadow of the Tomb Raider til Linux-vejledning
Shadow of the Tomb Raider er den tolvte tilføjelse til Tomb Raider-serien - en action-adventure-spilfranchise oprettet af Eidos Montreal. Spillet blev...