侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux sfdisk命令详解:如何进行分区表的备份、恢复和操作(附实例教程和注意事项)

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-linuxdnf 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发行版,使用相应的命令来安装它,如上文所述。
0

评论区