Btrfs

File system per Linux

Btrfs (B-tree FS, "Butter FS" o "Better FS") è un file system per Linux di tipo copy-on-write dotato di checksumming, annunciato da Oracle Corporation nel 2007 e pubblicato sotto la GNU General Public License (GPL).

Btrfs
Dati generali
SviluppatoreOracle Corporation
Nome completoB-tree FS o "Butter FS"
IntroduzioneVersione finale: 0.20
Prima apparizione: 2008 Linux
Struttura
Struttura contenuti directoryB*Tree
Allocazione dei fileextent
Limiti
Dimensione massima di un file16 EB
Numero massimo di file264
Dimensione massima del nome di un file255 byte
Dimensione massima del volume16 EB
Caratteri permessi nel nome di un fileTutti i byte eccetto NULL e '/'
Caratteristiche
AttributiPOSIX
Permessi file systemPOSIX e ACL
Compressione trasparenteSì (ZLIB, LZO, ZSTD)
Crittografia trasparenteNo

Nato inizialmente come risposta al filesystem ZFS, è il filesystem scelto da MeeGo, il sistema operativo open source sviluppato da Intel e Nokia per smartphone, netbook e navigatori satellitari. Esso è disponibile in diverse distribuzioni Linux, come Arch Linux dal gennaio 2012[1], Debian dalla versione 6[2], Fedora dalla versione 16[3], Gentoo Linux dal mese di luglio 2010[4], OpenSUSE a partire dalla versione 12.1[5], e Ubuntu dalla versione 10.04[6]. La prima distribuzione enterprise di linux che abbia adottato btrfs è SUSE 11 SP2, resa disponibile al grande pubblico il 2 marzo 2012.[senza fonte]

Chris Mason, direttore del comparto Linux Kernel Engineering di Oracle e autore di btrfs, ha affermato: «Lo scopo principale è di permettere a Linux di scalare sulle ingenti risorse di storage che saranno disponibili in futuro. Scalare bene non si limita alle sole funzionalità di completo indirizzamento ma significa anche avere un'interfaccia pulita per l'amministrazione e una gestione che sia affidabile e che permetta agli utenti di comprendere chiaramente ogni passaggio.»

La prima comparsa di Btrfs nel kernel Linux risale alla prerelease 2.6.29-rc1 del kernel Linux, mentre la prima versione definita stabile è stata pubblicata nella versione 3.10. Lo sviluppo del filesystem procede tuttora.

Struttura

modifica

Il filesystem Btrfs è di tipo COW (copy-on-write), il che permette di creare snapshot e cloni. Tutti i dati e i metadati sono validati tramite CRC. Btrfs è composto da un insieme di B-Tree con una radice comune; vengono utilizzati extent di dimensione variabile. Ciò permette di ridurre notevolmente la frammentazione in scrittura. I metadati sono contenuti all'interno di B-Tree che possegono tre tipi di strutture:

  • Il Block header: è un header presente al principio di ogni blocco.
  • La Key: è una struttura che permette di puntare ad un oggetto; possiede un Object ID da 64 bit, un Type da 8 bit che serve a determinare il tipo di struttura associato ad un determinato blocco e un Offset da 64 bit.
  • L'item: è una struttura che contiene una key più un campo offset da 32 bit e un campo size da 32 bit.

I blocchi intermedi dell'albero sono formati da coppie di key e block-pointer, mentre le foglie, invece, dalla coppia item/data. All'inizio del blocco relativo ad una foglia, dopo il Block header, si trova l'array item; al fondo del blocco l'array dei data, ordinato in modo inverso rispetto al primo, quindi entrambi gli array crescono verso il centro. Ogni singolo B-tree è un oggetto a sé stante, quindi ogni volta che sarà necessario creare o copiare un file, si istanzierà un nuovo object-id appartenente a una key associata al nodo radice di un B-tree.

Vi è un superblocco posto in una posizione non variabile del filesystem che punta a una "tree of tree roots" (letteralmente albero di radici di alberi). Questo B-tree, dunque, tiene traccia degli starting point, quindi dei blocchi radice di ogni altro B-Tree presente. I B-tree sono così divisi tra loro:

  • Extent-allocation tree: si tratta di un albero che traccia ogni extent allocato nel volume ed ha quindi la funzione di gestire lo spazio libero.
  • Cheecksum-tree: è un B-tree nel quale si trova un valore di checksum per ogni extent allocato all'interno del volume.
  • Chunk and device tree: è un livello di astrazione tra il filesystem e i dischi, quindi cambia a seconda del sistema RAID scelto, presentando una mappa dei blocchi reali e della loro struttura logica.
  • Sub-volume: Un subvolume è un filesystem su cui si possono operare azioni di cloning e snapshot. L'insieme di questi B-tree compone tutti i file e le directory visibili.
  • Reloc Tree: è un B-tree funzionale alla reallocazione degli extent, è usato quindi nella routine di frammentazione del filesystem.
  1. ^ (EN) Changelog of package "btrfs-progs" [collegamento interrotto], su projects.archlinux.org, ArchLinux. URL consultato il 12 novembre 2014.
  2. ^ (EN) Btrfs, su wiki.debian.org, Debian wiki. URL consultato il 12 novembre 2014.
  3. ^ (EN) Btrfs, su fedoraproject.org, FedoraProject. URL consultato il 12 novembre 2014.
  4. ^ (EN) Changelog of "btrfs-progs" package, su sources.gentoo.org, Gentoo. URL consultato il 12 novembre 2014 (archiviato dall'url originale il 12 novembre 2014).
  5. ^ Portale openSUSE 12.1, su it.opensuse.org, openSUSE.org. URL consultato il 12 novembre 2014.
  6. ^ (EN) “btrfs-tools” package in Ubuntu Launchpad, su launchpad.net, Canonical LTD. URL consultato il 12 novembre 2014.

Altri progetti

modifica

Collegamenti esterni

modifica
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica