11

Shred 文档说 shred “不能保证有效”(见底部)。所以如果我在我的 Ext3 文件系统或 Raid 上粉碎一个文档,会发生什么?我要切碎文件的一部分吗?它有时会切碎整个东西,有时不会吗?可以撕碎别的东西吗?它只粉碎文件头吗?

注意:请注意,shred 依赖于一个非常重要的假设:文件系统会在原地覆盖数据。这是做事的传统方式,但许多现代文件系统设计不满足这个假设。以下是 shred 无效或不保证在所有文件系统模式下都有效的文件系统示例:

  • 日志结构或日志文件系统,例如随 AIX 和 Solaris(以及 JFS、ReiserFS、XFS、Ext3 等)提供的文件系统

  • 写入冗余数据并在某些写入失败的情况下继续执行的文件系统,例如基于 RAID 的文件系统

  • 生成快照的文件系统,例如 Network Appliance 的 NFS 服务器

  • 缓存在临时位置的文件系统,例如 NFS 版本 3 客户端

  • 压缩文件系统

在 ext3 文件系统的情况下,上述免责声明仅在 data=journal 模式下适用(因此 shred 的有效性有限),除了元数据之外,它还记录文件数据。在 data=ordered(默认)和 data=writeback 模式下,shred 照常工作。可以通过将 data=something 选项添加到 /etc/fstab 文件中特定文件系统的挂载选项来更改 Ext3 日志模式,如挂载手册页 (man mount) 中所述。

4

3 回答 3

15

shred 所做的只是覆盖、刷新、检查成功并重复。确定覆盖文件是否真的会导致包含原始数据的块被覆盖完全没有任何作用。这是因为在不了解底层文件系统的非标准信息的情况下,它不能。

因此,日志文件系统不会覆盖原来的块,因为这会阻止它们从更改被写入一半的错误中干净地恢复。如果记录了数据,则每次切碎都可能被写入磁盘上的新位置,在这种情况下,什么都不会被切碎。

RAID 文件系统(取决于 RAID 模式)可能不会覆盖原始块的所有副本。如果存在冗余,您可能会切碎一个磁盘而不切碎其他磁盘,或者您可能会发现不同的通道影响了不同的磁盘,因此每个磁盘都被部分切碎。

在任何文件系统上,磁盘硬件本身可能碰巧检测到错误(或者,在闪存的情况下,即使没有错误,也可以应用磨损均衡)并将逻辑块重新映射到不同的物理块,使得原始块是标记为有缺陷(或未使用)但从未被覆盖。

压缩文件系统可能不会覆盖原始块,因为 shred 覆盖的数据在每次传递时要么是随机的,要么是极其可压缩的,任何一个都可能导致文件从根本上改变其压缩大小并因此被重新定位。NTFS 将小文件存储在 MFT 中,当 shred 将文件大小四舍五入到一个块的倍数时,它的第一次“覆盖”通常会导致文件被重新定位到新位置,然后将被毫无意义地切碎,留下小MFT 插槽保持不变。

Shred 无法检测到任何这些情况(除非您有一个直接解决您的 fs 和块驱动程序的特殊实现 - 我不知道是否真的存在任何此类事情)。这就是为什么在整个磁盘上使用它比在文件系统上使用更可靠的原因。

Shred 从不切碎其他文件意义上的“其他东西”。在上面的某些情况下,它会粉碎以前未分配的块,而不是包含您的数据的块。它也不会粉碎文件系统中的任何元数据(我猜这就是你所说的“文件头”)。-u 选项确实会尝试覆盖文件名,方法是重命名为相同长度的新名称,然后在删除文件之前一次将一个字符缩短为 1 个字符。如果您也指定 -v,您可以看到这一点。

于 2009-05-26T23:56:15.567 回答
5

其他答案已经很好地解释了为什么 shred 可能无法正常工作。

这可以概括为:

shred 仅适用于分区,不适用于单个文件

如其他答案中所述,如果您粉碎单个文件:

  • 不能保证实际数据真的被覆盖,因为文件系统可能会将对同一文件的写入发送到磁盘上的不同位置
  • 不能保证 fs 没有在其他地方创建数据副本
  • fs 甚至可能决定“优化”您的写入,因为您正在重复写入同一个文件(同步应该可以防止这种情况,但同样:不能保证)

但是即使你知道你的文件系统没有做上述任何令人讨厌的事情,你也必须考虑到许多应用程序会自动创建文件数据的副本:

  • 字处理器、编辑器(如 vim)等将定期写入的崩溃恢复文件
  • 文件管理器中的缩略图/预览文件(有时甚至是非图像文件)
  • 许多应用程序使用的临时文件

因此,如果没有检查您用于处理数据的每个二进制文件,它可能会在您不知情的情况下被复制到右侧、左侧和中心。唯一现实的方法是始终切碎完整的分区(或磁盘)。

于 2009-05-27T00:37:30.240 回答
3

问题是数据可能存在于磁盘上的多个位置。当数据恰好存在于一个位置时,shred 可以确定性地“擦除”该信息。但是,日志文件系统或其他高级文件系统可能会将您的文件数据临时写入磁盘上的多个位置。Shred - 事后 - 无法知道这一点,也无法知道数据可能临时写入磁盘的位置。因此,它无法擦除或覆盖这些磁盘扇区。

想象一下:您将文件写入日志文件系统上的磁盘,该文件系统不仅记录元数据,还记录文件数据。文件数据暂时写入日志,然后写入其最终位置。现在您在文件上使用 shred。写入数据的最终位置可以被 shred 安全地覆盖。但是,shred 必须有某种方式来保证日志中临时包含文件内容的扇区也被覆盖​​,以保证您的文件确实不可恢复。想象一个文件系统,其中日志甚至不在固定位置或固定长度。

如果您使用的是 shred,那么您正在尝试确保无法重建您的数据。shred 的作者说实话,有一些他们无法控制的情况,他们无法做出这种保证。

于 2009-05-26T23:44:54.997 回答