Czy istnieje polecenie odzyskiwania / cofania usuniętych plików rm
?
$ rm -rf /path/to/myfile
Jak mogę odzyskać myfile
? Jeśli istnieje takie narzędzie, jak mogę go używać?
Czy istnieje polecenie odzyskiwania / cofania usuniętych plików rm
?
$ rm -rf /path/to/myfile
Jak mogę odzyskać myfile
? Jeśli istnieje takie narzędzie, jak mogę go używać?
Odpowiedzi:
Link, który ktoś podał w komentarzach, jest prawdopodobnie twoją najlepszą szansą.
Linux debugfs Hack: Undelete Files
Ten napis, choć trochę onieśmielający, jest dość prosty do naśladowania. Ogólnie kroki są następujące:
Użyj debugfs, aby wyświetlić dziennik systemu plików
$ debugfs -w /dev/mapper/wks01-root
Po pytaniu debugfs
debugfs: lsdel
Próbka wyjściowa
Inode Owner Mode Size Blocks Time deleted
23601299 0 120777 3 1/ 1 Tue Mar 13 16:17:30 2012
7536655 0 120777 3 1/ 1 Tue May 1 06:21:22 2012
2 deleted inodes found.
Uruchom polecenie w debugfs
debugfs: logdump -i <7536655>
Określ i-węzeł plików
...
...
....
output truncated
Fast_link_dest: bin
Blocks: (0+1): 7235938
FS block 7536642 logged at sequence 38402086, journal block 26711
(inode block for inode 7536655):
Inode: 7536655 Type: symlink Mode: 0777 Flags: 0x0 Generation: 3532221116
User: 0 Group: 0 Size: 3
File ACL: 0 Directory ACL: 0
Links: 0 Blockcount: 0
Fragment: Address: 0 Number: 0 Size: 0
ctime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
atime: 0x4f9fc730 -- Tue May 1 06:21:20 2012
mtime: 0x4f9fc72f -- Tue May 1 06:21:19 2012
dtime: 0x4f9fc732 -- Tue May 1 06:21:22 2012
Fast_link_dest: bin
Blocks: (0+1): 7235938
No magic number at block 28053: end of journal.
Z powyższymi informacjami i-węzła uruchom następujące polecenia
# dd if=/dev/mapper/wks01-root of=recovered.file.001 bs=4096 count=1 skip=7235938
# file recovered.file.001
file: ASCII text, with very long lines
Pliki zostały odzyskane do recovered.file.001
.
Jeśli powyższe nie jest dla ciebie, użyłem narzędzi takich jak photorec
odzyskiwanie plików w przeszłości, ale jest ono nastawione tylko na pliki graficzne. O tej metodzie pisałem obszernie na swoim blogu w tym artykule zatytułowanym:
debugfs -w /dev/sdb2
ale lsdel
sais:0 deleted inodes found.
extundelete
ext3 / 4 jest łatwiejsze i prawdopodobnie doprowadziłoby do takich samych rezultatów.
/dev/mapper/wks01-root: No such file or directory while opening filesystem
Skąd to masz /dev/mapper/wks01-root
?
Przy odrobinie szansy czasami mogę odzyskać usunięte pliki za pomocą tego skryptu lub następnego rozwiązania w odpowiedzi:
#!/bin/bash
if [[ ! $1 ]]; then
echo -e "Usage:\n\n\t$0 'file name'"
exit 1
fi
f=$(ls 2>/dev/null -l /proc/*/fd/* | fgrep "$1 (deleted" | awk '{print $9}')
if [[ $f ]]; then
echo "fd $f found..."
cp -v "$f" "$1"
else
echo >&2 "No fd found..."
exit 2
fi
Jest jeszcze jedna przydatna sztuczka: jeśli znasz wzór w usuniętych plikach, wpisz alt+ sys+, resuoaby ponownie uruchomić + ponownie zamontować tylko w trybie tylko do odczytu, a następnie w przypadku live-cd użyj grep
do wyszukiwania na dysku twardym:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
następnie edytuj, /tmp/recover
aby zachować tylko te pliki, które były wcześniej.
Hej, jeśli w filozofii uniksowej wszystko jest plikami, nadszedł czas, aby z tego skorzystać, nie?
grep
oparte na rozwiązaniu rozwiązanie jest dla mnie bardzo sprytne, nawet jeśli system plików jest nadal podłączony. Dzięki!
grep -av "[^[:print:]]"
grep
Rozwiązanie pracował dla mnie z modyfikacją: zrobiłem sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
i dostałem offsety bajtowe (jak 123123123:line\n456456456:another\n...
), a następnie zrobił n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
i n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
z różnymi n
wartościami.
To, co zadziałało, zostało podane przez arch (dotyczy tylko plików tekstowych):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
gdzie /dev/sdXN
jest partycja zawierająca utracony plik (sprawdź, mount
jeśli nie jesteś pewien).
Trwa to trochę dłużej, ale zadziałało, gdy przypadkowo usunąłem kod źródłowy, którego jeszcze nie zatwierdziłem!
rm data/*.json python myFile.py
zamiastrm data/*.json && python myFile.py
/dev/sdXN
jest dla systemu plików, prawda? Znalazłem mójdf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
Chociaż to pytanie zostało rozwiązane i ma kilka lat, chcę wspomnieć o narzędziu testdisk .
Jak odzyskać pliki za pomocą testdisk, wyjaśniono dobrze w tym samouczku . Aby odzyskać pliki, uruchom testdisk /dev/sdX
i wybierz typ tablicy partycji. Następnie wybierz [ Advanced ] Filesystem Utils
, a następnie wybierz partycję i wybierz [Undelete]
. Teraz możesz przeglądać i wybierać usunięte pliki oraz kopiować je do innej lokalizacji w systemie plików.
W zeszłym tygodniu miałem ten sam problem i wypróbowałem wiele programów, takich jak debugfs, photorec, ext3grep i extundelete. ext3grep był najlepszym programem do odzyskiwania plików. Składnia jest bardzo łatwa:
ext3grep image.img --restore-all
lub:
ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’
Ten film jest mini poradnikiem, który może ci pomóc.
Alternatywą może być użycie del
zamiast rm
do usuwania:
http://fex.belwue.de/fstools/del.html
del
ma funkcję przywracania i działa z dowolnym systemem plików.
Oczywiście nie jest to rozwiązanie, jeśli pliki zostały już usunięte za pomocą polecenia „zabierz więźniów”: -}
del
polecenia.
podłącz dysk przez zewnętrzny interfejs
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Zobacz ten link, aby uzyskać więcej informacji: cofnąć usunięcie właśnie usuniętego pliku na ext4 z extundelete .
Narzędzia do odzyskiwania - wiersz poleceń:
Narzędzia do odzyskiwania - Gui:
Informacje:
Z mojego osobistego doświadczenia odzyskuję dane za pomocą ufs-explorer i photorec
(1) = Not open source, not free
(2) = Nie open source, za darmo
(3) = Open source i za darmo
(4) = Mają wsparcie NTFS
(5) = Posiada funkcję struktury katalogów
Nie zgadzam się, że jest to niemożliwe, po prostu bardzo bardzo trudne i nigdy nie zrobiłem tego poza Linuksem:
Po usunięciu pliki nie są faktycznie usuwane. To, co się dzieje, polega na tym, że miejsce, w którym były na dysku twardym, jest jakby resetowane, więc jeśli komputer próbuje tam zapisać dane, nic nie narzeka. Zasadniczo dane na dysku twardym, które według ciebie zostały usunięte, mogą być tam prawie rok później. A przynajmniej takie jest moje doświadczenie na komputerze z systemem Windows. Nie wiem, czy to działa tak samo, jak w wierszu poleceń w systemie Linux, ale prawdopodobnie potrzebujesz osobnej płyty Live CD, aby otworzyć taką partycję, a także nie ma gwarancji, że pliki nadal tam są. Zrobiłem to kilkakrotnie w systemie Windows XP przy użyciu Zero Assumption Recovery. Jestem pewien, że istnieje podobne narzędzie, jeśli spojrzysz wystarczająco mocno.
Po usunięciu pliku liczba łączy w tabeli i-węzłów dla tego pliku jest zmniejszana o jeden. W Uniksie, gdy liczba linków spada do 0, bloki danych dla tego pliku są oznaczane jako wolne i zazwyczaj odwołania do tych bloków danych są tracone. Właśnie odkryłem z komentarza @ fedorqui, że może istnieć sposób na uzyskanie dostępu do tych bloków, ale dotyczy to tylko systemu plików ext3.
Jednym ze sposobów zachowania plików będzie napisanie funkcji, która pozwoli Ci przenieść pliki do kosza (powiedzmy $HOME/.trash
) i odzyskać potrzebne pliki z tego miejsca. Tę funkcję można aliasować do rm
. Możesz zaplanować zadanie CRON, aby usunąć pliki, które znajdowały się w obszarze kosza przez określoną liczbę dni.
To może zaoszczędzić kłopotów niektórym z was.
Jeśli kiedykolwiek użyłeś gedit do edycji tego pliku, domyślnie zostanie utworzona kopia tego pliku.
Załóżmy na przykład, że przypadkowo usunęliśmy plik „mój_plik.txt”.
W folderze, który kiedyś zawierał właśnie usunięty plik, użyj tych poleceń, a stamtąd
odzyskasz kopię:
ls | grep 'myfile.txt~'
Przy odrobinie szczęścia znajdziesz ją, a następnie:
cp 'myfile.txt~' 'myfile.txt'
Właśnie odzyskałem plik za pomocą tej metody. Powodzenia!