File systems (Italiano)
Da Wikipedia:
- Un file system (in acronimo FS), in informatica, indica informalmente un meccanismo con il quale i file sono posizionati e organizzati su dispositivi informatici utilizzati per l'archiviazione dei dati ad esempio unità di memoria di massa (come unità a nastro magnetico, dischi rigidi, dischi ottici, unità di memoria a stato solido - o in casi particolari anche nella RAM) o su dispositivi remoti tramite protocolli di rete.
Ogni singola partizione del disco può essere configurata utilizzando uno dei tanti file system disponibili. Ognuno ha i propri vantaggi, svantaggi, e idiosincrasie uniche. Segue una breve panoramica dei filesystem supportati, i link puntano alle pagine di wikipedia che forniscono molte più informazioni:
Prima di essere formattato, un disco deve essere partizionato.
Tipi di filesystem
Vedere filesystems(5) per una carrellata generale e l'articolo Comparazione tra file system per una comparativa dettagliata.
File system | Comando di creazione | Patchset del kernel | Utility userspace | Note |
---|---|---|---|---|
APFS | mkapfs(8) | linux-apfs-rw-dkms-gitAUR | apfsprogs-gitAUR | macOS (10.13 and newer) file system. Read only, experimental. |
Bcachefs | bcachefs(8) | linux-bcachefs-gitAUR | bcachefs-tools-gitAUR | |
Reiser4 | mkfs.reiser4(8) | reiser4progsAUR | ||
ZFS | zfs-linuxAUR, zfs-dkmsAUR | zfs-utilsAUR | Esiste un suo porting: OpenZFS |
Journaling
Tutti i filesytem citati sopra, con le eccezioni di exFAT, FAT16/32, Reiser4 (opzionale), Btrfs e ZFS, usano il journaling. Questo, loggando i cambiamenti prima che siano scritti effettivamente su filesystem, garantisce la fault-resilience. In caso di un crash di sistema o della mancanza improvvisa di corrente elettrice, questo tipo di filesystem sono più veloci a tornare online e si corrompono con meno facilità. Il logging viene salvato in un'area dedicata del filesystem.
Non tutte le tecniche di journaling sono uguali: ext3 e ext4 usano il journaling data-mode, il quale logga sia i dati che i metadati, ma può eventualmente loggare solo i metadati. Il journaling data-mode comporta una perdita di velocità e non è attivo di default. Allo stesso modo Reiser4 offre i cosiddetti "transaction models" che modificano sis le features che fornisce e pure il journaling. Usa una diversa tecnica di journaling, un modello speciale chiamato wandering logs che elimina la necessità di scrivere su disco due volte, write-anywhere un puro approccio copy-on-write (pressoché equivalente a quello di default di btrfs, ma con una differenza sostanziale nel design dell'"albero") e un approccio combinato chiamato ibrido, che si alterna euristicamente con i due precedenti.
Gli altri filesystem utilizzano un journaling ordered-mode, il quale logga solo i metadati: tutti i filesystem sono in grado di tornare online in uno stato consistente dopo un crash, ma il journaling data-mode fornisce una migliore protezione contro la corruzione e la perdita dei dati. Tuttavia con il journaling data-mode si ha una perdita di prestazioni perché vendono eseguite due operazioni di scrittura, una sul journal e una sul disco (cosa che viene evitata da Reiser4 con il "wandering logs"). Quando si sceglie un filesystem bisogna tener conto del compromesso tra prestazioni e integrità dei dati. Reiser4 è l'unico filesystem opera con piena atomicità e fornisce i checksum sia per i metadati che per i dati (un'operazione può verificarsi o non verificarsi e avvengono corruzioni di dati a causa di operazioni che si verificano a metà), per cui è molto meno incline alla perdita di dati rispetto ad altri file system come Btrfs.
I filesystem basati sul copy-on-write (conosciuto anche come write-anywhere), come as Reiser4, Btrfs and ZFS, non hanno bisogno di utilizzare il classico journal per proteggere i metadati, perché non vengono mai fatti update. Sebbenbe Btrfs un albero di log simile a un journal, viene utilizzato solo per velocizzare le operazioni di fdatasync e fsync.
Filesystem basati su FUSE
Vedere FUSE.
Filesystem stackable
- overlayfs — OverlayFS è uin servizio filesystem per Linux che implementa un mount union per altri filesystem.
- Unionfs — Unionfs è un servizio filesystem per Linux, FreeBSD and NetBSD che implementa un mount union per altri filesystem.
- https://unionfs.filesystems.org/ || not packaged? search in AUR
- aufs — Advanced Multi-layered Unification Filesystem, un filesystem union basato su FUSE, riscrittura completa di Unionfs, non è stato inserito nella mainline del kernel Linux come invece è stato fatto con OverlayFS.
- eCryptfs — The Enterprise Cryptographic Filesystem è un insieme di software per la cifratura dei dischi per Linux. Implementato come un layer di cifratura di a livello di filestyem conforme a POSIX, con l'obiettivo di offrire funzionalità simili a quelle di GnuPG a livello di sistema operativo.
- mergerfs — un filesystem union basato su FUSE.
- mhddfs — Filesystem FUSE Multi-HDD, un filesystem union basato su FUSE.
- http://mhddfs.uvw.ru || mhddfsAUR
- unionfs-fuse — Un'implementazione di Unionfs a livello userspace.
File systems sola lettura
- EROFS — Enhanced Read-Only File System è un filesystem di sola lattura leggero, ha lo scopo di migliorare le prestazioni e avere storage con compressione.
- SquashFS — SquashFS è un filesystem in sola lettura compresso. SquashFS comprime i file, inode e cartelle, e supporta blocchi fino a 1MB per una migliore compressione.
Filesystem clustered
- Ceph — Systema di archiviazion unificato e distribuito progettato per avere prestazioni eccellenti, affidabilità e scalabilità.
- Glusterfs — Filesyste cluster capace di scalare fino a diversi petabyte.
- IPFS — Un protocollo hypermedia peer-to-peer per rendere il web più veloce, più sicuro, e più aperto. IPFS ha lo scopo di rimpiazzare HTTP e costruire un web migliore per tutti nois. Usea blocchi per archiviare parti di un file, ogni nodo di rete archivia solo il contenuto di interesse, esegue deduplica e distribuzione. (attualmente è in fase alpha)
- MooseFS — MooseFS è un filestyem fault tolerant, ad alta disponibilità e a elevate prestazioni di scalabilità distribuito sulla rete.
- OpenAFS — Implementazione opensource del filesystem distribuito AFS
- OrangeFS — OrangeFS è un filestyem di rete scalabile progettato per l'accesso parallelo e trasparente a storage multi-server. Ha il supporto a MPI-IO ottimizzato per applicazioni parallele e distribuite. Semplifica l'utilizzo di storage parallelo non solo per i client Linux, ma anche per Windows, Hadoop, and WebDAV, e compatibile con POSIX ed è parte del kernel Linux dalla versione 4.6.
- https://www.orangefs.org/ || not packaged? search in AUR
- Sheepdog — Un sistema di archiviazione a oggetti distribuito per servizi a divolume e container, gestisce dischi e nodi in maniera intelligente.
- Tahoe-LAFS — Tahoe Least-Authority File Store è un Data store distribuito e un Wikipedia:it:File system distribuito gratuito, opnesource, sicuro, decentralizzato, fault-tolerant e peer-to-peer.
Identificare i filesystem esistenti
Per identificare i filesystem esistenti si può usare lsblk:
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 vfat Transcend 4A3C-A9E9
Se è predente un filestyem sarà mostrato nella colonna FSTYPE
. Se è già montato, apparirà nella colonna MOUNTPOINT
.
Creare un filesystem
I filesystem generalmente vengono creati su una Partizione, all'interno di un container logico come LVM, RAID e dm-crypt, o su un file (vedere Wikipedia:it:Loop device). Questa sezione descrive come creare un filestyem su una partizione.
- Dopo la creazione di un nuovo filesystem, è improbabile che i dati precedentemente presenti sulla partizione interessata possano essere recuperati. Creare un backup di tutti i dati che si vogliono mantenere.
- L'utilizzo che si farà di una partizione può restringere il ventaglio dei filestyem che si possono scegliere. Per esempio, una partizione di sitema EFI può contenere un filestyem FAT32, e il filesystem che conterrà la cartella
/boot
deve essere supportato dal boot loader.
Prima di continuare, bisogna identificare il dispositivo dove verrà creato il filesystem and vedere se è montato o meno. Per 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 filesystem montati devono essere smontati prima di procedere. Nell'esempio sopra un filestyem ext4 è presente sulla partizion /dev/sda2
ed è mountato su /mnt
. Si dovrebbe smontarlo con:
# umount /dev/sda2
Per trovare solo i filestyem montati, vedere #Lista dei filesystem montati.
Pre creare un nuovo filestyem, usare mkfs(8). Vedere #Tipi di filesystem per travare quello giusto, così come le utility userspace da installare per un particolare filesystem.
Per esempio, per creare un nuovo filesystem di tipo ext4 (abituale per le partizioni dati Linux) su /dev/sda1
, eseguire:
# mkfs.ext4 /dev/sda1
- Utilizzare il flag
-L
di mkfs.ext4 per specificare un'etichetta di filesystem. e2label può essere usato per cambiare l'etichetta di un filesystem esistente. - I filesystem possono essere ridimensionati dopo la creazione, con alcune limitazioni. Per esempio, la dimensione di un filesystem XFS può essere aumentata, ma non diminuita. Vedere Wikipedia:Comparison of file systems#Resize capabilities e la documentazione dello specifico filesystem per i dettagli.
Il nuovo filestyem ora può essere montato in nella cartella che si preferisce.
Montare un filesystem
Per montare manualmente un filesystem collocato su un dispositivi (es., una partizione) su una cartella, usare mount(8). Questo esempio mounta /dev/sda1
su /mnt
.
# mount /dev/sda1 /mnt
Questo comando collega il filesystem su /dev/sda1
alla cartella /mnt
, rendendone visibile il contenuto. Tutti i dati precedentemente esistenti sulla cartella /mnt
prima del comando saranno invisibili fino a quando il filesystem sarà montato.
fstab contiene le informazioni su come i dispositivi dovrebbero essere montati automaticamente se 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 comnado mount solo il dispositivo o il punto di mount, questa informazione verrà utilizzata per il mount. Per esempio, se /etc/fstab
contenesse una linea che indica che /dev/sda1
deve essere montato su /mnt
, il comando seguente monterà automaticamente il dispositivo su quella cartella:
# mount /dev/sda1
o
# mount /mnt
mount contiene diverse opzioni, che dipendono dallo specifico filestyem. Le opzioni posso essere cambiate nei seguenti modi:
- usando i flag dalla linea di comando con mount
- editando Fstab (Italiano)
- creando delle regole Udev (Italiano)
- compilando il kernel personalmente
- o usando script specifici per il mount dei filesystem (si trovano in
/usr/bin/mount.*
).
Consultare questi articoli e l'articolo inerente al filestyem di interesse per maggiori informazioni.
/run/media/system/device_identifier/
. Ciò permette di montare facilmente un filesystem senza bisogno di decidere dove. Vedere systemd-mount(1) per il suo utilizzo e per maggior dettagli.Lista dei filesystem montati
Per visualizzare la lista di tutti i filesystems montati, usare findmnt(8):
$ findmnt
findmnt prende in ingresso tutta una serie di argomenti per filtrare l'output o per mostrare informazioni aggiuntive. Per esempio, si può passare come argomento un dispositivo o un punto di mount per visualizzare solo l'informazione che è specificata:
$ findmnt /dev/sda1
findmnt raccoglie le informazioni da /etc/fstab
, /etc/mtab
, e /proc/self/mounts
.
Smontare un filesystem
Per smontare un filesyste usare umount(8). Si può specificare sia il dispositivo che lo contiene (es., /dev/sda1
) o il punto di mount (es., /mnt
):
# umount /dev/sda1
o
# umount /mnt