Будет ли иметь большую разницу во времени, чтобы войти в систему на компьютере, на котором есть каталог, перед тем как делать это rm -rf
в каталоге, или только rm -rf
в каталоге через NFS?
источник
Будет ли иметь большую разницу во времени, чтобы войти в систему на компьютере, на котором есть каталог, перед тем как делать это rm -rf
в каталоге, или только rm -rf
в каталоге через NFS?
Конечно, ssh - лучше.
Nfs использует сложный сетевой протокол с различными удаленными вызовами процедур и временем ожидания синхронизации данных. В случае с ssh они не применяются.
Кроме того, есть много замков. Удаление файла в NFS работает следующим образом:
rm
команда дает unlink()
системный вызовunlink()
вызовunlink()
вызов на удаленной сторонеunlink()
вызова вашего оригиналаrm
rm
переходит к следующему файлу, перейти к 1Теперь главное: между 2-7, rm
приходится ждать. Он может отправлять следующий unlink()
вызов асинхронно, но это однопоточный, не ориентированный на события инструмент. Даже если бы он мог, он все равно потребовал бы хитрых флагов монтирования nfs. Пока не получится результат, он ждет.
Nfs - и любая сетевая файловая система - всегда намного медленнее.
Во многих случаях вы можете сделать рекурсивные удаления квази-бесконечной скоростью с помощью хитрости:
mv -vf oldfilms oldfilms-
)rm -rf oldfilms- &
)Из многих (но не всех) аспектов это удаление каталога будет выглядеть так, как если бы оно произошло практически за нулевое время.
Расширение: как @ el.pascado упоминает в своем превосходном комментарии, фактически 2-7 должно запускаться 3x для любых файлов:
lstat()
системного вызова),unlink()
в случае каталогов, opendir()
рекурсивное удаление всех файлов / каталогов в нем, а затем closedir()
, наконец rmdir()
.readdir()
вызова.Для этого требуется 3 RPC-команды nfs для файлов и дополнительные 3 для каталогов.
-r
флаг,rm
он должен сначала проверить, является ли файл каталогом (lstat
через nfs), открыть его (opendir
через nfs), прочитать его содержимое (readdir
через nfs), и только затем выполнить фактическое удаление, как описано в ответе для каждого файла, найденного внутри, и вернувшись в подкаталоги, закройте каталог (closedir
через nfs), а затем повторите для каждого найденного каталога .Да. Хорошо, может быть. По-разному. Для небольшого количества файлов и каталогов это не будет иметь большого значения.
Массовое выполнение файловых операций в подключенном каталоге NFS. Если у вас есть возможность войти на сам сервер NFS и выполнить их в реальном каталоге, то это будет быстрее.
Давайте проверим это, удалив коллекцию портов OpenBSD, которую я извлек из CVS и смонтировал поверх NFS:
На сервере NFS:
На клиенте (после восстановления исходных файлов из резервной копии):
источник