Linux服务器存储扩容踩坑记:用fdisk和lsblk给四块16T硬盘组RAID5的全流程复盘
Linux服务器存储扩容踩坑记:用fdisk和lsblk给四块16T硬盘组RAID5的全流程复盘
去年双十一大促前,我们的文件存储服务器突然告警——剩余容量不足10%。作为团队里负责基础设施的"救火队员",我不得不紧急采购四块16T企业级硬盘来扩容。本以为按文档操作两小时就能搞定,结果从设备识别到RAID同步,踩遍了所有能想到的坑。这篇复盘将用第一视角带你走完整个流程,重点分享那些官方手册里不会写的实战细节。
1. 前期准备:认识你的存储设备
1.1 硬件选择与连接
这次选用的希捷Exos X16系列企业盘支持7×24小时运行,CMR传统磁记录技术比SMR更适合RAID环境。上架时有个细节值得注意:多盘位服务器最好间隔插盘。我们最初把四块盘连续插在背板1-4槽位,结果同步时温度集体飙到55℃以上,后来调整到1/3/5/7槽位,温度直降8℃。
查看设备拓扑结构的实用命令:
lsblk -o NAME,MODEL,SIZE,ROTA,MOUNTPOINT输出示例:
NAME MODEL SIZE ROTA MOUNTPOINT sda ST16000NM001G 14.6T 1 sdb ST16000NM001G 14.6T 1 nvme0n1 Samsung_SSD_1T 931G 0 /1.2 关键工具安装
不同发行版的软件包管理略有差异:
- Debian/Ubuntu系:
sudo apt update && sudo apt install mdadm smartmontools -y - RHEL/CentOS系:
sudo dnf install mdadm smartmontools -y
smartmontools不是必选项,但强烈建议安装——它提供的smartctl工具能实时监控硬盘健康状态。
2. 设备识别阶段的隐藏陷阱
2.1 动态设备名的应对策略
第一次执行fdisk -l时,四块盘整齐地显示为sda-sdd。但在配置中途服务器意外重启后,设备名竟变成了sda/sdb/sdh/sdi!这种动态分配机制是Linux设备管理的特点,也是导致数据灾难的高危因素。
可靠解决方案:
- 通过WWID永久标识设备:
ls -l /dev/disk/by-id/ - 或者使用更稳定的路径:
/dev/disk/by-path/pci-0000:3b:00.0-sas-0x5003048000cdf729-lun-0
2.2 必须使用分区的三个理由
原始文档强调要用分区而非整盘,但没解释原因。实际踩坑后发现:
- 整盘做RAID会导致部分硬件RAID卡识别异常
- 分区后可以保留引导记录区域
- 方便未来扩展(比如预留空间做热备盘)
创建分区的正确姿势:
sudo fdisk /dev/sda交互步骤:
- 输入
g创建GPT分区表(超过2T必须用GPT) - 输入
n创建新分区 - 一路回车使用默认值
- 输入
t设置分区类型为fd00(Linux RAID) - 输入
w保存
3. RAID5构建过程中的典型报错
3.1 设备忙错误处理
执行创建命令时:
sudo mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/sd[a-d]1可能遇到:
mdadm: cannot open /dev/sdb1: Device or resource busy这是因为系统自动挂载了这些分区。解决步骤:
- 检查占用进程:
sudo lsof /dev/sdb1 - 卸载分区:
sudo umount /dev/sdb1 - 如果仍提示忙,可能是内核raid模块占用了:
sudo mdadm --stop /dev/md127
3.2 不同容量硬盘的兼容方案
虽然四块盘标称都是16T,但实际可能有细微差异:
/dev/sda1: 15628053168 sectors /dev/sdb1: 15628053152 sectors这时创建RAID会报size mismatch错误。黄金法则:以最小容量盘为准,创建阵列时显式指定:
sudo mdadm --create ... --size=156280531524. 后期优化与监控
4.1 加速RAID同步的技巧
初始同步16T×4的RAID5预计需要36小时。通过调整策略可缩短至20小时:
echo 50000 > /proc/sys/dev/raid/speed_limit_min echo 500000 > /proc/sys/dev/raid/speed_limit_max同时可以实时查看进度:
watch -n 60 cat /proc/mdstat4.2 智能挂载配置
/etc/fstab的常见坑点:
- 错误使用设备路径(应用UUID替代)
- 忘记添加
nofail选项(避免因单盘故障导致系统无法启动) - 遗漏文件系统检查顺序(最后两个数字)
正确示例:
UUID=8da7a3f7-01 /data ext4 defaults,nofail,noatime 0 24.3 长期健康监测
设置每周自动巡检:
sudo smartctl -t long /dev/sda sudo mdadm --monitor --scan --daemonize配置邮件报警:
echo 'MAILADDR your@email.com' >> /etc/mdadm.conf这次扩容最深刻的教训是:永远要在操作前确认三遍设备标识符。有次凌晨三点误操作差点清空备份盘,幸亏及时ctrl+c终止了mkfs命令。现在我的工作流程里强制增加了拍照存档环节——用手机拍下lsblk输出和物理盘位对照图,这个笨办法已经救了团队三次。
