Скажем, у меня открыт терминал, и через него я cd
попал в какой-то каталог. Через другой терминал я удаляю этот каталог и восстанавливаю его из идентичной резервной копии. Когда я пытаюсь открыть vim
файл с первого терминала в том же каталоге, почему я получаю сообщение об устаревшем дескрипторе файла? Что это означает? (Кстати, я обнаружил, что эту проблему можно обойти cd $(pwd)
.)
101
touch
на хосте A, чтобы все стало нормально.Ответы:
Когда каталог удаляется, индексный дескриптор этого каталога (и индексные дескрипторы его содержимого) повторно используется. Указатель вашей оболочки на индексный дескриптор этого каталога (и индексные дескрипторы его содержимого) больше не действителен. Когда каталог восстанавливается из резервной копии, старые inodes не (обязательно) повторно используются; каталог и его содержимое хранятся в случайных индексах. Единственное, что остается неизменным, - это то, что родительский каталог повторно использует то же имя для восстановленного каталога (потому что вы это сказали).
Теперь, если вы попытаетесь получить доступ к содержимому каталога, на который все еще указывает ваша исходная оболочка, он передает этот запрос в файловую систему как запрос на исходный индексный дескриптор, который с тех пор был переработан (и может даже использоваться для чего-то теперь совсем другое). Итак, вы получили
stale file handle
сообщение, потому что запросили несуществующие данные.Когда вы выполняете
cd
операцию, оболочка повторно оценивает расположение inode того места назначения, которое вы ему указываете. Теперь, когда ваша оболочка знает новый индексный дескриптор для каталога (и новые индексы для его содержимого), будущие запросы на его содержимое будут действительными.источник