Функция Unlink не освобождает дисковое пространство - PullRequest
0 голосов
/ 27 июля 2011

Я тестирую Unlink в php, чтобы удалить некоторые файлы. Файлы действительно удалены, я их больше не вижу, но удивительно, что место на жестком диске никогда не уменьшается.

Я хочу полностью удалить файл.

Ответы [ 4 ]

7 голосов
/ 27 июля 2011

Насколько большие файлы, и как вы проверяете наличие свободного места?Отмена связи с файлом только освободит место на вашем диске, если вы отсоединили последнюю ссылку на файл.Помните, что в системах Unix один файл может существовать в нескольких разных местах, каждый со своим уникальным именем файла - вы даже можете иметь один файл несколько раз в каталоге SAME.Только когда будет удалена последняя ссылка, указывающая на файл, файл будет фактически удален.

2 голосов
/ 27 июля 2011

unlink удаляет имя из файловой системы ( man unlink ).Если также освободить место, если ни один процесс не использует обработчик файла в дальнейшем - так что я предполагаю, что некоторый процесс все еще владеет обработчиком (для проверки этой гипотезы, возможно, вы могли бы написать сценарий php командной строки, который вызывает интерпретатор тольковремя это бежит).

0 голосов
/ 27 июля 2011

Есть две вещи, которые следует учитывать:

  • unlink уменьшает счетчик ссылок для определенного inode. Если у вас есть жесткие ссылки в другом месте системы, хранилище все еще используется.
  • Любые программы с открытым файлом будут препятствовать освобождению места, ДАЖЕ, если файл больше не указан на диске.
0 голосов
/ 27 июля 2011

Если размер файла незначителен, вы можете не увидеть изменений в размере. Будьте уверены, что если файл больше не виден (и не скрыт), он был помечен для удаления, и любой файл, созданный или измененный после того, как он может занять свое старое пространство, перезаписывает то, что осталось от файла.

...