Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Wie kann ich gelöschte Dateien unter Linux wiederherstellen?

Wie kann ich gelöschte Dateien unter Linux wiederherstellen?

青灯夜游
青灯夜游Original
2020-04-20 16:12:2319238Durchsuche

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.

Wie kann ich gelöschte Dateien unter Linux wiederherstellen?

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

Wiederherstellungsvorgang:

[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
总用量 0

In 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

  • Installation des Extunelete-Tools

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

Wenn dieser Fehler gemeldet wird

[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
./configure

Wenn 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-develWenn 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-devZuletzt

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. makemake install

Nach versehentlich gelöschten Dateien suchen:

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 -lhMount in das Dateisystem /dev/sdb1.

umounten Sie unsere Mount-Diskette

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             Deleted

Entdecken 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Was ist Linux-Software?Nächster Artikel:Was ist Linux-Software?