###### tags: `appunti` `linux`
Prima di cominciare:
Aggiungere un disco esterno SATA alla VM di Virtualbox (VM deve essere spenta): https://www.grectech.it/blog/come-aggiungere-un-disco-virtuale-su-virtualbox/
# Linux - 22.01.2022 - Dischi, Partizioni e File System
## Definizioni
Un computer ha al suo interno uno o più dischi per la conservazione dei dati.
Questi dischi possono essere meccanici (HDD), lenti ma economici, o a stato solido (SSD), più veloci.
Sul disco dovrà essere installato un sistema operativo, come ad esempio Linux, Windows o MacOS.
Un disco fisico prima di essere utilizzato deve essere trattato in modo da essere leggibile dal computer stesso.
Il primo passo è creare una **tabella delle partizioni**.
:::success
**Tabella delle partizioni**: tabella dentro la quale sono registrate tutte le informazioni delle **partizioni** del disco.
**Partizione**: Porzione di un disco fisico dove vengono archiviati i file (può essere anche una sola).
Ogni partizione ha uno specifico **file system**.
**File system**: Metodo con cui vengono archiviati i file, per modificarlo è necessaria la formattazione della partizione.
:::
## Tabella delle partizioni
**Tabella delle partizioni**: tabella dentro la quale sono registrate tutte le informazioni delle **partizioni** del disco.
Informazioni delle partizioni:
- numero partizione
- blocco iniziale della partizione
- blocco finale della partizione
Lo standard di oggi è il **GPT**, piu moderno e performante.
Supporta dischi di grandezza potenzialmente illimitata e fino a 128 partizioni.
Un tipo di tabella vecchio, che era lo standard, è il **MSDOS** o **MBR**, che però aveva diverse limitazioni. MBR non supporta dischi più grandi di 2TB e può avere un massimo di 4 partizioni primarie.
## Partizioni
**Partizione**: Porzione di un disco fisico dove vengono archiviati i file (può essere anche una sola).
All'interno di un disco ci possono essere numerose partizioni, che possono essere di due tipologie differenti:
- **Partizioni primarie**: sono partizioni vere e proprie all'interno del disco che vengono utilizzate per fare il boot del sistema operativo.
- **Partizioni estese**: Partizione non bootabile, agisce come container logico per altre partizioni al suo interno. Fa superare la limitazione delle 4 partizioni dell'MBR, fino a un massimo di 16 partizioni.
Esiste anche il LVM: Logic Volume Management, più complesso e poco usato.
Esempio grafico di un disco con varie partizioni differenti:
| P1 | P2 | P3 | P4 |
| ---- | ---- | ---- | ---- |
| 400GB EXT3 | 50GB FAT16 | 900GB NTFS | 150GB FAT32 |
Ci sono alcune cartelle che hanno una partizione apposta, come per esempio /boot, che serve solo all'avvio del sistema per caricare il kernel. Dopodiche non viene più usata e per modificarla va prima montata, perchè è una partizione esterna, come un disco esterno fisico.
E' la partizione dell'UEFI, dove vengono salvate le informazioni del boot (formattata in fat16 di almeno 100MB).
Ci sono altre partizioni dedicate:
- EFI, è la partizione UEFI (boot)
- SWAP, partizione che serve per lo swapping. Lo swapping è il processo per cui una parte di memoria viene copiata nello spazio preposto per liberare la RAM da dati inutilizzati quando questa è piena o quasi piena.
- SYSTEM, partizione del sistema.
## File system
**File system**: Modalità specifica con cui sono archiviati i file, viene creata formattando il disco.
Ogni sistema operativo supporta differenti file system
Windows: NTFS (più usato ora, moderno) FAT32, FAT16, exFAT
Linux: EXT4, EXT3, EXT2, BTRFS, XFS, FAT32, FAT16, exFAT ...
MacOS: APFS, HFS, HFS+ ...
Ogni sistema operativo usa il suo FS, ma non è una caratteristica determinante del sistema, è possibile cambiarlo. Ci sono alcuni file system che sono nativi per ogni OS e che sono i migliori da usare in quel OS.
Esempio: EXT4, EXT3, EXT2, BTRFS sono nativi in Linux e sono letti solo da Linux
Esempio: NTFS, FAT32 sono nativi in Windows e Windows 10 richiede che la sua partizione sia NTFS.
Si possono usare anche file system diversi da quelli nativi, ma non sono sempre supportati pienamente.
Esempio: Windows non supporta EXT4, Linux supporta NTFS. Perciò un disco Windows può essere letto da Linux
Ogni partizione è indipendente, ognuna può avere un filesystem differente ed è molto utile in determinati contesti (es: dual boot)
## Gestione del Disco
### GParted
Una delle GUI più famose su Linux per la gestione dei dischi è **GParted**.
Appena aperta richiede la password, poi fa vedere la struttura del disco.
In alto a destra si può selezionare il disco in base al suo percorso `/dev/sdb`.
`/dev` è una pseudocartella che contiene i file che rappresentano i dispositivi collegati al sistema locale (ce ne sono moltissimi).
`/sdb` acronimo che si riferisce alla tipologia di disco collegato.
`/sdb`: SCSI (SATA) Disk B, disco SATA sia HDD che SSD
Altre tipologie:
- disco floppy: fp0
- disco IDE: hda
- SSD NVMe: nvme0n1
- Virtual Disk: vda
**b** si riferisce al numero del disco (secondo disco collegato)
Ogni partizione ha il suo numero in modo da essere riconosciuta
/dev/sdb2 (seconda partizione del secondo disco)
Selezionato il disco vuoto si vede che è effettivamente vuoto (non allocato). Si deve creare una tabella di partizione (Dispositivo > Crea Tabella Partizione) (GPT)
Poi si può creare una nuova partizione (foglio+ in alto a sx)
Caratteristiche della partizione:
- Dimensione
- Inizio
- Fine
- Tipo di partizione
- Tipo di filesystem (EXT4)
- Etichetta
Fino a questo momento GParted non ha ancora fatto nulla, bisogna confermare i cambiamenti fatti in modo che scriva effettivamente i cambiamenti sul disco (spunta verde verde in alto).
Questo file consente di vedere tutte le operazioni che compie GParted per la creazione di una partizione:
[Creazione File System](https://hackmd.io/ZOg57PYQQySCjhbR2bMMVw)
Tutti i comandi che esegue GParted sono replicabili da terminale e sono tutti comandi fatti da terminale, con l'utility **parted**, che lavora sul disco e sulla partition table.
L'ultimo comando è quello che effettivamente crea il file system EXT4 nella partizione creata nei passaggi precedenti.
Il comando è **mkfs**, letteralmente make filesystem. Esiste un mkfs per ogni file system supportato.
`mkfs.ext4 mkfs.ntfs ...`
Questo file invece è relativo al ridimensionamento di una partizione:
[Ridimensionamento di una Partizione](https://hackmd.io/7UqKvg_FTum030zJOiiaKg)
Controllo del file system su /dev/sda1
Riduzione file system
Riduzione partizione da 1022.00 MiB a 315.00 MiB
Controllo del file system su /dev/sda1
Espansione partizione da 315.00 MiB a 616.00 MiB
Spostamento del file system a destra
Riduzione partizione da 616.00 MiB a 315.00 MiB
Le operazioni fatte sono molto delicate, soprattutto se vengono fatte solo da terminale, come su un server; in questo caso la GUI aiuta molto.
### Parted
Equivalente di GParted ma si utilizza da linea di comando.
Permette di creare, modificare e rimuovere partizioni, ma non di creare e modificare il file system.
Ha dei comandi intuitivi, ma non molto interattivo, fa un po' di testa sua.
Utilizzo:
`sudo parted [dispositivo]`
Con help si possono vedere tutti i comandi. Più importanti:
- `mklabel`: crea nuova tabella partizioni
- `mkpart`: Crea una nuova partizione
- `resizepart`: Ridimensiona la partizione
- `print`: Visualizza la tabella delle partizioni, i device disponibili, lo spazio libero,tutte le partizioni trovate o una particolare partizione
- `rm`: rimuova la partizione
- `quit`: esce
**VEDERE L'HELP DI PARTED E IL MAN PER ULTERIORI INFORMAZIONI**
### Fdisk
Alternativa a Parted
I comandi e le opzioni sono meno intuitive ma è più interattivo con l'utente, e spesso fa capire meglio che cosa si sta facendo e permette di agire di conseguenza. [MIGLIORE]
Utilizzo: `fdisk [dispositivo]`
Help:
```
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
x extra functionality (experts only)
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
o create a new empty DOS partition table
```
**VEDERE L'HELP DI FDISK E IL MAN PER ULTERIORI INFORMAZIONI**
### mkfs
Serve a creare l'effettivo file system all'interno di una partizione, dopo averla creata con parted o fdisk.
Ci sono tanti mkfs, uno per ogni file system:
`mkfs.ext4 , mkfs.ext3 , mkfs.ext2 ,
mkfs.ntfs , mkfs.fat`
Utilizzo:
`sudo mkfs.ext4 [dispositivo]`
### Altri tool
`fsck`: check del file system
`resize2fs`: resize del filesystem
---
Provare a creare nuove partizioni nel disco inserito nella macchina virtuale, sia in modo grafico che fa linea di comando