Silinen dosyaları kurtarmak / geri almak için bir komut var mı rm
?
$ rm -rf /path/to/myfile
Nasıl iyileşebilirim myfile
? Böyle bir araç varsa nasıl kullanabilirim?
Silinen dosyaları kurtarmak / geri almak için bir komut var mı rm
?
$ rm -rf /path/to/myfile
Nasıl iyileşebilirim myfile
? Böyle bir araç varsa nasıl kullanabilirim?
Yanıtlar:
Yorumlarda birisinin verdiği bağlantı muhtemelen en iyi şansınız.
Linux debugfs Hack: Undelete Dosyaları
Bu korkutucu biraz korkutucu görünüyor olsa da takip etmek için oldukça yalındır. Genelde adımlar aşağıdaki gibidir:
Bir dosya sistemi günlüğünü görüntülemek için debugfs kullanın.
$ debugfs -w /dev/mapper/wks01-root
Hata ayıklama isteminde
debugfs: lsdel
Örnek çıktı
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.
Komutu debugfs'ta çalıştırın
debugfs: logdump -i <7536655>
Inode dosyalarını belirle
...
...
....
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.
Yukarıdaki inode bilgisi ile aşağıdaki komutları çalıştırın
# 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
Dosyalar kurtarıldı recovered.file.001
.
Yukarıdakiler sizin için değilse photorec
, geçmişte dosyaları kurtarmak gibi araçlar kullandım , ancak yalnızca resim dosyaları için tasarlandı. Blogumda bu yöntemi kapsamlı bir şekilde yazdım:
debugfs -w /dev/sdb2
ama lsdel
sais:0 deleted inodes found.
extundelete
ext3 / 4 için daha kolaydır ve muhtemelen aynı sonuçlara yol açacaktır.
/dev/mapper/wks01-root: No such file or directory while opening filesystem
nereden aldın /dev/mapper/wks01-root
?
Biraz şansım olsa, bazen bu komut dosyasıyla silinen dosyaları veya cevabındaki bir sonraki çözümü kurtarabilirim:
#!/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
Başka kullanışlı hile vardır: Eğer, silinen dosyaları bir desen biliyorsanız tipi alt+ sys+ resuoyalnızca salt sonra canlı-cd ile kullanmak içinde + yeniden monte edilmesini yeniden başlatmak için grep
sabit sürücüde arama yapmak için:
grep -a -C 500 'known pattern' /dev/sda | tee /tmp/recover
daha sonra /tmp/recover
yalnızca dosyalarınızdan önce olanları saklamak için düzenleyin .
Hey, eğer unix felsefesinde her şey dosya ise, bundan faydalanma zamanı gelmiştir, değil mi?
grep
tabanlı bir çözümdür çok akıllı ve hatta hala monte dosya sistemi ile, benim için çalıştı. Teşekkürler!
grep -av "[^[:print:]]"
grep
Ben yaptım: Çözüm Bir değişikliği benim için çalıştı sudo grep --line-buffered -ab "$PATTERN" /dev/sda1 | tee lines
ve (gibi bayt uzaklıklar var 123123123:line\n456456456:another\n...
mi, sonra) n=1000; sudo dd of=before if=/dev/sda1 ibs=1 skip=$[123123123-$n] count=$n
ve n=1000; sudo dd of=after if=/dev/sda1 ibs=1 skip=123123123 count=$n
farklı olan n
değerler.
Benim için işe yarayanlar kemer tarafından verildi (sadece metin dosyaları için geçerlidir):
grep -a -C 200 -F 'Unique string in text file' /dev/sdXN
/dev/sdXN
kayıp dosyayı içeren bölüm nerede ( mount
emin değilseniz kontrol edin ).
Biraz zaman alıyor, ancak henüz taahhütte bulunmadığım bazı kaynak kodlarını yanlışlıkla silerken çalıştı!
rm data/*.json python myFile.py
yerine koştumrm data/*.json && python myFile.py
/dev/sdXN
dosya sistemi içindir, değil mi? Ben mayını buldumdf -T | awk '{print $1,$2,$NF}' | grep "^/dev"
grep: conflicting matchers specified
Bu soru çözülmüş ve birkaç yaşında olmasına rağmen, testdisk yardımcı programından bahsetmek istiyorum .
Testdisk ile dosyaların nasıl kurtarılacağı bu derste iyi açıklanmıştır . Dosyaları kurtarmak için çalıştırın testdisk /dev/sdX
ve bölüm tablosu türünüzü seçin. Bundan sonra, [ Advanced ] Filesystem Utils
seçiminizi yapın, ardından bölümünüzü seçin ve öğesini seçin [Undelete]
. Artık silinen dosyaları arayabilir ve seçebilir ve bunları dosya sisteminizdeki başka bir yere kopyalayabilirsiniz.
Geçen hafta aynı problemi yaşadım ve debugfs, photorec, ext3grep ve extundelete gibi birçok program denedim. ext3grep, dosyaları kurtarmak için en iyi programdı. Sözdizimi çok kolaydır:
ext3grep image.img --restore-all
veya:
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’
Bu video size yardımcı olabilecek küçük bir rehberdir.
Silmek del
yerine alternatif kullanılıyor olabilir rm
:
http://fex.belwue.de/fstools/del.html
del
silinmemiş bir işleve sahiptir ve herhangi bir dosya sistemiyle çalışır.
Elbette dosyalarınızı "mahkum almayın" ile silmişseniz bu bir çözüm değildir. Rm: -}
del
emirleri verdiğin için teşekkürler
sürücüyü harici arabirim üzerinden bağlayın
umount /dev/{sd*}
extundelete --restore-all /dev/{sd*}
Daha fazla bilgi için bu bağlantıya göz atın: ext4elete ile ext4'te silinmiş bir dosyayı silin .
Kurtarma Araçları - Komut Satırı:
Kurtarma Araçları - Gui:
Bilgiler:
Kişisel tecrübeme göre ufs-explorer ve photorec kullanarak verilerimi geri alıyorum
(1) = Açık kaynak değil, ücretsiz değil
(2) = Açık kaynak, ücretsiz
(3) = Açık kaynak ve ücretsiz
(4) = Ntfs desteği var
(5) = Dizin yapısı özelliği var
Bunun imkansız olduğunu, sadece çok çok zor olduğunu ve Linux'ta da hiç yapmadım:
Dosyalar silindiğinde, aslında silinmezler. Olan şey, sabit diskte bulundukları alanın bir tür sıfırlama olduğu, böylece bilgisayar orada veri yazmaya çalıştığında hiçbir şeyden şikayetçi olmaz. Genellikle, sabit diskinizdeki, sildiğiniz düşündüğünüz veriler neredeyse bir yıl sonra olabilir. Ya da en azından, bu bir Windows makinesindeki deneyimim. Linux'ta bir komut satırından aynı şekilde çalışıp çalışmadığı emin değilim, emin değilim, ancak böyle bir bölümü açmak için ayrı bir Canlı CD'ye ihtiyacınız olacak ve ayrıca dosyaların hala orada olduğundan emin değilsiniz. Bunu Windows XP'de birkaç kez Sıfır Varsayım Kurtarma kullanarak yaptım. Yeterince sert görünüyorsanız, benzer bir araç olduğundan eminim.
Bir dosyayı sildiğinizde, o dosyanın inode tablosundaki bağlantı sayısı bir azalır. Unix'te, bağlantı sayısı 0'a düştüğünde, o dosyanın veri blokları serbest olarak işaretlenir ve tipik olarak, bu veri bloklarına referanslar kaybolur. @ Fedorqui'nin yorumundan bu bloklara erişmenin bir yolu olabileceğini ancak yalnızca ext3 dosya sistemine uygulanabilir olduğunu keşfettim.
Dosyaları korumanın bir yolu , dosyaları bir çöp kutusuna taşımanızı (söyleyelim $HOME/.trash
) ve gerekli dosyaları oradan kurtarmanızı sağlayan bir işlev yazmaktır . Bu fonksiyona takma ad verilebilir rm
. Çöp alanında bulunan dosyaları belirli bir süre boyunca silmek için bir cron işi zamanlayabilirsiniz.
Bu, bazılarınız için sıkıntıdan kurtarabilir.
Bu dosyayı düzenlemek için gedit kullandıysanız, varsayılan olarak bu dosyanın bir kopyası oluşturulur.
Örneğin, yanlışlıkla 'myfile.txt' dosyasını sildiğimizi varsayalım.
Az önce sildiğiniz dosyayı içeren klasörde bu komutları kullanın ve kopyasını oradan kurtarın:
ls | grep 'myfile.txt~'
Biraz şansla bulursunuz ve sonra:
cp 'myfile.txt~' 'myfile.txt'
Bu yöntemi kullanarak şu anda bir dosyayı kurtardım. İyi şanslar!