Сбой rmdir из-за того, что каталог не пуст после обновления NFS

У меня есть веб-сайт с каталогом активов. Иногда мне нужно удалить целую папку, и ранее в AWS у меня был EC2 с EBS для хранения, и он работал нормально.

Сейчас я тестирую EFS, чтобы разделить ресурсы между несколькими экземплярами. Файлы удаляются, однако при удалении каталога выдается предупреждение о том, что каталог не пустой:

ОШИБКА [Предупреждение]: rmdir (/ путь /): каталог не пуст

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

Права доступа к каталогу выглядят правильно, и нет проблем с сохранением / удалением файлов.

Это мой единственный способ выполнить rm -rf команда? Код, который выполняет удаление ниже:

public function delTree($dir) {
$files = array_diff(scandir($dir), array('.','..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? $this->delTree($dir . $file . "/") : unlink("$dir/$file");
}
return rmdir($dir);
}

0

Решение

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

Причина того, что это могло работать с EBS, но не с NFS, заключается в различиях в обработке удаленных файлов.

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

rm -rf скорее всего не будет работать. Параметр -f имеет значение «force», что означает изменение прав доступа к файлу только для чтения, чтобы его можно было удалить. rm не может изменить / снять блокировку файловой системы.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]