Удаление каталога

Я являюсь пользователем без полномочий root на общем компилированном сервере, который монтирует /home через NFS с другого хоста. У меня есть каталог ~/a/b с большим количеством подкаталогов c1,c2,... Я хотел полностью удалить файл ~/a/b и удалось выполнить большинство каталогов cN . Но некоторые (скажем, c1 ) полностью недоступны: я могу выполнить их (т.е. cd в них), но ни один список ( ls ) не позволяет удалить их. Если я скажу rm -rf ~/a/b/c1 , процесс зависает в состоянии D

Что я могу сделать как пользователь без полномочий root, чтобы избавиться от ~/a/b ?


Обновление: я просто ssh'd на файловом сервере (чтобы исключить NFS), и я тоже не могу выполнить операцию, так что это, похоже, не проблема NFS. Однако почему ядро ​​отказывается удалить каталог?

Удаление файла или каталога – это атомная операция, требующая одного системного вызова, поэтому, если команда rm зависает, это связано с тем, что ядро ​​застряло. В файловой системе NFS это может быть (и обычно есть) из-за того, что сервер не отвечает. В локальной файловой системе это может быть (и обычно есть) из-за сбоя оборудования. Возможно, ваш диск не работает; журналы ядра подтвердят это.

Проверьте, не обращаются ли какие-либо процессы к файлам под капотом (например, их текущий рабочий каталог). Я бы использовал такие инструменты, как lsof и fuser -v и посмотреть, есть ли какие-то процессы, запутавшиеся в каталоге, и сначала избавиться от них. При необходимости перезапустите службу nfs-клиента и попробуйте проверить, существует ли каталог, и тем более не удалять каталог, если он является текущим рабочим каталогом той же оболочки.

Если он зависает во время операции поиска и удаления, вы можете установить тайм-аут для процесса, как показано ниже (здесь я вызываю его через bash на окнах с cygwin):

 bash -c "find . -regex ".+fileDirToDelete" -exec rm -Rf {} \; & pid=$!; sleep 100; kill $pid"