У меня та же проблема, что и у вас: переименование ядра /dev/sd**
после перезагрузки:
Конечно, на все мои автоматические установки /etc/fstab
ссылаются LABEL или UUID, так что в принципе для этого нет проблем. И все приведенные выше команды, blkid или lsblk, дают такую информацию.
Но проблема начинается, как в моем случае, когда вы используете раздел в режиме RAW, с точки зрения текущей загруженной системы: например, либо: раздел используется как необработанное устройство, чтобы создать виртуальный диск для VirtualBox (так ссылка на этот раздел является то вроде: /dev/sdf3
) или раздел используется в качестве исходного устройства, чтобы сделать LUN для ISCSI (поэтому ссылка на этот раздел что - то вроде: /dev/sdc6
)
Итак, теперь при загрузке, например, в rc.local, вы должны надежным образом выяснить, каково /dev/sdXX
устройство вашего выделенного раздела RAW, и адаптировать какой-нибудь файл:
Пример 1
Диск VirtualBox * .vmk Описание этого необработанного диска, в части что-то вроде:
\# Extent description
RW 488397167 FLAT "/dev/sdXX" 0
а затем перезапустите службу VirtualBox
Пример 2
в конфигурации tgtd цель: target0 была связана /dev/sdd6
во время сборки. После перезагрузки вы переименовываете тот же раздел. /deb/sdc6
Это происходит со съемным диском, USB или eSATA! Так как же автоматически найти новое устройство? Снова в /etc/rc.d/rc.local
Поэтому в этом случае нам нужен надежный способ узнать, как называется новое устройство. GPT-раздел предлагает уникальный GUID для любого GPT-раздела, записанный в таблице GPT.
gdisk не предоставляет эту информацию в режиме листинга, но только в интерактивном режиме с помощью команды: i. К счастью, blkid делает это!
Поэтому вам нужно написать сценарий оболочки, чтобы просмотреть все ваши диски, которые являются устройством /dev/sdXX
, связанным с GUID, замеченным во время создания раздела.
Что-то вроде 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
а затем используйте /dev/shm/blkdevice
в своем скрипте rc.local.