3.2.1 磁盘设备识别与命名规则
3.2.1 磁盘设备识别与命名规则#
- 设备识别流程:内核识别硬件 → udev 生成规则并创建设备节点 →
/dev下形成可访问的块设备文件。理解链路有助于定位“识别失败、设备漂移、热插拔不生效”等问题。
- 常见命名规则
- SATA/SAS/SCSI/USB:
/dev/sdX,如sda、sdb;分区为sda1、sda2 - 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/ 的映射关系,说明哪种标识更稳定。