Eu tenho o mesmo problema que você: renomear pelo kernel /dev/sd**
após uma reinicialização:
É claro que toda a minha montagem automática /etc/fstab
é referenciada por LABEL ou por UUID, portanto, basicamente, não há problema para isso. E todos os comandos acima, blkid ou lsblk, fornecem esse tipo de informação.
Mas o problema começa como no meu caso, quando você está usando uma partição no modo RAW, no ponto de vista do sistema atualmente inicializado: por exemplo: a partição é usada como dispositivo bruto, para criar um disco virtual para o VirtualBox (então a referência a esta partição é algo como /dev/sdf3
:) ou a partição é usada como dispositivo bruto, para criar um LUN para iSCSI (portanto, a referência a essa partição é algo como /dev/sdc6
:)
Portanto, agora na inicialização, por exemplo, no rc.local, você precisa encontrar de maneira confiável qual é o /dev/sdXX
dispositivo da sua partição RAW dedicada e adaptar alguns arquivos:
EXEMPLO 1
A descrição do disco VirtualBox * .vmk deste disco bruto, na parte algo como:
\# Extent description
RW 488397167 FLAT "/dev/sdXX" 0
e, em seguida, reinicie o serviço VirtualBox
EXEMPLO 2
na configuração tgtd, um target: target0 foi associado /dev/sdd6
no momento da construção. Após a reinicialização, a mesma partição é renomeada. /deb/sdc6
Isso acontece com um disco removível, USB ou eSATA! Então, como encontrar o novo dispositivo automaticamente? Novamente em /etc/rc.d/rc.local
Portanto, neste caso, precisamos de uma maneira confiável para encontrar qual é o novo nome do dispositivo. A partição GPT oferece GUID exclusivo para qualquer partição GPT, escrita na tabela GPT.
O gdisk não fornece essas informações com o modo de listagem, mas apenas no modo interativo com o comando: i. Felizmente, o blkid faz isso!
Portanto, você precisa escrever um script de shell para procurar em todos os seus discos, que são o dispositivo /dev/sdXX
, associado ao GUID observado no momento da criação da partição.
Algo como, 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 então use /dev/shm/blkdevice
, no seu script rc.local.