在服务器运维中,磁盘扩容是一个非常高频的操作。本文将总结从识别新盘到挂载、大文件迁移的全过程。
1. 识别新磁盘
在操作之前,首先要找到新添加的硬盘设备名。
- lsblk:以树状列出块设备(最推荐)。
- fdisk -l:列出详细的分区表信息。
- df -h:查看已挂载的文件系统(确认新盘是否已被自动挂载)。
2. 分区:是否必须?
不是必须的。 你可以直接对整个磁盘(如 /dev/vdb)进行格式化并挂载。
- 不分区的优点:操作简单,省去分区步骤。
- 建议分区的理由:
- 管理方便:如果未来需要将一块大盘拆分为多个逻辑区域,分区是必须的。
- 兼容性:某些老旧系统或工具可能无法很好地处理不带分区表的裸盘。
- 常用工具:
- fdisk:适用于 2TB 以下磁盘(MBR)。
- parted:支持 2TB 以上磁盘(GPT)。
3. 格式化:ext4 还是 xfs?
常用的 Linux 文件系统主要有两种: - ext4 (Fourth Extended Filesystem): - 优点:兼容性极好,支持文件碎片整理,缩减分区大小(shrink)非常方便。 - 适用:普通服务器、对文件系统调整有灵活要求的场景。 - xfs (Extents File System): - 优点:在大文件处理、高并发 I/O 方面表现更优。它是 CentOS 7+ 的默认文件系统。 - 缺点:不支持在线缩减(shrink)分区,只能扩容。 - 适用:数据库服务器、存储大文件的场景。
命令示例:
- mkfs.ext4 /dev/vdb1
- mkfs.xfs /dev/vdb1
4. 挂载与永久挂载
临时挂载
mkdir /mnt/new_disk
mount /dev/vdb1 /mnt/new_disk
永久挂载(防坑指南)
修改 /etc/fstab 是实现开机自动挂载的标准做法,但如果写错,可能导致系统无法正常启动。
两个核心要点:
1. 使用 UUID 挂载:设备名(如 /dev/sdb1)在重启后可能会发生变化(例如插拔了其他 USB 设备)。使用 UUID 唯一标识磁盘。
- 获取 UUID:blkid /dev/vdb1
2. 使用 nofail 参数:即使磁盘损坏或被拔出,系统也能正常启动,而不会卡在启动界面。
/etc/fstab 推荐配置示例:
根据你格式化时选择的文件系统类型,写入对应的配置:
- 如果是 ext4:
text UUID=xxxx-xxxx-xxxx-xxxx /mnt/new_disk ext4 defaults,nofail 0 2- 如果是 xfs(现代 Linux 服务器首选):text UUID=xxxx-xxxx-xxxx-xxxx /mnt/new_disk xfs defaults,nofail 0 0注:xfs 的第五、六位通常设为0 0,因为它自带日志修复功能,不依赖传统的 fsck 扫描。
测试配置:在重启前,务必执行 mount -a。如果没有报错,说明配置正确。
5. 大文件移动工具
当磁盘扩容后,通常需要将旧盘上的大目录(如 /var/lib/docker 或数据库目录)移动到新盘。
cp -rp:简单复制,保留权限。但没有进度显示。mv:移动文件。但在跨分区移动大文件时,本质上是“先复制再删除”,风险较高(如果中间断开)。rsync(强烈推荐):- 优点:支持断点续传、保留所有属性、显示进度。
- 命令:
rsync -ahP /source/path/ /destination/path/ -a:归档模式,保留所有权限和链接。-h:人类可读格式输出。-P:显示进度并支持断点续传。
6. 常见“坑”与总结
- 坑 1:未测试 fstab 就重启。系统无法进入图形界面或 SSH,只能通过救援模式修复。
- 坑 2:误删分区表。在扩容前务必备份重要数据。
- 坑 3:路径权限问题。挂载后,目标目录的权限可能会变成 root,如果是非 root 账户运行的服务,需要重新执行
chown。 - 坑 4:磁盘写保护。某些云服务商挂载新盘后默认为只读,需在后台开启读写权限。
总结流程:
lsblk (查盘) -> fdisk/parted (分区) -> mkfs (格式化) -> mount (挂载) -> blkid (查 UUID) -> vi /etc/fstab (永久配置) -> mount -a (验证) -> rsync (迁数据)。