Linux sfdisk命令介绍
Linux sfdisk命令是一个磁盘分区表编辑器,它可以显示、修改或创建磁盘分区表。它与fdisk和cfdisk类似,但具有更多的功能。另外,与这两个程序不同,sfdisk可以非交互式地运行,因此可以在shell脚本中使用sfdisk来对硬盘进行分区或对分区表进行备份和恢复。
Linux sfdisk命令适用的Linux版本
sfdisk命令适用于大多数Linux发行版,但不支持GPT(GUID分区表)格式,也不适用于大分区。在这些情况下,建议使用更高级的GNU parted。如果你的系统没有安装sfdisk,你可以使用以下命令来安装它:
- 在基于Debian的系统(如Ubuntu)上,使用
apt-get install util-linux
。 - 在基于Red Hat的系统(如CentOS)上,使用
yum install util-linux
或dnf install util-linux
。 - 在基于Arch的系统(如Manjaro)上,使用
pacman -S util-linux
。
如果你的系统已经安装了sfdisk,你可以使用[linux@bashcommandnotfound.cn ~]$ sfdisk --version
来查看它的版本信息。
[linux@bashcommandnotfound.cn ~]$ sfdisk --version
sfdisk from util-linux 2.37
Linux sfdisk命令的基本语法
sfdisk命令的基本语法格式如下:
sfdisk [选项] [设备]
其中,[选项]
是可选的参数,用来指定sfdisk的操作模式或其他设置。[设备]
是要操作的磁盘设备的名称,如/dev/sda
或/dev/hdb
。
Linux sfdisk命令的常用选项说明
sfdisk命令有很多选项,可以用来显示、修改或创建磁盘分区表。下表列出了一些常用的选项及其说明:
选项 | 说明 |
---|---|
-? 或 --help | 显示帮助信息 |
-a 或 --append | 在磁盘上追加一个新的分区 |
-d 或 --dump | 显示磁盘分区表的信息,可以用来备份或恢复分区表 |
-g 或 --show-geometry | 显示磁盘的几何信息,如磁头数、扇区数、柱面数等 |
-J 或 --json | 以JSON格式显示磁盘分区表的信息 |
-l 或 --list | 以易读的格式显示磁盘分区表的信息 |
-N 或 --partno | 指定要操作的分区号,从0开始 |
-s 或 --show-size | 显示磁盘或分区的大小,单位为块 |
-T 或 --list-types | 显示可用的分区类型,如Linux、swap、EFI等 |
-V 或 --verify | 检查磁盘分区表是否有错误或不一致 |
Linux sfdisk命令的实例
下面是一些使用sfdisk命令的实例,可以帮助你更好地理解和使用这个命令。
显示磁盘分区表的信息
如果你想查看磁盘分区表的信息,你可以使用-l
选项,如下所示:
[linux@bashcommandnotfound.cn ~]$ sfdisk -l /dev/sda
Disk /dev/sda: 15.62 GiB, 16777216000 bytes, 32768000 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7f6a2c8b
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 32767999 30668800 14.6G 8e Linux LVM
这个命令会显示磁盘的基本信息,如大小、模型、单位、扇区大小等,以及磁盘分区表的类型、标识符、分区列表等。你可以看到,这个磁盘有两个分区,一个是Linux分区,一个是Linux LVM分区。
如果你想查看所有磁盘的分区表信息,你可以省略设备名称,如下所示:
[linux@bashcommandnotfound.cn ~]$ sfdisk -l
Disk /dev/sda: 15.62 GiB, 16777216000 bytes, 32768000 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x7f6a2c8b
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 32767999 30668800 14.6G 8e Linux LVM
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0a0a0a0a
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 20971519 20969472 10G 83 Linux
这个命令会显示所有磁盘的分区表信息,你可以看到,除了/dev/sda之外,还有一个/dev/sdb,它有一个Linux分区。
备份和恢复磁盘分区表
如果你想备份磁盘分区表,以防止数据丢失或错误操作,你可以使用-d
选项,如下所示:
[linux@bashcommandnotfound.cn ~]$ sfdisk -d /dev/sda > sda.bak
这个命令会将磁盘分区表的信息保存到一个文件sda.bak中,你可以查看这个文件的内容,如下所示:
[linux@bashcommandnotfound.cn ~]$ cat sda.bak
label: dos
label-id: 0x7f6a2c8b
device: /dev/sda
unit: sectors
/dev/sda1 : start= 2048, size= 2097152, type=83, bootable
/dev/sda2 : start= 2099200, size= 30668800, type=8e
这个文件包含了磁盘分区表的类型、标识符、设备、单位、分区列表等信息,你可以用它来恢复磁盘分区表,如下所示:
[linux@bashcommandnotfound.cn ~]$ sfdisk /dev/sda < sda.bak
Checking that no-one is using this disk right now ... OK
Disk /dev/sda: 15.62 GiB, 16777216000 bytes, 32768000 sectors
Disk model: VBOX HARDDISK
...
sfdisk是一个用于显示或操作磁盘分区表的命令,它类似于fdisk和cfdisk,但具有更多的功能。与这两个程序不同,sfdisk可以非交互式地运行,因此通常用于在shell脚本中对硬盘进行分区或对分区表进行备份和恢复。
Linux sfdisk命令适用的Linux版本
sfdisk命令适用于大多数Linux发行版,但不支持GPT(GUID分区表)格式,也不适用于大分区。在这些情况下,建议使用更高级的GNU parted¹。如果你的系统没有安装sfdisk,你可以使用以下命令来安装它:
- 在基于Debian的系统(如Ubuntu)上,使用
apt-get install util-linux
² - 在基于Red Hat的系统(如CentOS)上,使用
yum install util-linux
³ - 在基于Arch的系统(如Manjaro)上,使用
pacman -S util-linux
⁴
Linux sfdisk命令的基本语法
sfdisk命令的基本语法如下:
sfdisk [options] device
其中,device是要操作的磁盘设备,如/dev/sda或/dev/hdb。options是一些可选的参数,用于控制sfdisk的行为。下面介绍一些常用的options。
Linux sfdisk命令的常用选项说明
sfdisk命令有很多选项,这里只列出一些最常用的:
选项 | 说明 |
---|---|
-l, --list | 列出指定设备的分区信息,如果没有指定设备,则列出所有硬盘的分区信息 |
-d, --dump | 以备份格式输出分区表,可以重定向到文件或管道,用于备份或恢复分区表 |
-f, --force | 强制执行操作,即使有一些警告或错误 |
-N, --partno | 指定要操作的分区号,从0开始计数 |
-s, --show-size | 显示指定分区或设备的大小,以块为单位 |
-V, --verify | 验证分区表的一致性,如果有问题,会输出错误信息 |
-a, --append | 在设备上追加一个新的分区,而不是覆盖现有的分区表 |
-J, --json | 以JSON格式输出分区表信息,方便其他程序解析 |
-F, --list-free | 列出设备上的未分配空间 |
Linux sfdisk命令的实例
下面给出一些sfdisk命令的实例,展示它的用法和效果。
列出/dev/sda的分区信息
[linux@bashcommandnotfound.cn ~]$ sfdisk -l /dev/sda
Disk /dev/sda: 121.6 GiB, 130560409600 bytes, 254960 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000b2f3b
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 25495935 23396736 11.2G 8e Linux LVM
备份/dev/sda的分区表到文件
[linux@bashcommandnotfound.cn ~]$ sfdisk -d /dev/sda > sda-partitions.bak
从文件恢复/dev/sda的分区表
[linux@bashcommandnotfound.cn ~]$ sfdisk /dev/sda < sda-partitions.bak
Checking that no-one is using this disk right now ... OK
Disk /dev/sda: 121.6 GiB, 130560409600 bytes, 254960 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS disklabel with disk identifier 0x000b2f3b.
/dev/sda1: Created a new partition 1 of type 'Linux' and of size 1 GiB.
/dev/sda2: Created a new partition 2 of type 'Linux LVM' and of size 11.2 GiB.
/dev/sda3: Done.
New situation:
Disklabel type: dos
Disk identifier: 0x000b2f3b
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 25495935 23396736 11.2G 8e Linux LVM
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
显示/dev/sda1的大小
[linux@bashcommandnotfound.cn ~]$ sfdisk -s /dev/sda1
1024
验证/dev/sda的分区表
[linux@bashcommandnotfound.cn ~]$ sfdisk -V /dev/sda
/dev/sda: OK
在/dev/sda上追加一个新的分区
[linux@bashcommandnotfound.cn ~]$ echo ',10G,L' | sfdisk -a /dev/sda
Checking that no-one is using this disk right now ... OK
Disk /dev/sda: 121.6 GiB, 130560409600 bytes, 254960 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Script header accepted.
>>> Created a new DOS disklabel with disk identifier 0x000b2f3b.
/dev/sda1: Created a new partition 1 of type 'Linux' and of size 1 GiB.
/dev/sda2: Created a new partition 2 of type 'Linux LVM' and of size 11.2 GiB.
/dev/sda3: Created a new partition 3 of type 'Linux' and of size 10 GiB.
/dev/sda4: Done.
New situation:
Disklabel type: dos
Disk identifier: 0x000b2f3b
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 2099199 2097152 1G 83 Linux
/dev/sda2 2099200 25495935 23396736 11.2G 8e Linux LVM
/dev/sda3 25495936 46589951 21094016 10G 83 Linux
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
以JSON格式输出/dev/sda的分区表信息
[linux@bashcommandnotfound.cn ~]$ sfdisk -J /dev/sda
{
"partitiontable": {
"label":"dos",
"id":"0x000b2f3b",
"device":"/dev/sda",
"unit":"sectors",
"sectorsize":512,
"partitions": [
{"node":"/dev/sda1", "start":2048, "size":2097152, "type":"83", "bootable":true},
{"node":"/dev/sda2", "start":2099200, "size":23396736, "type":"8e"},
{"node":"/dev/sda3", "start":25495936, "size":21094016, "type":"83"}
]
}
}
列出/dev/sda上的未分配空间
[linux@bashcommandnotfound.cn ~] sudo sfdisk -l /dev/sda
此命令将列出/dev/sda上的所有分区信息,包括已分配和未分配的空间。
Linux sfdisk命令的快捷键
sfdisk命令在交互模式下,支持一些快捷键,用于方便地操作分区表。这里列出一些常用的快捷键:
快捷键 | 说明 |
---|---|
? | 显示帮助信息 |
q | 退出sfdisk,不保存任何更改 |
w | 退出sfdisk,并保存更改 |
p | 打印分区表信息 |
n | 创建一个新的分区 |
d | 删除一个分区 |
t | 改变一个分区的类型 |
+ | 增加一个分区的大小 |
- | 减少一个分区的大小 |
u | 切换显示单位,可以是扇区(sectors)、柱面(cylinders)或百分比(percent) |
Linux sfdisk命令的注意事项
使用sfdisk命令时,需要注意以下几点:
- sfdisk命令需要root权限,否则会提示
Permission denied
。 - sfdisk命令会直接修改分区表,所以在使用之前,最好先备份分区表,以防出现意外情况。
- sfdisk命令不支持GPT分区表,也不适用于大分区,如果需要操作这些分区,建议使用GNU parted。
- sfdisk命令在操作分区时,可能会遇到一些警告或错误,如
Warning: partition 1 does not start at a cylinder boundary
,这些信息通常不影响分区的正常使用,但如果想要消除它们,可以使用-f
选项强制执行操作,或者使用-u
选项指定合适的单位。 - 如果你在使用sfdisk命令时,遇到
bash: sfdisk: command not found
的错误,说明你的系统没有安装sfdisk,你可以根据你的Linux发行版,使用相应的命令来安装它,如上文所述。
评论区