Bash-Oneliner磁盘分区:fdisk与parted命令指南
还在为磁盘分区步骤繁琐烦恼?5分钟掌握高效命令流
当你面对新服务器的空白磁盘,或需要为旧硬盘调整分区大小时,繁琐的图形界面工具是否让你望而却步?本文整理30+磁盘分区实战命令,从MBR到GPT,从基础分区到高级扩容,用Bash一行命令打通Linux磁盘管理任督二脉。读完本文,你将掌握:
- fdisk与parted核心功能对比及选型指南
- 10分钟完成新磁盘分区的标准化流程
- 数据无损扩容的3种实战方案
- 分区表备份与灾难恢复的应急技巧
核心工具对比:fdisk与parted功能矩阵
磁盘分区工具选择直接影响操作效率与数据安全。以下是两款主流工具的深度对比:
| 功能特性 | fdisk | parted | 性能对比 |
|---|---|---|---|
| 分区表类型 | MBR为主,有限GPT支持 | MBR/GPT全支持 | parted更全面 |
| 交互模式 | 命令行交互式 | 交互式/脚本式 | parted更灵活 |
| 在线操作 | 不支持 | 支持部分操作 | parted独占优势 |
| 单位精度 | 柱面/扇区 | 字节级精确 | parted更高 |
| 脚本自动化 | 需expect辅助 | 原生支持批处理 | parted更高效 |
| 错误恢复 | 有限 | 内置救援功能 | parted更安全 |
| 兼容性 | 所有Linux系统 | 需2.1+版本 | fdisk更广泛 |
fdisk实战:MBR分区经典流程
基础命令速查表
| 命令 | 功能 | 示例 |
|---|---|---|
| p | 打印分区表 | Command (m for help): p |
| n | 新建分区 | Command (m for help): n |
| d | 删除分区 | Command (m for help): d |
| t | 更改类型 | Command (m for help): t |
| w | 保存退出 | Command (m for help): w |
| q | 放弃退出 | Command (m for help): q |
| m | 帮助菜单 | Command (m for help): m |
标准分区流程(20GB磁盘示例)
# 启动fdisk交互模式
fdisk /dev/sdb
# 查看磁盘信息
Command (m for help): p
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
# 新建主分区
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-41943039, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): +10G
# 设置分区类型为Linux LVM
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
# 查看分区结果并保存
Command (m for help): p
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
批量分区脚本(需expect支持)
#!/usr/bin/expect -f
set timeout 10
spawn fdisk /dev/sdc
expect "Command (m for help): "
send "n\r"
expect "Select (default p): "
send "p\r"
expect "Partition number (1-4, default 1): "
send "\r"
expect "First sector (2048-41943039, default 2048): "
send "\r"
expect "Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): "
send "+5G\r"
expect "Command (m for help): "
send "w\r"
expect eof
parted高级操作:GPT分区与动态调整
与fdisk核心差异演示
# 查看磁盘信息(parted更直观)
parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 10.7GB 10.7GB ext4
2 10.7GB 21.5GB 10.7GB lvm
# 直接执行命令(无需交互模式)
parted /dev/sdb mkpart primary ext4 10.7GB 15.7GB
parted /dev/sdb set 3 lvm on
GPT分区完整流程
# 初始化磁盘为GPT格式
parted /dev/sdc mklabel gpt
# 创建EFI系统分区(ESP)
parted /dev/sdc mkpart ESP fat32 1MiB 513MiB
parted /dev/sdc set 1 boot on
# 创建Linux根分区
parted /dev/sdc mkpart primary ext4 513MiB 10GiB
# 创建LVM物理卷分区
parted /dev/sdc mkpart primary 10GiB 100%
parted /dev/sdc set 3 lvm on
# 验证结果
parted /dev/sdc print free
无损调整分区大小(核心功能)
# 检查文件系统
e2fsck -f /dev/sdb1
# 调整分区大小(先调整分区表)
parted /dev/sdb resizepart 1
(输入新的结束位置: 20GB)
# 调整文件系统大小
resize2fs /dev/sdb1
# 验证调整结果
df -h /dev/sdb1
高级场景实战:从问题到解决
磁盘扩容完整流程(LVM示例)
# 1. 初始化新磁盘
parted /dev/sdc mklabel gpt
parted /dev/sdc mkpart primary 1MiB 100%
parted /dev/sdc set 1 lvm on
# 2. 创建物理卷
pvcreate /dev/sdc1
# 3. 扩展卷组
vgextend ubuntu-vg /dev/sdc1
# 4. 扩展逻辑卷
lvextend -l +100%FREE /dev/ubuntu-vg/root
# 5. 调整文件系统
resize2fs /dev/ubuntu-vg/root
分区表备份与恢复
# 备份MBR分区表
dd if=/dev/sda of=mbr_backup bs=512 count=1
# 备份GPT分区表
sgdisk --backup=gpt_backup /dev/sda
# 恢复分区表(紧急情况)
sgdisk --load-backup=gpt_backup /dev/sda
# 检查磁盘一致性
partprobe /dev/sda
e2fsck -f /dev/sda1
故障排查:常见错误解决方案
| 错误场景 | 原因分析 | 解决方案 |
|---|---|---|
Device or resource busy | 分区已挂载 | umount /dev/sdb1或使用parted -l查找占用进程 |
The kernel still uses the old partition table | 内核未刷新 | partprobe /dev/sdb或重启系统 |
Partition(s) on /dev/sdb are being used | 交换分区激活 | swapoff -a临时关闭所有交换分区 |
Not enough space to create partition | 未对齐扇区 | 使用parted的align-check命令检查 |
自动化脚本:从重复到高效
新服务器磁盘初始化脚本
#!/bin/bash
# 自动分区并挂载第二块磁盘
DISK="/dev/sdb"
MOUNT_POINT="/data"
# 分区
parted -s $DISK mklabel gpt
parted -s $DISK mkpart primary ext4 1MiB 100%
# 格式化
mkfs.ext4 -F ${DISK}1
# 创建挂载点
mkdir -p $MOUNT_POINT
# 获取UUID
UUID=$(blkid -s UUID -o value ${DISK}1)
# 更新fstab
echo "UUID=$UUID $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab
# 挂载测试
mount -a
# 验证结果
df -h $MOUNT_POINT
echo "磁盘初始化完成,已挂载至$MOUNT_POINT"
总结:构建你的分区工具箱
本文系统梳理了磁盘分区的全流程解决方案,从基础工具对比到高级扩容实战,覆盖10+企业级场景。记住三个黄金法则:
- 数据无价,操作前务必备份分区表(
sgdisk --backup) - GPT分区优先使用parted,MBR快速分区可用fdisk
- 在线调整必须遵循"先分区表后文件系统"的顺序
立即克隆项目获取完整脚本库:
git clone https://gitcode.com/GitHub_Trending/ba/Bash-Oneliner
cd Bash-Oneliner
chmod +x disk_utils/*.sh
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



