如何快速擦除LInux中分区上的所有分区信息和数据



我正在测试一个在Raspberry Pi操作系统上使用的程序。它所做的一个很好的部分是读取系统驱动器上的分区信息,在这种情况下,它将是/boot和/,没有额外的分区,只有两个。我使用的是一个调用sfdisk的Python脚本。我做了很多例子显示的事情:我从系统驱动器中获取信息,将其作为输出读取,然后将其作为输入来运行格式化目标驱动器的命令。

我使用Python,并使用subprocess.run()来完成此操作。我正在编写的脚本,当它在目标驱动器上写入第二个分区时,会将其写为小大小,然后我使用parted将分区扩展到驱动器的末尾。在两次测试之间,为了擦除数据以便重新启动,我一直在使用sfdisk为驱动器的整个大小制作一个分区。此外,我在这一点上使用USB记忆棒进行测试。我通常会将其用于驱动器或使用SD卡。

我发现的问题是,文件结构在目标驱动器的分区上是持久的。(这段话只讲目标驱动器。(如果我把它分成两个分区(最终我需要使用(,我会发现/boot,第一个小分区,仍然有以前使用该分区时的所有文件。如果我试图通过在驱动器上只创建一个大分区来擦除信息,那么在那个分区中,我仍然只能看到/boot分区的原始文件。如果我把它分成两个分区,位置将与我通常制作Raspbian映像时相同,并且我发现/boot和系统驱动器中的文件仍然存在。

因此,在分区位于同一位置的情况下,重新分区会使我的文件仍然完好无损,这些文件来自同一扇区中分区的前一个化身。

为了进行测试,我想清除所有信息,这样我就可以重新开始每次测试,但我不想只使用dd,并在整个驱动器中写入0或1的千兆字节来清除数据。

我能做些什么来确保:

  1. 分区表在测试之间被擦除
  2. 分区的任何目录结构或文件信息都会被删除,所以当我开始测试时,任何分区上都没有文件存在

A"漂亮的";linux文件系统的特点是它们与分区表是分开的。当分区表被意外删除或损坏时,这就救了我一命——重新创建分区表,文件系统仍然存在!对于您的用例,如果您希望文件是";"消失";,您需要销毁文件系统超级块。对于您的用例来说,只销毁第一个可能就足够了。

使用dd只覆盖每个文件系统的前MB应该可以获得所需的内容。所以,如果你在块0上启动你的第一个分区/FS,你可以做一些类似的事情

# write 1MB of zeros to wipe out /boot
dd if=/dev/zero of=/dev/path_to_your_device bs=1024 count=1024

这应该会清除/boot文件系统。从那里你需要计算根体积的开始,你可以根据https://superuser.com/questions/380717/how-to-output-file-from-the-specified-offset-but-not-dd-bs-1-skip-n在根文件系统的开头写一个0的meg。

或者,如果/boot很小,你可以只写sizeof(/boot(+1MB(假设你在/boot之后立即启动/root(,它也会从/root覆盖主超级块,同时为你节省一些计算。

请注意,备用超级块仍然存在,因此在某个时候,如果您(或某人(想恢复以前的内容,则可以恢复备用超级块,除非前1MB磁盘中存在的任何文件都会因覆盖而损坏。

最新更新