Bash-Oneliner磁盘分区:fdisk与parted命令指南

Bash-Oneliner磁盘分区:fdisk与parted命令指南

【免费下载链接】Bash-Oneliner A collection of handy Bash One-Liners and terminal tricks for data processing and Linux system maintenance. 【免费下载链接】Bash-Oneliner 项目地址: https://gitcode.com/GitHub_Trending/ba/Bash-Oneliner

还在为磁盘分区步骤繁琐烦恼?5分钟掌握高效命令流

当你面对新服务器的空白磁盘,或需要为旧硬盘调整分区大小时,繁琐的图形界面工具是否让你望而却步?本文整理30+磁盘分区实战命令,从MBR到GPT,从基础分区到高级扩容,用Bash一行命令打通Linux磁盘管理任督二脉。读完本文,你将掌握:

  • fdisk与parted核心功能对比及选型指南
  • 10分钟完成新磁盘分区的标准化流程
  • 数据无损扩容的3种实战方案
  • 分区表备份与灾难恢复的应急技巧

核心工具对比:fdisk与parted功能矩阵

磁盘分区工具选择直接影响操作效率与数据安全。以下是两款主流工具的深度对比:

功能特性fdiskparted性能对比
分区表类型MBR为主,有限GPT支持MBR/GPT全支持parted更全面
交互模式命令行交互式交互式/脚本式parted更灵活
在线操作不支持支持部分操作parted独占优势
单位精度柱面/扇区字节级精确parted更高
脚本自动化需expect辅助原生支持批处理parted更高效
错误恢复有限内置救援功能parted更安全
兼容性所有Linux系统需2.1+版本fdisk更广泛

mermaid

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示例)

mermaid

# 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未对齐扇区使用partedalign-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+企业级场景。记住三个黄金法则:

  1. 数据无价,操作前务必备份分区表(sgdisk --backup
  2. GPT分区优先使用parted,MBR快速分区可用fdisk
  3. 在线调整必须遵循"先分区表后文件系统"的顺序

立即克隆项目获取完整脚本库:

git clone https://gitcode.com/GitHub_Trending/ba/Bash-Oneliner
cd Bash-Oneliner
chmod +x disk_utils/*.sh

【免费下载链接】Bash-Oneliner A collection of handy Bash One-Liners and terminal tricks for data processing and Linux system maintenance. 【免费下载链接】Bash-Oneliner 项目地址: https://gitcode.com/GitHub_Trending/ba/Bash-Oneliner

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值