Persistent block device naming (Italiano)

From ArchWiki
Revision as of 02:50, 12 May 2013 by Fengchao (Talk | contribs) (By-label: Arch use utfs-3g now.)

Jump to: navigation, search
Sommario help replacing me
Una spiegazione dei possibili nomi univoci per le periferiche(o partizioni); il metodo preferibile per il riconoscimento delle periferiche(partizioni).
Articoli Correlati
fstab (Italiano)
LVM (Italiano)

Questo articolo descrive come utilizzare dei nomi univoci e non modificabili per l'identificazione delle periferiche(o partizioni). Questo è stato reso possibile con l'introduzione di udev, e risulta vantaggioso anche rispetto ai nomi basati sul bus di connessione. Se la macchina ha più di un controller per i dischi SATA, SCSI o IDE, può succedere che l'ordine dei file nodo creati sia casuale. Questo può comportare ad esempio che le periferiche /dev/sda ed /dev/sdb siano invertite in modo casuale ad ogni avvio, impedendo al sistema di avviarsi, oppure determinando la scomparsa dei dispositivi a blocchi che vengono erroneamente rilevati. L'uso di nomi univoci risolve quindi il problema.

Nota: Non è necessario seguire questa guida nel caso in cui si stia utilizzando LVM2, dato che LVM2 si occupa anche di questo automaticamente.

Metodi di nomenclatura univoca

Ci sono quattro differenti modi per assegnare dei nomi univoci alle periferiche:by-label,by-uuid,by-id e by-path. Nei paragrafi successivi verranno descritte le differenze tra i vari metodi e come vengono utilizzati.

By-label

Quasi tutti i filesystem supportano le etichette. Tutte le partizioni che ne hanno una sono elencate nella cartella /dev/disk/by-label.

Nota: Questa cartella viene creata (e rimossa) dinamicamente, a seconda delle partizioni presenti ed aventi una etichetta.
$ ls -lF /dev/disk/by-label
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1

Le etichette possono essere cambiate utilizzando i seguenti comandi:

swap 
# mkswap -L <label> /dev/XXX
Attenzione: Questo comando cancellerà l'area di swap.
Se la swap è montata, eseguire swapoff /dev/XXX prima e swapon /dev/XXX dopo.
ext2/ext3/ext4 
# e2label /dev/XXX <label>
btrfs 
# btrfs filesystem label /dev/XXX <label>
reiserfs 
# reiserfstune -l <label> /dev/XXX
jfs 
# jfs_tune -L <label> /dev/XXX
xfs 
# xfs_admin -L <label> /dev/XXX
fat/vfat (contenuto nel pacchetto mtools) 
# mlabel -i /dev/XXX ::<label>
ntfs (contenuto nel pacchetto ntfs-3g
# ntfslabel /dev/XXX <label>
Attenzione: Le etichette dovranno essere uniche per rendere efficace questo metodo, e non superare i 16 caratteri.

By-uuid

Gli UUID, ovvero Universally Unique Identifier(identificatore unico universale), è un meccanismo che assegna ad ogni filesystem un identificatore unico. Esso è studiato in modo da evitare conflitti. Tutti i filesystem GNU/Linux (inclusa l'area di swap) supportano gli UUID. I filesystem FAT ed NTFS non supportano gli UUID, ma sono comunque elencate in /dev/disk/by-uuid con un identificatore unico:

$ ls -lF /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 2d781b26-0285-421a-b9d0-d4a0d3b55680 -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 31f8eb0d-612b-4805-835e-0e6d8b8c5591 -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 3FC2-3DDB -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 5090093f-e023-4a93-b2b6-8a9568dd23dc -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 912c7844-5430-4eea-b55c-e23f8959a8ee -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 B0DC1977DC193954 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 bae98338-ec29-4beb-aacf-107e44599b2e -> ../../sdb2

Come si può notare, le partizioni FAT ed NTFS (le partizioni aventi etichetta fat e windows nell'esempio precedente) hanno nomi più corti, ma vengono comunque elencate. Il vantaggio nell'uso degli UUID sta nel fatto che è molto meno probabile avere conflitti rispetto al metodo delle etichette. Uno svantaggio è invece che i nomi sono molto meno immediati da leggere o ricordare.

By-id e by-path

In by-id viene creato un nome dipendente dal numero seriale dell'hardware. In by-path invece viene creato un nome unico dipendente dal più corto percorso fisico (secondo sysfs). In entrambi i percorsi sono contenute delle stringhe per indicare il tipo a cui appartengono(es. "-ide-" in 'by-path', ed "-ata-" in 'by-id'), comunque entrambi i metodi non sono adatti alla risoluzione del problema menzionato all'inizio dell'articolo. Non saranno quindi approfonditi oltre.

Utilizzare i nomi univoci

A seconda del metodo scelto, ecco come abilitarlo sul proprio sistema:

fstab

Per abilitare i nomi univoci in /etc/fstab sostituire il nome della periferica assegnata dal kernel nella prima colonna con il corrispondente percorso:

/dev/disk/by-label/home ...
/dev/disk/by-uuid/31f8eb0d-612b-4805-835e-0e6d8b8c5591 ...

oppure specificare direttamente il nome univoco usando un prefisso:

LABEL=home ...
UUID=1f8eb0d-612b-4805-835e-0e6d8b8c5591 ...

Boot manager

Per usare i nomi univoci nel proprio boot manager, sarà necessario soddisfare i seguenti requisiti:

  • Il sistema usa un initramfs creato mediante mkinitcpio
  • Nel file /etc/mkinitcpio.conf sia abilitato l'hook udev
  • L'immagine initramfs è stata generata, con una versione di klibc-udev superiore alla 101-3(con le versioni precedenti i nomi univoci non funzionano correttamente.). Se si aggiorna klibc-udev da una versione precedente e si intende usare i nomi univoci, rigenerare l'immagine initramfs prima di riavviare.

Nell'esempio precedente, /dev/sda1 è la partizione di root. Nel file /boot/grub/menu.lst di GRUB Legacy, la riga kernel sarà simile a questa:

kernel /boot/vmlinuz-linux root=/dev/sda1 ro quiet

A seconda del metodo che si intende utilizzare, cambiare la riga come una delle seguenti:

kernel /boot/vmlinuz-linux root=/dev/disk/by-label/root ro quiet

oppure

kernel /boot/vmlinuz-linux root=/dev/disk/by-uuid/2d781b26-0285-421a-b9d0-d4a0d3b55680 ro quiet

Se si usa LILO, non inserire il nome univoco nell'opzione root=..., non funzionerebbe. Sarà invece necessario usare le opzioni append="root=..." o addappend="root=...". Consultare il manuale di LILO per maggiori informazioni riguardo alle opzioni append ed addappend.

C'è un metodo alternativo per usare le etichette dei filesystem. Ad esempio se (come nell'esempio) il filesystem /dev/sda1 ha l'etichetta "root", sarà possibile usare la seguente linea in GRUB:

 kernel /boot/vmlinuz-linux root=LABEL=root ro quiet