Slint med BTRFS

I den här artikeln beskriver vi de unika egenskaperna hos filsystemet BTRFS och hur ett Slint-system konfigureras vid installationen för att dra nytta av dem.

För att inte överbelasta detta dokument med definitioner, hänvisar vi läsaren till glossary som, ingår i Slint Manualen och mer specifikt för btrfs "jargon" till glossary ingår i dess dokumentation.

Ett BTRFS filsystem består av en logisk volym som kan sträcka sig över flera blockenheter (partitioner eller diskar). Ursprungligen är Slint installerat på en enda partition.

En undervolym är ett underträd av filer inuti volymen, vars rot kan monteras som om det vore ett oberoende filsystem. Men det utrymme som tilldelas en volym fördelas också till var och en av dess undervolymer: det är därför inte nödvändigt att fördela den mellan undervolymerna, som om de vore i distinkta partitioner.

Subvolymer kan skapas samtidigt som volymen (med kommandot mkfs.btrfs), men även läggas till eller tas bort senare med hjälp av btrfs-verktygen.

I exemplet nedan skapar kommandona Slint-systemet och dess undervolymer, om BTRFS används. I följande $ROOTNAME är namnet på den partition där Slint kommer att installeras och $SLINT monteringspunkten för systemvolymen under installationen.

mkdir /SLINT
SLINT="/SLINT"
mkfs.btrfs -L root $ROOTNAME
mount -o compress=zstd:3,noatime $ROOTNAME $SLINT
btrfs subvolume create $SLINT/@
btrfs subvolume create $SLINT/@home
btrfs subvolume create $SLINT/@swap
umount $SLINT
mount -o subvol=/@,compress=zstd:3,noatime $ROOTNAME $SLINT
mkdir $SLINT/home
mkdir $SLINT/swap

$ROOTNAME partitionen (betecknas av dess UUID som vi kallar <uuid>) kommer sedan att monteras tre gånger (en gång per delvolym) varje gång Slint startas, enligt vad som anges i /etc/fstab filen:

UUID=<uuid> / btrfs subvol=/@,compress=zstd:3,noatime 0 0
UUID=<uuid> /home btrfs subvol=/@home,compress=zstd:3,noatime 0 0
UUID=<uuid> /swap btrfs subvol=/@swap,compress=zstd:3,noatime 0 0

Vilket ger till exempel (taget från utmatningen av lsblk /dev/sda5):

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda5        50G   22G   28G  44% /
/dev/sda5        50G   22G   28G  44% /home
/dev/sda5        50G   22G   28G  44% /swap

Vi ser att det tillgängliga utrymmet för volymen (28G) är också tillgängligt för var och en av undervolymerna. Å andra sidan, "compress_zstd:3" monteringsalternativet innebär att alla filer som kommer att lagras kommer att komprimeras av zstd verktyget med komprimeringsnivå 3. Således är storleken på systemet ungefär hälften som med ext4 filsystemet.

Om vi monterar enheten i roten av volymen (utan att nämna en subvolym), så här:

mount /dev/sda5 /mnt

ser vi att undervolymerna visas som underkataloger till /mnt:

ls /mnt
@ @home @swap
ls /mnt/@home/didier
Desktop Documents GNUstep Images Templates Music Audience Downloads Videos

Ett annat anmärkningsvärt inslag i BTRFS är "copy-on-write". När du redigerar en fil, skrivs de ändrade delarna till en annan plats, metadata (som registrerar platsen för alla delar av filen) som uppdateras. Så länge som de tidigare uppgifterna fortfarande refereras till, förblir de orörda.

Detta gör det mycket enkelt att skapa ögonblicksbilder av BTRFS undervolym: ta en ny ögonblicksbild är "fri", eftersom den använder mycket litet diskutrymme: endast metadata för ögonblicksbilden skrivs, som lagrar den fysiska platsen för alla delar av filer i delvolymen, och detta görs nästan omedelbart. Utrymmet som används av ögonblicksbilden växer bara när den ursprungliga undervolymen och ögonblicksbilden skiljer sig åt, som då ögonblicksbilden kommer att hämta data som tagits bort från originalet. Å andra sidan kommer data som lagts till i originalet inte att inkluderas i ögonblicksbilden: med andra ord en ändring av den ursprungliga undervolymen ändrar inte ögonblicksbilden.

Slint innehåller verktyget "absm", som gör det möjligt att ta statusbilder av subvolymen @, vilket gör det möjligt att återgå till en tidigare status i systemet om en uppdatering går fel, genom att starta systemet på den här statusbilden, som är markerad i GRUB-startmenyn. För att känna till dess användning, skriv bara "absm" som root eller genom att använda sudo.

BTRFS verifierar också integriteten för varje fil när den öppnas med hjälp av en kontrollsumma, vilket gör det onödigt att kontrollera filsystemet vid systemstart. Dessutom verifierar kommandot "btrfs scrub" integriteten för alla filer, inklusive de som sällan är lästa. Som standard ingår verktyget "btrfsmaintenance", Slint kör "btrtfs scrub" en gång i veckan.

"btrfsmaintenance" utlöser också "btrfs balance" en gång i veckan som standard. Med det här kommandot kan du distribuera data mellan enheterna om filsystemet sträcker sig över flera, men också för att omorganisera det utrymme som används, i synnerhet för att frigöra utrymme för oallokerat utrymme i filsystemet, vilket förbättrar framför allt BTRFS-prestanda i fallet med en hårddisk. För att veta mer om "btrfsmaintenance" läs /usr/doc/btrfsmaintenance*/README.html

Andra användbara verktyg och BTRFS-kompatibla verktyg ingår i Slint, alla har ett --help-alternativ och en man-sida:

  • jdupes identifierar dubblettfiler och låter dig vidta åtgärder därefter, oavsett vilket filsystem som används

  • "btdu" gör det möjligt att med precision känna till den plats som BTRFS-undervolymer och kataloger har

  • restic är ett mycket mångsidigt säkerhetskopieringsprogram som kan användas för alla filsystem.

Rekommendationer.

  • BTRFS behöver utrymme för att andas och omorganisera. Behåll alltid 10-20% ledigt utrymme.

  • Vissa verktygsalternativ som ingår i paketet btrfs-tools kan vara farliga eller kontraproduktiva. Använd endast de vars effekt du kan mycket väl och i tveksamma fall sök råd först, på Slint e-postlista eller IRC på irc.libera.chat, kanalen #btrfs.

  • Undvik särskilt att använda "btrfs filesystem defrag" och särskilt inte "btrfs check --repair".

  • Innan du använder ett kommando läser du noga motsvarande mansida (som börjar med "man btrtfs" som listar de andra).

  • Som med alla filsystem: gör regelbundna säkerhetskopior! Detta är oftast det enda sättet att återställa dina data i händelse av maskinvarufel.

För ytterligare information:

Anpassa slint systemlayout

Introduktion

I den här artikeln granskar vi hur Slint installationsprogrammet organiserar systemets grundläggande kataloger (dess layout), och visar hur man anpassar denna layout efter installationen. Installationsprocessen beskrivs i kapitel 2: Installera Slint i Handboken.

Installationsprogrammet placerar alla kataloger som listas nedan, som utgör kärnan i systemet, på samma partition:

bin boot dev etc home lib lib64 media mnt proc root run sbin srv sys usr

Om andra partitioner som redan är formaterade är tillgängliga under installationen, föreslår installeraren att de monteras vid systemstart, med ett katalognamn som användaren valt som monteringspunkt, utom de som anges ovan.

Dessutom, om automatisk partitionering har valts, föreslår installationsprogrammet att skapa ytterligare en partition i det återstående utrymmet på enheten, med en monteringspunkt som valts av användaren, även utanför de som anges ovan.

Sammanfattningsvis, installationsprogrammet:

  • placerar alla kataloger som utgör kärnan i systemet på samma partition,

  • gör det möjligt att konfigurera andra kataloger på andra partitioner, som tidigare är formaterade.

Dock kanske vill du installera filer eller kataloger som är en del av kärnan i systemet som /home på en annan partition, särskilt om utrymmet är begränsat på enheten. Till exempel, om datorn är utrustad med en snabb enhet (SSD eller NVMe) och även med en långsammare men större hårddisk, kanske du vill installera systemet på SSD eller NVMe och de större filerna på hårddisken.

Du kanske också vill dela stora filer som oftast lagras i /home med ett annat system, t. ex. bilder, olika dokument, ljudfiler eller videofiler.

Praktisk guide

Som ett exempel visar vi hur man flyttar /home till en annan enhet, med vissa variationer.

Flytta /home helt till en annan enhet

Vi antar att du vill flytta katalogen /home, initialt installerat på en SSD eller NVMe, till en hårddisk. Detta kan göras direkt efter installation eller senare. Allt detta ska göras som root.

Först behöver du en formaterad partition på hårddisken, som benämd /dev/sdb1 nedan, för att lagra /home:

  • Skapa om det inte redan gjorts på hårddisken med partitionstabellen (GPT-typ) och partition med hjälp av ett av dessa verktyg: parted, gdisk, cgdisk eller gparted, alla ingår i Slint, stort nog för dess avsedda användning.

  • Formatera den här partitionen med en av typerna btrfs, ext4 eller xfs (kommandon mkfs.btrfs, mkfs.ext4 eller mkfs.xfs)

För att kunna kopiera katalogen /home till denna partition måste du montera den, till exempel på /mnt, med något av följande kommandon:

mount /dev/sdb1 /mnt -o compress=zstd:3 # om /dev/sdb1 har formaterats med btrfs
mount /dev/sdb1 /mnt # om /dev/sdb1 har formaterats med xfs eller ext4

Kopiera sedan filerna, till exempel så här:

cp -a /home/* /mnt

eller så här:

rsync -aAXv /home/* /mnt

Kontrollera sedan att kopieringen har gjorts korrekt:

diff -r /home /mnt

Ändra sedan filen /etc/fstab för att montera /home på den nya partitionen vid nästa uppstart.

Om rotfilsystemet är btrfs, är /home monterat som undervolym. I det här fallet kommenterar du den rad i filen som används för att montera /home genom att infoga ett #-tecken i början. Ändra till exempel den här raden (ersätt <uuid1> med UUID-värdet angivet i /etc/fstab):

UUID=<uuid1> /home btrfs subvol=/@home,discard=async,compress=zstd:3,noatime 0 0

som blir:

#UUID=<uuid1> /home btrfs subvol=/@home,discard=async,compress=zstd:3,noatime 0 0

Infoga sedan i filen en rad för att montera /home vid uppstart på den nya partitionen. Vi kommer att ange <uuid2> värdet av dess UUID, som visas med detta kommando:

lsblk -lno uuid /dev/sdb1

Raden att infoga i filen /etc/fstab beror på det valda filsystemet på /dev/sdb1.

För btrfs:

UUID=<uuid2> /home btrfs compress=zstd:3,discard=async,noatime 0

För ext4 eller xfs:

UUID=<uuid2> /home ext4 noatime 1 2

Starta sedan om datorn. I händelse av problem, gå tillbaka:

  • Avkommenterar den kommenterade raden i /etc/fstab (ta bort #-tecknet i början på raden)

  • Kommentera den nya (sätt in ett # tecken i början på raden)

  • Starta sedan om.

När den nya partitionen har kontrollerats att allt fungerar, kan den gamla tas bort. Hur du gör det beror på vilket filsystem som konfigurerats av installationsprogrammet. När datorn startas om, se till att /home är monterat på den nya partitionen, t.ex. med kommandot

findmnt -o /source

Ta sedan bort den gamla /home:

  • Med btrfs skriv dessa kommandon (vi utgår från att systemet installerades på /dev/sda3):

    umount /mnt
    mount /dev/sda3 /mnt -o subvolid=0
    btrfs subvolume delete -c /mnt/@home
    btrfs subvolume sync /mnt # det här kommandot initierar återställningen av det utrymme som används av det gamla /home
    btrfs filesystem sync # detta kommando avslutar återställningen av det utrymme som används av det gamla /home
    umount /mnt
  • Med ext4 eller xfs behöver vi se till att den nya /home inte används för att ta bort den gamla. Så:

    Starta först om i textläge.
    Logga in som root # Inte som vanlig användare, annars kan vi inte avmontera /home efter som den skulle vara upptaget.
    umount /home # Detta gör föregående /home tillgängligt igen.
    rm -r /home/* # Vi tar bort innehållet i föregående /home men behåller katalogen.
    mount /home # Nu är /dev/sdb1 monterad som /home

Flytta endast de största filerna från /home till hårddisken

I exemplet ovan har katalogen /home överförts helt från SSD till hårddisken.

Det kan vara att föredra att lagra endast stora filer på hårddisken och att lämna dolda kataloger och filer på SSD-enheten, som är föremål för frekventa skrivningar, mycket snabbare på en SSD-enhet.

För att göra det kan du namnge monteringspunkten för partitionen /dev/sdb1 som /data i /etc/fstab, till exempel, när denna partition är monterad, kopiera katalogerna som ska överföras från /home till /data, och slutligen ersätta dessa kataloger i /home med symboliska länkar till katalogerna i /data. Exempel: När katalogen /data skapas och monteras på /dev/sdb1:

chown -R didier:users /data
mv /home/didier/Images /data
ln -s /data/Images /home/didier/Images

Detta sätt att anpassa systemet behöver anpassas om systemet har flera användare, till exempel genom att skapa en underkatalog per användare i /data.

Flytta /home till hårddisken men lagra ofta ändrade filer på SSD-enheten

Å andra sidan är det möjligt att selektivt lagra ofta ändrade filer på SSD, som de som finns i ~/.mozilla, ~/.thunderbird eller ~/.purple.

Till exempel kan du skapa en katalog /data och en underkatalog /data/.thunderbird på SSD, flytta ~/. thunderbird till den, och skapa en symbolisk länk /data/.thunderbird ⇒ ~/.thunderbird.

Om btrf används för kärnsystemet, rekommenderas det att du skapar en undervolym för /data med följande kommandon, innan du flyttar ~ /.mozilla eller ~ /.thunderbird, så här:

mount /dev/sda3 /mnt subvolid=0
btrfs subvolume create /mnt/@data
mkdir /data
umount /mnt

Infoga sen en rad i /etc/fstab för att montera /data vid systemuppstart (<uuid1> är UUID-värdet för /dev/sda3):

UUID=<uuid1> /data btrfs subvol=/@data,discard=async,compress=zstd:3,noatime 0 0

Starta sedan om och skriv följande kommandon:

chown -R didier:users /data
mv /home/didier/.thunderbird /data
ln -s /data/.thunderbird ~/.thunderbird