fdisk命令的进阶用法远远不止创建删除分区,掌握分区表修复、脚本化操作以及MBR/GPT转换技巧,能让你在磁盘管理时事半功倍,是Linux运维进阶的必修课。
fdisk分区表修复命令:备份与恢复全程指南
分区表损坏是运维人员最头疼的问题之一,fdisk虽然不能像专业工具那样自动修复,但利用它的备份和恢复功能,多数情况下可以挽救数据。
备份分区表的关键步骤:
- 使用
fdisk -l /dev/sda查看并记录每个分区的起始和结束扇区,输出结果可通过管道保存到文本文件:fdisk -l /dev/sda > partition_backup.txt。 - 用
dd if=/dev/sda of=/root/mbr_backup bs=512 count=1备份MBR(包含分区表),对于GPT磁盘,需要备份前34个扇区(bs=512 count=34)以保存GPT头和分区表。 - 定期将备份文件存放到外部存储或云存储,避免本地磁盘坏道导致备份也失效。
恢复分区表的实操:
- 如果MBR被破坏,可用备份的
dd命令回写:dd if=/root/mbr_backup of=/dev/sda bs=512 count=1,GPT磁盘回写时同样使用count=34,注意目标磁盘设备路径不可写错。 - 没有备份但记得分区参数时,进入fdisk交互模式,使用
u切换到扇区单位,然后重新创建分区并指定原始起始和结束扇区,创建完成后执行w写入,再用partprobe或重启系统生效。 - 对于误删除分区但未格式化的情况,立即用
fdisk按相同扇区范围重建分区,数据通常可恢复,业内专家指出,此时不要对磁盘做任何写入操作,避免覆盖数据区域。
非交互式fdisk:编写脚本自动化分区
批量部署服务器时,手动分区效率极低,fdisk支持通过标准输入传递命令,配合Shell脚本即可实现自动化。
脚本化分区的基本格式:
echo -e "nnpn1nn+100Mnnnpn2nnnwn" | fdisk /dev/sdb
或者使用printf更清晰:
printf 'nnpn1nn+100Mnnnpn2nnnwn' | fdisk /dev/sdb
分步解释(以创建两个主分区为例):
n:新分区
p:主分区类型1:分区号(第一个分区)- 第一个空行:接受默认起始扇区
+100M:指定分区大小为100MB- 第二个
n:开始创建第二个分区 - 第二个
p:同样选择主分区 2:分区号2- 第二个空行:接受默认起始扇区
- 第三个空行:接受默认结束扇区(使用剩余全部空间)
w:保存分区表并退出
自动化脚本模板:
#!/bin/bash
DISK="/dev/sdc"
SIZE="+50G"
echo "Creating partition on $DISK"
printf 'onnnpn1nn%snwn' "$SIZE" | fdisk "$DISK"
if [ $? -eq 0 ]; then
echo "Partition created successfully"
else
echo "Failed to create partition"
fi
o:创建新分区表(清空旧分区,谨慎使用)
注意事项:
- 脚本执行前务必确认目标磁盘正确,可使用
fdisk -l核对设备名。 - 已有数据的磁盘,脚本中应先使用
d删除所有分区,再重新创建。 - 执行后需用
partprobe或reboot重读分区表,否则新分区可能不立即可见。 - 行业共识认为,脚本化分区能显著提升部署效率,在云原生环境下的CI/CD管道中尤为实用,但需严格测试确保命令序列无误。
fdisk与parted区别:不同场景下的选择
fdisk和parted都是Linux分区工具,但各有侧重,fdisk传统上支持MBR,从2.0版本开始加入GPT支持,但功能仍偏基础,parted原生支持GPT,对2TB以上大磁盘和复杂分区操作更友好。
对比表格:
| 特性 | fdisk | parted |
|---|---|---|
| 分区表类型 | MBR、GPT(有限) | MBR、GPT(全面) |
| 磁盘大小限制 | 2TB以下推荐MBR,GPT可支持更大 | 原生支持2TB以上 |
| 交互方式 | 菜单式,适合手动操作 | 命令式,支持脚本 |
| 分区调整容量 | 不能直接调整,需删除重建 | 支持resize调整大小 |
| 文件系统检查 | 无 | 支持检查文件系统 |
| 对齐控制 | 需手动加参数 | 默认自动对齐 |
适用场景:
- 快速在现有磁盘上创建分区,fdisk更顺手,命令简洁。
- 需要调整分区大小或处理4K对齐,parted更专业,自动对齐避免性能问题。
- 云服务器初始化新磁盘,fdisk的脚本化能快速完成分区,但使用GPT时建议用parted或gdisk确保兼容性。
- 修复分区表时,fdisk的备份恢复流程更直接,parted需要额外步骤。
fdisk在云服务器磁盘分区中的实战技巧
在简米云、酷番云等云平台上,添加新云盘后分区是常见操作,这里分享一个典型流程,并自然融入云环境专有名词。
步骤:
- 查看新磁盘:
fdisk -l | grep 'Disk /dev'找到新添加的磁盘,通常为/dev/vdb或/dev/sdb。 - 分区:
fdisk /dev/vdb,创建主分区并使用全部空间(输入n、p、1,然后两次回车,再w)。 - 格式化:
mkfs.ext4 /dev/vdb1,根据需求选择文件系统类型。 - 挂载:
mount /dev/vdb1 /mnt/data,并确认挂载成功。 - 设置开机自动挂载:编辑
/etc/fstab,加入UUID=... /mnt/data ext4 defaults 0 0,通过blkid获取UUID。
云环境注意:
- 云服务器的磁盘通常是virtio类型,设备名为
/dev/vd,传统型为/dev/sd。 - 分区后需执行
partprobe或重启系统,使内核重读分区表。 - 如果使用GPT分区,建议用
parted,但fdisk -t gpt模式也可,不过兼容性测试要到位。 - 常见问题:重启后挂载失效,需检查
/etc/fstab语法或UUID是否正确。
fdisk的隐藏参数与高级用法
fdisk有很多命令行选项,熟练掌握能提升操作效率和避免常见陷阱。
常用参数:
-l:列出分区表,常用作磁盘信息查看。-u:以扇区为单位显示(代替默认柱面),确保分区对齐准确。-s:显示分区大小(已弃用,建议用-l)。-c:关闭DOS兼容模式,避免分区对齐问题,新版fdisk默认关闭。-b:设置扇区大小(如512、4096),用于高级对齐场景。-t:指定分区表类型(如dos或gpt),强制使用特定模式。
高级操作:
- 使用
fdisk -t gpt /dev/sdb强制以GPT模式操作,创建分区表。 - 使用
fdisk -c -u /dev/sda以扇区单位并关闭DOS兼容,确保4K对齐。 - 非交互模式中,指定
-w和-W参数控制写入模式,-w always强制写入。 - 使用
-o自定义输出格式,如fdisk -l -o Start,End,Sectors,Device。
修复分区表时常用组合:fdisk -c -u -l /dev/sda,详细显示分区信息,便于手动重建。
fdisk作为Linux经典分区工具,其进阶用法让你在分区表修复、自动化部署和跨平台操作中游刃有余,掌握这些技巧后,遇到磁盘分区问题不再慌乱,而是自信地通过命令行高效解决,真正提升运维效率。
fdisk命令进阶用法常见问题解答
Q:fdisk分区表修复命令能否直接恢复被删除的分区?
A:不能直接恢复,但可通过备份的分区表信息重建,如果之前用fdisk -l导出了分区表,可以按照相同参数创建分区,没有备份时,需要使用testdisk等专业工具扫描恢复,过程中不要对磁盘做写入操作。
Q:fdisk与parted区别主要体现在哪些方面?
A:fdisk更轻量,适合快速交互操作,对MBR支持好,脚本化简单;parted功能更强,原生支持GPT、分区调整和文件系统检查,适合大磁盘和复杂场景,两者各有所长,选择取决于具体需求和习惯,经常结合使用。
Q:fdisk分区脚本中如何避免误操作?
A:脚本执行前务必确认目标磁盘正确,可以使用fdisk -l核对,建议先在测试环境中验证脚本,确保命令序列不会破坏现有数据。echo或printf中多一个w都可能造成不可逆后果,所以脚本要谨慎编写并加入确认提示。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/561155.html




