当磁盘空间告急时,不必惊慌,掌握正确的扩容方法可以让你轻松应对
一、背景概述
在云平台运维和服务器管理过程中,经常会遇到磁盘空间不足的情况:
- 共享文件服务器的硬盘空间随着业务增长逐渐耗尽
- 系统安装初期分区规划不合理,部分分区空间过剩而关键分区不足
- 应用程序日志、数据文件不断积累,导致存储资源紧张
本文将详细介绍如何使用 linux 内置的 fdisk工具,在不丢失数据的前提下,对磁盘分区进行动态扩容。下面是我们将要调整的分区初始状态:
root@i-abnawjwo:/# df filesystem 1k-blocks used available use% mounted on /dev/sda1 20509308 1337636 18106816 7% / /dev/sdc1 10190136 23032 9626432 1% /data
可以看到,我们的目标是扩展 /data目录对应的 /dev/sdc1分区。
二、前期准备:数据备份
重要提示:虽然本文介绍的扩容方法在正常情况下不会导致数据丢失,但在任何磁盘操作前,备份都是必不可少的保障措施。
推荐的备份方案:
- 云平台快照功能:大多数云服务商都提供磁盘快照功能,可在控制台对磁盘创建全量备份
- 本地备份工具:可使用
rsync、tar等工具将关键数据备份到其他存储位置 - lvm 快照:如果使用 lvm 管理磁盘,可创建 lvm 快照作为回滚点
三、详细扩容步骤
3.1 卸载目标分区
首先需要卸载要扩容的分区:
root@i-abnawjwo:/# umount /data
如果遇到“设备忙”的错误,表示有进程正在访问该分区:
# 查看占用分区的进程 fuser -m -v /data # 或 lsof /data # 结束占用进程(谨慎操作) fuser -m -v -i -k /data
3.2 使用 fdisk 重新分区
关键要点:重新分区时,必须确保起始扇区与原始分区完全一致,这是保证数据不丢失的核心要素。
进入 fdisk 交互模式:
root@i-abnawjwo:/# fdisk /dev/sdc
步骤分解:
- 删除旧分区(数据不会立即丢失,只是删除分区表记录)
command (m for help): d selected partition 1
- 创建新分区,特别注意起始扇区必须与原来相同
command (m for help): n
partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
select (default p): p
partition number (1-4, default 1): 1
first sector (2048-104857599, default 2048): 2048 # 必须与原来一致!
last sector, +sectors or +size{k,m,g} (2048-104857599, default 104857599):
# 直接回车使用默认最大值,即占用全部可用空间
- 验证分区表,确认起始扇区正确
command (m for help): p disk /dev/sdc: 53.7 gb, 53687091200 bytes ... device boot start end blocks id system /dev/sdc1 2048 104857599 52427776 83 linux
- 保存并退出
command (m for help): wq the partition table has been altered! calling ioctl() to re-read partition table. syncing disks.
3.3 重启系统
为了确保内核重新识别新的分区表,建议重启系统:
reboot
3.4 检查和扩展文件系统
系统重启后,执行以下操作:
- 强制检查文件系统
root@i-abnawjwo:~# e2fsck -f /dev/sdb1 e2fsck 1.42.9 (4-feb-2014) pass 1: checking inodes, blocks, and sizes pass 2: checking directory structure pass 3: checking directory connectivity pass 4: checking reference counts pass 5: checking group summary information /dev/sdb1: 12/655360 files (0.0% non-contiguous), 79664/2621440 blocks
注:这里设备名从 /dev/sdc1变为 /dev/sdb1,可能是系统设备识别变化,实际操作时以 fdisk -l输出为准。
- 调整文件系统大小
root@i-abnawjwo:~# resize2fs -p /dev/sdb1 resize2fs 1.42.9 (4-feb-2014) resizing the filesystem on /dev/sdb1 to 13106944 (4k) blocks. the filesystem on /dev/sdb1 is now 13106944 blocks long.
-p参数显示操作进度,对大容量磁盘很有用。
3.5 验证扩容结果
- 重新挂载分区
root@i-abnawjwo:~# mount /dev/sdb1 /data/
- 检查数据完整性
root@i-abnawjwo:/data# cat hello acasdcacsa
- 查看最终磁盘使用情况
root@i-abnawjwo:/data# df filesystem 1k-blocks used available use% mounted on /dev/sda1 20509308 1337768 18106684 7% / /dev/sdb1 51474044 33100 48803172 1% /data
成功!/dev/sdb1分区已从原来的约 10.2 gb 扩容到约 51.5 gb,且数据完好无损。
四、注意事项和故障排查
4.1 关键注意事项
- 起始扇区一致性:重新分区时,
first sector必须与原来的值完全相同 - 文件系统支持:
resize2fs主要适用于 ext2、ext3、ext4 文件系统 - 分区类型:确保新分区的类型(linux 分区为 83)与原来一致
- 操作顺序:一定要先调整分区表,再调整文件系统
4.2 常见问题排查
无法卸载分区
# 查看哪个进程占用 lsof +f -- /data # 或 fuser -mv /data
resize2fs 失败
- 确认文件系统类型:
blkid /dev/sdb1 - 确保已执行
e2fsck -f检查 - 对于 xfs 文件系统,需使用
xfs_growfs命令
重启后设备名变化
建议使用 uuid 或卷标挂载,在 /etc/fstab中配置:
# 获取uuid blkid /dev/sdb1 # /etc/fstab 中使用 uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults 0 2
五、总结
通过本文的步骤,我们成功完成了 linux 磁盘分区的在线扩容操作。整个过程可归纳为:
- 备份数据 → 安全第一
- 卸载分区 → 解除占用
- fdisk 调整 → 保持起始扇区不变
- 重启系统 → 重新加载分区表
- 检查并扩展文件系统 → 实际扩大容量
- 验证结果 → 确认数据完整性和新容量
这种方法适用于大多数基于 ext 文件系统的分区扩容需求。对于生产环境,建议先在测试环境演练,并确保在维护窗口进行操作,避免影响业务正常运行。
以上就是linux使用fdisk调整分区大小实现磁盘在线扩容的实战指南的详细内容,更多关于linux fdisk磁盘在线扩容的资料请关注代码网其它相关文章!
发表评论