lpic/101/023_partizioni_filesystem.md
2025-01-21 21:36:40 +01:00

11 KiB

Introduzione

Su qualsiasi OS, un disco deve essere partizionato, prima di poter essere utilizzato. Una partizione e' un sottoinsieme logico di un disco fisico; le informazioni sulle partizioni sono archiviate in una tabella delle partizioni.

Su Linux, ogni partizione e' assegnata a una directory sotto /dev, come /dev/sda1.

MBR e GPT

Esistono due modi principali per memorizzare le informazioni sulle partizioni:

  • MBR (Master Boot Record)
  • GPT (Guid Partition Table)

MBR

La tabella delle partizioni é memorizzata nel primo settore di un disco, chiamato Boot Sector, insieme a un bootloader, solitamente GRUB. Ha diverse limitazioni:

  • incapacità di indirizzare dischi di dimensione superiore ai 2TB
  • un massimo di 4 partizioni primarie per disco
  • per rendere il disco avviabile, la prima partizione deve essere primaria

Un disco MBR puo' avere due tipi differenti di partizioni: primaria ed estesa. In Linux sono trattate ugualmente, per cui non ci sono vantaggi nell'uso dell'una piuttosto che dell'altra.

GPT

Risolve molti dei limiti di MBR. Non esiste un limite alla dimensione del disco e il numero massimo di partizioni dipende dal OS.

fdisk

L'utilità standard per la gestione delle partizioni. Esiste anche cfdisk.

fdisk -l /dev/sda

Disk /dev/sda: 465.76 GiB, 500107862016 bytes, 976773168 sectors
Disk model: CT500BX500SSD1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E224383F-FD8C-4067-8F01-09A7965B7EFA

Device     Start       End   Sectors   Size Type
/dev/sda1   2048 976773119 976771072 465.8G Linux filesystem

dove:

  • Device: il dispositivo assegnato alla partizione
  • Start: il settore in cui inizia la partizione
  • End: il settore in cui termina la partizione
  • Sectors: il numero totale di settori della partizione
  • Size: la dimensione della partizione

gdisk

Utilità equivalente a fdisk e con comandi molto simili.

sudo gdisk -l /dev/sda
GPT fdisk (gdisk) version 1.0.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 937703088 sectors, 447.1 GiB
Model: KINGSTON SA400S3
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 2393AA2C-252F-46A4-AAB9-35EE402D3D71
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 2048, last usable sector is 937703054
Partitions will be aligned on 2048-sector boundaries
Total free space is 1679 sectors (839.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048       937701375   447.1 GiB   8300
  • Ogni disco ha un identificatore (GUI) univoco: si tratta di un numero esadecimale a 128 bit, assegnato casualmente quando viene creata la tabella delle partizioni
  • Un disco GPT puo' avere fino a 128 partizioni
  • Le partizioni GPT possono essere facilmente riordinare o riorganizzate, utilizzando il comando s
  • Rispetto a fdisk, durante la creazione delle partizione, é possibile specificare il tipo di partizione (Linux, Windows, ecc.)
  • Fornisce utilità per aiutare nel ripristino, accessibili col comando r
  • Con GPT, la dimensione di una partizione non é limitata dalla quantità massima di spazio contiguo non allocato.

Creare un file-system

Prima di utilizzare una partizione, occorre creare un file-system. Controlla il modo in cui i dati vengono archiviati e acceduti. Lo strumento standard utilizzato é mkfs.

ext2/ext3/ext4

L'extended file-system (ext) é stato il primo file-system per Linux e nel corso degli anni é stato sostituito da nuove versioni, chiamate ext2, ext3 e ext4.

Le utilità mkfs.ext2, mkfs.ext3 e mkfs.ext4 sono utilizzate per creare file-system ext2, ext3 e ext4. Queste utilità sono collegamenti simbolici a mke2fs.

Sintassi

mkfs.ext4 TARGET

mke2fs -t ext4 TARGET

dove TARGET é il nome della partizione. Alcuni dei parametri principali:

  • -L o Volume_Label: imposta un'etichetta
  • -n: simula la creazione del file-system
  • -q: modalità silenziosa
  • -c: controllo dei blocchi danneggiati prima di creare un file-system
  • -d (DIRECTORY): copia il contenuto della directory specificata nel nuovo file-system

FAT o VFAT

Il file-system FAT ha avuto origine con MS-DOS e negli anni ha ricevuto diverse versioni, culminate in FAT32, rilasciato nel 1996. VFAT é a estensione di FAT16 con supporto a nomi di file lunghi (fino a 255 caratteri). Entrambi sono gestiti da mkfs.fat.

FAT16 supporta volumi di massimo 4GB e file con una dimensione massima di 2GB. FAT32 aumenta la dimensione massima dei file a 4GB e dei dischi a 2 PB.

mkfs.fat TARGET

exFAT

É stato creato da Microsoft nel 2006, al fine di superare i limiti di FAT32: supporta file di dimensione massima di 16 exabyte e dischi di 128 petabyte. Ottima scelta per garantire l'interoperabilitá Linux-Windows. L'utilità predefinita é mkfs.exfat:

mkfs.exfat TARGET

Btrfs

btrfs (better FS) é un file system specifico per Linux. Ha diverse caratteristiche interessanti, come: supporto ai volumi, quote, snapshot, backup incrementali, ecc. É un file-system copy-on-write: i dati vengono scritti nello spazio libero su disco e i metadati originali aggiornati per fare riferimento ai nuovi dati e solo allora i vecchi dati vengono eliminati. Questo riduce la possibilitá di perdita di dati in caso di arresto anomalo.

mkfs.btrfs TARGET -L LABEL

É possibile passare dispositivi multipli al comando. Per specificare come verranno distribuiti i metadati nell'array di dischi, utilizzare il parametro -m. I parametri validi sono: raid0, raid1, raid5, raid6, raid10, single e dup.

subvolume

Sono come filesystem dentro altri filesystem. Una specie di directory che puo' essere montata e trattata come un filesystem separato.

btrfs subvolume create /mnt/disk/BKP

btrfs subvolume list /

Per verificare che il volume sia attivo:

btrfs subvolume show /mnt/disk/BKP

Per montare il subvolume:

mount -t btrfs -o subvol=BK /dev/sda1 /mnt/bk

snapshot

Uno snapshot duplica l'albero del filesystem, mentre punta ai dati originali.

btrfs sublovule snapshot /mnt/disk /mnt/disk/snap

Per creare istantanee di sola lettura, basta aggiungere il parametro -r.

GNU Parted

GNU Parted é un potente editor delle partizioni. Esistono dei front-end grafici, come GParted.

WARNING: Parted apporta modifiche al disco immediatamente dopo che il comando é stato dato, senza attese, diversamente da fdisk e gdisk

parted DEVICE

parted /dev/sda

Selezionare i dischi

Per passare da un disco diverso da quello selezionato, basta usare il comando select:

parted /dev/sda
Using /dev/sda
(parted) select /dev/sdb
Using /dev/sdb

Ottenere informazioni

Per ottenere informazioni sul disco, utilizzare il comando print:

(parted) print
Model: ATA CT500BX500SSD1 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name  Flags
 1      1049kB  500GB  500GB

Per ottenere un elenco di tutti i dispositivi a blocchi, utilizzare print devices. Tramite il comando print all si ottengono informazioni su tutti i dispositivi a blocchi collegati. Tramite il comando print free é possibile visualizzare lo spazio libero a disposizione su un singolo device

Creare una tabella delle partizioni

Per creare una tabella delle partizioni su un disco vuoto, usare il comando mklabel, seguito dal tipo di tabella che si desidera creare:

(parted) mklabel msdos
(parted) mklabel gpt

Creare una partizione

Per creare una partizione, si utilizza il comando mkpart:

(parted) mkpart PARTTYPE FSTYPE START END

dove:

  • PARTTYPE: il tipo di partizione, che puo' essere primary, logical o extended
  • FSTYPE: il tipo di filesystem. Parted non crea il filesystem, ma imposta solo un flag sulla partizione che dice al OS che tipo di dati aspettarsi
  • START: specifica il punto esatto in cui inizia la partizione
  • END: specifica il punto in cui la partizione finisce (NON la dimensione)
(parted) mkpart primary ext4 1m 100m

Eliminare una partizione

Utilizzare il comando rm seguito dal numero della partizione da eliminare, visualizzabile col comando print.

Recuperare una partizione

Parted permette di recuperare una partizione cancellata. Utilizzare il comando rescue, con la sintassi: rescue START END, dove START indica la posizione approssimativa in cui la partizione iniziava e END quella in cui finiva. Parted eseguirà una scansione del disco alla ricerca di partizione e si offrirà di ripristinare quelle trovate. Puo' recuperare solo le partizioni in cui é presente un filesystem; quelle vuote non vengono rilevate.

Ridimensionare una partizione ext2/3/4

Puo' essere anche usato per ridimensionare le partizioni, al fine di renderle piú grandi i piú piccole, con alcune accortezze:

  • durante il ridimensionamento, la partizione deve essere inutilizzata e smontata

Il comando é resizepart, seguito da numero di partizione e di dove dovrebbe finire: resizepart 2 300g.

Una volta ridimensionata la partizione, bisogna ridimensionare il filesystem. Per i filesystem ext2/3/4, questo viene fatto da resize2fs PARTITION SIZE. Se si omette il parametro SIZE, verrá utilizzato tutto lo spazio disponibile: resize2fs /dev/sdb3.

Per restringere una partizione, il processo deve essere inverso:

  • prima si restringe il filesystem, tramite resize2fs
  • poi si ridimensiona la partizione stessa utilizzando parted
resize2fs /dev/sdb3 200g

parted /dev/sdb3
(parted) resizepart 3 200g

swap

Su Linux, il SO puo' scambiare pagine di memoria dalla RAM al disco, secondo necessitá, memorizzandole in uno spazio separato, implementato come partizione separata (o file), chiamato partizione di swap.

Tramite fdisk, basta creare una partizione normale e poi cambiare il tipo di partizione in Linux Swap, tramite il comando t, con codice 82. Per gdisk, cambia solamente il codice, 8200.

Una volta che la partizione é stata correttamente creata, usare il comando mkswap PARTITION. Infine, per abilitare la partizione: swapon PARTITION. Allo stesso modo, swapoff PARTITION disabiliterá la swap per quel dispositivo.

Linux supporta anche l'uso di file di swap: basta creare un file vuoto, tramite dd e quindi utilizzare mkswap e swapon

dd if=/dev/zero of+myswap bs=1M count=1024
mkswap myswap
swapon myswap

Per rendere il file di swap persistente, aggiungerlo a /etc/fstab. I permessi consigliati per il file di swap sono 0600 e il gruppo e il proprietario dovrebbero essere root.