Hvordan defragmenter et BTRFS -filsystem

Hvordan defragmenter et BTRFS -filsystem

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:

  • Ku - Kopi-på-skriv
  • Btrfs - B-trefilsystem
  • HDD - Harddisk
  • SSD - Solid-state-stasjon
  • GB - Gigabyte
  • Vm - Virtuell maskin

Forutsetninger

For å prøve ut eksemplene som er inkludert i denne artikkelen:

  • Du må ha BTRFS -filsystemet installert på datamaskinen din.
  • Du må ha en ekstra HDD/SSD (av hvilken som helst størrelse) eller minst 1 gratis HDD/SSD -partisjon (av hvilken som helst størrelse).

Jeg har en 20 GB HDD SDB på Ubuntu -maskinen min. Jeg vil lage et BTRFS -filsystem på HDD SDB.

$ sudo lsblk -e7

Merk: 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 /sdb

Et 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 /data

BTRFS -filsystemet skal nå monteres, som du kan se på skjermdumpen 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 -filsystem -defragmentering:

$ ls -lh /data

Du 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.ISO

Filen /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 /data

Som 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 /osimages

Komprimerer 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 /data

Filene 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 /sdb

Som 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 /fstab

Legg 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 omstart

Som 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.

  1. Defragmenting -filer flytter BTRFS -dataområdet og prøver å justere dem, etter hverandre. Så, kopieringskoblinger mellom kopiene av filen går i stykker. Dette vil øke overflødige dataomfang, så vel som diskbruken av et BTRFS -filsystem som tidligere ble lagret ved å dele dataomfang mellom identiske (eller nesten identiske) kopier av filen.
  2. Hvis et BTRFS-undervolum har flere øyeblikksbilder, vil defragmentering av undervolumet bryte koblingene. 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å ha negativ innvirkning på ytelsen til filsystemet.

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.