RHEL6重启后SCSI盘符变化问题分析与解决

admin
RHEL6系统重启后SCSI盘符变化问题,主要因设备扫描顺序不一致导致,影响依赖固定盘符的服务稳定性,原因包括内核识别机制、udev规则未配置唯一标识等,解决方法:通过udev规则绑定磁盘唯一标识(如WWN或UUID),确保设备重启后按固定规则分配盘符;或修改内核参数(如max_scsi_luns)控制扫描顺序,具体操作需查看磁盘信息(如/dev/disk/by-id/),编写udev规则文件,重启验证,该方法可避免盘符漂移,保障系统可靠性。

问题现象

在RHEL6系统中,若服务器配置了多块SCSI磁盘(包括SATA、SAS等SCSI协议设备),重启后常出现磁盘盘符(如/dev/sdb/dev/sdc)与之前不一致的情况,原本通过/dev/sdb挂载的数据目录,重启后变成了/dev/sdc,导致依赖固定盘符的服务(如数据库、文件服务)无法启动,甚至可能因误操作磁盘引发数据丢失风险。

原因分析

SCSI盘符变化的核心原因是Linux内核对磁盘设备的命名依赖扫描顺序,而重启时的扫描顺序可能受多种因素影响,导致设备名与之前不一致,具体原因包括:

硬件扫描顺序不稳定

SCSI设备的扫描顺序由内核根据硬件拓扑结构决定,若存在以下情况,扫描顺序可能变化:

RHEL6重启后SCSI盘符变化问题分析与解决

  • 磁盘插槽位置调整(如热插拔更换磁盘后,插槽接触电阻差异导致扫描顺序变化);
  • SATA端口顺序(服务器主板SATA端口默认扫描顺序可能与物理排列不一致,尤其多磁盘时);
  • 多路径环境(若配置多路径存储,不同路径的扫描顺序可能因路径状态变化而改变)。

udev规则未固定设备名

RHEL6默认通过udev动态管理设备名,但其默认规则仅依赖设备类型(如SCSI磁盘为sdx)和扫描顺序,未结合磁盘的唯一标识(如WWN、序列号)来固定设备名,当扫描顺序变化时,设备名自然随之改变。

内核模块加载顺序差异

不同SCSI控制器(如mpt2sasmegaraid)的内核模块加载顺序可能受系统启动时的随机因素影响(如模块加载耗时、依赖关系),进而改变磁盘扫描顺序,导致盘符变化。

解决方案

解决SCSI盘符变化的核心思路是基于磁盘的唯一标识(如WWN)创建持久化的设备符号链接,使系统无论扫描顺序如何变化,均通过固定链接访问磁盘,以下是具体步骤:

步骤1:确认磁盘的唯一标识

首先需获取目标磁盘的唯一标识,推荐使用WWN(World Wide Name),它是磁盘的全局唯一标识符,不受硬件位置影响,通过以下命令查看磁盘WWN:

# 查看所有SCSI磁盘的WWN(需安装lsscsi工具:yum install lsscsi)
lsscsi -g
# 或通过sysfs查看(以/dev/sdb为例)
cat /sys/block/sdb/device/wwid

输出示例类似0x5000c50015aded67,记录目标磁盘的WWN值。

步骤2:编写udev规则固定设备名

创建udev规则文件,当检测到指定WWN的磁盘时,自动生成固定符号链接(如/dev/mydata_disk)。

  1. 创建规则文件(文件名需以.rules数字越小优先级越高):

    vim /etc/udev/rules.d/99-scsi-persistent.rules
  2. 添加以下内容(替换WWN为实际磁盘的WWN):

    # SCSI磁盘通过WWN固定设备名
    ACTION=="add", KERNEL=="sd*", SUBSYSTEM=="block", ATTRS{wwid}=="WWN", SYMLINK+="mydata_disk"
    • ACTION=="add":在设备添加时触发规则;
    • KERNEL=="sd*":匹配所有SCSI磁盘设备;
    • ATTRS{wwid}=="WWN":根据WWN精确匹配磁盘;
    • SYMLINK+="mydata_disk":创建固定符号链接(可自定义名称)。
  3. 保存并退出(wq)。

步骤3:重新加载udev规则并触发事件

使新规则立即生效,无需重启系统:

# 重新加载udev规则
udevadm control --reload-rules
# 触发设备事件(强制重新扫描磁盘)
udevadm trigger --type=devices --action=add

执行后,可通过ls -l /dev/mydata_disk查看符号链接是否生成,确认链接指向的磁盘是否为目标磁盘(如/dev/sdb)。

步骤4:修改/etc/fstab使用固定设备名

为避免重启后挂载点失效,需将/etc/fstab中的原始盘符(如/dev/sdb1)替换为固定符号链接(如/dev/mydata_disk1)或磁盘分区UUID(推荐UUID,更稳定)。

  1. 查看目标分区的UUID:

    blkid /dev/sdb1

    输出示例:/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-1234-567890abcdef" TYPE="ext4"

  2. 编辑/etc/fstab,将原始盘符替换为UUID或符号链接:

    # 使用UUID(推荐)
    UUID=a1b2c3d4-e5f6-7890-1234-567890abcdef /data ext4 defaults 0 0
    # 或使用符号链接
    /dev/mydata_disk1 /data ext4 defaults 0 0
  3. 保存后执行`mount -a

文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码