1
9
再加上警告… 不要忘记,您必须与现有驱动程序堆栈的线程安全规定和内部缓存进行合作。系统中的许多线程可以(并且将)一直写入磁盘。要想消灭一个自由的领域,你必须知道它是自由的,并且在你有自由的时候保持自由。如果将文件系统已经决定使用的扇区擦除,但尚未将该决定的证据清除到磁盘上,那么情况将很糟糕,因此您无法知道该扇区正在使用中。这可能导致数据丢失,从而导致愤怒的用户。
如果您可以保证文件系统当前没有安装,那么原则上至少可以打开
剩下的大问题是,您必须与可能遇到的每个文件系统的每个版本保持同步。至少您有可供文件系统本身参考的源代码,但是将其从内核导出并导入用户模式应用程序并不容易。 我的建议是使用文件系统本身为您提供所需的保证。打开大文件并用擦除模式填充它们。将磁盘充满容量。请注意,如果这可能对任何运行中的守护进程产生严重影响(假定有一些磁盘空间可用),那么可能仍然需要在大多数守护进程都已被杀死的系统上执行此操作。如果要进行安全擦除,仍然需要担心在两次传递之间实际将写入的块刷新到磁盘,因为正常文件系统中的所有内容都将尝试优化单个块的多个写入。 |
2
17
你可以
|
3
9
在所有类似的情况下,您不希望通过/dev/sd*或/dev/hd*直接访问块设备。正如其他人所说,您必须了解原始的底层文件系统,这将非常困难。 如果编写的应用程序希望将磁盘上的字节视为一个大的线性地址空间,那么请检查mmap()系统调用。您可以在磁盘上创建一个大的空文件,然后使用mmap()将其映射到您的进程空间中。从那里,您可以使用常规的内存操作来读写底层的大文件。请注意,写操作是缓冲的,因此保证一致性可能很困难。 这种方法的优点是,即使底层文件是分段的,您的访问模式也可以将其视为字节的线性集合。 |
4
6
如果您想清除文件系统中的所有可用空间,可以用一个满是零的大文件填充文件系统,将其同步到磁盘,然后删除它。这可能无法完全得到所有信息,尤其是当您处理日志文件系统或类似文件时,但它可以完成大部分工作。如果您想擦除磁盘以便更好地压缩图像,这可能是您需要做的全部工作。如果您出于安全原因想清理磁盘…欢迎来到内核开发的世界,请踏入到最深处,记得穿上阻燃的东西。 有一个叫 zerofree 将ext文件系统中的空闲块归零,并用于vm映像。记住,这不是您应该对已安装的文件系统执行的操作。该页面还包含一些旧的内核补丁,这些补丁可能是在活动文件系统上执行此操作的一个有趣的起点。 |
5
5
哦,我的。 您的代码必须:
如果我是你,我会重新考虑你想做什么。 编辑:看到他的评论,他实际上想做什么,
|
6
2
非常依赖于很多因素,比如
解决: |
Malay Joshi · C++如何创建文件夹 2 年前 |
tashanzhishi061 · NFS装载显示有时会混淆 2 年前 |
cryogene · mknod的可移植性[重复] 2 年前 |
surajsbsm · 创建文件oustside默认目录php 6 年前 |
Bob Kimani · 将存储库文件夹链接到另一个非repo文件夹 6 年前 |
user3732361 · 读取大文件时如何选择块大小? 6 年前 |
YO LO · 在iPad上保存文本文件的位置 6 年前 |
hhwwww · 无法在mac上显示扩展文件属性 6 年前 |