Btrfs

Een Btrfs-bestandssysteem defragmenterenfragment

Een Btrfs-bestandssysteem defragmenterenfragment

Btrfs is een op uitbreiding gebaseerd Copy-on-Write (CoW) bestandssysteem. Grote bestanden worden opgeslagen in meerdere data-extensions; en wanneer deze grote bestanden worden gewijzigd, worden de te wijzigen extensies gekopieerd naar nieuwe, lege extensies op een andere locatie van het opslagapparaat en worden ze op de nieuwe locatie gewijzigd. Vervolgens worden de begrenzingen van de grote bestanden opnieuw gekoppeld om te verwijzen naar de bijgewerkte begrenzingen. De oude extensies worden nooit direct verwijderd.

Dit is hoe de functie Copy-on-Write (CoW) van het Btrfs-bestandssysteem fragmentatie veroorzaakt. Fragmentatie betekent dat de data-extensions van grote bestanden verspreid zijn over het gehele opslagapparaat. Ze zijn niet onmiddellijk. De prestatie (lees/schrijfsnelheid) van het bestandssysteem kan dus verminderd zijn.

Om dit probleem op te lossen, is het nodig om af en toe het Btrfs-bestandssysteem te defragmenteren. Dit artikel laat zien hoe u het Btrfs-bestandssysteem defragmenteert.

Afkortingen

De afkortingen (korte vormen) die in dit artikel worden gebruikt, zijn als volgt:

Vereisten

Om de voorbeelden in dit artikel uit te proberen:

Ik heb een harde schijf van 20 GB sdb op mijn Ubuntu-machine. Ik zal een Btrfs-bestandssysteem op de HDD maken sdb.

$ sudo lsblk -e7

Opmerking: Je HDD/SSD zal waarschijnlijk een andere naam hebben dan de mijne, net als de partities. Dus zorg ervoor dat je ze vanaf nu vervangt door die van jou.

U kunt een Btrfs-bestandssysteem op uw HDD/SSD maken (zonder partitionering) als u een vrije HDD/SSD heeft. Je kunt ook een partitie op je HDD/SSD maken en daar een Btrfs-bestandssysteem maken.

Voor hulp bij het installeren van het Btrfs-bestandssysteem in Ubuntu, bekijk het artikel Installeer en gebruik Btrfs op Ubuntu 20.04 LTS.

Voor hulp bij het installeren van het Btrfs bestandssysteem in Fedora, bekijk het artikel Installeer en gebruik Btrfs op Fedora 33.

Een Btrfs-bestandssysteem maken

U kunt een Btrfs-bestandssysteem maken op uw HDD/SSD (niet-gepartitioneerd) of op uw HDD/SSD-partitie.

Om een ​​Btrfs-bestandssysteem te maken op de sdb HDD (hele HDD, geen partities) en geef het het bestandssysteemlabel gegevens, voer de volgende opdracht uit:

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

Er zou nu een Btrfs-bestandssysteem moeten worden aangemaakt op de sdb HDD.

Maak de map aan /gegevens om het Btrfs-bestandssysteem dat u zojuist hebt gemaakt te koppelen met de volgende opdracht:

$ sudo mkdir -v /data

Om het Btrfs-bestandssysteem te koppelen dat is gemaakt op de sdb HDD op de /gegevens map, voer de volgende opdracht uit:

$ sudo mount /dev/sdb /data

Het Btrfs-bestandssysteem zou nu moeten worden gemount, zoals je kunt zien in de onderstaande schermafbeelding:

$ df -h /gegevens

Een Btrfs-bestandssysteem handmatig defragmenteren

Zoals je kunt zien in de onderstaande schermafbeelding, heb ik twee bestanden gekopieerd op het Btrfs-bestandssysteem dat is gekoppeld aan de /gegevens directory om het proces van defragmentatie van het Btrfs-bestandssysteem te demonstreren:

$ ls -lh /data

U kunt recursief een enkel bestand of een volledig subvolume/map recursief defragmenteren.

Het enkele bestand defragmenteren: /data/ubuntu-20.04.1-live-server-amd64.iso, we zullen het volgende commando uitvoeren:

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

Het bestand /data/ubuntu-20.04.1-live-server-amd64.iso moet worden gedefragmenteerd.

Om elk bestand of elke map van de . te defragmenteren /gegevens directory recursief, voer de volgende opdracht uit:

$ sudo btrfs bestandssysteem defragmenteren -rvf /data

Zoals u kunt zien, zijn alle bestanden van de /gegevens directory zijn gedefragmenteerd.

Op dezelfde manier, als je het subvolume had: /data/osimages, dan zou je alle bestanden van de . kunnen defragmenteren /data/osimages subvolume recursief met het volgende commando:

$ sudo btrfs bestandssysteem defragmenteren -rvf /data/osimages

Een Btrfs-bestandssysteem comprimeren tijdens het defragmenteren

Met het Btrfs-bestandssysteem kunt u bestanden comprimeren terwijl u ze defragmenteert.

Om alle bestanden in de . te defragmenteren /gegevens map en comprimeer ze met de ZLIB compressie-algoritme tegelijkertijd, voer het defragment-commando uit met de -czlib optie, als volgt:

$ sudo btrfs bestandssysteem defragmenteren -rvf -czlib /data

Om alle bestanden in de . te defragmenteren /gegevens map en comprimeer ze met de ZSTD compressie-algoritme tegelijkertijd, voer het defragment-commando uit met de -czstd optie, als volgt:

$ sudo btrfs bestandssysteem defragmenteren -rvf -czstd /data

Om alle bestanden in de . te defragmenteren /gegevens map en comprimeer ze met de LZO compressie-algoritme tegelijkertijd, voer het defragment-commando uit met de -clzo optie, als volgt:

$ sudo btrfs bestandssysteem defragmenteren -rvf -clzo /data

De bestanden in de /gegevens map moet tegelijkertijd worden gedefragmenteerd en gecomprimeerd.

Op dezelfde manier kunt u ook de bestanden van een Btrfs-subvolume defragmenteren en comprimeren.

Een Btrfs-bestandssysteem automatisch defragmenteren

U kunt automatische defragmentatie op uw Btrfs-bestandssysteem inschakelen tijdens het aankoppelen. Deze functie van het Btrfs-bestandssysteem defragmenteert automatisch alle bestanden van uw Btrfs-bestandssysteem.

Om het Btrfs-bestandssysteem te koppelen dat is gemaakt op de sdb HDD in de /gegevens map met automatische defragmentatie ingeschakeld tijdens het opstarten, moet u een vermelding voor het Btrfs-bestandssysteem toevoegen in de /etc/fstab het dossier.

Zoek eerst de UUID van het Btrfs-bestandssysteem gemaakt op de sdb HDD, als volgt:

$ sudo blkid /dev/sdb

Zoals u kunt zien, is de UUID van het Btrfs-bestandssysteem gemaakt op de sdb HDD is 60afc092-e0fa-4b65-81fd-5dfd7dd884de.

Het zal voor jou anders zijn. Dus zorg ervoor dat je het vanaf nu vervangt door de jouwe.

Open de /etc/fstab bestand met de nano tekstverwerker, als volgt:

$ sudo nano /etc/fstab

Voeg de volgende regel toe aan het einde van de /etc/fstab het dossier:

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

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden /etc/fstab het dossier.

Om de wijzigingen door te voeren, start u uw computer opnieuw op met de volgende opdracht:

$ sudo opnieuw opstarten

Zoals je kunt zien, is het Btrfs-bestandssysteem gemaakt op de on sdb HDD is gemonteerd op de /gegevens map met automatische defragmentatie ingeschakeld.

Problemen met het defragmenteren van een Btrfs-bestandssysteem

Hoewel het lijkt alsof defragmentatie de prestaties van het bestandssysteem verbetert, zijn er enkele problemen met het defragmenteren van een Btrfs-bestandssysteem.

Aangezien Btrfs een Copy-on-Write (CoW)-bestandssysteem is, moet u de functie Copy-on-Write van het Btrfs-bestandssysteem begrijpen om de problemen met defragmentatie van het Btrfs-bestandssysteem te begrijpen.

Stel, je hebt een groot bestand (bestand1) die 100 extensies gebruikt (je kunt extensies zien als bestandsblokken) van een Btrfs-bestandssysteem. Als u nog een kopie van dat grote bestand maakt (bestand2) in hetzelfde Btrfs-bestandssysteem, zult u zien dat er geen extra schijfruimte wordt gebruikt. Dat komt omdat de bestanden identiek zijn en de 100 extensies van elk bestand hetzelfde zijn. Het Btrfs-bestandssysteem gebruikt dus dezelfde extensies voor beide bestanden.

Figuur 1: bestand1 en bestand2 zijn identiek en delen dezelfde Btrfs-bestandssysteemuitbreidingen om schijfruimte te besparen

Stel nu dat u een van de kopieën van het grote bestand hebt gewijzigd (bestand2). De wijziging moet 10 van de 100 extensies wijzigen. Het Btrfs-bestandssysteem kopieert de vereiste 10 extensies naar een andere ongebruikte locatie (zeg:, e101-e110) van het bestandssysteem en verander ze daar. Zodra de wijzigingen naar de schijf zijn geschreven, zal het Btrfs-bestandssysteem de delen opnieuw koppelen, zodat de wijzigingen worden weergegeven in het grote bestand. Het proces wordt geïllustreerd in de onderstaande figuur:

Figuur 2: 10 strekkingen worden gewijzigd in bestand2. De extensies worden dus opnieuw gekoppeld in het Btrfs-bestandssysteem.

Uit figuren 1 en 2 kunt u begrijpen hoe Copy-on-Write (CoW) werkt en hoe het Btrfs-bestandssysteem Copy-on-Write (CoW) gebruikt om schijfruimte te besparen.

Nu u weet hoe de functie Copy-on-Write (CoW) van het Btrfs-bestandssysteem werkt, begrijpt u de problemen met het defragmenteren van een Btrfs-bestandssysteem.

  1. Het defragmenteren van bestanden verplaatst Btrfs-gegevensgebieden en probeert ze een voor een uit te lijnen. Dus de Copy-on-Write-koppelingen tussen de kopieën van het bestand breken. Dit verhoogt de redundante data-extensions, evenals het schijfgebruik van een Btrfs-bestandssysteem dat eerder was opgeslagen door data-extensions te delen tussen identieke (of bijna identieke) kopieën van het bestand.
  2. Als een Btrfs-subvolume meerdere snapshots heeft, zal het defragmenteren van het subvolume de Copy-on-Write-koppelingen tussen het subvolume en de snapshots verbreken. Dit verhoogt het schijfgebruik van een Btrfs-bestandssysteem.
  3. Als u het Btrfs-bestandssysteem gebruikt voor grote databases of afbeeldingen van virtuele machines (voor het opslaan van VM-gegevens/schijven), zal het defragmenteren van het bestandssysteem ook een negatieve invloed hebben op de prestaties van het bestandssysteem.

Conclusie

In dit artikel hebt u geleerd hoe u een enkel bestand en de bestanden in een map/subvolume recursief van een Btrfs-bestandssysteem defragmenteert. Je hebt ook geleerd hoe je automatische defragmentatie inschakelt op een Btrfs-bestandssysteem tijdens het aankoppelen. Ten slotte besprak het artikel enkele van de problemen met het defragmenteren van een Btrfs-bestandssysteem.

Hoe de muisaanwijzer en cursorgrootte, kleur en schema op Windows 10 te veranderen
De muisaanwijzer en cursor in Windows 10 zijn zeer belangrijke aspecten van het besturingssysteem. Dit geldt ook voor andere besturingssystemen, dus i...
Gratis en open source game-engines voor het ontwikkelen van Linux-games
Dit artikel behandelt een lijst met gratis en open source game-engines die kunnen worden gebruikt voor het ontwikkelen van 2D- en 3D-games op Linux. E...
Shadow of the Tomb Raider voor Linux-zelfstudie
Shadow of the Tomb Raider is de twaalfde toevoeging aan de Tomb Raider-serie - een actie-avonturengame-franchise gemaakt door Eidos Montreal. De game ...