Introduzione alla terminologia e ai concetti di archiviazione in Linux

Introduzione

Linux ha sistemi robusti e strumenti per gestire dispositivi hardware, inclusi i dispositivi di archiviazione. In questo articolo, parleremo a grandi linee di come Linux rappresenta questi dispositivi e di come lo spazio di archiviazione grezzo viene reso utilizzabile sul server.

Cosa è lo Storage a Blocchi?

Lo storage a blocchi è un altro nome per ciò che il kernel Linux chiama un dispositivo a blocchi. Un dispositivo a blocchi è un pezzo di hardware che può essere utilizzato per archiviare dati, come un tradizionale hard disk rotante (HDD), un’unità a stato solido (SSD), una chiavetta di memoria flash, e così via. Si chiama dispositivo a blocchi perché il kernel interagisce con l’hardware facendo riferimento a blocchi di dimensioni fisse, o porzioni di spazio.

In altre parole, lo storage a blocchi è ciò che si pensa come archiviazione su disco regolare su un computer. Una volta configurato, agisce come un’estensione dell’albero del file system corrente e si dovrebbe essere in grado di scrivere o leggere informazioni da ogni unità in modo interscambiabile.

Cosa sono le Partizioni del Disco?

Le partizioni del disco sono un modo per suddividere un’unità di archiviazione in unità più piccole utilizzabili. Una partizione è una sezione di un’unità di archiviazione che può essere trattata in modo simile a un’unità stessa.

La suddivisione consente di segmentare lo spazio disponibile e utilizzare ogni partizione per scopi diversi. Ciò offre all’utente maggiore flessibilità, consentendo potenzialmente di suddividere un singolo disco per più sistemi operativi, spazio di swap o filesystem specializzati.

Sebbene i dischi possano essere formattati e utilizzati senza suddivisione, di solito i sistemi operativi si aspettano di trovare una tabella delle partizioni, anche se è presente solo una singola partizione scritta sul disco. In generale, è consigliabile suddividere i nuovi dischi per una maggiore flessibilità.

MBR vs GPT

Quando si suddivide un disco, è importante conoscere il formato di suddivisione che verrà utilizzato. Questo di solito si riduce alla scelta tra MBR (Master Boot Record) e GPT (GUID Partition Table).

MBR ha più di 30 anni. A causa della sua età, presenta alcune limitazioni gravi. Ad esempio, non può essere utilizzato per dischi di dimensioni superiori a 2TB e può avere solo un massimo di quattro partizioni primarie.

GPT è uno schema di partizionamento più moderno che risolve alcuni dei problemi intrinseci dell’MBR. I sistemi che utilizzano GPT possono avere molte più partizioni per disco. Questo è generalmente limitato solo dalle restrizioni imposte dal sistema operativo stesso. Inoltre, con GPT non esiste una limitazione delle dimensioni del disco e le informazioni sulla tabella delle partizioni sono disponibili in più posizioni per proteggere contro la corruzione. GPT può anche scrivere un “MBR protettivo” per la compatibilità con strumenti che supportano solo MBR.

Nella maggior parte dei casi, GPT è la scelta migliore a meno che il tuo sistema operativo non ti impedisca di utilizzarlo.

Formattazione e filesystem

Anche se il kernel Linux può riconoscere un disco grezzo, è necessario formattarlo per poterlo utilizzare. La formattazione è il processo di scrittura di un filesystem sul disco e la sua preparazione per le operazioni sui file. Un filesystem è il sistema che struttura i dati e controlla come le informazioni vengono scritte e recuperate dal disco sottostante. Senza un filesystem, non potresti utilizzare il dispositivo di archiviazione per nessuna operazione standard sui filesystem.

Esistono molti formati di filesystem diversi, ognuno con compromessi, inclusi il supporto del sistema operativo. Tutti presentano all’utente una rappresentazione simile del disco, ma le funzionalità e le piattaforme che supportano possono essere molto diverse.

Alcuni dei filesystem più popolari per Linux sono:

  • Ext4: Il filesystem predefinito più popolare è Ext4, un successore di Ext2 e Ext3. Il filesystem Ext4 è con journaling, compatibile con i sistemi legacy, stabile e ha un supporto e strumenti maturi. È una buona scelta se non hai esigenze specializzate.
  • XFS: XFS si specializza nelle prestazioni e nei file di grandi dimensioni. Si formatta rapidamente e ha buone caratteristiche di throughput quando si lavora con file di grandi dimensioni e su dischi di grandi dimensioni. Ha anche funzionalità di snapshotting live. XFS utilizza il journaling dei metadati invece di journaling sia dei metadati che dei dati. Ciò porta a prestazioni veloci, ma può potenzialmente causare la corruzione dei dati in caso di interruzione dell’alimentazione improvvisa.
  • Btrfs: Btrfs è un moderno filesystem copy-on-write ricco di funzionalità. Questa architettura consente di integrare alcune funzionalità di gestione del volume all’interno del livello del filesystem, inclusi snapshot e clonazione. Viene utilizzato per impostazione predefinita su alcuni hardware NAS (networked-attached storage) consumer e commerciali ed è popolare per array dedicati a più dischi
  • ZFS: ZFS è un altro filesystem copy-on-write e volume manager con un set di funzionalità robusto e maturo. Concorre direttamente con Btrfs, ha funzionalità di integrità dei dati, può gestire dimensioni di filesystem ampie, ha funzionalità di volume tipiche come snapshotting e clonazione e può organizzare i volumi in array RAID e simili a RAID per scopi di ridondanza e prestazioni. ZFS ha una storia controversa a causa di preoccupazioni di licenza, ma non è molto più o meno popolare di Btrfs se si tiene conto del supporto commerciale.

Inoltre, Windows utilizza principalmente *NTFS e ExFAT, mentre macOS utilizza principalmente HFS+ e APFS. Di solito è possibile leggere e talvolta scrivere questi formati di file system su diverse piattaforme, ma potrebbe essere necessario utilizzare strumenti di compatibilità aggiuntivi.

Come Linux gestisce i dispositivi di archiviazione

File del dispositivo in /dev

In Linux, quasi tutto è rappresentato da un file all’interno della gerarchia del file system. Questo include hardware come i dispositivi di archiviazione, che sono rappresentati nel sistema come file nella directory /dev. Tipicamente, i file che rappresentano i dispositivi di archiviazione iniziano con sd o hd seguito da una lettera. Ad esempio, il primo drive su un server è di solito qualcosa come /dev/sda.

Le partizioni su questi drive hanno anche file all’interno di /dev, rappresentati aggiungendo il numero di partizione alla fine del nome del drive. Ad esempio, la prima partizione sul drive dell’esempio precedente sarebbe /dev/sda1.

Mentre i file di dispositivo /dev/sd* e /dev/hd* rappresentano il modo tradizionale per fare riferimento a unità e partizioni, c’è un significativo svantaggio nell’utilizzare solo questi valori. Il kernel Linux decide quale dispositivo ottiene quale nome ad ogni avvio, quindi ciò può portare a scenari confusi in cui i tuoi dispositivi cambiano nodi di dispositivo.

Per risolvere questo problema, la directory /dev/disk contiene sottodirectory corrispondenti a modi diversi e più persistenti per identificare dischi e partizioni nel sistema. Queste contengono collegamenti simbolici che vengono creati all’avvio verso i corretti file /dev/[sh]da*. I collegamenti sono denominati in base alla caratteristica identificativa della directory (ad esempio, tramite l’etichetta della partizione nella directory /dev/disk/by-partlabel). Questi collegamenti puntano sempre ai dispositivi corretti, quindi possono essere utilizzati come identificatori statici per gli spazi di archiviazione.

Alcune o tutte le seguenti sottodirectory possono esistere sotto /dev/disk:

  • by-label: La maggior parte dei filesystem ha un meccanismo di etichettatura che consente l’assegnazione di nomi arbitrari specificati dall’utente per un disco o una partizione. Questa directory è composta da collegamenti denominati in base a queste etichette fornite dall’utente.
  • by-uuid: Gli UUID, o identificatori univoci universali, sono una lunga stringa univoca di lettere e numeri che possono essere utilizzati come ID per una risorsa di archiviazione. Questi non sono generalmente molto leggibili per gli esseri umani, ma sono quasi sempre unici, anche tra i sistemi. Pertanto, potrebbe essere una buona idea utilizzare gli UUID per fare riferimento a storage che potrebbe migrare tra sistemi, poiché le collisioni di denominazione sono meno probabili.
  • by-partlabel e by-partuuid: Le tabelle GPT offrono il proprio set di etichette e UUID, che possono essere utilizzati anche per l’identificazione. Questa funziona in modo simile alle due precedenti directory, ma utilizza identificatori specifici di GPT.
  • by-id: Questa directory contiene collegamenti generati dai numeri di serie del dispositivo hardware e dall’hardware a cui sono collegati. Questo non è completamente persistente, poiché il modo in cui il dispositivo è collegato al sistema può modificare il nome by-id.
  • by-path: Come by-id, questa directory si basa sulla connessione del dispositivo di archiviazione al sistema stesso. I collegamenti qui vengono costruiti utilizzando l’interpretazione del sistema dell’hardware utilizzato per accedere al dispositivo. Questo ha gli stessi svantaggi di by-id poiché il collegamento di un dispositivo a una porta diversa può alterare questo valore.

In genere, by-label o by-uuid sono le migliori opzioni per l’identificazione persistente di dispositivi specifici.

Nota: I volumi di archiviazione di DigitalOcean controllano i numeri di serie del dispositivo segnalati al sistema operativo. Ciò consente di rendere la categorizzazione by-id affidabile e persistente su questa piattaforma. Questo è il metodo preferito per fare riferimento ai volumi di DigitalOcean in quanto è sia persistente che prevedibile al primo avvio.

Montaggio dei dispositivi di blocco

In Linux e in altri sistemi operativi simili a Unix, l’intero sistema, indipendentemente dal numero di dispositivi fisici coinvolti, è rappresentato da un’unica struttura ad albero dei file. Quando un filesystem su un’unità o partizione deve essere utilizzato, deve essere collegato all’albero esistente. Il montaggio è il processo di collegamento di una partizione o unità formattata a una directory all’interno del filesystem di Linux. I contenuti dell’unità possono quindi essere accessibili da quella directory.

Le unità vengono quasi sempre montate su directory vuote dedicate – il montaggio su una directory non vuota significa che i contenuti abituali della directory saranno inaccessibili finché l’unità non viene smontata. Ci sono molte opzioni di montaggio diverse che possono essere impostate per modificare il comportamento di un dispositivo montato. Ad esempio, l’unità può essere montata in modalità di sola lettura per garantire che i suoi contenuti non vengano modificati.

Lo Standard della Gerarchia dei Filesystem consiglia di utilizzare la directory /mnt o una sua sottodirectory per i filesystem temporaneamente montati. Non fornisce raccomandazioni su dove montare lo storage più permanente, quindi è possibile scegliere lo schema desiderato. In molti casi, le sottodirectory /mnt o /mnt vengono utilizzate anche per lo storage più permanente.

Rendere i montaggi permanenti con /etc/fstab

I sistemi Linux utilizzano un file chiamato /etc/fstab (tabella del filesystem) per determinare quali filesystem montare durante il processo di avvio. I filesystem che non hanno una voce in questo file non verranno montati automaticamente a meno che non vengano gestiti da qualche altro software.

Ogni riga del file /etc/fstab rappresenta un diverso filesystem che deve essere montato. Questa riga specifica il dispositivo di blocco, il punto di montaggio a cui associarlo, il formato del drive e le opzioni di montaggio, oltre ad altre informazioni.

Gestione dello Storage più Complessa

Mentre molti casi d’uso possono essere gestiti con queste funzionalità di base, esistono paradigmi di gestione più complessi per unire più dischi, in particolare RAID.

Cos’è il RAID?

RAID sta per redundant array of independent disks. RAID è una tecnologia di gestione e virtualizzazione dello storage che consente di raggruppare i drive insieme e gestirli come un’unica unità con funzionalità aggiuntive.

Le caratteristiche di un array RAID dipendono dal suo livello RAID, che definisce come i dischi nell’array si relazionano tra loro. Alcuni dei livelli più comuni sono:

  • RAID 0: Questo livello indica lo striping dei dischi. Ciò significa che quando i dati vengono scritti nell’array, vengono suddivisi e distribuiti linearmente tra i dischi del set. Questo offre un aumento delle prestazioni poiché è possibile scrivere o leggere da più dischi contemporaneamente. Il lato negativo è che la perdita di un singolo disco può comportare la perdita di tutti i dati dell’intero array, poiché nessun disco contiene informazioni sufficienti per ricostruirlo. RAID 0 di solito non viene mai utilizzato in produzione per questo motivo, anche se può essere utile come punto di riferimento.
  • RAID 1: RAID 1 indica la duplicazione dei dischi. Tutto ciò che viene scritto in un array RAID 1 viene scritto su più dischi. Il suo principale vantaggio è la ridondanza dei dati, che consente ai dati di sopravvivere alla perdita di un disco rigido su uno dei due lati del mirror. Poiché più dischi contengono gli stessi dati esatti, la capacità utilizzabile viene ridotta almeno della metà.
  • RAID 5: RAID 5 distribuisce i dati su più dischi, simile a RAID 0. Tuttavia, a questo livello viene anche implementata una parità distribuita tra i dischi. Ciò significa che se un disco fallisce, i dischi rimanenti possono ricostruire l’array utilizzando le informazioni di parità condivise tra di loro. Di solito, questo è sufficiente per ricostruire un disco, il che significa che l’array può sopravvivere alla perdita di un disco. RAID 5 riduce lo spazio disponibile in un array della capacità di un disco.
  • RAID 6: RAID 6 ha le stesse proprietà di RAID 5, ma fornisce una doppia parità. Questo significa che gli array RAID 6 possono sopportare la perdita di 2 dischi. La capacità dell’array è nuovamente influenzata dalla quantità di parità, il che significa che la capacità utilizzabile è ridotta di due dischi.
  • RAID 10: RAID 10 è una combinazione dei livelli 1 e 0. Prima vengono creati due set di array specchiati. Successivamente, i dati vengono distribuiti in modo strisciato tra di essi. Questo crea un array che ha alcune caratteristiche di ridondanza pur fornendo buone prestazioni. Tuttavia, questo richiede un numero considerevole di dischi e la capacità totale è comunque inferiore alla metà dello spazio disco combinato.

Cosa fare dopo?

Se hai un nuovo dispositivo di archiviazione che desideri utilizzare nel tuo sistema Linux, questo articolo ti guiderà attraverso il processo di partizionamento, formattazione e montaggio del tuo nuovo filesystem. Questo dovrebbe essere sufficiente per la maggior parte dei casi in cui sei principalmente interessato a aggiungere capacità aggiuntiva. Per imparare come eseguire compiti di amministrazione dello storage, consulta Come Eseguire Compiti di Amministrazione di Base per i Dispositivi di Archiviazione in Linux.

Source:
https://www.digitalocean.com/community/tutorials/an-introduction-to-storage-terminology-and-concepts-in-linux