Co oznacza „przestarzały uchwyt pliku” w systemie Linux?

101

Powiedzmy, że mam otwarty terminal i przez ten terminal przeszedłem cddo jakiegoś katalogu. Poprzez inny terminal usuwam ten katalog i przywracam go z identycznej kopii zapasowej. Kiedy próbuję vimpobrać plik z pierwszego terminala, w tym samym katalogu, dlaczego pojawia się błąd dotyczący nieaktualnego uchwytu pliku? Co to znaczy? (Na marginesie stwierdziłem, że można ominąć ten problem cd $(pwd).)

IDDQD
źródło
Jeśli zamontujesz katalog NFS (nazwij go adir) z hosta A do hosta B, a następnie wykonaj operację usuwania i przywracania dla adira na hoście A, możesz również otrzymać błąd „Stale uchwyt pliku” podczas uzyskiwania dostępu do adira na hoście B. Użyj polecenia touchna hoście A może sprawić, że będzie to normalne.
rustyhu

Odpowiedzi:

83

Po usunięciu katalogu i- węzeł dla tego katalogu (i i-węzły z jego zawartością) są odzyskiwane. Wskaźnik, który twoja powłoka ma do i-węzła tego katalogu (i jego zawartości) nie jest już prawidłowy. Kiedy katalog jest przywracany z kopii zapasowej, stare i-węzły nie są (koniecznie) używane ponownie; katalog i jego zawartość są przechowywane w losowych i-węzłach. Jedyną rzeczą, która pozostaje taka sama, jest to, że katalog nadrzędny ponownie używa tej samej nazwy dla przywróconego katalogu (ponieważ kazałeś mu).

Teraz, jeśli spróbujesz uzyskać dostęp do zawartości katalogu, na który wskazuje Twoja oryginalna powłoka, przekaże to żądanie do systemu plików jako żądanie oryginalnego i-węzła, który od tego czasu został ponownie przetworzony (i może nawet być używany do czegoś zupełnie inaczej). Otrzymujesz więc stale file handlewiadomość, ponieważ poprosiłeś o nieistniejące dane.

Kiedy wykonujesz cdoperację, powłoka ponownie ocenia lokalizację i-węzła dowolnego miejsca docelowego, które jej podasz. Teraz, gdy twoja powłoka zna nowy i-węzeł dla katalogu (i nowe i-węzły dla jego zawartości), przyszłe żądania dotyczące jego zawartości będą prawidłowe.

dg99
źródło
Ach, więc to tylko sposób traktowania przez system nieprawidłowych / zerowych wskaźników i-węzłów?
IDDQD
Tak. Nie wiem wystarczająco dużo o szczegółach, aby wiedzieć, co by się stało, gdybyś na przykład spróbował odwołać się do i-węzła, który został już przetworzony, w celu wskazania czegoś innego. Czy nadal otrzymasz przestarzały uchwyt pliku? A może otrzymasz nieoczekiwane dane?
dg99
1
Nie sądzę, aby system użył go ponownie, ponieważ ktoś faktycznie używa tego węzła I, mając go jako katalog bieżący.
Samuel Åslund