2013-08-12 16 views
8

Czy istnieje sposób na utworzenie pliku w systemie Linux, który prowadzi do określonego węzła? Weźmy następujący scenariusz: Istnieje plik, który jest w trakcie pisania (może być dziennik), a konkretny plik jest usuwany , ale łącze w katalogu/proc nadal wskazuje na to. W tym przypadku potrzebujemy , a nie gołej kopii, ale twardego linku do niego, abyśmy mogli mieć przyszłe modyfikacje i ostatnią modyfikację przed zamknięciem procesu, a system go usunąć.Odzyskiwanie plików usuniętych z systemu Linux

Jeśli mamy numer iNode, czy istnieje sposób na osiągnięcie tego celu?

Odpowiedz

4

Można użyć lsof do odzyskiwania skasowanych plików (czasami) ...

> lsof | grep testing.txt 
less 4607 juliet 4r REG 254,4 21 
     8880214 /home/juliet/testing.txt (deleted) 

Koniecznie przeczytać oryginalny artykuł do pełnych informacji przed przystąpieniem do tego, chyba że jesteś Maveric jak ja.

> ls -l /proc/4607/fd/4 
lr-x------ 1 juliet juliet 64 Apr 7 03:19 
     /proc/4607/fd/4 -> /home/juliet/testing.txt (deleted) 
> cp /proc/4607/fd/4 testing.txt.bk 

http://www.linuxplanet.com/linuxplanet/tips/6767/1

Ciesz

+1

Złap. Masz rację. Myślałem, że właśnie to przetestowałem i nie zadziałało. NTL: OP zażądał twardego linku, a konkretnie nie kopii. –

3

To zawsze trudno odpowiedzieć na takie pytanie "co mogę zrobić" pewnie przecząca. Ale o ile widzę, ani/sys/nor/proc nie udostępnia mapowania otwartych deskryptorów plików, które nie są dowiązaniami symbolicznymi. Zakładam, że "ALE link w katalogu/proc nadal wskazuje na to" oznacza, że ​​/ proc // fd/wpisy wyglądają jak dowiązania symboliczne? Jestem prawie pewien, że nie możesz odzyskać oryginalnego pliku.

Ja to odbieram: jak zauważył użytkownik user2676075, kopiowanie działa. Just hardlinking nie ...

UPDATE: Jeśli myślisz o tym, jest to całkiem logiczne.

  • /proc i/sys to systemy plików różniące się od dysku twardego. Nie mogą więc dostarczać plików takich jak wpisy do katalogów, które trudno jest połączyć z miejscem docelowym na dysku twardym.
  • Wpisy/proc/*/fd/udają dowiązania symboliczne, ale w rzeczywistości są różne, inaczej kopiowanie nie zadziałałoby. Sądzę, że udają, że są dowiązaniami symbolicznymi, dostarczającymi znaczących informacji za pomocą "ln-l".

  • Odnośnie (brak) zdolność do hardlink do jakiegoś węzła (powiedzmy z jakiegoś wywołania systemowego): To nie może być częścią jądra lub VFS-Interface, z następujących powodów:

    • Naruszałoby to integralność systemu plików. System plików nie powinien blokować dysków z plikami, które zostały całkowicie usunięte w taki sam sposób, jak pliki, które są trwałe.

    • iwęzłówm może być całkowicie wirtualne pojęcie zidentyfikować „gniazdo gdzie strumień danych jest przechowywany.” Przypuszczam, że może być implementacje, które mają problem konwersji szczelinę, która nie ma odniesienia z powrotem do gniazda, które jest odnoszone na podstawie nazwy w systemie plików.

    Przyznam sprawę przed możliwością takiego wywołania systemowego nie jest wodoszczelne. Ale biorąc pod uwagę obecny stan interfejsu VFS (co AFAIR nie przewiduje takie wywołanie), byłoby to dużym obciążeniem dla każdej implementacji systemu plików (w tym nprozproszone systemy plików), aby wywołać połączenie pliku w katalogu za pomocą i-węzła.

ATM Zastanawiam się, czy wywołanie fstat przed i po usunięciu ostatniego odniesienia jest rzeczywiście wymaga, aby powrócić do tych samych informacji węzła ... t

+0

Przyczyna, dla której nie istnieje hardlink-to-inode, nie pozwala użytkownikom na dostęp do plików, które nie powinny. Katalog 700 sprawia, że ​​wszystko pod nim jest prywatne, chyba że można go ominąć z numerem i-węzła jako argumentem do linku (2). Co by było miło w tej sytuacji to link (2) przyjmujący otwarty deskryptor pliku. Chociaż nawet to może otworzyć nowe procesy, które mogą się przydać, jeśli zacznie się od otwartego fd na pliku, który nie będzie już dostępny, lub którego nie można otworzyć samodzielnie. Ponadto, semantyka usuwania to: przestrzeń dyskowa pozostaje do ostatniego łącza I ostatnia otwarta fd I ostatnia mmapa zniknie. –

14

Ponieważ nie ma syscall że wiąże-węzła, ponieważ jest koncepcja extX fs i nie jest dobrą praktyką, aby zrobić fajkę, ale ma stworzyć łańcuch odpowiedzialności (jak sugeruje MEL), jest tylko odpowiedź na to pytanie, ponieważ na poziomie VFS obsługujemy ścieżkę plików i nazwy a nie inne reprezentacje wewnętrzne.

ALE aby osiągnąć cel do śledzenia najbardziej ostatniej modyfikacji możemy użyć ciągłe monitorowanie i powielania ogona:

tail -c+1 -f --pid=PID /proc/PID/fd/FD > /path/to/the/copy 

gdzie PID jest PID procesu, który miał usuniętego pliku nadal otwarte, a FD jest jego numerem deskryptora pliku. Z -f ogon otworzyć i przytrzymaj plik, aby wyświetlić dalsze modyfikacje, z -c + 1 zaczynają "ogon" od pierwszego bajtu i z ogon jest informowany, aby zakończyć, gdy wyjście pid .

+0

i-węzły nie są specyficzne dla ext2/3/4. Są one częścią specyfikacji POSIX, dotyczącej działania wywołań systemowych, takich jak stat (2), oraz sposobu znalezienia twardych linków. Ale niestety masz rację, że nie ma żadnego sposobu na utworzenie łącza z/proc/PID/fd/FD do prawdziwego pliku, po prostu otwórz go do odczytu/zapisu. Gdyby istniało tylko wywołanie systemowe, takie jak link (2), które pobierało deskryptor otwartego pliku jako źródło, a nie ścieżkę. –

Powiązane problemy