我正在测试一个在树莓PI OS上使用的程序。它所做的很大一部分是读取系统驱动器上的分区信息,它将是(在本例中)/BOOT和/和没有额外的分区,只有这两个分区。我使用的是一个调用sfdisk
的Python脚本。我做了许多示例所显示的操作:我从系统驱动器获取信息,将其作为输出读取,然后使用它作为输入来运行格式化目标驱动器的命令。
我正在使用Python,并使用subprocess.run()
完成此操作。我正在编写的脚本在写入目标驱动器上的第二个分区时,会将其写为一个小分区,然后我使用parted将该分区扩展到驱动器的末尾。在测试间隙,为了擦除我的数据以便可以重新开始,我一直在使用sfdisk为整个驱动器大小创建一个分区。此外,我目前正在使用USB记忆棒进行测试。我通常会将其用于驱动器或使用SD卡。
我发现的问题是文件结构在目标驱动器上的分区上是持久的。(所有这段话都只是关于目标驱动。)如果我将它划分为2个分区(因为我最终需要使用它),我发现第一个小分区/BOOT仍然保存着以前使用该分区时的所有文件。如果我试图通过只在驱动器上创建一个大分区来擦除信息,我仍然只能在该分区中看到/BOOT分区的原始文件。如果我将它分成两个分区,位置将与我通常创建Raspbian映像时相同,并且我发现/Boot和系统驱动器中的文件仍然在那里。
因此,在分区位于相同位置的情况下进行重新分区,会使文件与相同扇区中的分区的前一个版本保持不变。
对于测试,我只想擦除所有信息,以便每次测试都重新开始,但我不想只使用dd
并将千兆字节的0或1写入完整驱动器来擦除数据。
我可以做些什么来确保:
1.分区表在两次测试之间被擦除
1.当我开始测试时,分区的任何目录结构或文件信息都会被清除,因此任何分区上都没有文件保留下来?
1条答案
按热度按时间vojdkbi01#
Linux文件系统的“好”之处在于它们独立于分区表。这在过去当分区表被意外删除或损坏时拯救了我-重新创建分区表,而文件系统仍然在那里!对于您的用例,如果您希望文件“消失”,则需要销毁文件系统超级块。对于您的用例,只销毁第一个可能就足够了。
只需使用dd覆盖每个文件系统的第一个MB,就可以得到所需的内容。因此,如果您要在块0上启动您的第一个分区/FS,您可以执行如下操作
这应该会清除/BOOT文件系统。从那里,您将需要计算根卷的开始,并且您可以使用Skip as per https://superuser.com/questions/380717/how-to-output-file-from-the-specified-offset-but-not-dd-bs-1-skip-n在根文件系统的开始处写入一个Meg的零。
或者,如果/ot很小,您可以只写sizeof(/ot)+1MB(假设您在/ot之后立即启动/root),并且它也会覆盖/root中的主超级块,同时为您节省一些计算。
请注意,备用超级数据块仍将存在,因此在某个时刻,如果您(或某人)想要恢复以前存在的内容,则恢复备用超级数据块是可能的,只是前1MB磁盘中存在的任何文件都将因覆盖而损坏。