File systems (Italiano)
Da Wikipedia:
- Un file system (in acronimo FS) è una struttura dati deputata alla gestione e all'archiviazione dei file su un computer. Il termine viene utilizzato anche in riferimento al file system driver, ovvero tutta quella serie di programmi solitamente integrati nel sistema operativo che sono necessari ad operare il file system. E' importante non confondere i file system con i file database o le basi di dati più in generale. Anche se in alcuni casi possono sembrare (superficialmente) sovrapponibili sono progettati per servire casi d'uso molto diversi.
Ogni singola partizione del drive può essere configurata utilizzando uno dei tanti file system diversi disponibili. Ognuno presenta i propri vantaggi, svantaggi e le proprie idiosincrasie peculiari. Segue una breve panoramica dei file system supportati, i rispettivi link indirizzano alle pagine di Wikipedia che forniscono molte più informazioni.
Tipi di file system
Vedere filesystems(5) per una panoramica generale e Wikipedia:Comparison of file systems per un confronto dettagliato. I file system già caricati dal kernel o integrati sono elencati in /proc/filesystems
, mentre tutti i moduli installati possono essere visualizzati eseguendo ls /lib/modules/$(uname -r)/kernel/fs
.
File system | Comando per creazione | Utility userspace | Archiso [1] | Documentazione kernel [2] | Note |
---|---|---|---|---|---|
Bcachefs | bcachefs(8) | bcachefs-tools | Sì | Disponibile in Linux 6.7+, sperimentale | |
Btrfs | mkfs.btrfs(8) | btrfs-progs | Sì | btrfs.html | Stato stabilità |
VFAT | mkfs.fat(8) | dosfstools | Sì | vfat.html | File system Windows 9x |
exFAT | mkfs.exfat(8) | exfatprogs | Sì | File system nativo in Linux 5.4 [3] | |
mkexfatfs(8) | exfat-utils | No | N/A (basato su FUSE) | ||
F2FS | mkfs.f2fs(8) | f2fs-tools | Sì | f2fs.html | Dispositivi basati su flash |
ext3 | mkfs.ext3(8) | e2fsprogs | Sì | ext3.html | |
ext4 | mkfs.ext4(8) | e2fsprogs | Sì | ext4.html | |
HFS | mkfs.hfsplus(8) | hfsprogsAUR | No | hfs.html | File system Mac OS Classic |
HFS+ | mkfs.hfsplus(8) | hfsprogsAUR | No | hfsplus.html | File system macOS (8–10.12) |
JFS | mkfs.jfs(8) | jfsutils | Sì | jfs.html | |
NILFS2 | mkfs.nilfs2(8) | nilfs-utils | Sì | nilfs2.html | Dispositivi flash raw, ad es. scheda SD |
NTFS | Sì | ntfs3.html | File system Windows NT file system. Nuovo driver disponibile dalla versione 5.15 di Linux. | ||
ntfs-3g[4] | No | ntfs.html[link interrotto 2024-07-30] | Vecchio driver. Supporto in scrittura estremamente limitato. I kernel ufficialmente supportati sono compilati senza l'opzione CONFIG_NTFS_FS , pertanto questo driver non è disponibile.
|
||
mkfs.ntfs(8) | Sì | N/A (basato su FUSE) | Driver FUSE con funzionalità estese. | ||
ReiserFS | mkfs.reiserfs(8) | reiserfsprogs | Sì | ReiserFS è deprecato nella versione 5.18 di Linux e ne è prevista la rimozione dal kernel nel 2025. | |
UDF | mkfs.udf(8) | udftools | Sì | udf.html | |
XFS | mkfs.xfs(8) | xfsprogs | Sì |
xfs.html |
Impossibile ridurne le dimensioni |
File system | Comando per creazione | Patchset del kernel | Utility userspace | Note |
---|---|---|---|---|
APFS | mkapfs(8) | linux-apfs-rw-dkms-gitAUR | apfsprogs-gitAUR | File system macOS (versione 10.13 e successive). Sola lettura, sperimentale. Vedere anche la versione FUSE apfs-fuse-gitAUR. |
Reiser4 | mkfs.reiser4(8) | reiser4progsAUR | ||
ZFS | zfs-linuxAUR, zfs-dkmsAUR | zfs-utilsAUR | Esiste un suo porting: OpenZFS |
Journaling
Tutti i file system precedentemente citati, con le eccezioni di exFAT, FAT16/32, Reiser4 (opzionale), Bcachefs, Btrfs e ZFS, fanno ricorso al journaling. Il journal garantisce la fault resilience registrando in un log le modifiche prima che queste vengano effettivamente applicate al file system. In caso di un crash di sistema o di interruzione improvvisa dell'alimentazione elettrica, questi file system sono più veloci a tornare online e presentano una probabilità più bassa di corrompersi. Le registrazione dei log avviene in un'area appositamente dedicata del file system.
Non tutte le tecniche di journaling sono uguali. Ext3 ed ext4 offrono il journaling data-mode, il quale registra nei log sia i dati che i metadati, ma può eventualmente effettuare il log dei soli metadati. Il journaling data-mode comporta una perdita di velocità e non è attivo per impostazione predefinita. Similmente, Reiser4 offre i cosiddetti "modelli di transazione" che modificano non solo le funzionalità fornite ma anche la modalità di journaling. Questo file system utilizza diverse tecniche di journaling: un modello speciale chiamato wandering logs che elimina la necessità di scrivere su disco due volte, write-anywhere un approccio copy-on-write puro (pressoché equivalente a quello predefinito di btrfs, ma con una differenza sostanziale nella struttura dell'"albero") e un approccio combinato detto ibrido, che alterna in modo euristico i due precedenti.
Gli altri file system offrono una tipologia di journaling ordered-mode, che registra nei log solo i metadati. Benché tutti i file system con journaling sono in grado di riportare il sistema in uno stato valido in seguito a un crash, solo il journaling data-mode offre la massima protezione contro la corruzione e la perdita di dati. Tutto ciò tuttavia a prezzo di un compromesso in termini di prestazioni, in quanto il journaling data-mode effettua due operazioni di scrittura: la prima nel journal e la seconda su disco (Reiser4 evita questa limitazione grazie alla sua funzione "wandering logs"). Quando si sceglie il tipo di file system da utilizzare è opportuno valutare il compromesso necessario tra velocità del sistema e sicurezza dei dati. Reiser4 è l'unico file system che, in virtù del modo in cui è progettato, opera con piena atomicità e fornisce i checksum sia per i metadati che per i dati inline (un'operazione viene eseguita per intero o non viene eseguita del tutto e questo evita la corruzione o la distruzione di dati dovuta a operazioni solo parzialmente eseguite), ed è pertanto molto meno incline alla perdita di dati rispetto ad altri file system come Btrfs.
I file system basati su tecnologia copy-on-write (nota anche come write-anywhere), quali Reiser4, Btrfs, Bcachefs e ZFS, non necessitano di un journal tradizionale per proteggere i metadati, in quanto il loro aggiornamento non avviene mai in-place. Sebbene Btrfs continui a possedere un albero di log simile a un journal, questo viene utilizzato esclusivamente per velocizzare le operazioni di fdatasync/fsync.
File system basati su FUSE
Vedere FUSE.
File system configurabili in stack
- eCryptfs — Il file system enterprise crittografico è un pacchetto di software per la cifratura dei dischi in Linux. È implementato come un layer di cifratura conforme allo standard POSIX a livello di file system, con l'obiettivo di offrire funzionalità simili a quelle di GnuPG ma a livello di sistema operativo.
- mergerfs — uno union file system basato su FUSE.
- mhddfs — File system FUSE per HDD multipli, uno union file system basato su FUSE.
- http://mhddfs.uvw.ru || mhddfsAUR
- overlayfs — OverlayFS è un servizio di file system per Linux che offre un'implementazione union mount per altri file system.
- unionfs-fuse — Un'implementazione a livello di spazio utente di Unionfs.
File systems in sola lettura
- EROFS — Enhanced Read-Only File System è un file system in sola lettura leggero, che si prefigge di migliorare le prestazioni e offrire la compressione della capacità di archiviazione.
- SquashFS — SquashFS è un file system compresso in sola lettura. SquashFS comprime i file, gli inode e le cartelle e supporta blocchi di dimensioni massime di 1 MiB, per una migliore compressione.
Clustered file system
- BeeGFS — Un file system parallelo, sviluppato e ottimizzato per computing ad alte prestazioni.
- Ceph — Sistema di archiviazione unificato e distribuito, progettato per offrire prestazioni, affidabilità e scalabilità eccellenti.
- https://ceph.com/ || cephAUR
- Glusterfs — Cluster file system che offre una scalabilità fino a diversi petabyte.
- IPFS — Un protocollo hypermedia peer-to-peer per rendere il web più veloce, più sicuro, e più aperto. IPFS mira a sostituire HTTP e a costruire un web migliore per tutti. Utilizza dei blocchi per archiviare parti di un file, ogni nodo di rete archivia solo il contenuto di proprio interesse, offre funzionalità di deduplicazione e distribuzione, oltre a un sistema scalabile, il cui unico limite è costituito dagli utenti. (Attualmente in stadio di sviluppo alpha)
- MinIO — MinIO offre alte prestazioni oltre ad archiviazione degli oggetti compatibile con S3.
- MooseFS — MooseFS è un file system con tolleranza agli errori, ad alta disponibilità ed elevate prestazioni, scalabile e distribuito sulla rete.
- OpenAFS — Implementazione open source del file system distribuito AFS
- OrangeFS — OrangeFS è un file system di rete scalabile progettato per l'accesso parallelo e trasparente a sistemi di storage multi-server. Offre supporto MPI-IO ottimizzato per applicazioni parallele e distribuite. Semplifica l'utilizzo di soluzioni di storage parallelo non solo per i client Linux, ma anche per Windows, Hadoop, e WebDAV. È compatibile con gli standard POSIX. È parte del kernel Linux a partire dalla versione 4.6.
- https://www.orangefs.org/ || not packaged? search in AUR
- Sheepdog — Un sistema di archiviazione di oggetti distribuito per volumi e servizi di container, gestisce dischi e nodi in modo intelligente.
- Tahoe-LAFS — Tahoe Least-Authority File Store è un data store distribuito e un file system distribuito libero e aperto, sicuro, decentralizzato, con tolleranza agli errori e con distribuzione peer-to-peer.
File system con condivisione dei dischi
- GFS2 — GFS2 permette a tutti i membri di un cluster di avere accesso diretto e simultaneo alla medesima unità di archiviazione a blocchi condivisa
- OCFS2 — Oracle Cluster File System (versione 2) è un file system con condivisione dei dischi sviluppato da Oracle Corporation e rilasciato sotto licenza GNU General Public License
- VMware VMFS — VMFS (Virtual Machine File System) di VMware è utilizzato dalla suite di virtualizzazione server della società, vSphere.
- https://www.vmware.com/products/vi/esx/vmfs.html[link interrotto 2024-07-30] || vmfs-toolsAUR
Identificazione dei file system esistenti
Per identificare i file system esistenti è possibile utilizzare lsblk:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 vfat Transcend 4A3C-A9E9
Un eventuale file system, se presente, verrà indicato nella colonna FSTYPE
. Se è già montato, apparirà nella colonna MOUNTPOINT
.
Creazione di un file system
Di norma i file system vengono creati su una partizione, all'interno di container logici come LVM, RAID e dm-crypt, o su un normale file (vedere Wikipedia:it:Loop device). La presente sezione descrive come creare un file system su una partizione.
- Dopo aver creato un nuovo file system, è improbabile che i dati precedentemente presenti sulla partizione interessata possano essere recuperati. Creare un backup di tutti i dati che si si desidera conservare.
- L'utilizzo che si farà di una partizione può restringere il ventaglio di scelta dei file system. Ad esempio, una partizione di sistema EFI può contenere un file system FAT32, e il file system che conterrà la cartella
/boot
deve essere supportato dal boot loader.
Prima di continuare, identificare il dispositivo su cui verrà creato il file system e controllare se è montato o meno. Ad esempio:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 C4DA-2C4D ├─sda2 ext4 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 /mnt └─sda3 56adc99b-a61e-46af-aab7-a6d07e504652
I file system montati devono essere smontati prima di procedere. Nell'esempio precedente la partizione /dev/sda2
contiene un file system ed è montata in /mnt
. Per smontarla andrebbe eseguito:
# umount /dev/sda2
Per trovare solo i file system montati, vedere #Elenco dei file system montati.
Per creare un nuovo file system, utilizzare mkfs(8). Vedere #Tipi di file system per trovare il tipo esatto di file system e le utility in spazio utente da installare per un particolare file system.
Ad esempio, per creare un nuovo file system di tipo ext4 (comune per le partizioni dati Linux) su /dev/sda1
, eseguire:
# mkfs.ext4 /dev/sda1
- Utilizzare la flag
-L
di mkfs.ext4 per specificare un'etichetta del file system. È possibile utilizzare e2label per cambiare l'etichetta di un file system esistente. - I file system possono essere ridimensionati dopo la creazione, con alcune limitazioni. Ad esempio, le dimensioni di un file system XFS possono essere aumentate, ma non diminuite. Vedere Wikipedia:Comparison of file systems#Resize capabilities e la documentazione del rispettivo file system per i dettagli.
Il nuovo file system ora può essere montato nella cartella di preferenza.
Montaggio di un file system
Per montare manualmente un file system presente su un dispositivo (ad es., una partizione) in una cartella, utilizzare il comando mount(8). Questo esempio esegue il montaggio di /dev/sda1
in /mnt
.
# mount /dev/sda1 /mnt
Questo comando collega il file system su /dev/sda1
alla cartella /mnt
, rendendo visibile il contenuto del file system stesso. Tutti i dati precedentemente esistenti nella cartella /mnt
prima del comando non saranno più visibili fino a quando il file system non verrà smontato.
Il file fstab contiene le informazioni su come i dispositivi dovrebbero essere montati automaticamente, ove presenti. Vedere l'articolo fstab per maggiori informazioni su come modificare questo comportamento.
Se un dispositivo è specificato all'interno di /etc/fstab
e si passa al comando di mount solo il dispositivo o il punto di montaggio, questa informazione verrà utilizzata per eseguire il montaggio. Ad esempio, se /etc/fstab
contiene una linea che indica che /dev/sda1
deve essere montato su /mnt
, il comando seguente eseguirà automaticamente il montaggio del dispositivo in quella posizione:
# mount /dev/sda1
Oppure
# mount /mnt
mount contiene diverse opzioni, molte delle quali dipendono dal file system specificato. Le opzioni posso essere cambiate nei seguenti modi:
- utilizzando le flag dalla linea di comando con il comando mount
- modificando fstab
- creando delle regole udev
- compilando il proprio kernel
- o utilizzando script di montaggio specifici per il file system (disponibili in
/usr/bin/mount.*
).
Consultare questi articoli correlati e l'articolo inerente al file system di interesse per maggiori informazioni.
- I file system possono essere montati anche con systemd-mount in luogo di mount. Se il punto di montaggio non è specificato, il file system verrà montato in
/run/media/system/identificatore_del_dispositivo/
. Ciò permette di eseguire facilmente il montaggio di un file system senza bisogno di decidere la posizione. Vedere systemd-mount(1) per il suo utilizzo e per maggior dettagli. - Per eseguire il montaggio dei file system come utente non privilegiato, vedere udisks#Usage. Questa soluzione permette inoltre di eseguire il montaggio senza possedere i permessi di root, in assenza di un ambiente grafico completo o di un file manager che utilizzi udisks.
Elenco dei file system montati
Per visualizzare l'elenco di tutti i file system montati, utilizzare findmnt(8):
$ findmnt
findmnt accetta un'ampia serie di argomenti in grado di filtrare l'output e per mostrare informazioni aggiuntive. Ad esempio, accetta come argomento un dispositivo o un punto di montaggio per visualizzare solo le informazioni relative a quanto specificato:
$ findmnt /dev/sda1
findmnt raccoglie le informazioni da /etc/fstab
, /etc/mtab
, e /proc/self/mounts
.
Smontaggio di un file system
Per smontare un file system utilizzare umount(8). È possibile specificare sia il dispositivo che lo contiene (ad es., /dev/sda1
) o il punto di montaggio (ad es., /mnt
):
# umount /dev/sda1
oppure
# umount /mnt
Risoluzione di problemi
"linux Structure needs cleaning"
Smontare il file system ed eseguire fsck sul volume che presenta questo problema.