在服务器运维中,磁盘扩容是一个非常高频的操作。本文将总结从识别新盘到挂载、大文件迁移的全过程。

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 推荐配置示例:

根据你格式化时选择的文件系统类型,写入对应的配置:

  • 如果是 ext4text 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 (迁数据)。