Esiste un comando per ripristinare / ripristinare i file eliminati rm
?
$ rm -rf /path/to/myfile
Come posso recuperare myfile
? Se esiste un tale strumento, come posso usarlo?
Esiste un comando per ripristinare / ripristinare i file eliminati rm
?
$ rm -rf /path/to/myfile
Come posso recuperare myfile
? Se esiste un tale strumento, come posso usarlo?
Risposte:
Il link che qualcuno ha fornito nei commenti è probabilmente la tua migliore possibilità.
Debug di Linux Hack: Undelete Files
Quella sceneggiatura, sebbene un po 'intimidatoria, è in realtà abbastanza semplice da seguire. In generale i passaggi sono i seguenti:
Utilizzare debugfs per visualizzare un registro di filesystem
$ debugfs -w /dev/mapper/wks01-root
Al prompt di debugfs
debugfs: lsdel
Uscita campione
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.
Esegui il comando in debugfs
debugfs: logdump -i <7536655>
Determina l'inode dei file
...
...
....
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.
Con le informazioni sull'inode sopra riportate esegui i seguenti comandi
# 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
File ripristinati in recovered.file.001
.
Se quanto sopra non fa per te, ho usato strumenti come photorec
recuperare i file in passato, ma è orientato solo per i file di immagini. Ho scritto ampiamente di questo metodo sul mio blog in questo articolo intitolato:
debugfs -w /dev/sdb2
ma lsdel
0 deleted inodes found.
extundelete
è più facile per ext3 / 4 e probabilmente porterebbe agli stessi risultati.
/dev/mapper/wks01-root: No such file or directory while opening filesystem
dove l'hai preso /dev/mapper/wks01-root
?
Con un po 'di possibilità, a volte posso recuperare file cancellati con questo script o la prossima soluzione nella risposta:
#!/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
C'è un altro trucco utile: se conosci un modello nei tuoi file eliminati, digita alt+ sys+ resuoper riavviare + rimontare in sola lettura, quindi con un cd live, usa grep
per cercare nel disco rigido:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
quindi modifica /tmp/recover
per conservare solo i file precedenti.
Ehi, se con la filosofia unix sono tutti file, è tempo di approfittare di questo, no?
grep
soluzione di base è molto intelligente e ha funzionato per me, anche con il file system ancora montato. Grazie!
grep -av "[^[:print:]]"
grep
soluzione ha funzionato per me con una modifica: ho fatto sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
e ottenuto offset di byte (come 123123123:line\n456456456:another\n...
), quindi fatto n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
e n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
con n
valori diversi .
Ciò che ha funzionato per me è stato dato da arch (vale solo per i file di testo):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
dove si /dev/sdXN
trova la partizione contenente il file perso (verificare con mount
se non si è sicuri).
Richiede un po 'di tempo, ma ha funzionato quando ho eliminato accidentalmente un codice sorgente che non avevo ancora commesso!
rm data/*.json python myFile.py
invece dirm data/*.json && python myFile.py
/dev/sdXN
è per il file system, giusto? Ho trovato il mio condf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
Sebbene questa domanda sia risolta e vecchia di alcuni anni, voglio menzionare l' utilità testdisk .
Come recuperare file con testdisk è spiegato bene in questo tutorial . Per recuperare i file, esegui testdisk /dev/sdX
e seleziona il tipo di tabella delle partizioni. Successivamente, selezionare [ Advanced ] Filesystem Utils
, quindi selezionare la partizione e selezionare [Undelete]
. Ora puoi sfogliare e selezionare i file eliminati e copiarli in un'altra posizione nel tuo filesystem.
Ho avuto lo stesso problema la scorsa settimana e ho provato molti programmi, come debugfs, photorec, ext3grep ed extundelete. ext3grep era il miglior programma per recuperare file. La sintassi è molto semplice:
ext3grep image.img --restore-all
o:
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’
Questo video è un mini tutorial che può aiutarti.
È possibile utilizzare un'alternativa del
anziché rm
per eliminare:
http://fex.belwue.de/fstools/del.html
del
ha una funzione di ripristino e funziona con qualsiasi file system.
Ovviamente non è una soluzione se hai già cancellato i tuoi file con "non prendere prigionieri" rm: -}
del
comando.
collegare l'unità tramite interfaccia esterna
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Vedi questo link per maggiori informazioni: ripristinare un file appena eliminato su ext4 con extundelete .
Strumenti di recupero - Riga di comando:
Strumenti di recupero - Gui:
Informazioni:
Nella mia esperienza personale ho recuperato i miei dati usando ufs-explorer e photorec
(1) = Non open source, non gratuito
(2) = Non open source, gratuito
(3) = Open source e gratuito
(4) = Supporto per NTFS
(5) = Funzione di struttura delle directory
Non sono d'accordo sul fatto che sia impossibile, solo molto molto difficile, e non l'ho mai fatto su Linux:
Quando i file vengono eliminati, non vengono effettivamente eliminati. Quello che succede è che lo spazio che si trovavano sul disco rigido è una sorta di reset, quindi se il computer tenta di scrivere dati lì, nulla si lamenta. In genere, i dati sul disco rigido che pensavi di aver eliminato possono essere presenti quasi un anno dopo. O almeno, questa è la mia esperienza su un computer Windows. Che funzioni o meno allo stesso modo da una riga di comando su Linux, non sono sicuro, ma probabilmente avresti bisogno di un Live CD separato per aprire la partizione in quel modo, e non c'è nemmeno alcuna garanzia che i file siano ancora lì. L'ho fatto su Windows XP più volte usando Zero Assumption Recovery. Sono sicuro che c'è uno strumento simile in giro se guardi abbastanza forte.
Quando si elimina un file, il conteggio dei collegamenti nella tabella degli inode per quel file viene ridotto di uno. In Unix, quando il conteggio dei collegamenti scende a 0, i blocchi di dati per quel file vengono contrassegnati come liberi e, in genere, i riferimenti a tali blocchi di dati vengono persi. Ho appena scoperto dal commento di @ fedorqui che potrebbe esserci un modo per accedere a quei blocchi ma che è applicabile solo al filesystem ext3.
Un modo per preservare i file sarà quello di scrivere una funzione che ti permetta di spostare i file in un'area cestino (diciamo così $HOME/.trash
) e recuperare i file necessari da lì. Questa funzione può essere modificata rm
. È possibile pianificare un processo cron per eliminare i file che sono stati nell'area cestino per un certo numero di giorni.
Questo potrebbe salvare il problema per alcuni di voi.
Se hai mai usato gedit per modificare quel file, per impostazione predefinita verrà creata una copia di quel file.
Ad esempio supponiamo di aver accidentalmente eliminato "myfile.txt".
Nella cartella che un tempo conteneva il file che hai appena cancellato usa questi comandi e da lì recupererai la copia:
ls | grep 'myfile.txt~'
Con un po 'di fortuna lo troverai e poi:
cp 'myfile.txt~' 'myfile.txt'
Ho recuperato un file proprio ora usando questo metodo. Buona fortuna!