У мене така ж проблема, як і у вас: перейменування ядра /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.