File System: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
 
(44 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
= Definizione =
{{File_System
Da Wikipedia:<br/>
|successivo=Udev
''In informatica, un file system è, informalmente, un meccanismo con il quale i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un disco rigido o un CD-ROM. Più formalmente, un file system è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei dati. Di fatto, alcuni file system (come NFS) non interagiscono direttamente con i dispositivi di archiviazione.''
}}{{Versioni_compatibili}}{{File_System1}}
== Definizione ==
Da Wikipedia:<br/><br/>
''In informatica, un file system è, informalmente, un meccanismo con il quale i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un disco rigido o un CD-ROM. Più formalmente, un file system è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei dati. Di fatto, alcuni file system (come NFS) non interagiscono direttamente con i dispositivi di archiviazione.''<br /><br/>
Si '''sottolinea''' in particolare l'ultima frase, ovvero che sono definiti come file system anche quei "meccanismi" che invece di agire direttamente su un certo dispositivo fisico permettono "semplicemente" di accedere a dei file system remoti.


= Denominazione dei dischi fissi =
== Denominazione dei dischi fissi ==
Linux indica i dischi fissi collegati nel sistema in questo modo:
Linux indica i dischi fissi collegati nel sistema in questo modo:
* <code>'''hdX'''</code> se si tratta di un disco IDE (usando versioni meno recenti del kernel)
* <code>'''hdX'''</code> se si tratta di un disco IDE e si usano versioni molto vecchie del kernel.
* <code>'''sdX'''</code> se si tratta di un disco SATA (oppure, con le ultime versioni di Linux, anche i dischi IDE)
* <code>'''sdX'''</code> se si tratta di un disco SATA (ma ormai anche i dischi IDE).
dove  <code>X</code> è una lettera dell'alfabeto. Al primo disco  del sistema sarà assegnata la lettera <code>a</code> (<code>hda</code> oppure <code>sda</code>) e via via saranno assegnate tutte le lettere che servono.<br>
* <code>'''nvmeYn1'''</code> se si tratta di un disco NVME.
Le partizioni di ogni disco vengono indicate con dei numeri progressivi:
dove  <code>X</code> è una lettera dell'alfabeto, mentre <code>Y</code> un numero. Al primo disco  del sistema sarà assegnata la lettera <code>a</code> (<code>hda</code> oppure <code>sda</code>) o il numero <code>0</code> (<code>nvme0n1</code>) e via via saranno assegnate tutte le lettere/numeri che servono.<br/>
Le partizioni di ogni disco vengono indicate con numeri progressivi.
 
=== Tabelle ''gpt'' ===
Sono il tipo di tabella partizione più usato e non vi è altro da dire. Es.: <code>sda1</code>, <code>sda2</code>, <code>sdb1</code>, <code>sdb2</code>, <code>nvme0n1p1</code>, <code>nvme0n1p2</code>, <code>nvme1n1p1</code>, <code>nvme1n1p2</code>, ecc.
 
=== Tabelle ''msdos'' ===
Nel caso delle vecchie tabelle di partizione tipo ''msdos'' è necessario distinguire tra partizioni primarie e logiche:
* <code>1-4</code> indicano le partizioni primarie
* <code>1-4</code> indicano le partizioni primarie
* da <code>5</code> in poi sono le partizioni logiche
* da <code>5</code> in poi sono le partizioni logiche<br/><br/>
{{Box|Nota|Non è possibile creare più di 4 partizioni primarie su un dispositivo, pertanto se si ha la necessità di creare più di 4 partizioni dovranno essere create al più 3 partizioni primarie, poiché in caso contrario risulterà impossibile creare partizioni logiche.}}
{{Cautionbox|Non è possibile creare più di 4 partizioni primarie su un dispositivo, pertanto se si ha la necessità di creare più di 4 partizioni dovranno essere create al più 3 partizioni primarie, poiché in caso contrario risulterà impossibile creare partizioni logiche.}}
Ad esempio:
Ad esempio:
* <code>sda1</code> è la prima partizione primaria del nostro primo disco SATA
* <code>sda1</code> è la prima partizione primaria del nostro primo disco SATA
* <code>hdc5</code> è la prima partizione logica del nostro terzo disco IDE
* <code>hdc5</code> è la prima partizione logica del nostro terzo disco IDE
Tutti i dischi presenti nel sistema vengono "elencati" sotto la directory <code>/dev</code>. Perciò il "nome completo" dei due dischi visti nell'esempio precedente sarà:
* <code>/dev/sda1</code>
* <code>/dev/hdc5</code>
Si noti quindi come i supporti di memorizzazione vengono identificati tramite file.


= Struttura =
=== Elenco dischi fissi ===
Il  filesystem linux è strutturato a partire dalla sua '''radice'''  (indicata con <code>'''/'''</code> e chiamata '''root''') e  tutti i dischi e i dispositivi removibili vengono "agganciati"   (l'operazione si chiama '''montaggio''', in inglese '''mount''') in una  directory sotto <code>/</code>.<br>
Tutti i dischi presenti nel sistema appaiono come file "elencati" sotto la directory <code>/dev</code>. È quindi possibile elencarli tutti con un comando del tipo:
<pre>$ ls -1 /dev/sd*</pre>
che stamperà a video qualcosa di simile a
<pre>
/dev/sda
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
...
</pre>
Alternativamente è possibile usare il comando <code>lsblk -f</code>, il cui output sarà simile al seguente:
<pre>
NAME        FSTYPE FSVER  LABEL      UUID              FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                                   
├─sda1      ntfs          Ripristino 1EC0C550C0C52EB9                                   
├─sda2      vfat  FAT32  CCC6-BCAB                    63,1M    34% /boot/efi
├─sda3                                                                                 
├─sda4      ntfs          Windows_10  203239183238F47E
...
</pre>
 
== Struttura ==
Il  filesystem Linux è strutturato a partire dalla sua '''radice'''  (indicata con <code>'''/'''</code> e chiamata '''[[root /|root]]''') e  tutti i dischi e i dispositivi removibili vengono "agganciati" (l'operazione si chiama '''montaggio''', in inglese '''mount''') in una  directory sotto <code>/</code>.<br>
Una comune struttura di filesystem Linux è la seguente (si digiti ad esempio <code>ls -hl /</code>):
Una comune struttura di filesystem Linux è la seguente (si digiti ad esempio <code>ls -hl /</code>):
<pre>
<pre>
Riga 34: Riga 64:
  |-- etc/ (file di configurazione del sistema e dei servizi)
  |-- etc/ (file di configurazione del sistema e dei servizi)
  |
  |
  |-- home/ (file personali degli utenti)
  |-- home/ (tipicamente contiene i file personali degli utenti, con l'eccezione dell'utente root)
  |    |
  |    |
  |    |- ferdy (file personali di ferdy)
  |    |- ferdy (file personali di ferdy)
  |    |- cesca (file personali di cesca)
  |    |- cesca (file personali di cesca)
|
|-- lib/ (librerie degli eseguibili di base, dell'utente root e non)
  |
  |
  |-- media/ (periferiche esterne montate in automatico dal sistema)
  |-- media/ (periferiche esterne montate in automatico dal sistema)
Riga 43: Riga 75:
  |-- mnt/ (contenitore per le periferiche che vogliamo montare)
  |-- mnt/ (contenitore per le periferiche che vogliamo montare)
  |
  |
  |-- opt/ (file e programmi opzionali, ad es. giochi)
  |-- opt/ (file e programmi opzionali, non facenti parte della distribuzione,
|        e che tipicamente non rispettano la divisione di librerie, file di
|        configurazioni ed eseguibili in diverse directory)
  |
  |
  |-- root/ (la home directory dell'utente root)
  |-- root/ (la home directory dell'utente root)
Riga 51: Riga 85:
  |-- tmp/ (file temporanei)
  |-- tmp/ (file temporanei)
  |
  |
  |-- usr/ (i programmi installati sul sistema)
  |-- usr/ (i programmi installati sul sistema non di base)
  |    |
  |    |
  |    |- bin/ (gli eseguibili dei programmi installati)
  |    |- bin/ (gli eseguibili dei programmi installati)
  |
|    |- lib/ (le librerie degli eseguibili in /usr/)
|    |- sbin/ (gli eseguibili per l'utente root)
|    |- ...
|    |
|    |- local/ (programmi esterni installati dall'amministratore, che rispettano
|        |    la divisione in queste directory)
|        |- bin/ (gli eseguibili dei programmi installati in /local/)
|        |- lib/ (le librerie degli eseguibili in /usr/local/)
|        |- sbin/ (gli eseguibili per l'utente root in /usr/local/)
|        |- ...
  |  
  |-- var/ (dati variabili. Ad es. database, caselle di posta, etc)
  |-- var/ (dati variabili. Ad es. database, caselle di posta, etc)
</pre>
</pre>
È importante sottolineare che ciascun elemento del filesystem può fisicamente risiedere su un differente disco rigido, o perfino risorsa remota, in altre parole un utente ha la possibilità di distribuire qualsiasi directory (di sistema comprese) tra i vari supporti fisici come meglio crede.
È importante sottolineare che ciascun elemento del filesystem può fisicamente risiedere su un differente disco rigido, o perfino risorsa remota, in altre parole un utente ha la possibilità di distribuire qualsiasi directory (di sistema comprese) tra i vari supporti fisici come meglio crede.


= Preparazione dei supporti fisici =
A partire da Debian 10 ([[Buster]]), in caso di nuova installazione, le directory <code>/bin/</code>, <code>/lib/</code> e <code>/sbin/</code> sono rimpiazzate da link simbolici alle directory <code>/usr/bin/</code>, <code>/usr/lib/</code> e <code>/usr/sbin/</code> rispettivamente, in maniera analoga a quanto già avviene in altre distribuzioni Linux.<br/>
Su tali sistemi non è più possibile perciò avviare una [[shell]] testuale senza la presenza di tutta la directory <code>/usr/</code>, in quanto non esiste alcuna differenza tra eseguibili di base e altri eseguibili.


Ogni supporto fisico prima di poter essere utilizzato deve essere partizionato e formattato; applicativi come [[Guida alla formattazione dei dischi con fdisk | fdisk]] e ''parted'' permettono sia di partizionare che formattare, anche se solo in un numero limitato di file system.<br />
=== Software esterno ===
''mkswap'' è un comando che permette di formattare un area di swap, mentre ''mkfs'' permette di formattare secondo un elevato numero di file system.
Le directory <code>/usr/local</code> e <code>/opt</code> contengono programmi esterni, che rispettano o meno (rispettivamente) le convenzioni previste per i programmi sotto Unix.<br/>
Le directory <code>/usr/local/bin</code> e <code>/usr/local/sbin</code> sono comunque già predisposte a essere utilizzate dagli utenti normali e root, e hanno maggiore priorità degli altri eseguibili, permettendo di mascherare eseguibili con lo stesso nome che si trovano nelle altre (per via della posizione occupata di default nella variabile d'ambiente <code>PATH</code>).


= Rendere accessibili i dispositivi =
Nessun [[pacchetto]] Debian, proveniente dalla [[sezione]] [[main]], installerà mai nulla in queste directory.


Una volta definite le partizioni e formattatele non rimane che agganciarle al file system della macchina in uso. Si tratta in primis di creare un punto di mount, banalmente una directory, secondariamente di agganciare il file system a tale directory attraverso l'applicativo [http://guide.debianizzati.org/index.php/Guida_ai_comandi_da_terminale#Gestione_del_File_System mount] (che richiede privillegi di root).<br />
== Preparazione dei supporti fisici ==
Se per esempio si è creato come punto di mount <code>/mnt/pippo</code> il contenuto della partizione montata sarà accessibile esplorando appunto <code>/mnt/pippo</code>. Si noti che è possibile utilizzare lo stesso punto di mount per montare più partizioni, ma chiaramente non in simultanea.<br />
Una volta terminato l'utilizzo di una certa partizione questa può essere sganciata attraverso il comando ''umount''.
{{Warningbox| Mai disconnetere un dispositivo fisico fintanto che una delle sue partizioni risulta montata.}}


== Il file /etc/fstab ==
Ogni supporto fisico prima di poter essere utilizzato deve essere partizionato e formattato.
Questo utilissimo  file di configurazione permette di definire quali risorse, locali o remote non fa differenza, montare automaticamente all'avvio del computer.
 
=== Partizionare ===
Si usano applicativi come [[Guida alla formattazione dei dischi con fdisk | fdisk]] e [[Parted | GNU Parted]].
 
=== Creare file system ===
Si usano applicativi come '''mkswap''' (permette di formattare un area di swap) e '''mkfs''' che permette di formattare secondo un elevato numero di file system. Volendo anche ''fdisk'' e ''parted'' permettono di creare file system, ma è sconsigliato ed inoltre supportano solo pochi tipi di file system.
 
==== mkfs ====
È un applicativo modulare che come detto supporta un elevato numero di file system, ma tale capacità non è nativa bensì basata sull'utilizzo di altri strumenti (richiamati in automatico) che devono già essere installati. Per esempio per formattare in ''FAT32'' è necessario che il pacchetto <code>dosfstools</code> sià già stato installato.<br/>
Alcuni brevi esempi:
* Formattare la partizione <code>nvme1n1p9</code> in ''FAT32'' ed etichettandola "EFI"
<pre>mkfs.vfat -F32 -L 'EFI' /dev/nvme1n1p9</pre>
* Formattare la partizione <code>nvme1n1p9</code> in ''ext4'' ed etichettandola "part9"
<pre>mkfs.ext4 -L 'part9' /dev/nvme1n1p9</pre>
* Formattare la partizione <code>nvme1n1p9</code> come ''swap'' ed etichettandola "mio_swap"
<pre>mkswap -L 'mio_swap' /dev/nvme1n1p9</pre>
 
== Rendere accessibili (''montare'') i dispositivi ==
 
Una volta creato e formattato le partizioni, non rimane che agganciarle al file system della macchina in uso. A prescindere dal metodo usato, manuale o automatico, è necessario aver già creato un punto (cioè una directory) dove rendere accessibile la partizione. Se per esempio si è creato come punto di mount <code>/mnt/pippo</code> il contenuto della partizione montata sarà accessibile esplorando appunto <code>/mnt/pippo</code>. Si noti che è possibile utilizzare lo stesso punto di mount per montare più partizioni, ma chiaramente non in simultanea.
{{Box|Nota|Quanto qui scritto vale pedissequamente per tutti i file system, quindi anche per quelli remoti, ma non per swap.}}
{{Warningbox| Mai disconnettere un dispositivo fisico fintanto che una delle sue partizioni risulta montata.}}
 
=== Abilitazione manuale dell'area di swap ===
Usare i comandi <code>swapon</code> e <code>swapoff</code>.
 
=== Montaggio Manuale (''mount'', ''umount'') ===
Vedere la guida dedicata a [[Guida_ai_comandi_da_terminale - Gestione_del_File_System | mount]].
 
=== Montaggio automatico (<code>/etc/fstab</code>) ===
Questo utilissimo  file di configurazione permette di definire quali risorse, locali o remote non fa differenza, montare automaticamente all'avvio del computer.
Si tratta di un file testuale organizzato su sei colonne:
Si tratta di un file testuale organizzato su sei colonne:
# Per prima cosa si indica il dispositivo da montare, o attraverso il suo percorso (es.: <code>/dev/sdc</code>) oppure attraverso il suo UUID, un codice alfanumerico che lo identifica univocamente. Tale codice può essere determinato attraverso '''blkid''', la cui sintassi è <pre>blkid /dev/miodevice</pre>
# Per prima cosa si indica il dispositivo da montare, o attraverso il suo percorso (es.: <code>/dev/sdc</code>) oppure attraverso il suo [[UUID]], un codice alfanumerico che lo identifica univocamente. Tale codice può essere determinato attraverso '''blkid''', la cui sintassi è <pre>blkid /dev/miodevice</pre>
L'utilizzo dello UUID è limitato ai soli dispositivi presenti in <code>/dev/</code>, quindi le risorse di rete possono essere identificate solo attraverso il loro percorso di rete.
L'utilizzo dello UUID è limitato ai soli dispositivi presenti in <code>/dev/</code>, quindi le risorse di rete possono essere identificate solo attraverso il loro percorso di rete.
# La seconda colonna definisce  il punto di montaggio della risorsa precedentemente specificata, come sempre deve trattarsi di una directory già esistente e VUOTA.
# La seconda colonna definisce  il punto di montaggio della risorsa precedentemente specificata, come sempre deve trattarsi di una directory già esistente e VUOTA.
# In terza posizione si specificano i filesystem (in genere uno solo).
# In terza posizione si specificano i filesystem (in genere uno solo).
# Quarto si indicano tutte le opzioni relative al filesystem, avendo cura di separare ognuna con una virgola. L'elenco di tale opzioni è lungo, pertanto non si può evitare di fare riferimento al manuale di ''mount''.
# Quarto si indicano tutte le opzioni relative al filesystem, avendo cura di separare ognuna con una virgola. L'elenco di tale opzioni è lungo, pertanto non si può evitare di fare riferimento al manuale di ''mount''.
Riga 87: Riga 160:
mioserver:/                                  /mnt/nfs        nfs          _netdev,auto,hard,intr    0    0
mioserver:/                                  /mnt/nfs        nfs          _netdev,auto,hard,intr    0    0
</pre>
</pre>
{{  Warningbox | '''/etc/fstab''' mal tollera i nomi e i percorsi non   standard, pertanto ove possibile evitare di scegliere nomi dei percorsi delle risorse contenenti spazi o altri caratteri speciali (tipicamente  per le risorse remote). }}
{{  Warningbox | '''/etc/fstab''' mal tollera i nomi e i percorsi non standard, pertanto ove possibile evitare di scegliere nomi dei percorsi delle risorse contenenti spazi o altri caratteri speciali (tipicamente  per le risorse remote). }}
Qualora  proprio non se ne  potesse fare a meno è possibile indicare i caratteri  speciali in forma  ottale (se tutti o solo alcuni non è dato saperlo); ad  esempio una  cartella di nome '''<code>prova &del  %</code>'''  dovrebbe essere indicata come   '''<code>prova\040\046del\040%</code>'''; si noti che mentre   la "e commerciale" e lo spazio devono essere indicati in forma ottale,   il simbolo "percento" può essere indicato normalmente.<br>
Qualora  proprio non se ne  potesse fare a meno è possibile indicare i caratteri  speciali in forma  ottale (se tutti o solo alcuni non è dato saperlo); ad  esempio una  cartella di nome '''<code>prova &del  %</code>'''  dovrebbe essere indicata come '''<code>prova\040\046del\040%</code>'''; si noti che mentre la "e commerciale" e lo spazio devono essere indicati in forma ottale, il simbolo "percento" può essere indicato normalmente.<br>
'''NB''': NON è detto che fstab accetti qualsiasi carattere speciale.<br>
'''NB''': NON è detto che fstab accetti qualsiasi carattere speciale.<br>
A  [http://www.asciitable.com/ quest'indirizzo] è disponibile una tabella di conversione per i primi 256 caratteri ASCII.
A  [http://www.asciitable.com/ quest'indirizzo] è disponibile una tabella di conversione per i primi 256 caratteri ASCII.


= Linux VS Windows =
== Linux VS Windows ==
In  ambiente Windows ogni nuovo disco e ogni nuova partizione installati nel sistema si vedono attribuiti la lettera dell'alfabeto successiva all'ultima utilizzata. Ad esempio, se installassimo un nuovo disco fisso in un sistema Windows che utilizza:
In  ambiente Windows ogni nuovo disco e ogni nuova partizione installati nel sistema si vedono attribuiti la lettera dell'alfabeto successiva all'ultima utilizzata. Ad esempio, se installassimo un nuovo disco fisso in un sistema Windows che utilizza:
* <code>A:</code> per il floppy
* <code>A:</code> per il floppy
* <code>C:</code> per il disco di sistema
* <code>C:</code> per il disco di sistema
* <code>D:</code> per un secondo disco di dati
* <code>D:</code> per un secondo disco di dati
* <code>E:</code> per il masterizzatore
* <code>E:</code> per il masterizzatore
al nuovo disco verrebbe automaticamente assegnata la lettera  <code>F:</code>. Un utente che in windows aprisse esplora  risorse vedrebbe quindi subito tutti i dispositivi fisici installati con le relative cartelle e poco più sotto l'icona delle risorse di rete.<br>
al nuovo disco verrebbe automaticamente assegnata la lettera  <code>F:</code>. Un utente che in Windows aprisse "Esplora risorse" vedrebbe quindi subito tutti i dispositivi fisici installati con le relative cartelle e poco più sotto l'icona delle risorse di rete.<br>
In ambiente Linux le cose funzionano diversamente, infatti si vedono solo file e directory essedo i dispositivi fisici non immediatamente visibili; in genere questo è l'aspetto più traumatico per un utente abituato con windows, tuttavia come già scritto un tale approccio permette di distribuire le directory, di sistema comprese, come meglio si crede, mentre in windows le cartelle <code>\Programmi</code> e <code>\Windows</code> devono obbligatoriamente risiedere sul disco fisico identificato con la lettera ''<code>C:</code>''.<br />
In ambiente Linux le cose funzionano diversamente, infatti si vedono solo file e directory essendo i dispositivi fisici non immediatamente visibili; in genere questo è l'aspetto più traumatico per un utente abituato con Windows, tuttavia come già scritto un tale approccio permette di distribuire le directory, di sistema comprese, come meglio si crede, mentre in Windows le cartelle <code>\Programmi</code> e <code>\Windows</code> devono obbligatoriamente risiedere sul disco fisico identificato con la lettera ''<code>C:</code>''.<br />
In sintesi la '''rappresentazione''' linux della struttura di file e cartelle in linux esclude a priori i dispositivi fisici; è come se in windows da esplora risorse si vedesse semplicemente un albero di questo tipo (le lettere  tra parentesi indicano in modo del tutto arbitrario il dispositivo fisico dove ciascuna cartella risiede effettivamente):
In sintesi la '''rappresentazione''' Linux della struttura di file e cartelle in Linux esclude a priori i dispositivi fisici; è come se in Windows da "Esplora risorse" si vedesse semplicemente un albero di questo tipo (le lettere  tra parentesi indicano in modo del tutto arbitrario il dispositivo fisico dove ciascuna cartella risiede effettivamente):
<pre>
<pre>
Desktop (C:)
Desktop (C:)
Riga 120: Riga 193:
</pre>
</pre>


= Approfondimenti =
== Approfondimenti ==
 
=== Manpages ===
 
* <code>man fstab</code>, [https://manpages.debian.org/bookworm/mount/fstab.5.en.html HTML]
* <code>man mkfs</code>, [https://manpages.debian.org/bookworm/util-linux/mkfs.8.en.html HTML]
* <code>man mkswap</code>, [https://manpages.debian.org/bookworm/util-linux/mkswap.8.en.html HTML]


=== Sitografia ===
=== Sitografia ===
Riga 128: Riga 207:
| Autore = [[Utente:Ferdybassi|Ferdybassi]]
| Autore = [[Utente:Ferdybassi|Ferdybassi]]
| Estesa_da =
| Estesa_da =
: [[Utente:Wtf|Wtf]]
:[[Utente:Wtf|Wtf]]
:[[Utente:LtWorf|LtWorf]]
:[[Utente:Franziski|Franziski]] (quote utenti)
| Verificata_da =  
| Verificata_da =  
: [[Utente:Wtf|Wtf]]
: [[Utente:Wtf|Wtf]]
| Numero_revisori = 1
: [[Utente:LtWorf|LtWorf]]
: [[Utente:HAL 9000|HAL 9000]] 19:04, 5 set 2014 (CEST) (quote utenti)
| Numero_revisori = 3
}}
}}


[[Categoria:Filesystem]]
[[Categoria:Filesystem]]

Versione attuale delle 15:40, 16 giu 2024

File System e dispositivi fisici

Generalità

Locali

Remoti

Strumenti

Arrow right.png


Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian
File System

Sommario

  1. Principale
  2. File e permessi
  3. Quote utenti

Definizione

Da Wikipedia:

In informatica, un file system è, informalmente, un meccanismo con il quale i file sono immagazzinati e organizzati su un dispositivo di archiviazione, come un disco rigido o un CD-ROM. Più formalmente, un file system è l'insieme dei tipi di dati astratti necessari per la memorizzazione, l'organizzazione gerarchica, la manipolazione, la navigazione, l'accesso e la lettura dei dati. Di fatto, alcuni file system (come NFS) non interagiscono direttamente con i dispositivi di archiviazione.

Si sottolinea in particolare l'ultima frase, ovvero che sono definiti come file system anche quei "meccanismi" che invece di agire direttamente su un certo dispositivo fisico permettono "semplicemente" di accedere a dei file system remoti.

Denominazione dei dischi fissi

Linux indica i dischi fissi collegati nel sistema in questo modo:

  • hdX se si tratta di un disco IDE e si usano versioni molto vecchie del kernel.
  • sdX se si tratta di un disco SATA (ma ormai anche i dischi IDE).
  • nvmeYn1 se si tratta di un disco NVME.

dove X è una lettera dell'alfabeto, mentre Y un numero. Al primo disco del sistema sarà assegnata la lettera a (hda oppure sda) o il numero 0 (nvme0n1) e via via saranno assegnate tutte le lettere/numeri che servono.
Le partizioni di ogni disco vengono indicate con numeri progressivi.

Tabelle gpt

Sono il tipo di tabella partizione più usato e non vi è altro da dire. Es.: sda1, sda2, sdb1, sdb2, nvme0n1p1, nvme0n1p2, nvme1n1p1, nvme1n1p2, ecc.

Tabelle msdos

Nel caso delle vecchie tabelle di partizione tipo msdos è necessario distinguire tra partizioni primarie e logiche:

  • 1-4 indicano le partizioni primarie
  • da 5 in poi sono le partizioni logiche

Attention.png Avvertimento
Non è possibile creare più di 4 partizioni primarie su un dispositivo, pertanto se si ha la necessità di creare più di 4 partizioni dovranno essere create al più 3 partizioni primarie, poiché in caso contrario risulterà impossibile creare partizioni logiche.

Ad esempio:

  • sda1 è la prima partizione primaria del nostro primo disco SATA
  • hdc5 è la prima partizione logica del nostro terzo disco IDE

Elenco dischi fissi

Tutti i dischi presenti nel sistema appaiono come file "elencati" sotto la directory /dev. È quindi possibile elencarli tutti con un comando del tipo:

$ ls -1 /dev/sd*

che stamperà a video qualcosa di simile a

/dev/sda
/dev/sda1
/dev/sda2
/dev/sda3
/dev/sda4
...

Alternativamente è possibile usare il comando lsblk -f, il cui output sarà simile al seguente:

NAME        FSTYPE FSVER  LABEL      UUID              FSAVAIL FSUSE% MOUNTPOINTS
sda                                                                                     
├─sda1      ntfs          Ripristino 1EC0C550C0C52EB9                                    
├─sda2      vfat   FAT32  CCC6-BCAB                     63,1M     34% /boot/efi
├─sda3                                                                                  
├─sda4      ntfs          Windows_10  203239183238F47E
...

Struttura

Il filesystem Linux è strutturato a partire dalla sua radice (indicata con / e chiamata root) e tutti i dischi e i dispositivi removibili vengono "agganciati" (l'operazione si chiama montaggio, in inglese mount) in una directory sotto /.
Una comune struttura di filesystem Linux è la seguente (si digiti ad esempio ls -hl /):

 /
 |
 |-- bin/ (file eseguibili di base)
 |
 |-- boot/ (file necessari all'avvio)
 |
 |-- dev/ (file che rappresentano le periferiche hardware collegate al sistema)
 |
 |-- etc/ (file di configurazione del sistema e dei servizi)
 |
 |-- home/ (tipicamente contiene i file personali degli utenti, con l'eccezione dell'utente root)
 |    |
 |    |- ferdy (file personali di ferdy)
 |    |- cesca (file personali di cesca)
 |
 |-- lib/ (librerie degli eseguibili di base, dell'utente root e non)
 |
 |-- media/ (periferiche esterne montate in automatico dal sistema)
 |
 |-- mnt/ (contenitore per le periferiche che vogliamo montare)
 |
 |-- opt/ (file e programmi opzionali, non facenti parte della distribuzione,
 |         e che tipicamente non rispettano la divisione di librerie, file di
 |         configurazioni ed eseguibili in diverse directory)
 |
 |-- root/ (la home directory dell'utente root)
 |
 |-- sbin/ (file eseguibili solo dall'utente root)
 |
 |-- tmp/ (file temporanei)
 |
 |-- usr/ (i programmi installati sul sistema non di base)
 |    |
 |    |- bin/ (gli eseguibili dei programmi installati)
 |    |- lib/ (le librerie degli eseguibili in /usr/)
 |    |- sbin/ (gli eseguibili per l'utente root)
 |    |- ...
 |    |
 |    |- local/ (programmi esterni installati dall'amministratore, che rispettano
 |         |     la divisione in queste directory)
 |         |- bin/ (gli eseguibili dei programmi installati in /local/)
 |         |- lib/ (le librerie degli eseguibili in /usr/local/)
 |         |- sbin/ (gli eseguibili per l'utente root in /usr/local/)
 |         |- ...
 | 
 |-- var/ (dati variabili. Ad es. database, caselle di posta, etc)

È importante sottolineare che ciascun elemento del filesystem può fisicamente risiedere su un differente disco rigido, o perfino risorsa remota, in altre parole un utente ha la possibilità di distribuire qualsiasi directory (di sistema comprese) tra i vari supporti fisici come meglio crede.

A partire da Debian 10 (Buster), in caso di nuova installazione, le directory /bin/, /lib/ e /sbin/ sono rimpiazzate da link simbolici alle directory /usr/bin/, /usr/lib/ e /usr/sbin/ rispettivamente, in maniera analoga a quanto già avviene in altre distribuzioni Linux.
Su tali sistemi non è più possibile perciò avviare una shell testuale senza la presenza di tutta la directory /usr/, in quanto non esiste alcuna differenza tra eseguibili di base e altri eseguibili.

Software esterno

Le directory /usr/local e /opt contengono programmi esterni, che rispettano o meno (rispettivamente) le convenzioni previste per i programmi sotto Unix.
Le directory /usr/local/bin e /usr/local/sbin sono comunque già predisposte a essere utilizzate dagli utenti normali e root, e hanno maggiore priorità degli altri eseguibili, permettendo di mascherare eseguibili con lo stesso nome che si trovano nelle altre (per via della posizione occupata di default nella variabile d'ambiente PATH).

Nessun pacchetto Debian, proveniente dalla sezione main, installerà mai nulla in queste directory.

Preparazione dei supporti fisici

Ogni supporto fisico prima di poter essere utilizzato deve essere partizionato e formattato.

Partizionare

Si usano applicativi come fdisk e GNU Parted.

Creare file system

Si usano applicativi come mkswap (permette di formattare un area di swap) e mkfs che permette di formattare secondo un elevato numero di file system. Volendo anche fdisk e parted permettono di creare file system, ma è sconsigliato ed inoltre supportano solo pochi tipi di file system.

mkfs

È un applicativo modulare che come detto supporta un elevato numero di file system, ma tale capacità non è nativa bensì basata sull'utilizzo di altri strumenti (richiamati in automatico) che devono già essere installati. Per esempio per formattare in FAT32 è necessario che il pacchetto dosfstools sià già stato installato.
Alcuni brevi esempi:

  • Formattare la partizione nvme1n1p9 in FAT32 ed etichettandola "EFI"
mkfs.vfat -F32 -L 'EFI' /dev/nvme1n1p9
  • Formattare la partizione nvme1n1p9 in ext4 ed etichettandola "part9"
mkfs.ext4 -L 'part9' /dev/nvme1n1p9
  • Formattare la partizione nvme1n1p9 come swap ed etichettandola "mio_swap"
mkswap -L 'mio_swap' /dev/nvme1n1p9

Rendere accessibili (montare) i dispositivi

Una volta creato e formattato le partizioni, non rimane che agganciarle al file system della macchina in uso. A prescindere dal metodo usato, manuale o automatico, è necessario aver già creato un punto (cioè una directory) dove rendere accessibile la partizione. Se per esempio si è creato come punto di mount /mnt/pippo il contenuto della partizione montata sarà accessibile esplorando appunto /mnt/pippo. Si noti che è possibile utilizzare lo stesso punto di mount per montare più partizioni, ma chiaramente non in simultanea.

Info.png Nota
Quanto qui scritto vale pedissequamente per tutti i file system, quindi anche per quelli remoti, ma non per swap.
Warning.png ATTENZIONE
Mai disconnettere un dispositivo fisico fintanto che una delle sue partizioni risulta montata.


Abilitazione manuale dell'area di swap

Usare i comandi swapon e swapoff.

Montaggio Manuale (mount, umount)

Vedere la guida dedicata a mount.

Montaggio automatico (/etc/fstab)

Questo utilissimo file di configurazione permette di definire quali risorse, locali o remote non fa differenza, montare automaticamente all'avvio del computer. Si tratta di un file testuale organizzato su sei colonne:

  1. Per prima cosa si indica il dispositivo da montare, o attraverso il suo percorso (es.: /dev/sdc) oppure attraverso il suo UUID, un codice alfanumerico che lo identifica univocamente. Tale codice può essere determinato attraverso blkid, la cui sintassi è
    blkid /dev/miodevice

L'utilizzo dello UUID è limitato ai soli dispositivi presenti in /dev/, quindi le risorse di rete possono essere identificate solo attraverso il loro percorso di rete.

  1. La seconda colonna definisce il punto di montaggio della risorsa precedentemente specificata, come sempre deve trattarsi di una directory già esistente e VUOTA.
  2. In terza posizione si specificano i filesystem (in genere uno solo).
  3. Quarto si indicano tutte le opzioni relative al filesystem, avendo cura di separare ognuna con una virgola. L'elenco di tale opzioni è lungo, pertanto non si può evitare di fare riferimento al manuale di mount.
  4. In quinta e sesta colonna possono essere indicati dei valori numerici rispettivamente utili per dump e fsck. Di norma basta specificare un valore zero per entrambi, se necessario fare riferimento al manuale di mount.

Di seguito alcune righe d'esempio per il suddetto file:

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX     /home            ext4           defaults,acl              0     2
/dev/scd0                                     /media/cdrom1    udf,iso9660    user,noauto               0     0
//mioserver/miacartella                       /mnt/samba       cifs            _netdev,credentials=/percorso_file/credenziali,uid=1000,gid=1000,file_mode=0777,dir_mode=0775    0   0
mioserver:/                                   /mnt/nfs         nfs           _netdev,auto,hard,intr    0     0
Warning.png ATTENZIONE
/etc/fstab mal tollera i nomi e i percorsi non standard, pertanto ove possibile evitare di scegliere nomi dei percorsi delle risorse contenenti spazi o altri caratteri speciali (tipicamente per le risorse remote).


Qualora proprio non se ne potesse fare a meno è possibile indicare i caratteri speciali in forma ottale (se tutti o solo alcuni non è dato saperlo); ad esempio una cartella di nome prova &del  % dovrebbe essere indicata come prova\040\046del\040%; si noti che mentre la "e commerciale" e lo spazio devono essere indicati in forma ottale, il simbolo "percento" può essere indicato normalmente.
NB: NON è detto che fstab accetti qualsiasi carattere speciale.
A quest'indirizzo è disponibile una tabella di conversione per i primi 256 caratteri ASCII.

Linux VS Windows

In ambiente Windows ogni nuovo disco e ogni nuova partizione installati nel sistema si vedono attribuiti la lettera dell'alfabeto successiva all'ultima utilizzata. Ad esempio, se installassimo un nuovo disco fisso in un sistema Windows che utilizza:

  • A: per il floppy
  • C: per il disco di sistema
  • D: per un secondo disco di dati
  • E: per il masterizzatore

al nuovo disco verrebbe automaticamente assegnata la lettera F:. Un utente che in Windows aprisse "Esplora risorse" vedrebbe quindi subito tutti i dispositivi fisici installati con le relative cartelle e poco più sotto l'icona delle risorse di rete.
In ambiente Linux le cose funzionano diversamente, infatti si vedono solo file e directory essendo i dispositivi fisici non immediatamente visibili; in genere questo è l'aspetto più traumatico per un utente abituato con Windows, tuttavia come già scritto un tale approccio permette di distribuire le directory, di sistema comprese, come meglio si crede, mentre in Windows le cartelle \Programmi e \Windows devono obbligatoriamente risiedere sul disco fisico identificato con la lettera C:.
In sintesi la rappresentazione Linux della struttura di file e cartelle in Linux esclude a priori i dispositivi fisici; è come se in Windows da "Esplora risorse" si vedesse semplicemente un albero di questo tipo (le lettere tra parentesi indicano in modo del tutto arbitrario il dispositivo fisico dove ciascuna cartella risiede effettivamente):

Desktop (C:)
|
| -- Computer
|       |
|       | -- Programmi\ (C:)
|       |       | -- Microsoft\ (C:)
|       |       | -- Office\    (F:)
|       | -- Windows\   (C:) 
|       |       | -- System\    (C:)
|       |       | -- System32\  (D:)
|       | -- Utenti\    (D:)
|       | -- Cartella1\ (D:)
|       |       | -- CartellaN\ (F:)
|       | -- Cartella2\ (D:)
|       | -- Cartella3\ (F:)
| -- Rete

Approfondimenti

Manpages

Sitografia

Wikipedia




Guida scritta da: Ferdybassi Swirl-auth80.png Debianized 80%
Estesa da:
Wtf
LtWorf
Franziski (quote utenti)
Verificata da:
Wtf
LtWorf
HAL 9000 19:04, 5 set 2014 (CEST) (quote utenti)

Verificare ed estendere la guida | Cos'è una guida Debianized