File System: I dischi fissi

()

Il disco fisso ( hard drive o hard disk ) principale, in un sistema Linux, è, solitamente, nominato:


sda

Gli altri dischi fissi eventualmente presenti nel sistema, verranno identificati come:


sdb
sdc

e così via. L’acronimo “sd” sta per “SCSI ( Small Computer System Interface ) mass-storage driver”. SCSI è un insieme di standard (comandi, protocolli, interfacce elettriche e ottiche) che definisce le connessioni fisiche e il trasferimento di dati tra le periferiche e il computer al quale queste sono collegate. Gli standard SCSI sono solitamente utilizzati per gli hard disk, i CD, i DVD, etc. Gli standard SCSI vengono spesso sostituiti da standard meno performanti, ma più economici, quali ATA/IDE (Advanced Technology Attachment / Integrated Drive Electronics) per gli hard disk e USB (Universal Serial Bus) per altre periferiche di uso comune. Nei sistemi Linux, per la gestione dei dischi e delle eventuali partizioni, sono disponibili i comandi:


fdisk
parted
lsblk

Per sapere, per esempio, quanti e quali dischi sono stati rilevati dal sistema operativo, eseguite uno dei seguenti comandi:


sudo fdisk -l
sudo parted -l
sudo lsblk

Il comando lsblk ( list block device ) stampa l’elenco di tutte le periferiche a blocchi attaccate al sistema (eccetto i banchi RAM), in un formato ad albero:


NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 298,1G 0 disk
├─sda1 8:1 0 131,6G 0 part
├─sda2 8:2 0 14,7G 0 part
├─sda3 8:3 0 12,4G 0 part
└─sda4 8:4 0 139,4G 0 part /
sr0 11:0 1 1024M 0 rom

dove sda è il disco fisso principale, suddiviso in quattro parti ( o partizioni ), mentre sr0 indica la presenza di un DVD o di un CD-ROM. Se si volesse ottenere informazioni su uno specifico dispositivo, occorre ricordare che ciascun dispositivo è da indicare con il percorso assoluto della directory devices o dev:


sudo fdisk -l /dev/sda
sudo parted -l /dev/sda
sudo lsblk /dev/sda

La directory:


/dev

è una directory non presente sul disco fisso, bensì creata e gestita, dal kernel, direttamente nella memoria di sistema (RAM), ma rappresentata, sempre dal kernel, come una normale directory, così da permettere agli utenti di ottenere informazioni normalmente appannaggio del kernel stesso. Il kernel rappresenta questa directory come un vero e proprio filesystem indipendente, che proprio perchè non corrispondente ad un filesystem presente fisicamente sul disco, viene chiamato pseudo filesystem. La directory /dev non è il solo pseudo filesystem presente in un sistema Linux. Per esempio:


/proc

è lo pseudo filesystem dove vengono rappresentati tutti i processi in esecuzione in un dato momento. Tutti i file non relativi ad un processo, invece, vengono conservati in un altro pseudo filesystem, contenuto nella directory:


/sys

gestito direttamente dal kernel. È da questo file system che UDEV raccoglie le informazioni da pubblicare in /devUDEV è la componente software di Linux (dal kernel Linux 2.6) che si occupa di gestire le periferiche, creando o rimuovendo, in modo dinamico, per le sole periferiche connesse al sistema, i file di periferica all’interno della directory /dev. È il successore di devfs e hotplug e viene eseguito all’interno dello userspace, permettendo, così, all’utente di modificare i nomi delle periiferiche. Gli pseudo filesystem rappresentano un’interfaccia attraverso la quale le applicazioni utente possono interagire direttamente con il kernel, poichè rappresentano la struttura interna del kernel in un dato momento. Grazie alla creazione di filesystem virtuali, Linux rende possibile interagire con l’hardware sottostante, utilizzando le normali funzioni di Input/Output ( scrittura e lettura ). Proviamo a verificare su quale terminale o pseudo terminale stiamo lavorando, eseguendo il comando di shell:


tty

Se riceviamo una risposta del tipo:


/dev/pts/3

significa che stiamo lavorando su uno pseudoterminale, nominato 3 ( probabilmente, avremo già aperto altri due pseudoterminali ). Ora, apriamo un nuovo terminale e, con i privilegi di root, scriviamo una nuova riga nel file:


/dev/pts/3


echo Ciao > /dev/pts/3

Torniamo, ora, sul nostro pseudoterminale 3 e troveremo stampato il messaggio appena inviato dal nuovo pseudoterminale. Le periferiche sono, normalmente, periferiche a blocchi o a caratteri. In generale, le periferiche a blocchi, quali dischi fissi e CD−ROM contengono dati, mentre le periferiche a caratteri, quali porte seriali, porte parallele per stampanti, mouse, sono le periferiche che trasmettono o trasferiscono dati. Per vedere l’elenco delle periferiche attualmente gestite dal kernel, sarà, quindi, sufficiente eseguire un listato all’interno della direcory dev:


/dev


ls -al

oppure, per selezionare i dischi fissi:


/dev


ls -al sd*

Quindi, per leggere il contenuto del disco fisso principale, è sufficiente leggere il file sda:


od -x -N 512 sda

In questo esempio, stiamo leggendo il primo settore (512 byte) del disco, che contiene il Master Boot Record. Per leggere il secondo settore del disco, sarà necessario il comando:


od -x -j 512 -N 512 sda

che legge i primi 512 byte, saltando i primi 512 byte. In presenza di più dischi fissi, nel sistema, come è possibile identificare esattamente un disco? A quale disco fisico corrisponde, per esempio, la periferica sda? Il kernel Linux, infatti, assegna i nomi ai vari dischi fissi ad ogni caricamento (boot) del sistema operativo: è possibile, quindi, operare su un disco, convinti di operare su un differente disco. In questo caso, può essere di enorme aiuto un sottosistema di /dev:


/dev/disk

all’interno del quale i dischi vengono identificati con nomi più persistenti (uguali ad ogni caricamento, o boot, del sistema operativo):


/dev/disk/by-id
/dev/disk/by-path
/dev/disk/by-uuid

proprio per offrire la possibilità all’utente ( e alle sue applicazioni ) di identificare in modo univoco tutti i dischi connessi al sistema. Le subdirectory contenute nella directory disk, infatti, contengono link simbolici che collegano uno specifico hard disk ad un file contenuto in /dev. Nella directory by-id, un disco fisso viene, solitamente, identificato con il suo numero seriale:


ata-Hitachi_HTS545032B9A300_091111PB5C01QDKED30G -> ../../sda
ata-Hitachi_HTS545032B9A300_091111PB5C01QDKED30G-part1 -> ../../sda1
ata-Hitachi_HTS545032B9A300_091111PB5C01QDKED30G-part2 -> ../../sda2
ata-hp_DVDRAM_GT20L_M3A9BDG5758 -> ../../sr0

In questo esempio, vediamo che il disco fisso Hitachi_HTS545032B9A300_091111PB5C01QDKED30G corrisponde al disco denominato SDA. UDEVD (il demone UDEV) nomina le periferiche utilizzando:

  • il tipo di interfaccia (ATA, nel nostro esempio);

  • le informazioni sul produttore e il modello, il serial number e, quando disponibile, la partizione.

Le regole seguite da UDEV per assegnare nomi persistenti alle periferiche sono specifiche del sistema in cui UDEV opera e sono scritte nei file di configurazione di UDEV, salvati nella directory:


/lib/udev/rules.d

Per avere l’elenco di tutti i nomi persistenti creati da UDEV per i dischi, eseguite il comando:


ls -lR /dev/disk

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?