【问题标题】:How can I quickly erase all partition information and data on partitions in LInux?如何快速擦除LINux中分区上的所有分区信息和数据?
【发布时间】:2022-10-01 23:56:06
【问题描述】:

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

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

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

因此,重新分区,将分区放在同一位置,让我的文件仍然完好无损,因为以前的分区在同一扇区中的化身。

为了测试,我想清除所有信息,以便我从每个测试重新开始,但我不想只使用dd 并将千兆字节的 0 或 1 写入整个驱动器以清除数据.

我能做些什么来确保:

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

【问题讨论】:

    标签: linux partitioning


    【解决方案1】:

    关于 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 使用skip 在你的根文件系统的开始处写入一个零。

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

    请注意,备用超级块仍然存在,因此在某些时候,如果您(或某人)想要取回以前的内容,则可能可以恢复备用超级块,除非前 1MB 磁盘中存在的任何文件将是由于覆盖而损坏。

    【讨论】:

    • 我迫不及待地想今晚试试这个。 /boot 是 256MB,所以我将对其进行测试,看看将 260MB 写入 USB 驱动器需要多长时间,因为它无论如何都是 RAM。这将比必须计算偏移量更容易。 (这将包括额外的代码来从分区表中获取 /boot 的大小。)对于备用超级块,我总是可以使用 dd 进行一次性写入以清理整个设备。也许在测试之后,我会将其添加到程序中,或者将其添加为选项,以保持清洁。
    • 哦,另外,感谢您解释文件系统如何持久化并独立于分区表。由于文件系统不断重新出现,我开始怀疑我是否做错了什么。
    • 嗯...无法让这个工作!分区表包括注释末尾的信息。 (我知道 SE 不会正确格式化它。)所以 SDB1 从 8192 个扇区开始,每个扇区 512 个字节,所以 skip=4194304 应该在该分区的开头开始写入,但文件系统保持不变。它似乎可以工作,但是下次重新写入分区信息时,文件系统会重新出现。 --------------- /dev/sdb1 * 8192 532479 524288 256M e W95 FAT16 (LBA)
    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 2010-12-06
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多