Btrfs

Hur man defragmenterar ett Btrfs-filsystem

Hur man defragmenterar ett Btrfs-filsystem

Btrfs är ett omfattningsbaserat CoW-filsystem (Copy-on-Write). Stora filer lagras i flera dataförlängningar; och när dessa stora filer modifieras kopieras de delar som ska ändras till nya, tomma delar på en annan plats på lagringsenheten och ändras på den nya platsen. Därefter länkas omfattningen av de stora filerna igen för att peka på de uppdaterade delarna. De gamla delarna tas aldrig bort direkt.

Så här skapar Copy-on-Write (CoW) -funktionen i Btrfs-filsystemet fragmentering. Fragmentering innebär att dataförlängningarna för stora filer sprids runt hela lagringsenheten. De är inte omedelbara. Så prestandan (läs- / skrivhastighet) för filsystemet kan minska.

För att lösa detta problem är det nödvändigt att defragmentera Btrfs-filsystemet då och då. Den här artikeln visar hur du defragmenterar Btrfs-filsystemet.

Förkortningar

Förkortningarna (kortformer) som används i den här artikeln är följande:

Förutsättningar

För att prova exemplen i den här artikeln:

Jag har en hårddisk på 20 GB sdb på min Ubuntu-maskin. Jag kommer att skapa ett Btrfs-filsystem på hårddisken sdb.

$ sudo lsblk -e7

Notera: Din hårddisk / SSD kommer sannolikt att ha ett annat namn än mitt, och så också partitionerna. Så var noga med att ersätta dem med din från och med nu.

Du kan skapa ett Btrfs-filsystem på din hårddisk / SSD (utan partitionering) om du har en extra hårddisk / SSD. Du kan också skapa en partition på din hårddisk / SSD och skapa ett Btrfs-filsystem där.

För hjälp med att installera Btrfs-filsystemet i Ubuntu, kolla in artikeln Installera och använda Btrfs på Ubuntu 20.04 LTS.

För hjälp med att installera Btrfs-filsystemet i Fedora, kolla in artikeln Installera och använda Btrfs på Fedora 33.

Skapa ett Btrfs-filsystem

Du kan skapa ett Btrfs-filsystem på din hårddisk / SSD (opartitionerad) eller på din hårddisk / SSD-partition.

För att skapa ett Btrfs-filsystem på sdb HDD (hela hårddisken, inga partitioner) och ge den filsystemetiketten data, kör följande kommando:

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

Ett Btrfs-filsystem ska nu skapas på sdb Hårddisk.

Skapa katalogen /data för att montera Btrfs-filsystemet du just har skapat med följande kommando:

$ sudo mkdir -v / data

För att montera Btrfs-filsystemet som skapats på sdb HDD på /data katalog, kör följande kommando:

$ sudo mount / dev / sdb / data

Btrfs-filsystemet ska nu monteras, som du kan se på skärmdumpen nedan:

$ df -h / data

Defragmentera ett Btrfs-filsystem manuellt

Som du kan se på skärmdumpen nedan har jag kopierat två filer på Btrfs-filsystemet monterat på /data katalog för att demonstrera processen för defragmentering av Btrfs-filsystem:

$ ls -lh / data

Du kan defragmentera en enda fil eller en hel delvolym / katalog rekursivt.

Att defragmentera den enskilda filen / data / ubuntu-20.04.1-live-server-amd64.iso, vi kör följande 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 bör defragmenteras.

För att defragmentera varje fil eller katalog i /data katalog rekursivt, kör följande kommando:

$ sudo btrfs filsystem defragmentering -rvf / data

Som du kan se, alla filer i /data katalogen defragmenteras.

På samma sätt, om du hade delvolymen / data / osimages, då kan du defragmentera alla filer i / data / osimages delvolym rekursivt med följande kommando:

$ sudo btrfs filsystem defragmentering -rvf / data / osimages

Komprimera ett Btrfs-filsystem medan du defragmenterar

Btrfs-filsystemet låter dig komprimera filer medan du defragmenterar dem.

För att defragmentera alla filer i /data katalogen och komprimera dem med ZLIB kompressionsalgoritm samtidigt, kör defragmenteringskommandot med -czlib alternativ enligt följande:

$ sudo btrfs filsystem defragmentering -rvf -czlib / data

För att defragmentera alla filer i /data katalogen och komprimera dem med ZSTD kompressionsalgoritm samtidigt, kör defragmenteringskommandot med -czstd alternativ enligt följande:

$ sudo btrfs filsystem defragmentering -rvf -czstd / data

För att defragmentera alla filer i /data katalogen och komprimera dem med LZO kompressionsalgoritm samtidigt, kör defragmenteringskommandot med -clzo alternativ enligt följande:

$ sudo btrfs filsystem defragmentering -rvf -clzo / data

Filerna i /data katalogen ska defragmenteras och komprimeras samtidigt.

På samma sätt kan du också defragmentera och komprimera filerna i en Btrfs-delvolym.

Defragmentera ett Btrfs-filsystem automatiskt

Du kan aktivera automatisk defragmentering i ditt Btrfs-filsystem vid monteringstid. Denna funktion i Btrfs-filsystemet defragmenterar alla filer i ditt Btrfs-filsystem automatiskt.

För att montera Btrfs-filsystemet som skapats på sdb Hårddisk i /data katalog med automatisk defragmentering aktiverad vid starttid, måste du lägga till en post för Btrfs-filsystemet i / etc / fstab fil.

Hitta först UUID för Btrfs-filsystemet som skapats på sdb HDD enligt följande:

$ sudo blkid / dev / sdb

Som du kan se UUID för Btrfs-filsystemet skapat på sdb HDD är 60afc092-e0fa-4b65-81fd-5dfd7dd884de.

Det kommer att vara annorlunda för dig. Så var noga med att ersätta den med din från och med nu.

Öppna / etc / fstab fil med nano textredigerare enligt följande:

$ sudo nano / etc / fstab

Lägg till följande rad i slutet av / etc / fstab fil:

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

När du är klar trycker du på + X följd av Y och för att spara / etc / fstab fil.

För att ändringarna ska träda i kraft startar du om datorn med följande kommando:

$ sudo omstart

Som du kan se skapade Btrfs-filsystemet på sdb HDD är monterad på /data katalog med automatisk defragmentering aktiverad.

Problem med defragmentering av ett Btrfs-filsystem

Även om det kan tyckas att defragmentering förbättrar filsystemets prestanda, finns det några problem med att defragmentera ett Btrfs-filsystem.

Eftersom Btrfs är ett Copy-on-Write (CoW) -filsystem, för att förstå problemen med Btrfs-filsystemdefragmentering, måste du förstå funktionen Copy-on-Write i Btrfs-filsystemet.

Anta att du har en stor fil (fil1) som använder 100 extens (du kan tänka på extents som filblock) av ett Btrfs-filsystem. Om du skapar en annan kopia av den stora filen (fil2) i samma Btrfs-filsystem ser du att inget extra diskutrymme används. Det beror på att filerna är identiska och att de 100 filerna är desamma. Så Btrfs-filsystemet använder samma omfattning för båda filerna.

Figur 1: fil1 och fil2 är identiska och delar samma Btrfs-filsystem för att spara diskutrymme

Nu, säg, du har ändrat en av kopiorna av den stora filen (fil2). Modifieringen måste ändra 10 av de 100 omfattningarna. Btrfs-filsystemet kopierar de 10 nödvändiga förlängningarna till en annan oanvänd plats (säg, e101-e110) av filsystemet och ändra dem där. När ändringarna har skrivits till skivan kommer Btrfs-filsystemet att länka ombyggnaderna så att ändringarna återspeglas i den stora filen. Processen illustreras i figuren nedan:

Figur 2: 10 omfattning ändras i fil2. Så extenserna är länkade igen i Btrfs-filsystemet.

Från figur 1 och 2 kan du förstå hur Copy-on-Write (CoW) fungerar och hur Btrfs-filsystemet använder Copy-on-Write (CoW) för att spara diskutrymme.

Nu när du vet hur Copy-on-Write (CoW) -funktionen i Btrfs-filsystemet fungerar kommer du att förstå problemen med att defragmentera ett Btrfs-filsystem.

  1. Defragmentering av filer flyttar Btrfs-dataförlängningar och försöker anpassa dem efter varandra. Så länkar kopia-på-skriv-kopiorna mellan kopiorna av filen. Detta ökar redundanta dataförlängningar, liksom skivanvändningen av ett Btrfs-filsystem som tidigare sparades genom att dela dataförlängningar mellan identiska (eller nästan identiska) kopior av filen.
  2. Om en Btrfs-delvolym har flera ögonblicksbilder, kommer defragmentering av delvolymen att bryta kopior-på-skriv-länkarna mellan undervolymen och snapshots. Detta ökar diskanvändningen av ett Btrfs-filsystem.
  3. Om du använder Btrfs-filsystemet för stora databaser eller virtuella maskinbilder (för lagring av VM-data / diskar), kommer defragmentering av filsystemet också att påverka prestanda för filsystemet negativt.

Slutsats

I den här artikeln lärde du dig att defragmentera en enda fil och filerna i en katalog / undervolym rekursivt för ett Btrfs-filsystem. Du lärde dig också hur du aktiverar automatisk defragmentering i ett Btrfs-filsystem vid monteringstid. Slutligen diskuterade artikeln några av problemen med att defragmentera ett Btrfs-filsystem.

OpenTTD-handledning
OpenTTD är ett av de mest populära affärssimuleringsspelen där ute. I det här spelet måste du skapa en underbar transportaffär. Du kommer dock att bör...
SuperTuxKart för Linux
SuperTuxKart är en fantastisk titel som är utformad för att ge dig Mario Kart-upplevelsen gratis på ditt Linux-system. Det är ganska utmanande och rol...
Battle for Wesnoth Tutorial
Slaget om Wesnoth är ett av de mest populära open source-strategispel som du kan spela just nu. Det här spelet har inte bara utvecklats under mycket l...