Btrfs
Btrfs è un filesystem CoW (copy-on-write, copia-in-scrittura) adatto a Linux che mira ad implementare funzionalità avanzate, concentrandosi sulla tolleranza agli errori, la riparazione e la facilità di amministrazione. Sviluppato congiuntamente con Oracle, Red Hat, Fujitsu, Intel, SUSE, STRATO, e molti altri, btrfs è rilasciato sotto licenza GPL ed è aperto ai contributi di chiunque.
Caratteristiche
Ext4 è sicuro e stabile e può gestire filesystem di grandi dimensioni con estensioni, quindi perché cambiare? Mentre è vero che Btrfs è ancora considerato sperimentale e sta crescendo in stabilità, il momento in cui diventerà il filesystem di default per i sistemi Linux si sta avvicinando. Qualche distribuzione Linux ha già iniziato il passaggio ad esso già sui rilasci correnti. Btrfs ha molte caratteristiche avanzate in comune con ZFS, il che rende il file system ZFS popolare con le distribuzioni BSD e i dispositivi NAS.
- Copy on Write (CoW) e snapshotting - Rende i backup incrementali indolori anche da un filesystem "hot" o da una macchina virtuale (VM).
- File level checksums - Metadata per ogni file include un checksum che è utilizzato per rilevare e correggere gli errori.
- Compression - I files possono essere compressi e decompressi immediatamente, e così vengono migliorate le performance in velocità di lettura.
- Auto deframmentazione - I filesystems sono sintonizzati da un thread di fondo mentre sono in uso.
- Sottovolumi - I filesystems possono condividere un singola parte di spazio del disco invece di essere ripartiti in partizioni.
- RAID - Btrfs esegue le proprie implementazioni RAID in modo che LVM o mdadm non siano necessari per avere RAID. Attualmente sono supportati RAID 0, 1 e 10; RAID 5 e 6 sono considerati instabili.
- Le partitioni sono optional - Mentre Btrfs può lavorare con le partizioni, esso ha ANCHE il potenziale di poter utilizzare i dispositivi (/dev/<device>) direttamente.
- Deduplicazione dei dati - C'è un supporto limitato alla deduplicazione dei dati; tuttavia, la deduplicazione diventerà una caratteristica standard di Btrfs. Questa abilita Btrfs a salvare spazio confrontando i file tramite diffrazioni binarie.
Consultare la pagina di stato della wiki per la lista aggiornata e in qualche modo esaustiva delle caratteristiche. Tuttavia, non tutte le funzionalità sono abbastanza mature da poter essere utilizzate in molti usi.
I nuovi filesystem raggruppati sfrutteranno facilmente i vantaggi di Btrfs con il suo copy-on-write e le sue altre caratteristiche avanzate. Ceph è un esempio di filesystem raggruppato che sembra essere promettente, e può trarre vantaggio da Btrfs.
Btrfs is said to be a stable and well-tested single-disk filesystem and ext4 replacement, but caution is advised when using advanced features such as Btrfs-RAID.[1]
Caveats
btrfs can counter-intuitively fail filesystem operations with ENOSPC when df reports free space due to internal fragmentation (free space pinned by DATA + SYSTEM chunks, but needed in METADATA chunks).
Additionally, a single 4K reference to a 128M extent inside btrfs can cause free space to be present, but unavailable for allocations. This can also cause btrfs to return ENOSPC when free space is reported by df.
Installing sys-fs/btrfsmaintenance and configuring the scripts to run periodically can help to reduce the possibility of ENOSPC issues by rebalancing btrfs, but it will not eliminate the risk of ENOSPC when free space is present. Some workloads will never hit ENOSPC while others will. If the risk of ENOSPC in production is unacceptable, you should use something else. If using btrfs, be certain to avoid configurations known to have issues.
With the exception of ENOSPC, information on the issues present in btrfs in the latest kernel branches is available at the btrfs status page.
Installazione
Kernel
Attivare le seguenti opzioni del kernel per abilitare il supporto Btrfs:
File systems --->
<*> Btrfs filesystem
Emerge
Il pacchetto sys-fs/btrfs-progs contiene le utilità necessarie per lavorare con il filesystem Btrfs.
root #
emerge --ask sys-fs/btrfs-progs
Utilizzo
Consider setting up sys-fs/btrfsmaintenance to handle regular balancing, defrag, trimming, and scrubbing.
Digitare lunghi comandi Btrfs può diventare rapidamente un problema. Ogni comando (oltre al comando iniziale btrfs) può essere ridotto ad una breve serie di istruzioni. Questo metodo è utile quando si lavora da linea di comando per ridurre il numero di caratteri digitati.
Per esempio, per deframmentare un filesystem situato su /, di seguito viene mostrato un comando integrale:
root #
btrfs filesystem defragment -v /
Abbreviare ciascuno dei comandi dopo btrfs riducendoli al loro prefisso unico e più breve. In tale contesto, unico significa che nessun altro comando btrfs corrisponderà a quel comando più breve. La versione breve del comando di cui sopra, quindi, è:
root #
btrfs fi de -v /
Nessun altro comando btrfs inizia con fi
; filesystem
è il solo. La stessa cosa vale per il sotto-comando de
, sotto il comando filesystem
.
Creazione
Il comando mkfs.btrfs distrugge irreversibilmente ogni contenuto della partizione che gli è stato detto di formattare. Assicurarsi di selezionare il disco e la partizione corretti prima di eseguire qualsiasi comando mkfs!
Per creare un filesystem Btrfs nella partizione /dev/sdXN:
root #
mkfs.btrfs /dev/sdXN
Nell'esempio sopra, sostituire N
con il numero di partizione e X
con la lettera corrispondente al disco che deve essere formattato. Per esempio, per formattare la terza partizione nel primo disco del sistema con Btrfs, eseguire:
root #
mkfs.btrfs /dev/sda3
L'ultima colonna di numeri in /etc/fstab dovrebbe essere
0
per tutte le partizioni Btrfs. fsck.btrfs e btrfsck non dovrebbero essere eseguiti durante ogni avvio del sistema.Labels
Labels can be added to btrfs filesystems, making mounting and organization easier.
Labels are generally less unique than UUIDs, but setting labels like rootfs for /, and homedir for /home can help with organization.
If multiple filesystems with the same label exist on a system, the first labeled system in the fstab, or the first returned by blkid will be mounted. It is generally best to avoid depending on this behavior, so unique labels should be used.
Labels can be added to a btrfs filesystem after it has been created by using:
root #
btrfs filesystem label /dev/sda1 rootfs
Labels can be added when the btrfs filesystem is created with:
root #
mkfs.btrfs -L rootfs /dev/sda1
Montaggio
Dopo la loro creazione, i filesystems possono essere montati in vari modi:
- mount - Montare manualmente.
- fstab - Definire il mount points in /etc/fstab abilitando il montaggio automatico all'avvio del sistema.
- Removable media - Montaggio automatico a richiesta (utile per i drives USB).
- AutoFS - Montaggio automatico all'accesso del filesystem.
Conversione dei filesystems ext*
E' possibile convertire i filesystems ext2, ext3 e ext4 a Btrfs utilizzando l'utilità btrfs-convert.
Le seguenti istruzioni supportano solamente la conversione di filesystems che non sono montati. Per convertire la partizione di root, avviare con il disco di recupero del sistema (SystemRescueCD è ottimo) ed eseguire i comandi di conversione sulla partizione di root.
Per prima cosa assicurarsi che il mount point sia smontato:
root #
umount <mounted_device>
Verificare l'integrità del filesystem non-root utilizzando il comando fsck appropriato. Nell'esempio seguente, il filesystem è ext4:
root #
fsck.ext4 -f <unmounted_device>
Utilizzare btrfs-convert per convertire il dispositivo ext* formattato dentro il dispositivo Btrfs formattato:
root #
btrfs-convert <unmounted_device>
Assicurarsi di modificare il file /etc/fstab dopo che il dispositivo è stato formattato cambiando la colonna relativa al filesystem da ext4 a Btrfs:
<device> <mountpoint> btrfs defaults 0 0
Deframmentazione
Un'altra caratteristica di Btrfs è la deframmentazione online. Per deframmentare un filesystem di root Btrfs eseguire:
root #
btrfs filesystem defragment -r -v /
The autodefrag
mount option sets the default behavior to online defragmentation.
La deframmentazione con le versioni del kernel < 3.9 o ≥ 3.14-rc2 così come con le versione stabili del kernel Linux ≥ 3.10.31, ≥ 3.12.12 o ≥ 3.13.4 rovina la ref-links tra i files e le loro copie COW[2] e ciò potrebbe incrementare notevolmente l'utilizzo dello spazio. Assicurarsi di avere abbastanza spazio libero disponibile e non troppe snapshots nel disco per evitare che le partizioni btrfs siano troppo lente.
Compressione
Btrfs supporta una compressione trasparente usando zlib, lzo e zstd (v5.1.0) [3] compression algorithms.
E' possibile comprimere files specifici utilizzando gli attributi del file:
user $
chattr +c
L'opzione di montaggio compress
imposta il comportamento di default di comprimere tutti i nuovi files creati. Per recomprimere l'intero filesystem, eseguire il seguente comando:
root #
btrfs filesystem defragment -r -v -clzo /
In base alle performance della CPU e del disco, utilizzare la compressione lzo potrebbe migliorare l'intero rendimento.
Come alternativa a lzo è possibile usare gli algoritmi di compressione zlib o zstd. Zlib è più lento ma ha un maggiore rapporto di compressione, mentre zstd ha un buon rapporto tra i due[4].
Per forzare la compressione zlib su tutto il filesystem:
root #
btrfs filesystem defragment -r -v -czlib /
Substitute zstd for zlib in the example above to activate zstd compression.
Livello di compressione
Dalla versione del kernel 4.15.0[5], la compressione zlib ora può essere impostata dai livelli 1-9. Dalla versione del kernel 5.1.0 zstd può essere impostato ai livelli 1-15. Ad esempio, per impostare zlib sulla compressione massima al momento del montaggio:
root #
mount -o compress=zlib:9 /dev/sdXY /path/to/btrfs/mountpoint
Oppure per impostare una compressione minima:
root #
mount -o compress=zlib:1 /dev/sdXY /path/to/btrfs/mountpoint
Oppure regolare la compressione rimontando:
root #
mount -o remount,compress=zlib:3 /path/to/btrfs/mountpoint
Il livello di compressione dovrebbe essere visibile in /proc/mounts o controllando l'output dmesg più recente utilizzando il seguente comando:
root #
dmesg | grep -i btrfs
[ 0.495284] Btrfs loaded, crc32c=crc32c-intel [ 3010.727383] BTRFS: device label My Passport devid 1 transid 31 /dev/sdd1 [ 3111.930960] BTRFS info (device sdd1): disk space caching is enabled [ 3111.930973] BTRFS info (device sdd1): has skinny extents [ 9428.918325] BTRFS info (device sdd1): use zlib compression, level 3
Adjust fstab for compression
Once a drive has been remounted or adjusted to compress data, be sure to add the appropriate modifications to the /etc/fstab file. In this example, zstd compression is set with a level of 9 at mount time:
/dev/sdb /srv btrfs compress=zstd:9,relatime,rw 0 0
Rapporto di compressione e utilizzo del disco
I soliti strumenti dello spazio utente per determinare lo spazio utilizzato e libero come du e df possono fornire risultati imprecisi su una partizione "Btrfs" a causa di differenze di progettazione intrinseche nel modo in cui i file vengono scritti rispetto a, ad esempio, "ext2/3/4"[6].
Si consiglia quindi di utilizzare le alternative du/df fornite dallo strumento btrfs userspace btrfs filesystem
. In aggiunta a ciò, lo strumento compsize che si trova nel pacchetto sys-fs/compsize può essere utile per fornire ulteriori informazioni riguardo rapporti di compressione e l'utilizzo del disco di file compressi. I seguenti sono esempi di utilizzo di questi strumenti per una partizione btrfs montata in /media/drive.
user $
btrfs filesystem du -s /media/drive
Total Exclusive Set shared Filename 848.12GiB 848.12GiB 0.00B /media/drive/
user $
btrfs filesystem df /media/drive
Data, single: total=846.00GiB, used=845.61GiB System, DUP: total=8.00MiB, used=112.00KiB Metadata, DUP: total=2.00GiB, used=904.30MiB GlobalReserve, single: total=512.00MiB, used=0.00B
user $
compsize /media/drive
Processed 2262 files, 112115 regular extents (112115 refs), 174 inline. Type Perc Disk Usage Uncompressed Referenced TOTAL 99% 845G 848G 848G none 100% 844G 844G 844G zlib 16% 532M 3.2G 3.2G
Più dispositivi (RAID)
Btrfs può essere utilizzato con più dispositivi a blocchi per creare RAID. L'utilizzo di Btrfs per creare filesystem che si estendono su più dispositivi è molto più semplice rispetto alla creazione utilizzando mdadm poiché non è necessario alcun tempo di inizializzazione per la creazione.
BTRFS gestisce dati e metadati separatamente. Questo è un fattore importante da tenere a mente quando si utilizza un filesystem multi-dispositivo. È possibile utilizzare profili separati per gruppi di blocchi di dati e metadati. Ad esempio, i metadati potrebbero essere configurati su più dispositivi in RAID1, mentre i dati potrebbero essere configurati su RAID5. Questo profilo è possibile quando si utilizzano tre o più dispositivi a blocchi, poiché RAID5 richiede un minimo di 3 dispositivi a blocchi.
Questo tipo di profilo offre il vantaggio della ridondanza per i metadati su ciascun dispositivo e dello striping per i dati tra i dispositivi, il che aumenta la velocità di lettura. Lo svantaggio di questo profilo è che viene utilizzato più spazio del necessario per i metadati e le velocità di scrittura sono ridotte per i blocchi di dati, poiché RAID5 utilizza un bit di parità.
Creazione
Il metodo più semplice consiste nell'utilizzare la totalità dei dispositivi a blocchi non partizionati per creare un filesystem che si estende su più dispositivi. Ad esempio, per creare un filesystem in modalità RAID1 su due dispositivi:
root #
mkfs.btrfs -m raid1 <device1> <device2> -d raid1 <device1> <device2>
Conversione
La conversione tra i profili RAID è possibile con il sottocomando balance. Ad esempio, supponiamo che tre dispositivi a blocchi siano attualmente configurati per RAID1 e montati su /srv. È possibile convertire i dati in questo profilo da RAID1 a RAID5 utilizzando il seguente comando:
root #
btrfs balance start -dconvert=raid5 --force /srv
La conversione può essere eseguita mentre il filesystem è online e in uso. Le possibili modalità RAID in btrfs includono RAID0, RAID1, RAID5, RAID6 e RAID10. Si veda la BTRFS wiki per più informazioni.
Attualmente non è sicuro utilizzare le versioni di RAID 5 o 6[7]. Le versioni di RAID 5 e 6 hanno avuto qualche correzione[8] sulla versione di Linux 4.12, ma lo stato complessivo è ancora marcato come instabile.[9][10]. Gli utenti che vogliono utilizzare le funzionalità RAID5 o RAID6 di btrfs possono andare a vedere la pagina dello stato di btrfs per monitorare lo stato di stabilità di dette modalità prima di utilizzarle.
Addition
Additional devices can be added to existing multi device file systems. Follow the removal section below.
A riskier, but faster, alternative to safely removing a device is to shut the system down (or if the system supports hot swappable drives, at least unmount the filesystem), physically disconnect and remove the device that is to be replaced, substituted and connect the new device in it's place, power up the system (if necessary).
Note: Systems that will be power cycled will have the multi device filesystem fail to mount, since a device has been physically removed from the pool.
Once the system is booted, mount the multi-device filesystem with mount -odegraded, then perform the following steps on adding a new device.
root #
mount -odegraded /srv
root #
btrfs device add --force /dev/sdd /srv
After the device has been re-added it is then necessary to re-balance the filesystem to be sure data is spanned across the newly added device:
root #
btrfs balance start /srv
Rimozione
Per percorso del dispositivo
I dispositivi a blocchi (dischi) possono essere rimossi dai filesystem multi-dispositivo utilizzando il sottocomando btrfs device remove:
root #
sudo btrfs device remove /dev/sde /srv
Per ID dispositivo
Usa il sottocomando usage per determinare gli ID del dispositivo:
root #
btrfs device usage /srv
/dev/sdb, ID: 3 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 25.00GiB Data,RAID5: 497.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 17.00GiB Metadata,RAID5: 352.00MiB System,RAID5: 32.00MiB Unallocated: 1.29TiB /dev/sdc, ID: 1 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 25.00GiB Data,RAID5: 497.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 17.00GiB Metadata,RAID5: 352.00MiB System,RAID5: 32.00MiB Unallocated: 1.29TiB /dev/sdd, ID: 4 Device size: 1.82TiB Device slack: 0.00B Data,RAID1: 25.00GiB Data,RAID5: 497.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 17.00GiB Metadata,RAID5: 352.00MiB System,RAID5: 32.00MiB Unallocated: 1.29TiB /dev/sde, ID: 5 Device size: 0.00B Device slack: 0.00B Data,RAID1: 75.00GiB Data,RAID5: 5.00GiB Metadata,RAID5: 352.00MiB Unallocated: 1.74TiB
Quindi usa l'ID del dispositivo per rimuovere il dispositivo, in questo caso /dev/sde verrà rimosso:
root #
btrfs device remove 5 /srv
Resizing
btrfs partitions can be resized while online using the built-in resize subcommand.
This does not affect the size of the partition itself, just the filesystem.
Set the size of the root filesystem to 128gb:
root #
btrfs filesystem resize 128g /
Add 50 gigabytes of space to the rootfs:
root #
btrfs filesystem resize +50g /
The command can also fill all available space:
root #
btrfs filesystem resize max /
Sottovolumi
Come detto sopra nell'elenco delle funzioni, Btrfs può creare sottovolumi. I sottovolumi possono essere utilizzati per meglio organizzare ed amministrare i dati. Essi diventano potenti specialmente se combinati con gli snapshots. Va fatta una distinzione importante tra i sottovolumi Btrfs e i sottovolumi creati dal Logical Volume Management (LVM). I sottovolumi Btrfs non sono dispositivi a livello di blocco, essi sono spazi di nomi di file POSIX.[11] Essi possono essere creati in qualsiasi posizione del filesystem ed agiranno come qualsiasi altra directory nel sistema con un avvertimento: i sottovolumi possono essere montati e smontati.I sottovolumi sono nidificati (possono essere creati all'interno di altri sottovolumi), e facilmente creati o rimossi.
Un sottovolume non può essere creato attraverso differenti filesystem Btrfs. Se /dev/sda e /dev/sdb entrambi contengono separatamente filesystem (non-RAID) Btrfs, non è possibile che un sottovolume si possa espandere attraverso i due filesystems. Lo snapshot può essere spostato da un filesystem all'altro, ma non può estendersi attraverso i due. Esso deve essere su /dev/sda oppure su /dev/sdb.
Creazione
Per creare un sottovolume, eseguire il seguente comando all'interno di un filesystem's name space Btrfs:
root #
btrfs subvolume create <dest-name>
Rimpiazzare <dest-name>
con la destinazione desiderata e il nome del sottovolume. Per esempio, se un filesystem Btrfs esiste su /mnt/btrfs, un sottovolume può essere creato al suo interno utilizzando il seguente comando:
root #
btrfs subvolume create /mnt/btrfs/subvolume1
Lista
Per vedere i sottovolumi che sono stati creati, utilizzare il comando subvolume list
seguito dalla posizione del filesystem Btrfs. Se la directory corrente è da qualche parte all'interno di un filesystem Btrfs, il seguente comando mostrerà i sottovolumi che esistono nel filesystem:
root #
btrfs subvolume list .
Se un filesystem Btrfs con sottovolumi esiste nel punto di mount creato nel comando dell'esempio precedente, l'output del comando di elenco sarà simile a quanto segue:
root #
btrfs subvolume list /mnt/btrfs
ID 309 gen 102913 top level 5 path mnt/btrfs/subvolume1
Rimozione
All available subvolume paths in a Btrfs filesystem can be seen using the list command above.
I sottovolumi possono essere opportunamente rimossi utilizzando il comando subvolume delete
seguito dal percorso del sottovolume. Tutti i percorsi dei sottovolumi disponibili in un filesystem Btrfs possono essere elencati utilizzando il comando di elencazione di cui sopra.
root #
btrfs subvolume delete <subvolume-path>
Come spiegato sopra, rimpiazzare <subvolume-path>
con il percorso giusto del sottovolume che deve essere rimosso. Per cancellare il sottovolume utilizzato negli esempi precedenti, dovrà essere eseguito il seguente comando:
root #
btrfs subvolume delete /mnt/btrfs/subvolume1
Delete subvolume (no-commit): '/mnt/btrfs/subvolume1'
Istantanee
Le istantanee (Snapshots) sono sottovolumi che condividono dati e metadati con gli altri sottovolumi. Questo è reso possibile dalla capacità Copy on Write (CoW) di Btrfs.[11] Gli Snapshots possono essere utilizzati per svariati scopi, uno dei quali è quello di creare backups di strutture di filesystem a punti specifici nel tempo.
Se il filesystem root è Btrfs, è possibile creare una snapshot utilizzando i comandi subvolume snapshot
:
root #
mkdir -p /mnt/backup/rootfs
root #
btrfs subvolume snapshot / /mnt/backup/rootfs/
Il seguente breve script da shell può essere aggiunto al lavoro sincronizzato di cron per creare un backup di snapshot sincronizzato del filesystem Btrfs di root. Tali backup sincronizzati possono essere regolati in base a quello che preferisce l'utente.
#!/bin/bash
NOW=$(date +"%Y-%m-%d_%H:%M:%S")
if [ ! -e /mnt/backup ]; then
mkdir -p /mnt/backup
fi
cd /
/sbin/btrfs subvolume snapshot / "/mnt/backup/backup_${NOW}"
Montaggio
Un sottovolume può essere montato in una posizione diversa da quella in cui è stato creato, oppure gli utenti possono scegliere di non montarlo affatto. Per esempio, l'utente può creare un filesystem Btrfs su /mnt/btrfs e creare i sottovolumi /mnt/btrfs/home e /mnt/btrfs/gentoo-repo . I sottovolumi potrebbero così essere montati su /home e su /var/db/repos/gentoo, con il livello superiore originale lasciato smontato. Ciò si traduce in una configurazione dove il percorso relativo dei sottovolumi è diverso dal percorso effettivo del sottovolume di livello superiore.
Per montare un sottovolume, eseguire il comando seguente, in cui <rel-path>
è il percorso relativo del sottovolume dal sottovolume di livello superiore, percorso ottenibile attraverso il comando subvolume list
:
root #
mount -o subvol=<rel-path> <device> <mountpoint>
Similmente, si può aggiornare la tabella del filesystem per montare i propri sottovolumi Btrfs facendo così:
<device> <mountpoint> btrfs subvol=<rel-path> 0 2
Risoluzione dei problemi
Filesystem check
With a failing disk or corrupted data, it may be necessary to run the a filesystem check. Typically filesystem check commands are handled through the fsck. prefix, but for btrfs filesystems, checks are handled via the btrfs check subcommand:
root #
btrfs check --progress /dev/<device>
Checking multi-device filesystems are handled by passing any one of the devices in the filesystem to btrfs check. As long as all of the devices are available the check should run.
Multi device filesystem mount fails
After ungracefully removing one or more devices from a multi device filesystem, attempting to mount the filesystem will fail:
root #
mnt /srv
mount: /srv: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error.
This type of mount failure could be caused by missing one or more devices from the multi device filesystem. Missing devices can be detected by using the filesystem show subcommand. In the following example /dev/sdb is one of the devices still connected to the multi device filesystem:
root #
btrfs filesystem show /dev/sdb
Label: none uuid: 9e7e9824-d66b-4a9c-a05c-c4245accabe99 Total devices 5 FS bytes used 2.50TiB devid 1 size 1.82TiB used 817.03GiB path /dev/sdc devid 3 size 1.82TiB used 817.00GiB path /dev/sdb devid 5 size 10.91TiB used 2.53TiB path /dev/sde devid 6 size 10.91TiB used 2.53TiB path /dev/sdd *** Some devices missing
Missing device can be ungracefully dropped from the filesystem by using the following command:
root #
btrfs device delete missing /srv
If the multi device filesystem is in RAID 0 mode, then data loss will occur!
Utilizzo con immagini disco VM
Quando si utilizza Btrfs con le immagini del disco della macchina virtuale, è meglio disabilitare la copia su scrittura sulle immagini del disco per accelerare le prestazioni di I/O. Questa operazione può essere eseguita solo su file appena creati. È anche possibile disabilitare CoW su tutti i file creati all'interno di una determinata directory. Ad esempio, utilizzando il comando chattr:
root #
chattr +C /var/lib/libvirt/images
Cancellare lo spazio libero della cache
E' possibile cancellare lo spazio libero della cache di Btrfs montando tale filesystem con l'opzione di mount clear_cache
. Per esempio:
root #
mount -o clear_cache /path/to/device /path/to/mountpoint
Consumo eccessivo di memoria (cache del disco) da parte di Btrfs
Quando si utilizza qualche speciale abilità di Btrfs (ad esempio facendo molte copie --reflink
oppure creando un numero considerevole di snapshot), può essere consumata molta memoria che non viene però liberata abbastanza velocemente dalla cache inode del kernel. Questo può non essere scoperto se la memoria dedicata alla cache del disco non è visibile tramite le utilità di monitoraggio tradizionali. Per esempio l'utilità slabtop (disponibile come parte del pacchetto sys-process/procps) è stata creata specificatamente per determinare quanta memoria kernel viene consumata:
root #
slabtop
Active / Total Objects (% used) : 5011373 / 5052626 (99.2%) Active / Total Slabs (% used) : 1158843 / 1158843 (100.0%) Active / Total Caches (% used) : 103 / 220 (46.8%) Active / Total Size (% used) : 3874182.66K / 3881148.34K (99.8%) Minimum / Average / Maximum Object : 0.02K / 0.77K / 4096.00K OBJS ACTIVE USE OBJ SIZE SLABS OBJ/SLAB CACHE SIZE NAME 2974761 2974485 99% 1.10K 991587 3 3966348K btrfs_inode 1501479 1496052 99% 0.19K 71499 21 285996K dentry
Se la cache inode sta consumando troppa memoria, il kernel può essere istruito manualmente di far cadere la cache ripetendo un valore intero sul file /proc/sys/vm/drop_caches[12].
Per stare sicuri, e per aiutare il kernel a determinare il valore massimo di memoria utilizzabile, eseguire un sync "prima" dei seguenti comandi echo:
user $
sync
Molte volte gli utenti Btrfs avranno bisogno probabilmente di echo 2 per recuperare solo gli oggetti lastra (dentries e btrfs_inodes):
root #
echo 2 > /proc/sys/vm/drop_caches
Per cancellare interamente la cache del disco (oggetti lastra "e" la pagina cache), invece, utilizzare echo 3:
root #
echo 3 > /proc/sys/vm/drop_caches
Mentre i comandi di cui sopra non sono distruttivi (sempre che un sync sia stato eseguito prima di tali comandi), essi possono seriamente, ma temporaneamente, rallentare il sistema mentre il kernel carica solo gli elementi necessari indietro nella memoria. Pensate due volte prima di eseguire i comandi di cui sopra su sitemi sotto pesanti carichi di lavoro!
Maggiori informazioni sulle lastre del kernel possono essere trovate in questo voce del blog dedoimedo.
Errori di montaggio Btrfs, ritorno di mount: filesystem di tipo 'btrfs' sconosciuto
La soluzione originale di Tim su Stack Exchange ha inspirato la seguente soluzione: costruire il kernel manualmente invece di utilizzare genkernel:
#
cd /usr/src/linux
#
make menuconfig
#
make && make modules_install
#
cp arch/x86_64/boot/bzImage /boot
#
mv /boot/bzImage /boot/whatever_kernel_filename
#
genkernel --install initramfs
Btrfs root non si avvia
L'initramfs Genkernel creata con il comando di cui sotto non carica btrfs:
root #
genkernel --btrfs initramfs
Compilare il supporto per btrfs nel kernel come modulo, o Dracut per generare l'initramfs.
Vedere anche
- Btrfs snapshots - Script che crea istantanee quando i file sono cambiati.
- Btrfs/System Root Guide - Usa il filesystem Btrfs come una raccolta di sottovolumi incluso uno come root di sistema.
- Guida alla radice del sistema nativo di Btrfs - Una guida alternativa sull'utilizzo di un sottovolume in un filesystem Btrfs come root del sistema.
- Ext4 — un open source filesystem e la versione più recente della serie estesa di filesystem.
- Btrbk - Uno strumento di backup per i sottovolumi btrfs, che sfrutta le capacità specifiche di btrfs per creare istantanee atomiche e trasferirle in modo incrementale in posizioni di backup specificate.
- Samba shadow copies - Utilizzo di Samba per esporre le copie shadow come 'versioni precedenti' ai client Windows.
- Snapper — a command-line program to create and manage filesystem snapshots, allowing viewing or reversion of changes.
- ZFS — a next generation filesystem created by Matthew Ahrens and Jeff Bonwick.
Risorse esterne
- https://wiki.debian.org/Btrfs - Guida del wiki Debian.
- https://wiki.archlinux.org/index.php/Btrfs Btrfs article - Guida del wiki Arch Linux.
- http://www.funtoo.org/BTRFS_Fun - BTRFS Fun dal wiki di Funtoo.
- http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html - Suggerimenti e trucchi su come risolvere i problemi del filesystem di Btrfs in alcune situazioni.
Riferimenti
- ↑ Examining btrfs, Linux’s perpetually half-finished filesystem
- ↑ man page for btrfs-filesystem(8), Btrfs wiki. Retrieved on 6th February, 2017.
- ↑ https://btrfs.wiki.kernel.org/index.php/Compression#Can_I_set_the_compression_level.3F
- ↑ https://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs.git/commit/?h=next&id=5c1aab1dd5445ed8bdcdbb575abc1b0d7ee5b2e7
- ↑ https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f51d2b59120ff364a5e612a594ed358767e1cd09
- ↑ https://btrfs.wiki.kernel.org/index.php/Compression#How_can_I_determine_compressed_size_of_a_file.3F
- ↑ Article mentioning that parity RAID code has multiple serious data-loss bugs, Btrfs wiki. Retrieved on January 1st, 2017.
- ↑ Michael Larabel, Btrfs RAID56 "Mostly OK", Phoronix. July 8, 2017.
- ↑ btrfs: scrub: Fix RAID56 recovery race condition, source commit, April 18th 2017.
- ↑ GIT PULL Btrfs from Chris Mason, Linux kernel mailinglist, May 9th 2017.
- ↑ 11.0 11.1 Section explaining the differences between subvolumes and logical volumes in LVM, Btrfs wiki.Retrieved on January 1st, 2017.
- ↑ Documentation for /proc/sys/vm/*, Kernel.org. Retrieved on January 1st, 2017.