Безвозвратное удаление файлов с жесткого диска

Мне интересно, как написать программу для постоянного удаления файлов с моего жесткого диска. Я знаю, что моя программа должна иметь, по крайней мере, ту же функциональность, что и "rm", с точки зрения удаления системных ссылок на данные, но меня также интересует, как я могу аннулировать (полностью) данные на диске.

Я почти уверен, что C и ассемблер обеспечат эту низкоуровневую функциональность, но я не очень уверен, как даже начать пытаться получить доступ к частям диска или отследить расположение различных фрагментов файл на диске.

Я знаю, что это может показаться большим проектом из-за отсутствия у меня знаний о файловых системах, но я просто пытаюсь учиться. Я понимаю, что мне нужно больше узнать о жестких дисках и о том, с каким типом диска я конкретно пытаюсь работать. Но любая помощь/ссылки, которые вы могли бы предоставить, будут оценены.


person Robert Kelly    schedule 02.05.2011    source источник
comment
Я не думаю, что вы сможете сделать это напрямую, без написания кода пространства ядра. ОС отвечает за низкоуровневый доступ к жесткому диску.   -  person Oliver Charlesworth    schedule 02.05.2011
comment
Не уверен, что это отвечает на ваш вопрос, но для окончательного удаления файла, я думаю, вы имеете в виду, что он не будет восстановлен, поэтому, если вы перезапишете каждый байт своего файла ненужными данными, а затем удалите его, это должно сделать это.   -  person atoMerz    schedule 02.05.2011
comment
@AtoMerZ: это может сработать, но, например, в Windows Vista это не сработает, если для этого диска есть теневое хранилище, и ваш файл попал в точка восстановления системы. Это очевидно в том смысле, что восстановление системы вообще не сработает, если перезапись файла безвозвратно удалит старое содержимое, но неочевидно в том смысле, что если вы хотите уничтожить файл, вам нужно понять, какие файлы имеют теневые копии. .   -  person Steve Jessop    schedule 03.05.2011
comment
@ Стив Джессоп, правда, но я не думаю, что какая-либо программа сможет это отследить, не так ли?   -  person atoMerz    schedule 03.05.2011
comment
@AtoMerZ: портативная программа ничего не может сделать, но в Windows можно хотя бы определить, когда существуют теневые копии. Я не знаю подробностей API Windows для этого, но такие вещи, как Shadow Explorer, справляются.   -  person Steve Jessop    schedule 03.05.2011


Ответы (2)


Я думаю, что вы хотите использовать такую ​​программу, как scrub. Единственная проблема, это то, что для многих файловых систем это не работает.

Придумать универсальное решение, вероятно, будет невозможно.

person cmcginty    schedule 02.05.2011

Ничего страшного, если вы откроете файл, получите размер файла, а затем запишете n нулевых байтов в файл, который хотите удалить (где n — количество байтов).

После этого просто удалите файл. Все данные будут потеряны, и если кто-то восстановит файл-узел, все, что он увидит, — это набор нулей.

Тем не менее: я уверен, что некоторые люди здесь скажут вам, что вам нужно стереть файл нулями (или каким-либо другим шаблоном) не менее 10–15 раз, чтобы действительно удалить все следы содержимого. стереть файл один раз навсегда.

Это городская легенда. Не доверяйте им. Никто, даже ребята из сериала C.S.I. не могут восстановить файл, который однажды был стерт.

person Nils Pipenbrinck    schedule 02.05.2011
comment
Ребята из CSI могут увеличить часть кадра камеры слежения размером 1x1 пиксель, показывающую глаз жертвы, увеличив его до изображения в миллионы мегапикселей, из которого вы сможете увидеть отражение убийцы на роговице, так что я вполне уверен, что они могли бы получить данные даже с жесткого диска, выброшенного на солнце. :) - person Matteo Italia; 02.05.2011
comment
Хорошо, здорово, я думал, что это будет сделано, но я не был уверен, будет ли фрагментированный файл сохранен в тех же местах на диске. Спасибо. - person Robert Kelly; 02.05.2011
comment
@Matteo Они также могут создать приложение с графическим интерфейсом на Visual Basic для отслеживания IP-адресов убийц... youtube. com/watch?v=hkDD03yeLnU - person Mr. Shickadance; 02.05.2011
comment
@Nils: тем не менее, как сказано в комментарии к ответу @yan, все не так просто, поскольку некоторые файловые системы и оборудование не всегда перезаписывают на месте, ведение журнала может оставлять следы, а диски не всегда действительно сбрасывают изменения. немедленно. - person Matteo Italia; 02.05.2011
comment
Проблема в том, что некоторые файловые системы копируют при записи, например, ZFS и BTRFS делают это, запись поверх файла с 0 может просто заполнить некоторые другие ранее неиспользованные блоки 0, а не блоки, в которых есть данные файла, очевидно, это не так. что вы хотите для безопасного удаления. - person Spudd86; 02.05.2011
comment
Кроме того, как в сжимаемой файловой системе, так и в файловой системе, поддерживающей разреженные файлы, перезапись нулями может привести к тому, что файл будет занимать очень мало места на диске, поэтому исходные (менее сжимаемые) данные не будут перезаписаны. А в журнальных файловых системах вам не повезло, может быть невозможно навсегда удалить что-либо по замыслу. Трудно или даже невозможно восстановить сектор диска, который был однажды перезаписан, но восстановить файл, который был перезаписан, действительно очень просто. - person Steve Jessop; 03.05.2011
comment
Этот ответ действителен только для определенных файловых систем. Очень вероятно, что современная файловая система не будет размещать новые данные в том же месте. - person cmcginty; 03.05.2011
comment
Никто не может восстановить файл, который был стерт один раз. Сильное заявление. Не хотите подкрепить это ссылкой? - person Jim Mischel; 03.05.2011