带有示例的wipefs Linux命令教程 - 擦除设备签名
wipfs Linux 命令实用程序可用于擦除设备中的各种类型的签名(分区表、文件系统签名等)。它可以在所有最常用的 Linux 发行版的存储库中找到,并且通常作为 util-linux 软件包的一部分默认安装,该软件包还包含其他旨在系统维护的基本实用程序,因此我们永远不必显式安装它。在本教程中,我们将了解如何使用wipefs收集有关现有签名的信息以及如何删除它们。
在本教程中您将学习:
如何获取现有签名的列表而不删除它们
如何按偏移量或类型删除所有签名或仅删除其中部分签名
如何创建和恢复已删除签名的备份
如何模拟擦除操作
使用的软件要求和约定
寻找签名
Wipef 不仅可用于擦除设备上的现有签名,还可用于创建包含这些签名的报告,而无需执行任何修改。为此,我们所要做的就是启动该实用程序而不指定任何选项,而只是将我们想要分析的设备作为参数传递。让我们举个例子。要获取 /dev/sda
设备上现有的所有签名列表,我们将运行:
$ sudo wipefs /dev/sda
上述命令生成类似于以下内容的输出:
DEVICE OFFSET TYPE UUID LABEL
sda 0x1fe dos
输出按列组织,默认情况下,报告以下信息:
块设备名称
签名的 OFFSET
签名的类型
通用唯一标识
标签
在这种情况下,该实用程序显示的是设备上找到的dos分区表的签名。正如您所看到的,签名的偏移以十六进制(基数16)形式表示。 0x1fe
值对应于 510 字节。但是,可以修改程序的输出,使其仅包含我们需要的信息。要检查支持的列的列表,我们所要做的就是使用 --help
选项调用wipefs:
$ wipefs --help
在“帮助”消息的末尾,我们可以找到我们要查找的内容:
Available output columns:
UUID partition/filesystem UUID
LABEL filesystem LABEL
LENGTH magic string length
TYPE superblok type
OFFSET magic string offset
USAGE type description
DEVICE block device name
USAGE 列非常有用,因为它明确地告诉我们签名与什么相关。要选择要在 wipefs
的输出中包含哪些信息,我们使用 -O
选项 (--output
) 调用该实用程序,并提供我们想要包含的列的逗号分隔列表。例如,要仅包含 DEVICE、OFFSET 和 USAGE 列,我们可以编写:
$ sudo wipefs --output DEVICE,OFFSET,USAGE /dev/sda
这是上面命令的输出:
DEVICE OFFSET USAGE
sda 0x1fe partition-table
我们还可以更改输出的格式。如果我们想要获取 JSON 格式的输出,例如为了以后能够轻松解析它,也许使用我们选择的编程语言,我们应该使用 -J
选项(--json
的缩写)。这是我们将获得的:
$ sudo wipefs -J --output DEVICE,OFFSET,USAGE /dev/sda
{
"signatures": [
{"device":"sda", "offset":"0x1fe", "usage":"partition-table"}
]
}
最后,您可能已经注意到,该实用程序不会递归工作:如果像我们在上面的示例中所做的那样在整个块设备(例如 /dev/sda
)上调用,它不会包括它在设备本身的每个分区上找到的签名,因此为了让它找到并删除设备上的所有签名,我们可以使用glob:
$ sudo wipefs /dev/sda*
正如您所看到的,输出现在还包括在设备第一个分区开头找到的签名,在本例中,该分区是 LUKS 容器:
DEVICE OFFSET TYPE UUID LABEL
sda 0x1fe dos
sda1 0x0 crypto_LUKS 1e286e68-b1a9-40d5-af99-58929a480679
删除签名
我们刚刚看到,在没有特定选项的情况下调用时,wipefs 如何打印找到的签名。为了能够真正擦除它们,我们可以通过三种方式进行。如果我们想删除所有签名,我们可以使用相应的选项(-a
或--all
)调用该实用程序。要删除 /dev/sda
上的所有签名,我们将运行:
$ sudo wipefs -a /dev/sda*
如果我们想删除特定的签名,则必须使用 -o
选项,它是 --offset
的缩写,并将签名的偏移量传递为争论。默认情况下,用于偏移量的数字被解释为字节,但是,如果它包含0x
前缀,则会被解释为十六进制值。甚至可以使用常见的后缀来指定如何解释参数,例如 KiB
、MiB
、GiB
等。让我们看一个例子。要仅删除在 /dev/sda
上找到的第一个签名(其偏移量值为 0x1fe
),我们将运行:
$ sudo wipefs -o 0x1fe /dev/sda
该命令应返回以下输出:
/dev/sda: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/sda: calling ioctl to re-read partition table: Success
删除特定签名的第三种方法是按类型选择它们,可以使用 -t
选项 (--types
) 指定类型。该选项接受逗号分隔的列表作为参数。例如,要删除所有“dos”类型的签名,我们可以这样写:
$ sudo wipefs -a -t dos /dev/sda
默认情况下,wipefs Linux 命令仅适用于未安装的设备,并且将拒绝从正在使用的设备中删除签名。
进行“试运行”
如果我们想检查wipefs的行为方式,但不想实际删除签名,我们可以使用带有-n
选项的实用程序来执行“模拟”(试运行)(-n
选项) >--不采取行动)。正如手册中所述,使用此选项将导致所有操作完成,最终写入除外。
在删除签名之前创建备份
创建备份始终是一个好主意,尤其是在执行像本例这样的危险操作时。 wipefs 实用程序有一个专用选项,可以在使用以下模板路径创建的文件中创建每个签名的备份:
$HOME/wipefs--.bak
每个签名都存储在其自己的文件中。例如,要创建 /dev/sda
上所有签名的备份,我们可以编写:
$ sudo wipefs --all --backup /dev/sda*
将创建的文件(在本例中为 /root/wipefs-sda-0x000001fe.bak
)。请注意,只有在执行实际擦除时才能调用 --backup
选项,否则实用程序将通知我们该操作在上下文中“毫无意义”。使用dd
可以轻松恢复创建的备份。要恢复本例中的签名,我们将运行:
$ sudo dd if=/root/wipefs-sda-0x000001fe.bak of=/dev/sda seek=$((0x000001fe)) bs=1
在上面的命令中,我们使用 if
指定输入文件,在本例中是包含签名备份的文件,使用 of
指定输入文件,相反,我们提供 output_file (/dev/sda
),并确定数据应写入的位置。通过seek
,我们指定应使用的偏移量:数据应以字节为单位提供,因此要转换十六进制值,我们使用shell算术扩展< ($ (())
) 。最后,通过 bs
我们指定 dd
一次应该读写的字节数。
结论
在本教程中,我们学习了如何使用wipefs linux命令实用程序来删除文件系统和原始块设备中的签名。我们看到了如何使用该实用程序来获取给定设备上存在的签名列表,如何实际删除所有签名或仅通过其偏移量或特定的签名 他们的类型。我们还了解了如何在删除签名之前创建签名备份以及如何最终使用 dd 恢复签名。