Dischi e Filesystem

FHS e cifratura

Adelina Doncheva Georgieva

"On a UNIX system, everything is a file; if something is not a file, it is a process."

Linux Filesystem Layout

FHS

Filesystem Hierarchy Standard

È lo standard che contiene un set di requisiti e linee guida per il collocamento di file e directory sotto sistemi operativi UNIX-like


  • Mantenuto dalla Linux Foundation
  • Versione attuale 2.3 (rilasciata il 29 Gennaio 2004)

http://www.pathname.com/fhs

In spiccioli, definisce dove mettere cosa


  • tutti i file sono sotto /, anche se memorizzati su dispositivi fisici o virtuali diversi

Directory standard

Percorso Contenuto
/ cartella root, la radice del filesystem
/boot file di avvio: bootloader, kernel e initrd
/etc file di configurazione del sistema
/home cartelle personali degli utenti
/media punto di mount per i filesystem esterni (cd, usb,...)
/mnt punto di mount per i filesystem interni temporanei
/opt pacchetti software opzionali
/root home dell'utente root
/usr eseguibili e librerie per le applicazioni utente
/var dati (mutabili), log e cache di sistema

/usr e /var contengono delle sottogerarchie

Gerarchia per eseguibili e librerie

FHS specifica una gerachia a tre livelli; eseguibili e librerie possono comparire in tre punti del filesystem

  • /: essenziali al funzionamento del sistema
  • /usr: applicazioni utente
  • /usr/local: applicazioni locali (installate a mano)

In ciascun percorso i binari sono suddivisi in 3 cartelle:

  • .../bin: binari
  • .../lib: librerie
  • .../sbin: binari di sistema

I binari sono separati in /bin e /sbin perché solitamente i binari in .../sbin richiedono privilegi di amministratore per funzionare

Gerarchia /usr


Oltre a /sbin, /bin, /lib, contiene anche

  • /usr/include: include file header per la compilazione di programmi C/C++ (*.h)
  • /usr/share: dati delle applicazioni (immagini, suoni, ...)
  • /usr/src: codice sorgente (es. kernel)

FS speciali

Non sono vere cartelle, ma rappresentazioni virtuali di alcuni aspetti del sistema nello spirito "tutto è un file"


  • /dev: riferimenti ai dispositivi
  • /proc: informazioni sui processi e sul kernel

Sono il punto di mount di FS opportuni

File temporanei

Sono file per il quali il sistema non sente la mancanza se persi. Sono memorizzati in due posizioni diverse, a seconda del tempo di persistenza nel sistema

  • /tmp: contiene spazio per file che potrebbero essere persi tra un riavvio e l'altro
  • /var/tmp: altro spazio temporaneo preservato tra un riavvio e l'altro (persistente)

File variabili

Dati condivisi delle applicazioni durante il loro normale funzionamento

  • /var/cache: cache di sistema (velocizzano applicazioni)
  • /var/lock: lock files
  • /var/log: log di sistema (demoni, firewall, accessi,...)
  • /var/run: informazioni sul sistema (utenti connessi,...)
  • /var/spool: coda per le operazioni lunghe (stampa, mail,...)

Spesso /var è montata come una partizione separata, potrebbe quindi non essere accessibile nelle prime fasi di avvio.

Deviazioni dallo standard

Le moderne distribuzioni Linux creano altre due directory, non standard

  • /run: come /var/run, ma montata come filesystem virtuale, subito accessibile
  • /sys: contiene parametri del kernel e le opzioni per configurarne il funzionamento

I-node

Nei sistemi Unix gli i-node sono strutture dati sul fs che descrivono attributi su file, directory e qualsiasi altro oggetto.

    Le informazioni includono:

  • la dimensione del file e la sua locazione fisica
  • il proprietario e il gruppo di appartenenza
  • le informazioni temporali di modifica, ultimo accesso e di cambio di stato
  • il numero di collegamenti fisici che referenziano l'inode
  • i permessi di accesso
  • un puntatore allo spazio sul disco che contiene i file veri e propri

Ogni inode ha associato un numero univoco all'interno del dispositivo e ogni file presente è identificato come un collegamento fisico (hard link) all'inode tramite il suo numero. Per recuperare le informazioni sull'inode dei file si può usare la chiamata di sistema stat

Hard Link

Collegamento fisico che associa il nome di un file al suo contenuto. Deve trovarsi nello stesso filesystem del padre e non può rimanere orfano.


La creazione di un file comporta sempre la simultanea creazione di un collegamento fisico che permetta ai programmi di riferirsi ai dati tramite un nome nel filesystem.

Symbolic Link

È un file contenente un percorso relativo od assoluto al file o directory a cui fa riferimento; questo permette di creare collegamenti non solo all'interno della stessa partizione, ma anche da un file system ad un altro, offrendo quindi più flessibilità rispetto ad un collegamento fisico.


Ha il rischio di rimanere "orfano" se il file a cui punta viene rimosso o rinominato.

Concetti di Base

Checksumming

È la tecnica utilizzata per verificare l'integrità di dati e metadati, fa da cuscino per le cosidette silent corruptions

http://www.linfo.org/checksum.html

Concetti di Base

Deduplicazione

È la tecnica specializzata nella compressione dei dati per eliminare eventuali dati duplicati. Viene sfruttata per utilizzare meglio lo spazio di archiviazione dei dati.

https://en.wikipedia.org/wiki/Data_deduplication

Concetti di Base

Copy on Write (CoW)

È una strategia di ottimizzazione utilizzata quando multiple attività inizialmente utilizzano la stessa copia di una certa informazione (i.e. dati salvati su disco) che possono eventualmente modificare; la copia "vera" non viene creata fino a che il dato non viene modificato da una delle attività.

https://en.wikipedia.org/wiki/Copy-on-write

Concetti di Base

Frammentazione-Deframmentazione

La frammentazione è la suddivisione di un file in più blocchi o gruppi di blocchi non contigui. Obbliga ad un seek, ma permette di riempire meglio gli spazi vuoti nel disco.

Ha come svantaggio il non poter salvare un dato in un certo blocco di memoria se tale blocco è minore del dato da salvare

La deframmentazione è la rimozione della frammentazione.

Concetti di Base

Extent

area di memorizzazione contigua (blocchi contigui) riservata per un file. Riduce la frammentazione.

Concetti di Base

Journaling

È una tecnica utilizzata da molti file system moderni per preservare l'integrità dei dati da eventuali cadute di tensione.


Quando un applicativo invia dei dati al file system per memorizzarli su disco, questo prima memorizza le operazioni che intende fare su un file di log e in seguito provvede a effettuare le scritture sul disco rigido, quindi registra sul file di log le operazioni che sono state effettuate.

Concetti di Base

Mirroring

È una copia esatta del contenuto del FS: in caso di rottura del disco, potrà essere sostituito e ripristinato.

Concetti di Base

Quota

È la quantità massima di spazio sul FS usabile da un utente, gruppo, processo (o una combinazione).

Concetti di Base

Wear leveling (TRIM)

È una tecnica per prolungare il tempo di vita di alcune memorie flash, come quelle utilizzate negli SSD.


Viene effettuata dall’hardware, ma ha bisogno della collaborazione del SO (che deve sapere e indicare quali blocchi non sono più in uso).

Tipi di Filesystem

Filesystem Creatore Anno di introduzione SO originale
FAT32 Microsoft 1996 Windows 95b
Ntfs Microsoft, Gary Kimura, Tom Miller 1993 Digital Unix
ZFS Sun Microsystems 2004 Solaris
ext4 various 2006 Linux
Btrfs Oracle Corporation 2007 Linux
https://en.wikipedia.org/wiki/Comparison_of_file_systems

Ext4

Fourth extended filesystem

  • stable
  • usa 48 bit per l'indirizzamento dei blocchi
  • supporta le tecniche di extent, checksumming, journaling, deframmentazione, quota
  • prealloca spazio per un file sul disco. L'istruzione fallocate() consente di crearlo; viene garantità la continuità dello spazio allocato
  • usa la tecnica allocate-on-flush conosciuta anche come delayed allocation; nello scrivere un dato viene sottratto lo spazio dal contatore dello spazio libero su disco ma non viene allocato subito il blocco a livello fisico, l'allocazione viene ritardata garantendo minor frammentazione e un maggior numero di dati scritti alla volta

Btrfs

  • stable da Linux kernel 3.10 in avanti
  • usa 64 bit per l'indirizzamento dei blocchi
  • nasce per la necessità di sopperire a mancanze del precedente fs ext4 incentrate sullo storaging, in particolare nella gestione di array e per sistemi con scalabilità indispensabile in termini di archiviazione
  • è di tipo CoW, permette di creare snapshot e cloni
  • dati e metadati sono validati tramite checksumming
  • ha la struttura B-albero con una radice comune
  • frammentazione in scrittura ridotta
  • Un volume EXT4 può essere convertito in BTRFS: è possibile installare EXT4 e, in futuro, convertire

  • https://help.ubuntu.com/community/btrfs

FS virtuali

procfs: montato in /proc, fornisce informazioni sui processi attivi, sotto forma di pseudo filesystem (/proc/$PID)

sysfs: montato in /sys, permette di modificare paramentri del kernel e apprendere la configurazione di sistema

tmpfs: FS creato nella RAM, utile per /run, /var/lock e altre strutture "piccole" che hanno bisogno di velocità ma non devono resistere al reboot

aufs: ragruppa più fs, facendoli apparire come un solo fs virtuale. Successore di unionfs

squashfs: fs compresso in sola lettura. Viene spesso usato nei Live CD, facendo risparmiare spazio

ISO 9660 (e UDF): fs in sola lettura usato nei CD dati. UDF è il successore (usato nei CD-RW e nei DVD)

eCryptfs: overlay che supporta la cifratura trasparente a livello di singoli file e path (si può abilitare solo per una cartella)

Dispositivi (file speciali)

Dischi

Distinguiamo tre tipi di dispositivi diversi

  • A blocchi: operazioni di I/O per blocchi di dimensione predeterminata (es. hard disk che si leggono a settori)
  • A caratteri: operazioni di I/O per singoli byte, rappresentano le porte (o, comunque, senza blocchi di dimensione fissata - standard output)
  • Speciali: sono astrazioni, non necessariamente legate ai dispositivi di I/O

Per ragioni di sicurezza, i dispositivi possono essere creati solo da root e non sono direttamente accessibili ai normali utenti

Dischi

Dispositivi a blocchi

I dischi rigidi sono i principali dispositivi di memoria di massa che tramite il "volo" meccanico di due testine (una per lato) raggiungono o scrivono dati.


Le unità allo stato solido (SSD) si basano su memoria flash per l'immagazzinamento dei dati, modificando lo stato elettronico di celle di transistor; per questo essi non richiedono parti meccaniche in movimento (dischi, motori e testine), né componenti magnetici, riducendo i consumi elettrici e l'usura.

Partizioni

Sono le suddivisioni del disco. Ogni disco deve avere almeno una partizione, sulla quale si può creare il FS. Esistono due schemi di partizioni:

  • MBR (Master Boot Record): legacy, la struttura dati precede la prima partizione. La tabella delle partizioni descrive al massimo 4 partizioni fisiche. Sono state aggiunte le partizioni logiche, memorizzate in una lista concatenata (se si danneggia il record di una, si perdono i dati delle seguenti)
  • GPT (GUID Partition Table): usata su UEFI e su alcuni sistemi BIOS. Innalza i limiti di MBR (128 partizioni).

S.M.A.R.T.

I dischi rigidi (quasi tutti) hanno un sistema di diagnostica interna, detto S.M.A.R.T., che fornisce diversi indicatori di affidabilità per anticipare i guasti e salvaguardare i dati. Alcuni dati forniti da S.M.A.R.T. sono:

  • temperatura
  • numero di settori danneggiati
  • ore di funzionamento
  • Possono essere visualizzati con strumenti appositi: smartctl (CLI), gsmartcontrol e palimpsest (grafici).

Nomenclatura

I dispositivi compaiono sotto /dev e hanno nomi convenzionali. Tra i dispositivi speciali ci sono:

  • /dev/null: scarta l'input, non ha output
  • /dev/zero: generatore di zeri
  • /dev/random: flusso truly random di numeri casuali
  • /dev/urandom: flusso pseudorandom

Altri dispositivi:

  • /dev/fb: framebuffer
  • /dev/cdromX: CD-ROM
  • /dev/fdX: Lettori Floppy Disk
  • /dev/ptX: Terminali virtuali
  • /dev/ttyX, ttyS (seriale), ttyUSBX: Terminali
  • /dev/loopX: Loop

con X numero progressivo del dispositivo

I dischi PATA/SATA (la quasi totalità di quelli usati attualmente) usano un prefisso sd e una convenzione a due livelli

Alcune utilities

Loop

Pseudo-device che rende un file accessibile come se fosse un dispositivo a blocchi. Utile per montare immagini di dischi o chiavette senza doverle masterizzare.

Alcune utilities

UDev

Su unix classico i dispositivi vengono creati con mknod. Sui sistemi Linux moderni i dispositivi a blocchi sono creati e gestiti automagicamente da un demone, UDev.

  • ascolta gli eventi di sistema e agisce opportunamente
  • è un componente articolato, ma non ce ne occuperemo. Sappiate che esiste e funziona

Alcune utilities

fstab

fstab elenca tutti i dispositivi disponibili sul sistema e indica come vanno inizializzati o integrati nel FS del sistema. È usato ancora per la configurazione dell’hard disk principale e i FS di startup, ma è stato soppiantato da UDev per i dispositivi esterni.


Linea di /etc/fstab:

Alcune utilities

mount

Ogni dispositivo ha un file speciale corrispondente nella cartella /dev. Per accedere ai dati contenuti in un dispositivo a blocchi (i file), bisogna "montarlo". Il comando per montare i filesystem è mount:

Eseguire mount senza argomenti mostrerà i fs attualmente montati con le relative opzioni.

Alcune utilities

umount

È il comando simmetrico: serve a «smontare» un dispositivo, in modo da effettuare una rimozione sicura e indolore:

Alcune utilities

fuser

Non è possibile smontare un filesystem occupato (es. c’è un trasferimento di file in corso), in tal caso si usa fuser per mostrare il PID dei programmi che stanno usando il dispositivo. Va usato con privilegi di root

  • # fuser /nome/del/file: PID dei processi che hanno aperto il file specificato
  • # fuser -c $punto-di-mount: PID dei processi che stanno usando un qualsiasi file nel dispositivo montato alla posizione specificata

Alcune utilities

df

Indica quanto spazio libero rimane su ogni partizione. Viene spesso usato con l’opzione -h, che riporta le misure in unità «human-readable».

LUKS, LVM e RAID

LUKS

LUKS sta per Linux Unified Key Setup ed è un metodo di cifratura dei dischi rigidi.

  • è indipendente dalla piattaforma
  • può essere utilizzato in un'ampia varietà di strumenti
  • garantisce che la gestione delle password avvenga in una modalità sicura e documentata
  • su Linux c'è cryptsetup

LUKS, LVM e RAID

LVM

LVM sta per Logical Volume Management utilizza la funzione di device-mapper del kernel Linux per fornire un sistema di partizioni che sia indipendente dalla sottostante struttura del disco fisico.

  • spazio di archiviazione astratto e "partizioni virtuali"
  • facile ingrandire o ridurrre la dimensione dello spazio di archiviazione
  • facile aggiungere/rimuovere partizioni senza preoccuparsi di avere spazio contiguo a disposizione su uno specifico disco
  • LVM non è utilizzato per la partizione /boot, a causa di problemi con il bootloader.

LUKS, LVM e RAID

RAID

RAID sta per Redundant Array of Independent Disks: è una tecnica di raggruppamento di diversi dischi rigidi collegati ad un computer che li rende utilizzabili, dalle applicazioni e dall'utente, come se fosse un unico volume di memorizzazione.

https://it.wikipedia.org/wiki/RAID#Implementazioni_RAID https://www.youtube.com/watch?v=_xUDxTDj148

DEMO

Prossimo appuntamento: Mercoledì 20 aprile

  • Backup & Restore
  • Posta cifrata/GPG

Fonti

THE END

Grazie per l'attenzione!

Questa opera è licenziata sotto i termini della Creative Commons, Attribuzione – Non commerciale – Condividi allo stesso modo 3.0 Italia License.
Per una copia della licenza, consultare:
http://creativecommons.org/licenses/by-nc-sa/3.0/it/