首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Shred:不适用于日志FS吗?

Shred:不适用于日志FS吗?
EN

Stack Overflow用户
提问于 2009-05-26 23:26:52
回答 3查看 6.7K关注 0票数 11

切碎文档称切碎“不能保证有效”(见底部)。因此,如果我在我的Ext3文件系统或Raid上分解了一个文档,会发生什么?我把文件的一部分撕掉了吗?它有时会把整件事撕碎,有时不会呢?它还能撕碎其他东西吗?它只分解了文件头吗?

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

  • log-structured或日志文件系统,如AIX和Solaris (以及JFS、ReiserFS、XFS、Ext3等)提供的文件系统,可以写入冗余数据并即使某些写入失败也继续运行的
  • 文件系统,例如基于RAID的文件系统
  • 文件系统生成快照,例如网络应用程序的NFS服务器
  • 文件系统,它缓存在临时位置,例如NFS版本3 clients
  • compressed文件系统

在ext3文件系统中,上述免责声明仅在data=journal模式下应用(并因此效果有限),该模式除了记录元数据外,还记录文件数据。在data=ordered (默认)模式和data=writeback模式中,分解都像往常一样工作。可以通过将Ext3选项添加到/etc/fstab文件中特定文件系统的挂载选项中来更改data=something日志记录模式,如挂载手册页(man挂载)中所记录的那样。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-26 23:56:15

所有的碎片都是覆盖,刷新,检查成功,并重复。它绝对不会发现覆盖文件是否会导致包含被覆盖的原始数据的块。这是因为如果不了解底层文件系统的非标准内容,它就不能。

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

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

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

压缩的文件系统可能不会覆盖原始块,因为每一次都是随机的或极可压缩的数据,因此可能导致文件从根本上改变其压缩大小,从而被重新定位。NTFS将小文件存储在MFT中,当将文件大小分解为一个块的倍数时,它的第一个“覆盖”通常会导致文件被重新定位到一个新的位置,然后该位置将被毫无意义地切分,留下这个MFT小插槽而不动。

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

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

票数 16
EN

Stack Overflow用户

发布于 2009-05-27 00:37:30

其他答案已经很好地解释了为什么切斯特可能不能正确地完成它的工作。

这可以概括为:

shred只在分区上工作,而不是单个文件。

正如在其他答案中所解释的,如果您分解了一个文件:

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

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

periodically

  • thumbnail/preview

  • 崩溃恢复文件,其中字处理器、编辑器(如vim)等将在文件管理器中写入文件(有时甚至用于许多应用程序使用的文件)。

因此,如果不检查用于处理数据的每一个二进制文件,它可能是在不知情的情况下向右、左和中央复制的。唯一现实的方法是总是分割完整的分区(或磁盘)。

票数 5
EN

Stack Overflow用户

发布于 2009-05-26 23:44:54

令人担忧的是,数据可能存在于磁盘上的多个位置上。当数据恰好存在于一个位置时,分解就可以确定地“删除”该信息。但是,记录日志或其他高级文件系统的文件系统可能会在磁盘上临时将文件的数据写入多个位置。切碎--事后--无法知道这一点,也无法知道数据可能被临时写入磁盘的位置。因此,它无法擦除或覆盖这些磁盘扇区。

想象一下:您将一个文件写入日志文件系统上的磁盘,该文件系统不仅记录元数据,而且记录文件数据。文件数据被临时写入日志,然后写入其最终位置。现在你在文件上使用切碎。数据写入的最终位置可以安全地被碎片覆盖。然而,shred必须有某种方式来保证日志中暂时包含您文件内容的部分也被覆盖,以便能够保证您的文件是真正不可恢复的。想象一个文件系统,其中的日志甚至不是在一个固定的位置或一个固定的长度。

如果您使用的是shred,那么您正在尝试确保您的数据不可能被重构。“碎片”的作者们诚实地说,在他们无法控制的某些情况下,他们无法做出这种保证。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/913282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档