Btrfs/it

Btrfs è Article description::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 filesystems 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 un numero di 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 la propria implementazione RAID così che non sono necessari né LVM né per avere il RADI. Ad oggi sono supportati RAID 0 e 1; RAID 5 e 6 sono in fase di sviluppo.
 * Le partitioni sono optional - Mentre Btrfs può lavorare con le partizioni, esso ha ANCHE il potenziale di poter utilizzare i dispositivi 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.

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.

Kernel
Attivare le seguenti opzioni del kernel per abilitare il supporto Btrfs:

Emerge
Il pacchetto contiene le necessarie utilità per lavorare con il filesystem Btrfs.

Utilizzo
Digitare lunghi comandi Btrfs può rapidamente diventare un problema. Ogni comando (oltre al comando iniziale ) può essere ridotto a 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:

Abbreviare ciascuno dei comandi dopo riducendoli al loro prefisso unico e più breve. In tale contesto, unico significa che nessun altro comando corrisponderà a quel comando più breve. La versione breve del comando di cui sopra, quindi, è:

Nessun altro comando inizia con  ;   è il solo. La stessa cosa vale per il sotto-comando, sotto il comando.

Creazione
Per creare un filesystem Btrfs nella partizione :

Nell'esempio sopra, sostituire  con il numero di partizione e   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:

Montare i filesystems
Dopo la loro creazione, i filesystems possono essere montati in vari modi:


 * - Montare manualmente.
 * - Definire il mount points in 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à.

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:

Check the integrity of the filesystem using the appropriate tool. In the next example, the filesystem is ext4:

Utilizzare per convertire il dispositivo ext* formattato dentro il dispositivo Btrfs formattato:

Assicurarsi di modificare il file dopo che il dispositivo è stato formattato cambiando la colonna relativa al filesystem da ext4 a Btrfs:

Deframmentazione
Un'altra caratteristica di Btrfs è la deframmentazione online. Per deframmentare un filesystem di root Btrfs eseguire:

Compressione
Btrfs supporta la compressione trasparente utilizzando gli algoritmi zlib e lzo.

E' possibile comprimere files specifici utilizzando gli attributi del file:

L'opzione di montaggio  imposta il comportamento di default di comprimere tutti i nuovi files creati. Per recomprimere l'intero file system, eseguire il seguente comando:

In base alle performance della CPU e del disco, utilizzare la compressione lzo potrebbe migliorare l'intero rendimento.

E' possibile utilizzare anche l'algoritmo di compressione zlib al posto di lzo. Zlib è più lento ma ha un rapporto di compressione più alto:

RAID
Creating RAIDs in Btrfs is much easier than creating RAIDs using.

The simplest method is to use the entire device to create a RAID:

Subvolumes
As mentioned above in the features list, Btrfs can create subvolumes. Subvolumes can be used to better organize and manage data. They become especially powerful when combined with snapshots. Important distinctions must be made between Btrfs subvolumes and subvolumes created by Logical Volume Management (LVM). Btrfs subvolumes are not block level devices, they are POSIX file namespaces. They can be created at any location in the filesystem and will act like any other directory on the system with one caveat: subvolumes can be mounted and unmounted. Subvolumes are nestable (subvolumes can be created inside other subvolumes), and easily created or removed.

Create
To create a subvolume, issue the following command inside a Btrfs filesystem's name space:

Replace  with the desired destination and subvolume name. For example, if a Btrfs filesystem exists at, a subvolume could be created inside it using the following command:

List
To see the subvolume(s) that have been created, use the  command followed by a Btrfs filesystem location. If the current directory is somewhere inside a Btrfs filesystem, the following command will display the subvolume(s) that exist on the filesystem:

If a Btrfs filesystem with subvolumes exists at the mount point created in the example command above, the output from the list command will look similar to the following:

Remove
Subvolumes can be properly removed by using the  command followed by the path to the subvolume. All available subvolume paths in a Btrfs filesystem can be seen using the list command above.

As above, replace  with the actual path to the subvolume to be removed. To delete the subvolume used in the examples above, the following command would be issued:

Snapshots
Snapshots are subvolumes that share data and metadata with other subvolumes. This is made possible by Btrfs' Copy on Write (CoW) ability. Snapshots can be used for several purposes, one of which is to create backups of file system structures at specific points in time.

If the root filesystem is Btrfs, it is possible to create a snapshot using the  commands:

The following small shell script can be added to a timed cron job to create a timestamped snapshot backup of a Btrfs formatted root filesystem. The timestamps can be adjusted to whatever is preferred by the user.

Mounting
A subvolume can be mounted in a location different from where it was created, or users can choose to not mount them at all. For example, a user could create a Btrfs filesystem in and create  and  subvolumes. The subvolumes could then be mounted at and, with the original top level subvolume left unmounted. This results in a configuration where the subvolumes' relative path from the top level subvolume is different from their actual path.

To mount a subvolume, perform the following command, where  is the relative path of the subvolume from the top level subvolume, obtainable through the   command:

Similarly, one can update the filesystem tab to mount their Btrfs subvolumes like so:

Clear the free space cache
It is possible to clear Btrfs' free space cache by mounting the filesystem with the  mount option. For example:

Btrfs hogging memory (disk cache)
When utilizing some of Btrfs' special abilities (like making many  copies or creating a crazy amount of snapshots), lot of memory can be eaten and not freed fast enough by the kernel's inode cache. This issue can go undiscovered since memory dedicated to the disk cache might not be clearly visible in traditional system monitoring utilities. The utility (available as part of the  package) was specifically created to determine how much memory kernel objects are consuming:

If the inode cache is consuming too much memory, the kernel can be manually instructed to drop the cache by echoing an integer value to the file.

To be safe, and to help the kernel determine the maximum amount of freeable memory, be sure to run a before running the  commands below:

Most of the time Btrfs users will probably want to to reclaim just the slab objects (dentries and btrfs_inodes):

To clear the entire disk cache (slab objects and the page cache) use instead:

More information on kernel slabs can be found in this dedoimedo blog entry.

Mounting Btrfs fails, returning mount: unknown filesystem type 'btrfs'
The original solution by Tim on Stack Exchange inspired the following solution: build the kernel manually instead of using genkernel:

Btrfs root doesn't boot
Genkernel's initramfs as created with the command below doesn't load btrfs:

Compile support for btrfs in the kernel rather than as a module, or use genkernel-next or Dracut to generate the initramfs.

External resources

 * https://wiki.debian.org/Btrfs - As described by the Debian wiki.
 * https://wiki.archlinux.org/index.php/Btrfs Btrfs article - As described by the Arch Linux wiki.
 * http://www.funtoo.org/BTRFS_Fun - BTRFS Fun on the Funtoo wiki.
 * http://marc.merlins.org/perso/btrfs/post_2014-05-04_Fixing-Btrfs-Filesystem-Full-Problems.html - Tips and tricks on fixing niche Btrfs filesystem problems in some situations.