Btrfs

Hvordan defragmentere et Btrfs-filsystem

Hvordan defragmentere et Btrfs-filsystem

Btrfs er et omfangsbasert Copy-on-Write (CoW) filsystem. Store filer lagres i flere dataforlengelser; og når disse store filene endres, kopieres delene som skal endres til nye, tomme områder på et annet sted på lagringsenheten og endres på den nye plasseringen. Deretter blir omfanget av de store filene koblet på nytt for å peke til de oppdaterte delene. De gamle delene fjernes aldri umiddelbart.

Slik forårsaker Copy-on-Write (CoW) -funksjonen i Btrfs-filsystemet fragmentering. Fragmentering betyr at dataomfanget til store filer er spredt rundt hele lagringsenheten. De er ikke øyeblikkelige. Så ytelsen (lese / skrivehastigheten) til filsystemet kan bli redusert.

For å løse dette problemet er det nødvendig å defragmentere Btrfs-filsystemet en gang i blant. Denne artikkelen viser deg hvordan du defragmenterer Btrfs-filsystemet.

Forkortelser

Forkortelsene (korte skjemaer) som brukes i denne artikkelen er som følger:

Forutsetninger

For å prøve eksemplene i denne artikkelen:

Jeg har en harddisk på 20 GB sdb på min Ubuntu-maskin. Jeg vil lage et Btrfs-filsystem på harddisken sdb.

$ sudo lsblk -e7

Merk: HDD / SSD-en din 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 artikkelen Installer og bruk Btrfs på Ubuntu 20.04 LTS.

For hjelp med å installere Btrfs-filsystemet i Fedora, se artikkelen Installer og bruk Btrfs på Fedora 33.

Opprette et Btrfs-filsystem

Du kan opprette et Btrfs-filsystem på HDD / SSD (ikke partisjonert) eller på HDD / SSD-partisjon.

For å 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 / sdb

Det skal nå opprettes et Btrfs-filsystem på sdb HDD.

Opprett katalogen /data for å montere Btrfs-filsystemet du nettopp har opprettet med følgende kommando:

$ sudo mkdir -v / data

For å montere Btrfs-filsystemet opprettet på sdb HDD på /data katalog, kjør følgende kommando:

$ sudo mount / dev / sdb / data

Btrfs-filsystemet skal nå monteres, som du kan se på skjermbildet nedenfor:

$ df -h / data

Defragmentering 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 filsystemdefragmentering:

$ ls -lh / data

Du kan defragmentere en enkelt fil eller et helt undervolum / katalog rekursivt.

For å defragmentere enkeltfilen / data / ubuntu-20.04.1-live-server-amd64.iso, vi kjører følgende kommando:

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

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

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

$ sudo btrfs filsystem defragmentering -rvf / data

Som du kan se, alle filene til /data katalogen er defragmentert.

På samme måte, hvis du hadde undervolumet / data / osimages, så kan du defragmentere alle filene i / data / osimages delvolum rekursivt med følgende kommando:

$ sudo btrfs filsystemdefragmentering -rvf / data / osimages

Komprimere et Btrfs-filsystem mens du defragmenterer

Btrfs-filsystemet lar deg komprimere filer mens du defragmenterer dem.

For å defragmentere alle filene i /data katalog og komprimere dem med ZLIB komprimeringsalgoritme samtidig, kjør defragmenteringskommandoen med -czlib som følger:

$ sudo btrfs filsystem defragmentering -rvf -czlib / data

For å defragmentere alle filene i /data katalog og komprimere dem med ZSTD komprimeringsalgoritme samtidig, kjør defragmenteringskommandoen med -czstd som følger:

$ sudo btrfs filsystemdefragmentering -rvf -czstd / data

For å defragmentere alle filene i /data katalogen og komprimere dem med LZO komprimeringsalgoritme samtidig, kjør defragmenteringskommandoen med -clzo som følger:

$ sudo btrfs filsystem defragmentering -rvf -clzo / data

Filene i /data katalogen skal defragmenteres og komprimeres samtidig.

På samme måte kan du også defragmentere og komprimere filene til et Btrfs-undervolum.

Defragmentering av et Btrfs-filsystem automatisk

Du kan aktivere automatisk defragmentering på Btrfs-filsystemet ved monteringstid. Denne funksjonen i Btrfs-filsystemet vil defragmentere alle filene i Btrfs-filsystemet automatisk.

For å montere Btrfs-filsystemet opprettet på sdb HDD i /data katalog med automatisk defragmentering aktivert ved oppstart, må du legge til en oppføring for Btrfs-filsystemet i / etc / fstab fil.

Finn først UUID til Btrfs-filsystemet opprettet på sdb HDD, som følger:

$ sudo blkid / dev / sdb

Som du kan se, ble UUID til 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 tekstredigerer, som følger:

$ sudo nano / etc / fstab

Legg til følgende linje på slutten av / etc / fstab fil:

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

Når du er ferdig, trykker du på + X etterfulgt av Y og for å redde / etc / fstab fil.

For at endringene skal tre i kraft, må du starte datamaskinen på nytt med følgende kommando:

$ sudo omstart

Som du kan se, ble Btrfs-filsystemet opprettet på sdb HDD er montert på /data katalog med automatisk defragmentering aktivert.

Problemer med å defragmentere et Btrfs-filsystem

Selv om det kan se ut som at defragmentering forbedrer ytelsen til filsystemet, er det noen problemer med å defragmentere et Btrfs-filsystem.

Siden Btrfs er et Copy-on-Write (CoW) -filsystem, for å forstå problemene med Btrfs-filsystemdefragmentering, må du forstå Copy-on-Write-funksjonen til Btrfs-filsystemet.

Anta at du har en stor fil (fil1) som bruker 100 utvidelser (du kan tenke på utvidelser som filblokker) av et Btrfs-filsystem. Hvis du oppretter en annen kopi av den store filen (fil2) i det samme Btrfs-filsystemet, vil du se at ingen ekstra diskplass brukes. Det er fordi filene er identiske, og de 100 delene av hver fil er de samme. Så Btrfs-filsystemet bruker samme omfang for begge filene.

Figur 1: fil1 og fil2 er identiske og deler de samme Btrfs-filsystemene for å spare diskplass

Nå, si, du har endret en av kopiene av den store filen (fil2). Modifikasjonen må endre 10 av de 100 omfangene. Btrfs-filsystemet kopierer de 10 nødvendige delene 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 utvidelsene på nytt slik at endringene gjenspeiles i den store filen. Prosessen er illustrert i figuren nedenfor:

Figur 2: 10 omfang endres i fil2. Så utvidelsene er 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 til Btrfs-filsystemet fungerer, vil du forstå problemene med å defragmentere et Btrfs-filsystem.

  1. Defragmentering av filer flytter Btrfs-dataforlengelser og prøver å justere dem, den ene etter den andre. Kopier-på-skriv-koblingene mellom kopiene av filen går altså i stykker. Dette vil øke overflødige dataforlengelser, samt diskbruken til et Btrfs-filsystem som tidligere ble lagret ved å dele datautvidelser mellom identiske (eller nesten identiske) kopier av filen.
  2. Hvis et Btrfs-undervolum har flere øyeblikksbilder, vil defragmentering av undervolumet bryte kopier-på-skriv-koblingene mellom undervolumet og øyeblikksbildene. Dette vil øke diskbruken av et Btrfs-filsystem.
  3. Hvis du bruker Btrfs-filsystemet for store databaser eller virtuelle maskinbilder (for lagring av VM-data / disker), vil defragmentering av filsystemet også påvirke ytelsen til filsystemet negativt.

Konklusjon

I denne artikkelen lærte du hvordan du defragmenterer 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 ved monteringstid. Til slutt diskuterte artikkelen noen av problemene med å defragmentere et Btrfs-filsystem.

OpenTTD Tutorial
OpenTTD er et av de mest populære forretningssimuleringsspillene der ute. I dette spillet må du lage en fantastisk transportvirksomhet. Du begynner im...
SuperTuxKart for Linux
SuperTuxKart er en flott tittel designet for å gi deg Mario Kart-opplevelsen gratis på Linux-systemet ditt. Det er ganske utfordrende og morsomt å spi...
Kjemp om Wesnoth-opplæringen
Kampen om Wesnoth er et av de mest populære open source-strategispillene du kan spille på dette tidspunktet. Ikke bare har dette spillet vært i utvikl...