这个问题在过去被提出了不同程度的成功……
是否有工具或C/C++ unix函数可以调用,以便我能够检索文件磁盘上的位置?不是文件的某个虚拟地址,而是文件所在的磁盘/扇区/块?
这里的目标是允许覆盖磁盘上存在的实际位.我可能需要一种绕过内核叠加地址的方法.我愿意考虑基于x86 asm的解决方案……
但是,我觉得有些工具已经做得很好.
感谢您的任何意见.
最佳答案 只有在非常特殊的情况下才能安全地删除文件:
> OS和实际存储介质之间没有不受控制的间接层.
在现代系统上,不能再被假设了.带有固件损耗均衡代码的SSD驱动器不能像这样工作;他们可以随意移动或复制数据,无需记录或可能进行外部控制.即使是磁盘驱动器也会在发生故障后重新映射的扇区中保留现有数据.混合驱动器同时做……
ATA规范确实支持擦除整个驱动器的SECURE ERASE命令,但我不知道现有实现有多彻底.
>文件系统驱动程序始终具有稳定且唯一的文件到物理块的映射.
我相信ext2fs确实有这个功能.我还认为ext3fs和ext4fs在默认日记模式下也可以这样工作,但是在使用data = journal选项安装时不允许将文件数据存储在日志中,而不仅仅是元数据.
另一方面,reiserfs肯定会以不同的方式工作,因为它存储少量数据和元数据,除非使用notail选项进行安装.
如果满足这两个条件,则诸如shred
的程序可以通过多次覆盖其内容来安全地删除文件的内容.
此方法仍未考虑:
>备份
>虚拟化存储
>在交换空间中留下数据
> ……
底线:
>您不能再认为可以进行安全删除.更好地假设它是不可能的并且使用加密;如果你正在处理敏感数据,你应该使用它.
>有一个原因是关于敏感数据的协议要求对存储介质进行物理破坏.有些公司实际上对他们的硬盘驱动器进行消磁,然后在焚烧剩余物之前将它们切碎.