3.2.1 磁盘设备识别与命名规则

3.2.1 磁盘设备识别与命名规则#

  • 设备识别流程:内核识别硬件 → udev 生成规则并创建设备节点 → /dev 下形成可访问的块设备文件。理解链路有助于定位“识别失败、设备漂移、热插拔不生效”等问题。
文章图片
  • 常见命名规则
  • SATA/SAS/SCSI/USB:/dev/sdX,如 sdasdb;分区为 sda1sda2
  • NVMe:/dev/nvmeXnY,分区为 nvme0n1p1
  • VirtIO:/dev/vdX(KVM/云主机常见)
  • IDE(较旧):/dev/hdX
  • 设备映射:/dev/mapper/(LVM、DM、加密卷)
  • 软件 RAID:/dev/mdX
  • 环回设备:/dev/loopX

  • 顺序与动态性sdX 的字母顺序会因重启、热插拔、控制器变化而漂移,生产中应避免依赖字母顺序。

  • 稳定标识推荐

  • UUID:分区/文件系统级唯一标识
  • PARTUUID/PARTLABEL:分区级稳定标识
  • /dev/disk/by-id/:基于硬件序列号,最稳定
  • /dev/disk/by-path/:基于连接路径,适合固定拓扑

关键命令与示例(含解释)#

1) 查看设备树与属性

# 查看设备、类型、大小、型号、序列号、挂载点
lsblk -o NAME,TYPE,SIZE,MODEL,SERIAL,MOUNTPOINT

# 预期:输出包含 sda/nvme0n1 等,以及各分区挂载点

2) 查看 UUID/PARTUUID

# 查看文件系统 UUID 与类型
blkid

# 示例输出(节选):
# /dev/sda1: UUID="e2f4..." TYPE="xfs"
# /dev/nvme0n1p1: UUID="a1b2..." TYPE="ext4"

3) 查看 udev 识别详情

# 查询设备的 udev 属性,用于确认序列号、路径等
udevadm info --query=all --name=/dev/sda | head -n 20

# 重点字段:ID_SERIAL、ID_PATH、ID_MODEL 等

4) 查看稳定链接映射

# by-id 更稳定,by-path 反映物理连接路径
ls -l /dev/disk/by-id/
ls -l /dev/disk/by-path/

安装与环境准备(工具)#

大多数系统默认带 lsblk/blkid/udevadm,如未安装可补装:

# CentOS/RHEL
sudo yum install -y util-linux udev

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y util-linux udev

运维实践示例:使用稳定标识挂载#

# 1) 查看 UUID
blkid /dev/sdb1

# 2) 编辑 /etc/fstab 使用 UUID 挂载
sudo tee -a /etc/fstab <<'EOF'
UUID=xxxx-xxxx  /data  ext4  defaults,noatime  0  2
EOF

# 3) 测试挂载并验证
sudo mount -a
df -h | grep /data

效果:即使 sdb1 变为 sdc1,挂载仍稳定。

排错思路与命令(常见问题)#

  • 问题1:新盘未识别
# 查看内核日志是否识别到设备
dmesg | tail -n 50

# 重新触发 udev(热插拔后)
udevadm control --reload
udevadm trigger
  • 问题2:设备名称漂移导致挂载失败
# 检查 /etc/fstab 是否使用 UUID
grep -v '^#' /etc/fstab

# 验证 UUID 是否仍存在
blkid | grep -i "xxxx-xxxx"
  • 问题3:by-id 链接缺失
# 检查 udev 规则是否正常
udevadm info --query=all --name=/dev/sda | grep -E "ID_SERIAL|ID_PATH"

练习#

1) 使用 lsblk 找出系统盘与数据盘,记录其 MODEL/SERIAL
2) 用 blkid 找到根分区 UUID,并将 /etc/fstab 中对应项改为 UUID(仅练习环境)。
3) 使用 udevadm info 获取 ID_PATH,判断该盘连接在哪个控制器/槽位。
4) 对比 /dev/sdX/dev/disk/by-id/ 的映射关系,说明哪种标识更稳定。