我和您有同样的问题:重新/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配置中,/dev/sdd6
在构建时已将目标:target0与之关联。重新启动后,您将重命名相同的分区。/deb/sdc6
可移动磁盘,USB或eSATA会发生这种情况!那么如何自动查找新设备呢?再次在/etc/rc.d/rc.local中
因此,在这种情况下,我们需要一种可靠的方式来查找新设备的名称。GPT分区为任何GPT分区提供了唯一的GUID,用GPT表编写。
gdisk不会以列表模式提供此信息,而仅在交互式模式下通过以下命令提供:i命令。幸运的是,blkid做到了!
因此,您需要编写一个Shell脚本,以查看/dev/sdXX
与分区创建时注意到的GUID关联的所有磁盘(即device)。
类似于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脚本中使用。