切碎文档说切碎“不保证是有效的”(请参阅底部)。因此,如果我在Ext3文件系统或Raid上切碎文档,会发生什么情况?我会切碎文件的一部分吗?它有时会切碎整个东西,有时却不会吗?可以切碎其他东西吗?它仅切碎文件头吗?
注意:请注意,切碎取决于一个非常重要的假设:文件系统会覆盖适当的数据。这是传统的处理方式,但是许多现代文件系统设计都不满足此假设。以下是在所有文件系统模式下都无法有效执行切细操作或不能保证有效的文件系统示例: 日志结构或日志文件系统,例如AIX和Solaris(以及JFS,ReiserFS,XFS,Ext3等)提供的文件系统 写入冗余数据并即使某些写入失败也继续执行的文件系统,例如基于RAID的文件系统 制作快照的文件系统,例如Network Appliance的NFS服务器 缓存在临时位置的文件系统,例如NFS版本3客户端 压缩文件系统 在ext3文件系统的情况下,以上免责声明仅在data = journal模式下适用(因此粉碎效果有限),该模式除了元数据外还记录文件数据。在data = ordered(默认)和data = writeback模式下,切碎都照常工作。可以通过将data = something选项添加到/ etc / fstab文件中特定文件系统的安装选项中来更改Ext3日志记录模式,如安装手册页(man mount)中所述。
注意:请注意,切碎取决于一个非常重要的假设:文件系统会覆盖适当的数据。这是传统的处理方式,但是许多现代文件系统设计都不满足此假设。以下是在所有文件系统模式下都无法有效执行切细操作或不能保证有效的文件系统示例:
日志结构或日志文件系统,例如AIX和Solaris(以及JFS,ReiserFS,XFS,Ext3等)提供的文件系统
写入冗余数据并即使某些写入失败也继续执行的文件系统,例如基于RAID的文件系统
制作快照的文件系统,例如Network Appliance的NFS服务器
缓存在临时位置的文件系统,例如NFS版本3客户端
压缩文件系统
在ext3文件系统的情况下,以上免责声明仅在data = journal模式下适用(因此粉碎效果有限),该模式除了元数据外还记录文件数据。在data = ordered(默认)和data = writeback模式下,切碎都照常工作。可以通过将data = something选项添加到/ etc / fstab文件中特定文件系统的安装选项中来更改Ext3日志记录模式,如安装手册页(man mount)中所述。
切丝要做的只是覆盖,刷新,检查成功并重复。绝对不会发现覆盖文件是否实际上导致包含原始数据的块被覆盖。这是因为,如果不了解有关底层文件系统的非标准信息,它就不会。
因此,日记文件系统不会覆盖原先的块,因为这将阻止它们从更改被写入一半的错误中完全恢复。如果记录了数据,则每次切碎都可以将其写入磁盘上的新位置,在这种情况下,不会切碎任何内容。
RAID文件系统(取决于RAID模式)可能不会覆盖原始块的所有副本。如果存在冗余,则可以切碎一个磁盘,而不切碎其他磁盘,或者您可能发现不同的通道影响了不同的磁盘,从而部分切碎了每个磁盘。
在任何文件系统上,磁盘硬件本身可能恰好会检测到错误(或者在闪存的情况下,即使没有错误也要进行耗损均衡)并将逻辑块重新映射到另一个物理块,从而使原始块成为标记为错误(或未使用),但从未覆盖。
压缩的文件系统可能不会覆盖原始块,因为切碎覆盖的数据在每次通过时都是随机的或极度可压缩的,并且任一个都可能导致文件从根本上改变其压缩大小并因此进行重定位。NTFS将小文件存储在MFT中,当切细将文件大小四舍五入为一个块的倍数时,其第一次“覆盖”通常会导致文件重定位到新位置,然后将其毫无意义地切碎,只剩下一点点MFT插槽未触及。
Shred无法检测到这些情况中的任何一个(除非您有直接针对fs和块驱动程序的特殊实现- 我不知道是否真的存在任何此类情况)。这就是为什么在整个磁盘上使用它比在文件系统上使用更可靠的原因。
切丝切勿切碎其他文件中的“其他内容”。在上述某些情况下,它会粉碎以前未分配的块,而不是包含数据的块。它也不会切碎文件系统中的任何元数据(我想这就是“文件头”的意思)。-u选项确实尝试覆盖文件名,方法是重命名为相同长度的新名称,然后在删除文件之前一次将一个字符缩短为1个字符。如果您也指定-v,则可以看到它的作用。