sfdisk 是一个面向脚本的、非交互式的磁盘分区表操作工具。它是 Linux 上 util-linux 软件包的一部分,是一个强大的命令行工具,用于创建、删除、调整大小和管理磁盘分区。

它与交互式工具 fdisk 或 cfdisk 不同,sfdisk 更擅长从脚本接受输入转储现有分区布局,这使得它在自动化任务中极其有用。

安装

在绝大多数 Debian 系统上,sfdisk 已经作为基础系统的一部分预装了。如果没有,你可以通过安装 util-linux 包来获取它:

重要警告

  • 操作磁盘分区具有潜在风险,错误操作可能导致数据丢失。

  • 务必确认你操作的是正确的磁盘设备(例如 /dev/sda, /dev/sdb, /dev/nvme0n1)。

  • 在执行任何会修改分区表的操作(如写入、删除)之前,请备份重要数据

  • 你可以使用 lsblk 或 fdisk -l 命令来清楚地查看系统上的磁盘和设备名称。

常用命令和用法

1. 查看分区信息(不进行任何更改)

这是最安全也是非常有用的操作。

2. 备份分区表

在操作之前备份当前分区表是一个非常好的习惯

这个备份文件是一个脚本,如果需要,你可以用它来完全恢复分区表。

3. 从备份文件恢复分区表

如果你的分区表损坏,或者想撤销更改,可以使用之前备份的文件来恢复。

4. 交互式创建新分区(不推荐新手)

虽然 sfdisk 是脚本导向的,但它也有一个简单的交互模式。不过,对于交互式操作,cfdisk(基于 curses 的图形界面)通常是更好的选择。

5. 使用脚本/命令行创建新分区(高级用法)

这是 sfdisk 真正强大的地方。你可以通过命令行参数或输入脚本来定义分区。

基本语法:

示例:在一个新磁盘 /dev/sdb 上创建单个分区:

示例:创建一个更复杂的分区布局(使用 Here document):

解释:

  • ,512M,83,*:起始位置默认(,),大小 512M,类型 83(Linux),* 表示可启动。

  • ,2G,82:起始位置接着上一个分区,大小 2G,类型 82(Linux swap)。

  • ,,83:起始位置接着上一个分区,大小使用所有剩余空间(默认),类型 83(Linux)。

6. 删除所有分区

常用选项

  • -l, –list:列出设备的分区。

  • -d, –dump:转储设备的分区表到一个可读的、可作为备份的格式。

  • -f, –force:即使有打开的文件句柄或其他警告,也强制进行操作。

  • -q, –quiet:抑制额外的信息输出。

  • –no-reread:当设备正在使用时,禁止 sfdisk 重新读取分区表(使用时需非常小心)。

  • -X, –label <type>:指定要操作的磁盘标签类型,如 dos (MBR) 或 gpt。现代系统通常使用 gpt。

示例:为 GPT 磁盘创建分区:

总结与最佳实践

  1. 确认设备:lsblk

  2. 先备份: sfdisk -d /dev/sdX > backup.bak

  3. 执行操作:创建、删除等。

  4. 更新系统:在修改分区表后,内核可能需要重新读取它。有时 partprobe /dev/sdX 命令或重启系统是必要的,但现代版本的 sfdisk 通常会尝试自动完成这一步。

  5. 格式化新分区:创建分区后,记得使用 mkfs(如 mkfs.ext4 /dev/sdb1) 来格式化分区,然后才能挂载使用。

对于简单的交互式分区,cfdisk(对于 MBR 和 GPT)或 gparted(图形化工具)可能更直观。