Mam taki sam problem jak Ty: zmiana nazwy przez jądro /dev/sd**
po ponownym uruchomieniu:
Oczywiście wszystkie moje automatyczne instalacje /etc/fstab
są przywoływane przez LABEL lub UUID, więc w zasadzie nie ma z tym problemu. Wszystkie powyższe polecenia, blkid lub lsblk, podają tego rodzaju informacje.
Ale problem zaczyna się, jak w moim przypadku, gdy używasz partycji w trybie RAW, w aktualnie uruchomionym systemie z punktu widzenia: na przykład: partycja jest używana jako surowe urządzenie, aby utworzyć wirtualny dysk dla VirtualBox (więc odniesienie do tej przegrody jest podobnie jak: /dev/sdf3
) lub partycji może być używany jako urządzenie surowca, aby uczynić LUN iSCSI (tak, odniesienie do tej partycji jest czymś: /dev/sdc6
)
Tak więc teraz podczas uruchamiania, na przykład w rc.local, musisz w wiarygodny sposób znaleźć /dev/sdXX
urządzenie dedykowanej partycji RAW i dostosować niektóre pliki:
PRZYKŁAD 1
Dysk VirtualBox * .vmk opis tego surowego dysku, w części coś takiego:
\# Extent description
RW 488397167 FLAT "/dev/sdXX" 0
a następnie uruchom ponownie usługę VirtualBox
PRZYKŁAD 2
w konfiguracji tgtd cel: cel0 był powiązany /dev/sdd6
w czasie kompilacji. Po ponownym uruchomieniu otrzymujesz nazwę /deb/sdc6
tej samej partycji. Dzieje się tak w przypadku dysku wymiennego, USB lub eSATA! Jak więc automatycznie znaleźć nowe urządzenie? Znów w /etc/rc.d/rc.local
Dlatego w tym przypadku potrzebujemy niezawodnego sposobu na znalezienie nowej nazwy urządzenia. Partycja GPT oferuje unikalny identyfikator GUID dla dowolnej partycji GPT zapisany w tabeli GPT.
gdisk nie udostępnia tych informacji w trybie listowania, ale tylko w trybie interaktywnym z poleceniem: i. Na szczęście blkid to robi!
Musisz więc napisać skrypt powłoki, aby przeglądać wszystkie dyski, którymi jest urządzenie /dev/sdXX
, powiązane z identyfikatorem GUID zauważonym podczas tworzenia partycji.
Coś w stylu, 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
a następnie użyj /dev/shm/blkdevice
w swoim skrypcie rc.local.