2014-02-02 3 views
3

Мое понимание заключается в том, что «файлы» фактически просто указывают на расположение памяти, соответствующее содержимому файлов. Если вы 'rm' файл, вы, безусловно, должны удалить этот указатель. Если rm фактически «удаляет» данные, я бы предположил, что каждый бит написан поверх (установлен на 0 или что-то в этом роде). Но я знаю, что существуют специальные процедуры/программы (то есть srm), чтобы убедиться, что данные не «восстанавливаются», что говорит о том, что на самом деле ничего не перезаписывается ...Как работает rm? Что делает rm?

Таким образом, удаляется указатель на адрес памяти только rm делает? Являются ли данные все еще сидят там в смежном блоке, как это было раньше?

ответ

3

Да. rm просто удаляет указатель. Если у вас есть несколько указателей на файл (жесткие ссылки), то удаление одного из этих указателей с rm оставляет остальные полностью нетронутыми и данные все еще доступны.

Удаление всех этих ссылок по-прежнему не касается данных, однако ОС теперь может повторно использовать блоки, которые ранее были зарезервированы для хранения этих данных.

Следует отметить, что любой процесс, который открывает файл, создает для него дескриптор файла. Это добавляет общее количество ссылок на файл. Если вы удалите все указатели из вашей файловой системы, но у операционной системы все еще есть процесс с открытым файловым дескриптором для вашего файла, тогда количество указателей не будет равно нулю, и файл на самом деле не будет удален. Только когда этот последний указатель будет закрыт, файловая система зарегистрирует дисковое пространство как освобожденное, и только в этой точке ОС будет свободна перезаписывать блоки, ранее зарезервированные для хранения этих данных.

Возможно, вы сможете или не сможете восстановить эти данные в любой момент в будущем в зависимости от того, произошло ли повторное использование рассматриваемых блоков.

Кстати, у вас нет гарантии, что ваши данные сидят там в смежном блоке в первую очередь.

+0

Интересно. Как ОС отслеживает, есть ли какие-либо активные указатели на блок? – DilithiumMatrix

+2

Использование inodes. Все это обрабатывается файловой системой. Если вы создаете файл ('cat 'thing'> testfile') и используете' ls -i testfile', вы увидите inode, ответственный за указание на данные. Если вы создадите жесткую ссылку с другим именем ('ln testfile anothertest'), вы увидите, что они имеют один и тот же индекс (' ls -i anothertest'). – Jon

+0

Вы должны добавить ОС, чтобы повторно использовать блоки только в том случае, если в процессе все еще нет указателя открытого файла в полностью отслаиваемом файле. – jlliagre

6

Мое понимание состоит в том, что «файлы» фактически просто указывают на ячейку памяти, соответствующую содержимому файлов.

Будьте осторожны с вашей терминологией. Файлы (и указатели) находятся на диске, а не в памяти (ОЗУ).

Если вы 'rm' файл, вы обязательно должны удалить этот указатель.

Да. То, что происходит, сильно зависит от файловой системы. У некоторых есть растровое изображение, из которого блок свободен/занят. Таким образом, он должен будет перевернуть бит для каждого освобожденного блока. Другие файловые системы используют более сложные методы отслеживания свободного пространства.

, который предполагает, что ничто не фактически переписаны ...

Correct. Вы можете найти различные утилиты «восстановить». Но в зависимости от файловой системы он может стать довольно сложным. Но материал, который вы спасли много лет назад, все еще может сидеть, или он может быть перезаписан. Все зависит от мельчайших деталей. Например, см. (E2fsprogs) [http: //e2fsprogs.sourceforge.net /]

Итак, удаляет указатель на адрес памяти, только что делает rm?

Ну, он также должен удалить «запись в каталоге», которая дает метаданные о файле. (Иногда он просто вытирает первый байт имени файла).

Являются ли данные все еще сидят там в смежном блоке, как это было раньше?

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

Смежные вопросы