溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)恢復(fù)誤刪文件的具體解決方案是什么

發(fā)布時間:2022-01-26 09:37:10 來源:億速云 閱讀:414 作者:kk 欄目:開發(fā)技術(shù)

本篇文章為大家展示了Linux系統(tǒng)恢復(fù)誤刪文件的具體解決方案是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

Linux系統(tǒng)并不像windows系統(tǒng)有回收站的機(jī)制,當(dāng)我們不小心實(shí)用rm  rf誤刪文件或者目錄難道真的沒有辦法回復(fù)嗎?

下面以例子分別解說下兩種不同的誤刪還原方式:

誤刪除文件進(jìn)程還在的情況: 這種一般是有活動的進(jìn)程存在持續(xù)標(biāo)準(zhǔn)輸入或輸出,到時文件被刪除后,進(jìn)程PID依舊存在。這也是有些服務(wù)器刪除一些文件但是磁盤不釋放的原因。

打開一個終端對一個測試文件做cat追加操作:

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

打開另外一個終端查看這個文件可以清楚看到內(nèi)容:

 [root@docking ~]# ls
 deletefile.txt
 [root@docking ~]# cat deletefile.txt
 This is DeleteFile test.
 Add SomeLine into deletefile for fun.

此時,刪除文件rm -f deletefile.txt

 [root@docking ~]# rm -f deletefile.txt
 [root@docking ~]# ls
 #命令查看這個目錄,文件已經(jīng)不存在了,那么現(xiàn)在我們將其恢復(fù)出來。
  • lsof查看刪除的文件進(jìn)程是否還存在。

  • 如沒有安裝請自行yum install lsof或者apt-get install lsof  1.類似這種情況,我們可以先lsof查看刪除的文件 是否還在

 [root@docking ~]# lsof | grep deletefile
 cat       21796          root    1w      REG              253,1        63     138860 /root/deletefile.txt (deleted)

2.恢復(fù)cp /proc/pid/fd/1 /指定目錄/文件名 進(jìn)入 進(jìn)程目錄,一般是進(jìn)入/proc/pid/fd/,針對當(dāng)前情況:

 [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

恢復(fù)操作:

 [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.恢復(fù)完成。


誤刪除的文件進(jìn)程已經(jīng)不存在,借助于工具還原 準(zhǔn)備一些文件目錄

 #準(zhǔn)備一份掛載的盤
 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

最后準(zhǔn)備的目錄結(jié)構(gòu)如下:

 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

現(xiàn)在開始刪除該目錄rm -rf backuptest/

 taroballs@taroballs-PC:/media/taroballs/taroballs$ rm -rf backuptest/
 taroballs@taroballs-PC:/media/taroballs/taroballs$  ls  -l
 總用量 0

這種情況一般是沒有守護(hù)進(jìn)行或者后臺進(jìn)程對其持續(xù)輸入,所以刪除就真的刪除了。lsof也看不到,故需要采用工具進(jìn)行恢復(fù)。


現(xiàn)在開始進(jìn)行誤刪除文件的恢復(fù)。

我們采用的工具是extundelete第三方工具?;謴?fù)步驟以及注意事項(xiàng)如下:

  • 停止對當(dāng)前分區(qū)做任何操作,防止inode被覆蓋。inode被覆蓋基本就告別恢復(fù)了。

  • 夸張一點(diǎn)講,比如停止所在分區(qū)的服務(wù),卸載目錄所在的設(shè)備,有必要的情況下都可以斷網(wǎng)。

  • 通過dd命令對 當(dāng)前分區(qū)進(jìn)行備份,防止第三方軟件恢復(fù)失敗導(dǎo)致數(shù)據(jù)丟失。

  • 適合數(shù)據(jù)非常重要的情況,這里是例子,所以就沒有備份,如備份可以考慮如下方式:dd if=/path/filename of=/dev/vdc1

  • 通過umount命令,對當(dāng)前設(shè)備分區(qū)卸載?;蛘遞user 命令umount /dev/vdb1

  • 如果提示設(shè)備busy,可以用fuser命令強(qiáng)制卸載:fuser -m -v -i -k ./

  • 下載第三方工具extundelete安裝,搜索誤刪除的文件進(jìn)行還原


extundelete工具安裝

  • extundelete下載地址:http://extundelete.sourceforge.net/

 wget https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

解壓該文件tar jxvf extundelete-0.2.4.tar.bz2

若報(bào)這種錯誤

 [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

則使用yum -y install bzip2進(jìn)行解決

 [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

若這步驟報(bào)錯

 [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 gcc-c++解決.

若執(zhí)行上一步仍然報(bào)錯,

 [root@docking extundelete-0.2.4]# ./configure
 Configuring extundelete 0.2.4
 configure: error: Can't find ext2fs library

則使用yum -y install e2fsprogs e2fsprogs-devel來解決。  #Ubuntu的解決辦法為sudo apt-get install e2fslibs-dev e2fslibs-dev

不出意外的話到這里應(yīng)該configure能夠順利完成.

 [root@docking extundelete-0.2.4]# ./configure
 Configuring extundelete 0.2.4
 Writing generated files to disk
 [root@docking extundelete-0.2.4]#

最后make然后 make install

 [root@docking extundelete-0.2.4]# make
 make -s all-recursive
 Making all in src
 extundelete.cc: 在函數(shù)‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’中:
 extundelete.cc:1272:29: 警告:在 {} 內(nèi)將‘search_flags’從‘int’轉(zhuǎn)換為較窄的類型‘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安裝完成.


掃描誤刪除的文件:

使用df -lh查看掛載:

 taroballs@taroballs-PC:~$ df -lh
 文件系統(tǒng)        容量  已用  可用 已用% 掛載點(diǎn)
 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$

可以看到,我們的目錄/media/taroballs/taroballs 掛載到/dev/sdb1   這個文件系統(tǒng)中.


umount我們的掛載盤 比如:

 taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1
 /dev/sdb1       6.8G  4.1G  2.8G   60% /media/taroballs/taroballs

umount這個目錄

 taroballs@taroballs-PC:~$ umount /media/taroballs/taroballs
 taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1
 taroballs@taroballs-PC:~$
 #記得刪除一定要后umount哦,不然二次寫入誰也幫不了你呢。

通過inode節(jié)點(diǎn)恢復(fù)

 taroballs@taroballs-PC:~$ mkdir recovertest
 taroballs@taroballs-PC:~$ cd recovertest/
 taroballs@taroballs-PC:~/recovertest$

執(zhí)行恢復(fù)extundelete /dev/sdb1 --inode 2

 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

通過掃描發(fā)現(xiàn)了我們刪除的文件夾,現(xiàn)在執(zhí)行恢復(fù)操作。 (1)恢復(fù)單一文件tmppasswd

 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

恢復(fù)文件是放到了當(dāng)前目錄RECOVERED_FILES。 查看恢復(fù)的文件:

 taroballs@taroballs-PC:~/recovertest$ cat tmppasswd
 tcpdump:x:172:72::/:/sbin/nologin

(2)恢復(fù)目錄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)恢復(fù)所有

 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)恢復(fù)指定inode

 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
 #注意恢復(fù)inode的時候,恢復(fù) 出來的文件名和之前不一樣,需要單獨(dú)進(jìn)行改名。

最后附上extundelete的用法:

$ 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有哪些版本

Linux的版本有:Deepin、UbuntuKylin、Manjaro、LinuxMint、Ubuntu等版本。其中Deepin是國內(nèi)發(fā)展最好的Linux發(fā)行版之一;UbuntuKylin是基于Ubuntu的衍生發(fā)行版;Manjaro是基于Arch的Linux發(fā)行版;LinuxMint默認(rèn)的Cinnamon桌面類似Windows XP簡單易用;Ubuntu則是以桌面應(yīng)用為主的Linux操作系統(tǒng)。

上述內(nèi)容就是Linux系統(tǒng)恢復(fù)誤刪文件的具體解決方案是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI