ฉันมีปัญหาเช่นเดียวกับคุณ: เปลี่ยนชื่อโดยเคอร์เนล/dev/sd**
หลังจากรีบูต:
แน่นอนการติดตั้งอัตโนมัติทั้งหมดของฉัน/etc/fstab
อ้างอิงโดย LABEL หรือ UUID ดังนั้นโดยทั่วไปจะไม่มีปัญหาสำหรับเรื่องนั้น และคำสั่งทั้งหมดข้างต้น blkid หรือ lsblk ให้ข้อมูลประเภทนี้
แต่ปัญหาเริ่มต้นขึ้นในกรณีของฉันเมื่อคุณใช้พาร์ติชันในโหมด RAW ในมุมมองของระบบที่ถูกบูตในปัจจุบัน: ตัวอย่างเช่น: พาร์ติชันที่ใช้เป็นอุปกรณ์ดิบเพื่อสร้างดิสก์เสมือนสำหรับ VirtualBox (ดังนั้น การอ้างอิงไปยังพาร์ทิชันนี้เป็นสิ่งที่ชอบ/dev/sdf3
) หรือพาร์ทิชันที่ใช้เป็นอุปกรณ์ดิบเพื่อให้ LUN สำหรับ iSCSI (เพื่อการอ้างอิงไปยังพาร์ทิชันนี้เป็นสิ่งที่ชอบ: /dev/sdc6
)
ดังนั้นตอนบูตเช่นใน rc.local คุณจะต้องค้นหาในลักษณะที่เชื่อถือได้/dev/sdXX
อุปกรณ์ของพาร์ติชัน RAW เฉพาะของคุณคืออะไรและปรับไฟล์บางไฟล์:
ตัวอย่าง 1
คำอธิบาย VirtualBox disk * .vmk ของ raw disk นี้ในส่วนที่ต้องการ:
\# 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 ของคุณ