Собирать с осторожностью ...
Не забывайте, что вы должны сотрудничать с собственными правилами безопасности потоков существующего драйвера и внутренним кэшированием. Многие потоки в системе могут (и будут) постоянно записывать на диск. Чтобы стереть свободный сектор, вы должны знать, чтобы он был свободным и оставался свободным, пока вы с ним справляетесь. Было бы плохо, если бы вы стерли сектор, который файловая система уже решила использовать, но еще не сбросила доказательства этого решения на диск, чтобы у вас не было возможности узнать, используется ли он. Это может привести к потере данных, что может вызвать возмущение пользователей.
Если вы можете гарантировать, что файловая система в настоящий момент не смонтирована, вы можете, по крайней мере, в принципе открыть /dev/sda
(вероятно, , а не нужную вам!) И проанализировать на диске структуры данных, чтобы сделать все, что вам нужно сделать. Так на самом деле реализуются такие утилиты, как fsck
и mkfs
.
Оставшаяся большая проблема заключается в том, что вам необходимо синхронизироваться с каждой версией каждой файловой системы, с которой вы можете столкнуться. По крайней мере, у вас есть исходный код, доступный для самой файловой системы для справки, но будет нелегко просто перенести его из ядра в приложение пользовательского режима.
Мой совет - использовать саму файловую систему, чтобы получить необходимые гарантии. Откройте большие файлы и заполните их шаблонами стирания. Заполните диск до отказа. Обратите внимание, что если это может серьезно повлиять на любые работающие демоны, которые предполагают, что некоторое дисковое пространство доступно, то, возможно, это все еще нужно сделать в системе с большинством демонов и таких убитых. Если вы стремитесь к безопасному стиранию, вам все равно придется беспокоиться о фактической записи записанных блоков на диск между проходами, потому что все в обычной файловой системе попытается оптимизировать несколько записей одного блока.