Ho lo stesso problema come te: rinominare dal kernel /dev/sd**
dopo un riavvio:
Ovviamente tutto il mio montaggio automatico /etc/fstab
è indicato da LABEL o da UUID, quindi sostanzialmente non ci sono problemi. E tutti i comandi sopra, blkid o lsblk, forniscono questo tipo di informazioni.
Ma il problema inizia come nel mio caso, quando si utilizza la partizione in modalità RAW, nel punto di vista del sistema attualmente avviato: ad esempio: la partizione viene utilizzata come dispositivo non elaborato, per creare un disco virtuale per VirtualBox (quindi il riferimento a questa partizione è qualcosa di simile: /dev/sdf3
) o la partizione viene utilizzato come dispositivo grezzo, per fare un LUN iSCSI (in modo che il riferimento a questa partizione è qualcosa di simile: /dev/sdc6
)
Quindi ora all'avvio, ad esempio in rc.local, devi trovare in modo affidabile qual è il /dev/sdXX
dispositivo della tua partizione RAW dedicata e adattare alcuni file:
ESEMPIO 1
Il disco VirtualBox * .vmk descrizione di questo disco grezzo, nella parte qualcosa come:
\# Extent description
RW 488397167 FLAT "/dev/sdXX" 0
e quindi riavviare il servizio VirtualBox
ESEMPIO 2
nella configurazione di tgtd, un target: target0 era associato /dev/sdd6
al momento della compilazione. Dopo il riavvio si ottiene la stessa partizione rinominata. /deb/sdc6
Questo accade con un disco rimovibile, USB o eSATA! Quindi, come trovare automaticamente il nuovo dispositivo? Ancora in /etc/rc.d/rc.local
Quindi in questo caso abbiamo bisogno di un modo affidabile per trovare qual è il nome del nuovo dispositivo. La partizione GPT offre un GUID univoco per qualsiasi partizione GPT, scritta nella tabella GPT.
gdisk non fornisce queste informazioni con la modalità elenco, ma solo in modalità interattiva con il comando: i. Fortunatamente, Blkid lo fa!
Quindi è necessario scrivere uno script shell, per cercare in tutti i dischi, che è il dispositivo /dev/sdXX
, associato al GUID notato al momento della creazione della partizione.
Qualcosa di simile, search_device_by_partUUID.sh:
\#!/bin/bash
PART_UUID=$1
if [ "$PART_UUID" = "" ]
then
echo "Syntax: $0 <a valid partition UUID>"
exit 3
fi
lsblk | grep '^sd' | awk '{print $1}' | while read DISK_DEVICE
do
INFO=`blkid /dev/${DISK_DEVICE}* | grep "PARTUUID=\"$PART_UUID\"" `
if [ "$INFO" != "" ]
then
echo INFO : "$INFO"
BLK_DEVICE=`echo "$INFO" | awk '{print $1}'`
echo $BLK_DEVICE > /dev/shm/blkdevice
echo -n "BLK_DEVICE : " ; cat /dev/shm/blkdevice
fi
done
e poi usa /dev/shm/blkdevice
, nel tuo script rc.local.