目錄
- 一.關于ext4檔案系統
- 二.linux檔案系統的組成(inode,block)
- 三.問題:為什么洗掉比復制快?
- 四.問題:當我們誤洗掉檔案后,第一件事要做什么?
- 五.準備測驗環境
- 六.安裝extundelet
- 七.恢復誤洗掉檔案
一.關于ext4檔案系統
? EXT4是第四代擴展檔案系統(英語:Fourth extended filesystem,縮寫為 ext4)是Linux系統下的日志檔案系統,是ext3檔案系統的
后繼版本,Ext4是由Ext3的維護者Theodore Tso領導的開發團隊實作的,相比于ext3檔案系統,ext4檔案系統支持更大的檔案系統和更
大的檔案,更多的子目錄數量,更多的塊和i-節點數量等等,
? 對于ext4檔案系統上誤洗掉檔案,可以使用extundelete恢復,對于ext3檔案系統,則使用ext3grep恢復誤洗掉的檔案,在windows上
恢復誤洗掉的檔案可以使用final data v2.0 漢化版和easyrecovery,
二.linux檔案系統的組成(inode,block)
? Linux檔案系統由三部分組成:檔案名,inode,block,inode存放檔案元資料資訊,block是真正存放資料的地方,windows也由這三部分組成,
? 每個檔案都有一個inode號,可以使用ls -i和stat查看,
[root@node5 ~]# ls -i test.txt
34566868 test.txt
[root@node5 ~]# stat test.txt
File: ‘test.txt’
Size: 12 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 34566868 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-10 17:30:12.532654117 +0800
Modify: 2020-10-10 17:30:12.532654117 +0800
Change: 2020-10-10 17:30:12.533654118 +0800
Birth: -
三.問題:為什么洗掉比復制快?
? 因為這只是邏輯洗掉,洗掉的時候并不是將整個資料都真正洗掉了,它只是將檔案串列設定為可以寫入狀態,在有新資料要寫入時,直
接覆寫原來的資料,可以使用如下圖表示:


四.問題:當我們誤洗掉檔案后,第一件事要做什么?
? 由于在linux中,洗掉只是邏輯洗掉,此時我們要避免誤洗掉的檔案內容被新寫入的檔案覆寫,可以卸載需要恢復檔案的磁區或者以只
讀的方式掛載,
? 如果在根下洗掉檔案,想恢復資料,應該怎么辦?
? 方法1: 立即斷電,然后把磁盤以只讀方式,掛載到另一個電腦中進行恢復,
? 方法2:把extundelete在虛擬機上(虛擬機系統要和服務器版本一樣),提前安裝好后再復制到U盤中,把U盤插入服務器,恢復
時,恢復的檔案要保存到U盤中,(不要讓恢復的資料寫到/下,那樣會覆寫之前洗掉的檔案),
五.準備測驗環境
1.首先去https://sourceforge.net/projects/extundelete/這個網站下載extundelete-0.2.4.tar.bz2軟體,值得一提的是http://sourceforge.net/ 是開源軟體發布中心,好多軟體可以去這里下載,
2.可以添加一塊硬碟,或者在現有硬碟的基礎上進行磁區,磁盤磁區大致步驟是fdisk進行磁區,創建掛載點,格式化成ext4檔案系統,最
后掛載,具體磁盤磁區可以查看磁盤磁區工具章節,
3.準備測驗檔案,洗掉測驗檔案,卸載磁區
#因為/dev/sdb5是ext4檔案系統,所以在/sdb5目錄下創建測驗檔案
[root@node5 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/centos-root xfs 17G 11G 6.2G 64% /
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 8.0K 3.9G 1% /dev/shm
tmpfs tmpfs 3.9G 8.8M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 125M 890M 13% /boot
/dev/sdb1 xfs 47M 2.7M 45M 6% /sdb1
/dev/sdb5 ext4 190M 1.6M 175M 1% /sdb5
/dev/sdb6 xfs 295M 16M 280M 6% /sdb6
tmpfs tmpfs 785M 0 785M 0% /run/user/0
[root@node5 ~]# cd /sdb5
[root@node5 sdb5]# pwd
/sdb5
[root@node5 sdb5]# ls
lost+found
#復制一些檔案當做測驗檔案
[root@node5 sdb5]# cp /etc/passwd ./
[root@node5 sdb5]# cp /etc/hosts ./
[root@node5 sdb5]# cp -r /boot/grub2 ./
[root@node5 sdb5]# mkdir -p a/b/c/d
[root@node5 sdb5]# touch a/b/test.txt
[root@node5 sdb5]# tree ./ -L 2
./
├── a
│ └── b
├── grub2
│ ├── device.map
│ ├── fonts
│ ├── grub.cfg
│ ├── grubenv
│ ├── i386-pc
│ └── locale
├── hosts
├── lost+found
└── passwd
7 directories, 5 files
[root@node5 sdb5]# ls
a grub2 hosts lost+found passwd
#洗掉測驗檔案
[root@node5 sdb5]# rm -rf a grub2 hosts passwd
[root@node5 sdb5]# ls
lost+found
#卸載磁區,避免寫入新資料把原先資料覆寫
[root@node5 sdb5]# cd
[root@node5 ~]# umount /sdb5
六.安裝extundelet
1.由于extundelete-0.2.4.tar.bz2是原始碼包,所以安裝extundelete使用原始碼安裝的方式,
2.原始碼編譯安裝extundelete
[root@node5 ~]# ls extundelete*
extundelete-0.2.4.tar.bz2
#解壓縮安裝包
[root@node5 ~]# tar jxvf extundelete-0.2.4.tar.bz2
[root@node5 ~]# ls
201810240430234009.pcm apache-tomcat-8.0.51.tar.gz extundelete-0.2.4 idea快捷鍵.txt linux-4.19.77.tar qemu-4.1.0 test2.txt
a busybox-1.24.2 extundelete-0.2.4.tar.bz2 iu.jpg linux腳本.sh qemu-4.1.0.tar test.txt
aaa.txt busybox-1.24.2.tar.bz2 glibc-aarch64-linux-gnu-2.24-2.sdl7.2.noarch.rpm jdk-8u172-linux-x64.tar.gz nginx-1.8.0.tar.gz rootfs 測驗亂碼檔案.txt
anaconda-ks.cfg ceshi.txt glibc-aarch64-linux-gnu-devel-2.24-2.sdl7.2.noarch.rpm linux-4.19.77 qemu-2.11.0.tar.xz telnet-0.17-64.el7.x86_64.rpm
[root@node5 ~]# cd extundelete-0.2.4
[root@node5 extundelete-0.2.4]# pwd
/root/extundelete-0.2.4
[root@node5 extundelete-0.2.4]# ls
acinclude.m4 aclocal.m4 autogen.sh config.h.in configure configure.ac depcomp install-sh LICENSE Makefile.am Makefile.in missing README src
#安裝依賴包
[root@node5 extundelete-0.2.4]# yum -y install e2fsprogs-devel
#檢查系統安裝環境
[root@node5 extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk
#$?回傳上一個命令的回傳值,回傳0就是正確
[root@node5 extundelete-0.2.4]# echo $?
0
#編譯,把源代碼編譯成可執行的二進制檔案,-j 4表示使用4個行程同時進行編譯,提升編譯速度或使用4核CPU同時編譯
[root@node5 extundelete-0.2.4]# make -j 4
make -s all-recursive
Making all in src
extundelete.cc: In function ‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’:
extundelete.cc:1272:29: warning: narrowing conversion of ‘search_flags’ from ‘int’ to ‘ext2_ino_t {aka unsigned int}’ inside { } [-Wnarrowing]
buf, match_name2, priv, 0};
^
[root@node5 extundelete-0.2.4]# echo $?
0
#編譯安裝
[root@node5 extundelete-0.2.4]# make install
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
[root@node5 extundelete-0.2.4]# echo $?
0
#可以看到已經存在extundelete這個可執行檔案
[root@node5 extundelete-0.2.4]# which extundelete
/usr/local/bin/extundelete
#擴展install和cp有什么區別?
#install復制時可以指定權限,但是cp不可以
#例如
[root@node5 ~]# install -m 777 /bin/find /opt/a.sh
[root@node5 ~]# ll /opt/
七.恢復誤洗掉檔案
1.恢復誤洗掉檔案有四種方法:
- ? 通過inode號恢復資料
- ? 通過檔案名恢復資料
- ? 恢復指定目錄
- ? 恢復所有的檔案
2.創建一個用于存放恢復資料的檔案夾,通過inode結點查看被洗掉的檔案名字,
[root@node5 ~]# pwd
/root
[root@node5 ~]# mkdir reback
[root@node5 ~]# cd reback/
[root@node5 reback]# pwd
/root/reback
#通過inode結點查看被洗掉的檔案名字
#擴展:ext4檔案系統的磁區根目錄的inode值為2,xfs磁區根目錄的inode值為64
[root@node5 reback]# extundelete /dev/sdb5 --inode 2
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 25 groups loaded.
Group: 0
Contents of inode 2:
0000 | ed 41 00 00 00 04 00 00 78 fe 83 5f 76 fe 83 5f | .A......x.._v.._
0010 | 76 fe 83 5f 00 00 00 00 00 00 03 00 02 00 00 00 | v.._............
0020 | 00 00 08 00 08 00 00 00 0a f3 01 00 04 00 00 00 | ................
0030 | 00 00 00 00 00 00 00 00 01 00 00 00 24 11 00 00 | ............$...
0040 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0050 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0060 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
0070 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................
Inode is Allocated
File mode: 16877
Low 16 bits of Owner Uid: 0
Size in bytes: 1024
Access time: 1602485880
eation time: 1602485878
▽odification time: 1602485878
Deletion Time: 0
Low 16 bits of Group Id: 0
Links count: 3
Blocks count: 2
File flags: 524288
File version (for NFS): 0
File ACL: 0
Directory ACL: 0
Fragment address: 0
Direct blocks: 127754, 4, 0, 0, 1, 4388, 0, 0, 0, 0, 0, 0
Indirect block: 0
Double indirect block: 0
Triple indirect block: 0
File name | Inode number | Deleted status
. 2
.. 2
lost+found 11
passwd 12 Deleted
hosts 13 Deleted
grub2 14 Deleted
a 324 Deleted
3.通過inode號恢復指定資料
[root@node5 reback]# extundelete /dev/sdb5 --restore-inode 12
4.通過檔案名恢復指定資料
[root@node5 reback]# extundelete /dev/sdb5 --restore-file hosts
5.恢復指定目錄的所有檔案
[root@node5 reback]# extundelete /dev/sdb5 --restore-directory a
6.恢復所有檔案
[root@node5 reback]# extundelete /dev/sdb5 --restore-all
7.注意:extundelete在恢復檔案的時候不能自動創建空檔案和空目錄,例如

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/209227.html
標籤:其他
