File systems (Italiano)

From ArchWiki
(Redirected from File Systems (Italiano))
Translation Status: This article is a localized version of File systems. Last translation date: 2024-02-07. You can help to synchronize the translation, if there were changes in the English version.

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 in-tree e FUSE
File system Comando per creazione Utility userspace Archiso [1] Documentazione kernel [2] Note
Bcachefs bcachefs(8) bcachefs-tools Disponibile in Linux 6.7+, sperimentale
Btrfs mkfs.btrfs(8) btrfs-progs btrfs.html Stato stabilità
VFAT mkfs.fat(8) dosfstools vfat.html File system Windows 9x
exFAT mkfs.exfat(8) exfatprogs File system nativo in Linux 5.4 [3]
mkexfatfs(8) exfat-utils No N/A (basato su FUSE)
F2FS mkfs.f2fs(8) f2fs-tools f2fs.html Dispositivi basati su flash
ext3 mkfs.ext3(8) e2fsprogs ext3.html
ext4 mkfs.ext4(8) e2fsprogs 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 jfs.html
NILFS2 mkfs.nilfs2(8) nilfs-utils nilfs2.html Dispositivi flash raw, ad es. scheda SD
NTFS ntfs3.html File system Windows NT file system. Nuovo driver disponibile dalla versione 5.15 di Linux.
ntfs-3g[4] No ntfs.html 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) N/A (basato su FUSE) Driver FUSE con funzionalità estese.
ReiserFS mkfs.reiserfs(8) reiserfsprogs ReiserFS è deprecato nella versione 5.18 di Linux e ne è prevista la rimozione dal kernel nel 2025.
UDF mkfs.udf(8) udftools udf.html
XFS mkfs.xfs(8) xfsprogs

xfs.html
xfs-delayed-logging-design.html[link interrotto 2024-03-03]
xfs-self-describing-metadata.html[link interrotto 2024-03-03]

Impossibile ridurne le dimensioni
File system out-of-tree
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.

Nota: Reiser4 presenta un comportamento pressoché equivalente a quello del journaling predefinito di ext4 (solo metadati) con l'uso del plugin node41, il quale offre anche metadati e checksum inline, opzionalmente combinati con la funzione wandering logs che può essere o meno disponibile a seconda del modello di transazione scelto al momento del montaggio.

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.
https://ecryptfs.org || ecryptfs-utils
  • mergerfs — uno union file system basato su FUSE.
https://github.com/trapexit/mergerfs || mergerfsAUR
  • 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.
https://docs.kernel.org/filesystems/overlayfs.html || linux
  • unionfs-fuse — Un'implementazione a livello di spazio utente di Unionfs.
https://github.com/rpodgorny/unionfs-fuse || unionfs-fuseAUR

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.
https://docs.kernel.org/filesystems/erofs.html || erofs-utils
  • 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.
http://squashfs.sourceforge.net/ || squashfs-tools

Clustered file system

  • BeeGFS — Un file system parallelo, sviluppato e ottimizzato per computing ad alte prestazioni.
https://www.beegfs.io/c/ || beegfs-clientAUR
  • 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.
https://www.gluster.org/ || glusterfs
  • 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)
https://ipfs.io/ || kubo
  • MinIO — MinIO offre alte prestazioni oltre ad archiviazione degli oggetti compatibile con S3.
https://min.io || minio
  • MooseFS — MooseFS è un file system con tolleranza agli errori, ad alta disponibilità ed elevate prestazioni, scalabile e distribuito sulla rete.
https://moosefs.com || moosefs
  • OpenAFS — Implementazione open source del file system distribuito AFS
https://www.openafs.org || openafsAUR
  • 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.
https://sheepdog.github.io/sheepdog/ || sheepdogAUR
  • 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.
https://tahoe-lafs.org/ || tahoe-lafsAUR

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
https://pagure.io/gfs2-utils || gfs2-utilsAUR
  • 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
https://oss.oracle.com/projects/ocfs2/ || ocfs2-toolsAUR
  • 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 || 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.

Nota: Un file system può essere scritto direttamente su un disco, noto come un superfloppy o su un disco privo di partizioni. L'utilizzo di questo metodo comporta delle limitazioni, in particolare se il boot viene eseguito da un drive di questo tipo. Vedere a tal proposito l'esempio con Btrfs.
Warning:
  • 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
Suggerimento:
  • 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.

Suggerimento:
  • 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.

Vedere anche