Debian sfdisk 命令
sfdisk 是一个面向脚本的、非交互式的磁盘分区表操作工具。它是 Linux 上 util-linux 软件包的一部分,是一个强大的命令行工具,用于创建、删除、调整大小和管理磁盘分区。
它与交互式工具 fdisk 或 cfdisk 不同,sfdisk 更擅长从脚本接受输入或转储现有分区布局,这使得它在自动化任务中极其有用。
安装
在绝大多数 Debian 系统上,sfdisk 已经作为基础系统的一部分预装了。如果没有,你可以通过安装 util-linux 包来获取它:
1 2 |
apt update apt install util-linux |
重要警告
-
操作磁盘分区具有潜在风险,错误操作可能导致数据丢失。
-
务必确认你操作的是正确的磁盘设备(例如 /dev/sda, /dev/sdb, /dev/nvme0n1)。
-
在执行任何会修改分区表的操作(如写入、删除)之前,请备份重要数据。
-
你可以使用 lsblk 或 fdisk -l 命令来清楚地查看系统上的磁盘和设备名称。
常用命令和用法
1. 查看分区信息(不进行任何更改)
这是最安全也是非常有用的操作。
1 2 3 4 5 |
# 查看指定磁盘的分区表 sfdisk -l /dev/sda # 查看所有磁盘的分区表 sfdisk -l |
2. 备份分区表
在操作之前备份当前分区表是一个非常好的习惯。
1 2 |
# 将 /dev/sda 的分区表备份到文件 sda_partition_backup.bak sfdisk -d /dev/sda > sda_partition_backup.bak |
这个备份文件是一个脚本,如果需要,你可以用它来完全恢复分区表。
3. 从备份文件恢复分区表
如果你的分区表损坏,或者想撤销更改,可以使用之前备份的文件来恢复。
1 2 3 4 5 |
# 从备份文件 sda_partition_backup.bak 恢复 /dev/sda 的分区表 sfdisk /dev/sda < sda_partition_backup.bak # 如果提示要添加 --no-reread 参数的话 需要执行下面的命令来恢复 sfdisk --no-reread /dev/sda < sda_partition_backup.bak |
4. 交互式创建新分区(不推荐新手)
虽然 sfdisk 是脚本导向的,但它也有一个简单的交互模式。不过,对于交互式操作,cfdisk(基于 curses 的图形界面)通常是更好的选择。
5. 使用脚本/命令行创建新分区(高级用法)
这是 sfdisk 真正强大的地方。你可以通过命令行参数或输入脚本来定义分区。
基本语法:
1 |
echo -e "size, type, bootable" | sudo sfdisk [options] /dev/disk |
示例:在一个新磁盘 /dev/sdb 上创建单个分区:
1 2 3 |
# 这将清除 /dev/sdb 上所有现有分区! # 创建一个使用所有剩余空间的主 Linux 分区 (类型 83) echo -e ",," | sfdisk /dev/sdb |
示例:创建一个更复杂的分区布局(使用 Here document):
1 2 3 4 5 6 7 8 9 10 |
# 为 /dev/sdb 创建以下分区布局: # 1. 512M 的可启动 Linux 分区 # 2. 一个交换分区,大小为 2G # 3. 一个使用剩余所有空间的 Linux 分区 sfdisk /dev/sdb << EOF ,512M,83,* ,2G,82 ,,83 EOF |
解释:
-
,512M,83,*:起始位置默认(,),大小 512M,类型 83(Linux),* 表示可启动。
-
,2G,82:起始位置接着上一个分区,大小 2G,类型 82(Linux swap)。
-
,,83:起始位置接着上一个分区,大小使用所有剩余空间(默认),类型 83(Linux)。
6. 删除所有分区
1 2 |
# 使用 --delete 选项删除 /dev/sdb 上的所有分区 sfdisk --delete /dev/sdb |
常用选项
-
-l, –list:列出设备的分区。
-
-d, –dump:转储设备的分区表到一个可读的、可作为备份的格式。
-
-f, –force:即使有打开的文件句柄或其他警告,也强制进行操作。
-
-q, –quiet:抑制额外的信息输出。
-
–no-reread:当设备正在使用时,禁止 sfdisk 重新读取分区表(使用时需非常小心)。
-
-X, –label <type>:指定要操作的磁盘标签类型,如 dos (MBR) 或 gpt。现代系统通常使用 gpt。
示例:为 GPT 磁盘创建分区:
1 |
echo -e ",512M,83,*\n,2G,82\n,,83" | sudo sfdisk --label gpt /dev/sdb |
总结与最佳实践
-
确认设备:lsblk
-
先备份: sfdisk -d /dev/sdX > backup.bak
-
执行操作:创建、删除等。
-
更新系统:在修改分区表后,内核可能需要重新读取它。有时 partprobe /dev/sdX 命令或重启系统是必要的,但现代版本的 sfdisk 通常会尝试自动完成这一步。
-
格式化新分区:创建分区后,记得使用 mkfs(如 mkfs.ext4 /dev/sdb1) 来格式化分区,然后才能挂载使用。
对于简单的交互式分区,cfdisk(对于 MBR 和 GPT)或 gparted(图形化工具)可能更直观。