Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Wie kann ich gelöschte Dateien unter Linux wiederherstellen?
Wie kann ich unter Linux gelöschte Dateien wiederherstellen? Im folgenden Artikel erfahren Sie, wie Sie gelöschte Dateien unter Linux wiederherstellen. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Linux hat keinen Papierkorb wie Windows. Grundsätzlich können Dateien nicht mit rm -rf *
abgerufen werden.
Dann ist die Frage:
Können wir Dateien, die versehentlich unter Linux gelöscht wurden, wirklich nicht über Software wiederherstellen?
Die Antwort lautet natürlich: Nein immer noch per Software wiederhergestellt werden. Die Wiederherstellung versehentlich gelöschter Dateien kann in zwei Situationen unterteilt werden:
Eine besteht darin, dass nach dem Löschen Löschinformationen im Prozess vorhanden sind
Die andere Ist Löschung Der Prozess ist in Zukunft nicht mehr auffindbar und kann nur mit Hilfe von Tools wiederhergestellt werden.
Als Nächstes erklären wir anhand von Beispielen zwei verschiedene Wiederherstellungsmethoden für versehentliches Löschen:
Wenn der Prozess des versehentlichen Löschens einer Datei immer noch besteht:
Dies bedeutet normalerweise, dass ein aktiver Prozess eine kontinuierliche Standardeingabe oder -ausgabe hat. Nachdem die Datei gelöscht wurde, ist die Prozess-PID weiterhin vorhanden. Dies ist auch der Grund, warum einige Server einige Dateien löschen, die Festplatte jedoch nicht freigegeben wird.
Öffnen Sie ein Terminal und führen Sie den Cat-Append-Vorgang für eine Testdatei aus:
[root@docking ~]# echo "This is DeleteFile test." > deletefile.txt [root@docking ~]# ls deletefile.txt [root@docking ~]# cat >> deletefile.txt Add SomeLine into deletefile for fun.
Öffnen Sie ein anderes Terminal, um die Datei anzuzeigen, und Sie können den Inhalt deutlich sehen:
[root@docking ~]# ls deletefile.txt [root@docking ~]# cat deletefile.txt This is DeleteFile test. Add SomeLine into deletefile for fun.
Dabei Zeit, lösche die Datei rm -f deletefile.txt
[root@docking ~]# rm -f deletefile.txt [root@docking ~]# ls #命令查看这个目录,文件已经不存在了,那么现在我们将其恢复出来。
lsof prüft, ob der gelöschte Dateiprozess noch existiert.
Wenn Sie es nicht installiert haben, machen Sie es bitte selbst yum install lsof
oder apt-get install lsof
1 Kann zuerst lsof anzeigen, um die gelöschten Dateien anzuzeigen. Ist die Datei noch da?
[root@docking ~]# lsof | grep deletefile cat 21796 root 1w REG 253,1 63 138860 /root/deletefile.txt (deleted)
2 die aktuelle Situation: cp /proc/pid/fd/1 /指定目录/文件名
[root@docking ~]# cd /proc/21796/fd [root@docking fd]# ll 总用量 0 lrwx------ 1 root root 64 1月 18 22:21 0 -> /dev/pts/0 l-wx------ 1 root root 64 1月 18 22:21 1 -> /root/deletefile.txt (deleted) lrwx------ 1 root root 64 1月 18 22:21 2 -> /dev/pts/0
[root@docking fd]# cp 1 ~/deletefile.txt.backup [root@docking fd]# cat ~/deletefile.txt.backup This is DeleteFile test. Add SomeLine into deletefile for fun.
3. Wiederherstellung abgeschlossen.
Der versehentlich gelöschte Dateiprozess existiert nicht mehr. Verwenden Sie das Tool, um ihn wiederherzustellen.Bereiten Sie einige Dateiverzeichnisse vor.#准备一份挂载的盘
mkdir backuptest
cd backuptest
mkdir deletetest
mkdir deletetest/innerfolder
echo "Delete a folder test." > deletetest/innerfolder/deletefile.txt
echo "tcpdump:x:172:72::/:/sbin/nologin" > tmppasswd
Die endgültig vorbereitete Verzeichnisstruktur ist wie folgt:
taroballs@taroballs-PC:/media/taroballs/taroballs/backuptest$ cd .. taroballs@taroballs-PC:/media/taroballs/taroballs$ tree backuptest/ backuptest/ ├── deletetest │ └── innerfolder │ └── deletefile.txt └── tmppasswd 2 directories, 2 files
Jetzt beginnen Sie mit dem Löschen des Verzeichnisses
taroballs@taroballs-PC:/media/taroballs/taroballs$ rm -rf backuptest/ taroballs@taroballs-PC:/media/taroballs/taroballs$ ls -l 总用量 0In diesem Fall gibt es normalerweise keinen Daemon oder Hintergrundprozess, der es weiter eingibt, sodass das Löschen wirklich gelöscht wird. lsof kann es auch nicht sehen, daher müssen Sie Tools verwenden, um es wiederherzustellen.
rm -rf backuptest/
Beginnen Sie jetzt mit der Wiederherstellung versehentlich gelöschter Dateien.
Das von uns verwendete Tool ist das Drittanbieter-Tool extundelete. Die Wiederherstellungsschritte und Vorsichtsmaßnahmen lauten wie folgt:
Beenden Sie alle Vorgänge auf der aktuellen Partition, um zu verhindern, dass der Inode überschrieben wird. Wenn der Inode überschrieben wird, wird er grundsätzlich wiederhergestellt.
Um es zu übertreiben, stoppen Sie beispielsweise den Dienst der Partition, auf der er sich befindet, deinstallieren Sie das Gerät, auf dem sich das Verzeichnis befindet, und trennen Sie gegebenenfalls das Netzwerk.
Verwenden Sie den Befehl dd, um die aktuelle Partition zu sichern, um Datenverluste zu verhindern, die durch einen Fehler bei der Softwarewiederherstellung von Drittanbietern verursacht werden.
Geeignet für Situationen, in denen die Daten sehr wichtig sind. Daher ist für die Sicherung die folgende Methode erforderlich: dd if=/path/filename of= /dev/vdc1
Verwenden Sie den Befehl umount, um die Bereitstellung der aktuellen Gerätepartition aufzuheben. Oder verwenden Sie den Fuser-Befehl umount /dev/vdb1
Wenn angezeigt wird, dass das Gerät ausgelastet ist, können Sie die Deinstallation mit dem Fuser-Befehl erzwingen: Fuser -m -v -i - k ./
Laden Sie das Drittanbieter-Tool extunelete herunter, um es zu installieren und nach versehentlich gelöschten Dateien zu suchen, um es wiederherzustellen
Extunelete-Download-Adresse: http://extundelete.sourceforge.net/wget https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
Extrahieren Sie die Datei
[root@docking ~]# tar jxvf extundelete-0.2.4.tar.bz2 tar (child): bzip2:无法 exec: 没有那个文件或目录 tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now
tar jxvf extundelete-0.2.4.tar.bz2
, verwenden Sie , um das Problem zu lösen.[root@docking ~]# tar jxvf extundelete-0.2.4.tar.bz2 extundelete-0.2.4/ extundelete-0.2.4/acinclude.m4 extundelete-0.2.4/missing extundelete-0.2.4/autogen.sh extundelete-0.2.4/aclocal.m4 extundelete-0.2.4/configure extundelete-0.2.4/LICENSE extundelete-0.2.4/README ...................................................
cd extundelete-0.2.4 ./configureWenn in diesem Schritt ein Fehler gemeldet wird
[root@docking extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 configure: error: in `/root/extundelete-0.2.4': configure: error: C++ compiler cannot create executables See `config.log' for more details
yum -y install bzip2
, verwenden Sie , um das Problem zu lösen.Wenn Nach der Ausführung des vorherigen Schritts wird immer noch ein Fehler gemeldet, [root@docking extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 configure: error: Can't find ext2fs library
yum -y install gcc-c++
, dann verwenden Sie , um ihn zu beheben.
yum -y install e2fsprogs e2fsprogs-devel
Wenn nichts schief geht, sollte die Konfiguration hier erfolgreich abgeschlossen werden
[root@docking extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 Writing generated files to disk [root@docking extundelete-0.2.4]#
#Ubuntu的解决办法为sudo apt-get install e2fslibs-dev e2fslibs-dev
Zuletzt und dann [root@docking extundelete-0.2.4]# make make -s all-recursive Making all in src extundelete.cc: 在函数‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’中: extundelete.cc:1272:29: 警告:在 {} 内将‘search_flags’从‘int’转换为较窄的类型‘ext2_ino_t {aka unsigned int}’ [-Wnarrowing] buf, match_name2, priv, 0}; ^ [root@docking extundelete-0.2.4]# make install Making install in src /usr/bin/install -c extundelete '/usr/local/bin'
extundelete-Installation abgeschlossen. make
make install
Verwenden Sie , um den Mount anzuzeigen:
taroballs@taroballs-PC:~$ df -lh 文件系统 容量 已用 可用 已用% 挂载点 udev 1.9G 0 1.9G 0% /dev tmpfs 387M 1.8M 385M 1% /run /dev/sda2 92G 61G 26G 71% / tmpfs 1.9G 49M 1.9G 3% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda3 104G 56G 44G 57% /home tmpfs 387M 40K 387M 1% /run/user/1000 /dev/sda4 70G 20G 47G 30% /media/taroballs/d8423f8c-d687-4c03-a7c8-06a7fb57f96d /dev/sdb1 6.8G 4.1G 2.8G 60% /media/taroballs/taroballs /dev/sr0 4.0G 4.0G 0 100% /media/taroballs/2018-01-16-12-36-00-00 taroballs@taroballs-PC:~$ cd /media/taroballs/taroballs/ taroballs@taroballs-PC:/media/taroballs/taroballs$Wie Sie sehen können, ist unser Verzeichnis / media/taroballs /taroballs
df -lh
Mount in das Dateisystem /dev/sdb1.
Zum Beispiel: taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1
/dev/sdb1 6.8G 4.1G 2.8G 60% /media/taroballs/taroballs
umounten Sie dieses Verzeichnis
taroballs@taroballs-PC:~$ umount /media/taroballs/taroballs taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1 taroballs@taroballs-PC:~$ #记得删除一定要后umount哦,不然二次写入谁也帮不了你呢。Wiederherstellung über den Inode-Knoten
taroballs@taroballs-PC:~$ mkdir recovertest taroballs@taroballs-PC:~$ cd recovertest/ taroballs@taroballs-PC:~/recovertest$
Wiederherstellung durchführen
taroballs@taroballs-PC:/media/taroballs/taroballs$ sudo extundelete /dev/sdb1 --inode 2 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Group: 0 Contents of inode 2: . .省略N行 File name | Inode number | Deleted status . 2 .. 2 deletetest 12 Deleted tmppasswd 14 DeletedEntdecken Sie die Dateien, die wir gelöscht haben, indem Sie den Ordner scannen und führen Sie nun den Wiederherstellungsvorgang durch.
extundelete /dev/sdb1 --inode 2
(1) Eine einzelne Datei tmppasswd wiederherstellen
taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-file passwd NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. Successfully restored file tmppasswd
Die wiederhergestellte Datei wird im aktuellen Verzeichnis RECOVERED_FILES abgelegt.
Wiederhergestellte Dateien anzeigen:
taroballs@taroballs-PC:~/recovertest$ cat tmppasswd tcpdump:x:172:72::/:/sbin/nologin
(2) Verzeichnis wiederherstellen deletetest
extundelete /dev/sdb1 --restore-directory deletetest NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. Searching for recoverable inodes in directory deletetest ... 5 recoverable inodes found. Looking through the directory structure for deleted files ...
(3) Alle wiederherstellen
taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-all NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. Searching for recoverable inodes in directory / ... 5 recoverable inodes found. Looking through the directory structure for deleted files ... 0 recoverable inodes still lost. taroballs@taroballs-PC:~/recovertest$ tree backuptest/ ├── deletetest │ └── innerfolder │ └── deletefile.txt └── tmppasswd 2 directories, 2 files
(4) Angegebenen Inode wiederherstellen
taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-inode 14 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. taroballs@taroballs-PC:~/recovertest$ cat file.14 tcpdump:x:172:72::/:/sbin/nologin #注意恢复inode的时候,恢复 出来的文件名和之前不一样,需要单独进行改名。
Schließlich folgt die Verwendung von
:$ extundelete --help Usage: extundelete [options] [--] device-file Options: --version, -[vV] Print version and exit successfully. --help, Print this help and exit successfully. --superblock Print contents of superblock in addition to the rest. If no action is specified then this option is implied. --journal Show content of journal. --after dtime Only process entries deleted on or after 'dtime'. --before dtime Only process entries deleted before 'dtime'.Actions: --inode ino Show info on inode 'ino'. --block blk Show info on block 'blk'. --restore-inode ino[,ino,...] Restore the file(s) with known inode number 'ino'. The restored files are created in ./RECOVERED_FILES with their inode number as extension (ie, file.12345). --restore-file 'path' Will restore file 'path'. 'path' is relative to root of the partition and does not start with a '/' The restored file is created in the current directory as 'RECOVERED_FILES/path'. --restore-files 'path' Will restore files which are listed in the file 'path'. Each filename should be in the same format as an option to --restore-file, and there should be one per line. --restore-directory 'path' Will restore directory 'path'. 'path' is relative to the root directory of the file system. The restored directory is created in the output directory as 'path'. --restore-all Attempts to restore everything. -j journal Reads an external journal from the named file. -b blocknumber Uses the backup superblock at blocknumber when opening the file system. -B blocksize Uses blocksize as the block size when opening the file system. The number should be the number of bytes. --log 0 Make the program silent. --log filename Logs all messages to filename.--log D1=0,D2=filename Custom control of log messages with comma-separated Examples below: list of options. Dn must be one of info, warn, or --log info,error error. Omission of the '=name' results in messages --log warn=0 with the specified level to be logged to the console. --log error=filename If the parameter is '=0', logging for the specified level will be turned off. If the parameter is '=filename', messages with that level will be written to filename. -o directory Save the recovered files to the named directory. The restored files are created in a directory named 'RECOVERED_FILES/' by default.
推荐:《linux教程》
Das obige ist der detaillierte Inhalt vonWie kann ich gelöschte Dateien unter Linux wiederherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!