cfdisk 是一个基于ncurses的磁盘分区管理工具,提供直观的文本用户界面,用于创建、删除、修改磁盘分区。它是fdisk的Curses版本,比传统的fdisk命令更加用户友好。
cfdisk 支持多种分区表类型,包括MBR(DOS)和GPT,并能够处理多种文件系统类型。
分区操作会永久改变磁盘结构! 在进行任何分区操作前,请确保已备份重要数据。错误的操作可能导致数据丢失。
cfdisk [选项] [设备]
cfdisk -z [设备] # 创建新的空分区表
设备可以是磁盘设备(如 /dev/sda)或分区(如 /dev/sda1),如果不指定设备,cfdisk会尝试列出可用设备供选择。
| 选项 | 说明 |
|---|---|
| -h, --help | 显示帮助信息 |
| -V, --version | 显示版本信息 |
| -a, --arrow-cursor | 使用箭头光标(默认使用高亮) |
| -z, --zero | 创建新的空分区表(清除现有分区表) |
| -c, --color[=when] | 使用颜色输出(auto, always, never) |
| -g, --gpt | 使用GPT分区表(默认自动检测) |
| -L, --Linux | 不显示Linux以外的分区类型 |
| -r, --read-only | 只读模式,不保存任何更改 |
| -t, --list-types | 列出支持的分区类型 |
| -u, --units[=unit] | 显示单位:s(扇区)、c(柱面)、b(字节) |
cfdisk (util-linux 2.37.2)
Disk: /dev/sda
Size: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Label: gpt, identifier: 1A2B3C4D-5E6F-7890-ABCD-EF1234567890
┌─────────────────────────────────────────────────────────────┐
│ Partition │
├─────────────────────────────────────────────────────────────┤
│▶ /dev/sda1 1 GiB Linux filesystem Boot │
│ /dev/sda2 50 GiB Linux filesystem │
│ /dev/sda3 100 GiB Linux filesystem │
│ Free space 87.5 GiB │
└─────────────────────────────────────────────────────────────┘
[ New ] [ Delete ] [ Resize ] [ Quit ] [ Type ] [ Help ]
[ Write ] [ Dump ] [ Units ] [ Sort ] [ Fix ] [ Boot ]
| 界面元素 | 说明 |
|---|---|
| 顶部信息 | 显示磁盘设备、大小、分区表类型和标识符 |
| 分区列表 | 显示所有分区和空闲空间,▶ 表示当前选中的分区 |
| 按钮栏 | 底部按钮对应不同操作,使用键盘方向键和回车键操作 |
| 状态栏 | 显示当前操作的提示信息和帮助文本 |
# 启动cfdisk查看磁盘
sudo cfdisk
# 查看指定磁盘
sudo cfdisk /dev/sda
# 以只读模式查看(不保存更改)
sudo cfdisk -r /dev/sda
↑ ↓ - 上下移动选择分区
← → - 左右移动选择按钮
Enter - 确认选择/执行操作
Tab - 在分区列表和按钮间切换
q - 退出(不保存)
w - 写入更改并退出
# 创建新的GPT分区表(会清除所有数据!)
sudo cfdisk -z /dev/sdb
# 创建新的MBR(DOS)分区表
sudo cfdisk -z --dos /dev/sdb
# 交互式创建新分区表
sudo cfdisk /dev/sdb
# 然后在界面中选择"New"创建分区
# 启动cfdisk
sudo cfdisk /dev/sda
# 在界面中的操作步骤:
# 1. 使用方向键选择"Free space"
# 2. 按左右键选择"New"按钮,按Enter
# 3. 输入分区大小(如:10G、10000M或直接回车使用全部空间)
# 4. 选择分区类型(Primary/Extended/Logical)
# 5. 选择"Write"保存更改
# 6. 输入"yes"确认写入
# 7. 选择"Quit"退出
# 启动cfdisk
sudo cfdisk /dev/sda
# 在界面中的操作步骤:
# 1. 使用方向键选择要删除的分区
# 2. 按左右键选择"Delete"按钮,按Enter
# 3. 确认删除操作
# 4. 选择"Write"保存更改
# 5. 输入"yes"确认写入
# 6. 选择"Quit"退出
# 启动cfdisk
sudo cfdisk /dev/sda
# 在界面中的操作步骤:
# 1. 使用方向键选择要调整的分区
# 2. 按左右键选择"Resize"按钮,按Enter
# 3. 输入新的分区大小
# 4. 选择"Write"保存更改
# 5. 输入"yes"确认写入
# 6. 选择"Quit"退出
resize2fs)。
# 启动cfdisk
sudo cfdisk /dev/sda
# 设置分区类型:
# 1. 选择分区
# 2. 选择"Type"按钮
# 3. 从列表中选择分区类型(如Linux filesystem, Linux swap等)
# 4. 按Enter确认
# 设置引导标志:
# 1. 选择要设置为可引导的分区
# 2. 选择"Boot"按钮
# 3. 标志"Boot"会出现在分区旁
#!/bin/bash
# 自动分区脚本示例(需要交互确认)
DISK="/dev/sdb"
echo "=== 磁盘分区设置向导 ==="
echo "目标磁盘: $DISK"
echo ""
# 显示当前分区
echo "当前分区表:"
sudo fdisk -l "$DISK" | grep -E "^/dev/"
echo ""
read -p "是否继续?这将清除磁盘上的所有数据!(y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "操作已取消"
exit 1
fi
# 启动cfdisk进行交互式分区
echo "启动cfdisk..."
echo "在cfdisk界面中,请执行以下操作:"
echo "1. 选择'New'创建分区"
echo "2. 设置分区大小和类型"
echo "3. 选择'Write'保存更改"
echo "4. 输入'yes'确认"
echo "5. 选择'Quit'退出"
echo ""
read -p "按Enter键开始..."
sudo cfdisk "$DISK"
# 格式化分区(示例)
echo ""
echo "格式化新分区..."
# 假设创建了/dev/sdb1和/dev/sdb2
if [ -b "/dev/sdb1" ]; then
echo "格式化 /dev/sdb1 为ext4..."
sudo mkfs.ext4 -q /dev/sdb1
fi
if [ -b "/dev/sdb2" ]; then
echo "格式化 /dev/sdb2 为交换分区..."
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2
fi
echo "分区完成!"
#!/bin/bash
# GPT分区管理示例
DISK="/dev/sdc"
# 检查磁盘是否使用GPT分区表
echo "检查分区表类型..."
if sudo parted "$DISK" print | grep -q "Partition Table: gpt"; then
echo "磁盘使用GPT分区表"
else
echo "磁盘未使用GPT分区表"
read -p "是否转换为GPT?(y/N): " convert
if [[ "$convert" == "y" || "$convert" == "Y" ]]; then
echo "注意:转换会清除所有数据!"
sudo parted "$DISK" mklabel gpt
fi
fi
# 使用cfdisk管理GPT分区
echo "启动cfdisk进行GPT分区管理..."
sudo cfdisk -g "$DISK"
# 显示GPT分区信息
echo "GPT分区信息:"
sudo gdisk -l "$DISK" | grep -A20 "Number"
| 操作 | 按键/按钮 | 说明 |
|---|---|---|
| 选择分区 | ↑ ↓ | 上下移动选择分区 |
| 选择按钮 | ← → | 左右移动选择底部按钮 |
| 执行操作 | Enter | 确认选择或执行按钮操作 |
| 新建分区 | New 按钮 | 在空闲空间上创建新分区 |
| 删除分区 | Delete 按钮 | 删除选中的分区 |
| 调整大小 | Resize 按钮 | 调整选中分区的大小 |
| 修改类型 | Type 按钮 | 修改分区类型(文件系统类型) |
| 引导标志 | Boot 按钮 | 设置/取消分区的可引导标志 |
| 写入更改 | Write 按钮 | 将更改写入磁盘(需要确认) |
| 退出不保存 | q 或 Quit 按钮 | 退出程序不保存更改 |
| 工具 | 特点 | 适用场景 |
|---|---|---|
| cfdisk | 基于curses的图形界面,操作直观 | 交互式分区操作,适合初学者 |
| fdisk | 命令行界面,功能强大 | 脚本自动化,高级用户 |
| parted | 支持更多文件系统,GPT/MBR都支持 | 需要调整文件系统大小 |
| gdisk | 专门用于GPT分区表 | GPT分区表管理 |
| gparted | 图形界面工具,功能全面 | 桌面环境下的分区管理 |
lsblk 或 fdisk -l 验证结果可能原因:终端不支持curses或TERM环境变量设置不正确。
解决方案:
echo $TERM
export TERM=xterm
sudo cfdisk
sudo cfdisk -a
原因:磁盘使用MBR分区表,MBR最大只支持2TB。
解决方案:转换为GPT分区表:
# 警告:这会清除所有数据!
# 使用gdisk转换
sudo gdisk /dev/sda
# 在gdisk中输入: w (保存)
# 或使用parted
sudo parted /dev/sda mklabel gpt
转换后,使用cfdisk创建GPT分区:
sudo cfdisk -g /dev/sda
可能原因:引导分区被修改或删除。
解决方案:
sudo fdisk -l
sudo blkid
# 挂载根分区
sudo mount /dev/sda1 /mnt
sudo mount /dev/sda2 /mnt/boot # 如果有单独的boot分区
# 重新安装GRUB
sudo grub-install --root-directory=/mnt /dev/sda
sudo update-grub