|
|
作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的
3 y" N* ~6 Y, C2 \1 u4 v1 H" B1 y$ f% f
9 |5 [1 q5 v$ J6 `; \$ e8 Z6 o2 J
( \5 y' \7 j' y一、用运SecureCRT远程对操作系统上,查看一下当前系统版本号,及文件系统格式: N7 R% s2 M; E; a
+ ^' }2 ]! R1 J, i- n2 j! N3 T- U7 N* \4 P% ]
' v' U8 h) U$ x' Z! V3 d0 W @
5 r1 {; V2 H$ F1 M- ^0 V2 [; p. A" H. x5 M2 S- n8 a0 _- k; g
二、为方便本次实验,我们新创建一文件。5 s0 z" V" @0 T" b
3 u" i: L) y6 g. I4 c& K- t/ x7 F# {3 M0 E
0 \' a* A% ?" }
: u1 E% q" G1 {% K1 `
* q+ l! n1 z; ~2 i
三、执行删除操作0 F9 L9 _4 @0 O( ?; W* [
! ]% {1 e0 A# h: B0 V# ?
! S* S4 C( h2 d4 b( I/ ?
! @6 M+ T) g, }- R2 X0 t ]
rm -rf web_1.txt) N) b' z) [$ ^9 O
( V4 {- }- L% ?0 a# Y' A# P6 S6 K6 q
; ]# A3 K) O/ L* ^四、运用,系统自还工具debugfs来修复
* w& q: M7 g$ b, t, b
+ Q! X3 _# K( N$ W/ A: u. k$ q4 H4 q; h2 d. C9 e! Q
4 x+ g% k- {! B: N7 ]+ u
% F" X4 o# {- q# b* |) A
" O. ]4 q& f5 R) ~- G- A; b" C
+ M: y; l. t# {4 b% |# ], w
1 B7 G" N4 _- r$ ~, n% }/ v* y8 |五、打开,刚刚被删除文件所在的分区. g% W4 K0 E p& u8 |6 V3 K
, n* a7 a* _. ?8 N" w* z
*****************************************************************************************5 B e+ D9 {3 [! @9 m
7 \' D8 I3 u1 n2 k- K
查看目录在分区; \- M! d6 l) L6 L. E1 K! a) o b( |7 ^
9 S. @+ q1 G2 w4 b
: L) n7 c. V' Y4 `
: Y/ v, S' U1 k8 i' E" r+ H! s
* e- b6 K f7 O; J6 P
Z7 r' i' \; Y* U/ L/ D! }******************************************************************************************
$ N2 W, E3 g `+ {4 d, ]. S, x
/ U% g+ f- P# d3 g9 m1 w/ s
" ~+ [; R- B7 v0 _( X/ b# Y% g# V" }1 K3 ]) a6 {: z
9 y; l! N e' Y2 s6 r0 F4 u
. W2 P" r9 X& T& \8 }1 X R7 a8 x9 n
) _. E6 y/ C2 V" D- C- t. f0 d3 T+ R2 h/ p
六、用ls 加-d参数显示刚刚删除文件所在的目录3 Q5 R5 b" G$ s: c3 i i/ o
% d( V" s' z) b' @7 }0 h6 y
' d3 Y, M% M: g4 T5 F& j
9 f6 N& w8 d* O# M, Q/ T
) t7 z8 J1 v4 A$ j1 O
, d7 g8 y$ N" t; x. B1 v
" J: b8 x3 I- X; B0 g, d
' _, h# m( j4 h七、显示有<>尖括号的就是我们要找的文件Inode 号 执行logdump –I <19662057>
6 y, M# `0 b0 U! E5 J
' c. X& n7 d* T$ {' U' A# s& f2 S3 y! Y0 W) g
% I; u/ d4 a' Z
5 |1 N( ~5 S, @6 d" k
( V5 N! r& m( ]1 z
. W( ~) B N4 X+ n/ ]/ F
# ?( b( _! L1 o8 J" I& a" M, w6 @4 R) q7 ?
, d H( {/ i& h* M) t" r八,执行完命令后,显示了一屏信息,我们需要的是下面这一行,并且要记住,后面的值
3 X+ I; M5 ^& a0 }/ w% ` B! n- A2 k. N, i" f
( t% Z4 `/ v8 x8 D; @6 ?; T6 X
) @6 r; k0 h0 v- E! ]4 e" {
9 j( a1 h" K4 A5 _4 ^0 n' y
; j5 c7 a" E" c& N
$ \0 [, k+ K" E, c
: q- [# \( h9 F/ ]
6 ]9 h+ j" y e
& g4 L9 @5 i. M" N1 v( \/ S8 L! h- [0 M/ D8 h: M+ u
/ l2 R/ w+ m5 e* y [( [九、退出dedugfs8 }8 z# a A( Q! [* {
* t5 t$ H2 |: G% ]7 f
qiut: s N3 v: H" u. E
6 U3 _3 e* x+ q
" |" n. x5 A9 j! D) q E+ ]2 P" V* h# c' j: t/ I& h/ M* [' ~. |: R
十,执行如下命令" u k: z. |: [8 O
5 N3 s9 |2 @( {+ r5 G; _2 f
( I3 T: Q7 a* J# x! K4 i, E! f- [( r
bs与下图offset值一致,skip与block值一致/ W. U; a' A+ N5 _9 M! x% \
1 A2 L& w. {# i
% c8 R: a) q5 A( Z! t" k' W2 P+ r
2 a; p" w7 h" O2 S* J8 a( H; }# A
: s: S! k% N7 F5 |0 l- M) ?$ k5 ]+ }5 b/ {+ B
十一,以上结果表示恢复成功我们看下/opt/wb_1目录下到底有没有
4 u$ P! |% D$ L- S, Z8 ~% c5 W0 @% f) M6 Y
; r/ h! o6 O5 q" K
$ t+ k7 N' d3 a L- x3 q! V2 }3 G: o6 }1 D) c
1 ~1 t# g* c3 k- T0 d) F5 r
$ U; \0 Q5 j9 f: P1 ? N* _; }( O( z" Q* k; d% ^
恢复成功!
* o0 \* E$ d! F8 e6 D$ ?& M
5 L. d' s4 Y9 { ^恢复文件操作( j" n, q, @% p& m: L
环境:5 o2 n6 |: R) l
在/mnt下有一些文件,其中一个文件train.less正在被查看,然后另一个终端将其删除
! m/ i6 \) w* i: Z- k( W$ ~! ~: i# ~0 `) z
【1】lsof查看
& `- r, U% E Y- P. g0 d: I/ \5 C6 k8 l7 a* p2 L- _2 a" _
查看正在使用删除文件的进程号
* `" T( D' j! w, d& R, M: }+ r6 I6 c" U7 \$ |
lsof /mnt
( V/ N4 R6 I t0 d( q1
! z: q- q% o% h$ E* g$ G/ f
& J* @5 h* y- }
7 Z% l8 [( M$ f; w* ?2 g& g# a( }" b q) [6 M& a1 L
2 L8 E$ J7 s4 c) @9 z! y e
【2】恢复1 L/ _* q h$ Q# E: W
+ \. F- y, k Z' y6 c; |切换到/proc下,删除文件对应的进程的pid下的文件描述符中的目录中;将对应的内容重定向或cp到其他文件中5 m8 f7 ~+ O% q% |) }7 b
重点关注:PID 与 FD0 ?' o+ W; L+ U- V t% }& F) [, L% ` w
7 h4 w; i; k1 ~
cd /proc/31284/fd/, w7 i" }; s% q9 t6 [4 q* C0 w
cat 4 > /mnt/ferris_train.less
: ~7 {1 K5 B5 b5 M J5 R1+ U& D; A( M1 e9 H x
2
y8 W) g4 W2 u% K; v
G# s0 W6 |& l0 v h& @. H0 [& r
, h0 @6 l# ?& W* V% S% a7 x7 J. q
! q M' w, t0 E' K8 q0 x9 {2 K- J: G6 X _+ t( R4 S; U9 n' b
! R" ?5 Q b5 p. v/ w, n7 T/ T/ `
, F ~, o$ j9 O3 Y4 Q4 R8 H% ~( uextundelete/ {) l+ s7 f+ _7 I
原理:
* R5 ^& K" p" x3 K* c7 o! h; b9 q使用存储在分区日志中的信息,尝试恢复已从ext3或ext4的分区中删除的文件/ X, R8 l* b. Y- Z/ n$ h
7 q- B- W* D# @& ~8 _* B6 h0 |优点:
" W+ y. J- ~# A& i* [" Z相比于ext3grep只能恢复ext3文件系统的文件,其适用范围更广,恢复速度更快' I8 G B: b; y( F/ }
0 D4 m `8 W y' R4 V
extundelete官方地址(官方文档):2 B0 \+ D* v5 `
http://extundelete.sourceforge.net; K2 `& u1 R5 | x2 m$ V
V& ^4 h6 @) j6 m2 q, {extundelete下载地址:* v( g) S+ D0 w I% R
http://downloads.sourceforge.net ... elete-0.2.4.tar.bz2
, Q( \$ ^. ?% x7 a/ E% q(最新版本的extundelete是0.2.4,于2013年1月发布)
) n' q1 `- P6 j' Y4 H
) v K3 p2 T4 T; v8 U注意:: Z7 y$ Y/ _) Q+ r
( \* q8 V/ K1 x: u8 G
在数据删除之后,要卸载被删除数据所在的磁盘或是分区
! B! A$ ^4 P2 w2 m
6 C9 F) \/ X1 P4 Q% E如果是系统根分区遭到误删除,就要进入单用户模式,将根分区以只读的方式挂载,尽可能避免数据被覆盖
" v+ G$ z- M! a3 L6 @, l* w( s/ T# l* i; o/ h9 \0 f
数据被覆盖后无法找回" W8 U" ]& t: u& {7 W9 z( T
. |. Z2 L n* ~% y- b$ k" _恢复仍有一定的机率失败,平时应对重要数据作备份,小心使用rm2 Z# V2 \! H# L b. U) `9 P# \* _
$ U1 v4 }; i4 C Z8 ^1 A8 h安装8 ]9 C. z& c% D! L: H* Y {
<1>依赖安装5 A* ^, x3 P5 b ?# A/ l. E
/ n( Z3 R4 s: O+ F0 g
centos安装操作+ G' B" i8 [0 s) s: f
yum install e2fsprogs-devel e2fsprogs* gcc*- B j1 u( j X
0 d1 D% Q' U5 _$ f, r; O1 F5 Bubuntu安装操作
3 b {1 i1 i' {$ aapt-get install build-essential e2fslibs-dev e2fslibs-dev
% e( s3 W9 @/ Y9 `$ z1 v10 y) J8 j0 ~ n8 u# A
2; Q: ?2 _% q" s7 e5 o( f' t
3. x: l1 B! o _2 t _6 x( O
41 E+ G2 A9 \& y; L$ }& k. E8 P
5$ m2 |' R( K7 J2 p& S* j1 O) z
<2>编译安装/ l1 O4 y1 \% ~4 x/ _$ w9 N, d
6 |+ u/ w" A2 xwget http://downloads.sourceforge.net ... elete-0.2.4.tar.bz2
2 V! ]5 d: @3 T* M0 D" n! O( Gtar xf extundelete-0.2.4.tar.bz27 P# z! O, B8 C, S
cd extundelete-0.2.4
) f+ N$ W4 ?/ h0 Q2 E' F./configure
) C0 P4 {' ]; V" I# n4 O: rmake& ^8 [- F0 v8 |4 H4 f
make install
0 G0 ^/ D7 R: r/ D2 W4 j5 U1
. }* B/ t+ B) D% |+ B5 ~9 n8 y! g; b23 K7 e$ P( N0 m4 v9 ~
3
# i6 T7 d2 ` q2 i/ k% G2 l- Q4
! |) p# ?( N! Y+ k8 B5+ L1 U" h+ x6 C0 |
6, ?$ `7 x2 G5 n: L6 D. i5 ^: X
& X0 Q0 K) t9 ^& S) c4 i) Z
7 g7 h' m2 [: }9 S0 g. z* g$ B0 Ocd /root/extundelete-0.2.4/src \+ K3 f: x- A, M6 m7 C5 X
1' u1 O* J$ {5 n, s9 D
; n. L$ }+ Q/ p0 X8 O+ V/ ~% D% [. P7 B8 H% G6 ]# B: {! L$ y
extundelete -v ' a5 S6 T- E7 D# y
1
5 l7 i4 g! h3 h3 V; v+ y
5 I% u, I2 f+ [1 H& i2 V- n5 W8 a* ~* [% ]
执行make命令会在src目录下生成extundelete可执行文件,可在此直接执行恢复命令。
2 ]0 c+ \1 z% M5 h. b+ i. s执行make install会将程序安装在/usr/local/bin/下
\8 l& ~7 q6 q4 l) b" v. R' F9 P+ Q
; c1 @4 E+ |9 s$ X4 o恢复文件操作
4 r- k3 h, w7 o5 u+ m; X7 d执行extundelete命令的当前目录必须是可写的。
7 O) V* f/ o1 A8 \. y/ e: _
$ e4 T7 V+ b1 {! H# j<1>查看要恢复文件的分区的文件系统
5 u5 L$ c* T; @/ a' M7 p0 R/ p( x" I) l2 C3 w" ~, f( m
df -Th
# ~( o/ B6 U7 r) h6 j7 C1 L7 m1
5 L7 J M$ w8 I, @
. k! K8 v: Y/ u) `9 a/ E2 G5 z
% n9 K8 r T* k3 Q<2>对要恢复文件的分区解除挂载! M" h8 N& m! O$ Z
& ?0 v) b- E* A/ l# l$ }
umount /mnt
: W1 }& Q; A( s) B& _( q6 G12 J6 @3 H I% i8 Y" A, o9 a
4 o- p9 {8 w8 Y4 K0 @9 l1 J
2 }! G- C; S, \! b0 J% D<3>查看可以恢复的数据, G7 `. w z, K/ O' c
# k9 t: {* J6 J4 K. t
指定误删文件的分区进行查找% ^8 m% V- k: G. S2 D' b/ P
最后一列标记为Deleted的文件,即为删除了的文件
) K4 f1 S) K. ?) V7 Y, ?* f, _7 f% T* w
extundelete /dev/vdb1 --inode 2 (根分区的inode值是2)
0 H! V9 X8 B3 X1$ B/ H' u# C, X- Y5 h6 K
7 [$ c8 G9 D/ q; e9 g" l7 H3 `" g: g: i l4 Q
<4>恢复单个目录5 q8 r6 f# x& P0 y
+ q( ?% N' j0 {. D
指定要恢复的目录名- g+ N! \5 p R% w
如果是空目录,则不会恢复
) ~# E* a$ G- y1 `* \ F$ m5 i4 Q- w$ ^5 M k$ s5 I
extundelete /dev/vdb1 --restore-directory ferris& E& B5 ^ \/ P- o. c
13 V: u2 o, Z/ g" [. s
% \4 y9 F1 s5 W0 a+ Z
) |" E0 F5 {. J. x% k. `6 Q+ z3 \* z5 U) a7 Q3 x
( [+ W" b N0 S- m& u当执行恢复文件的命令后,会在执行命令的当前的目录下生成RECOVERED_FILES目录,恢复的文件都会放入此目录中。如未生成目录,即为失败。
0 B# i% s8 d0 k. Y2 P
5 e& s3 i8 |9 p<5>恢复单个文件
( I: D; I8 y2 I3 h9 |+ _/ O
% o6 l8 M5 B" ^6 e' _指定要恢复的文件名8 D: c6 i/ F' N! h; S( |, K- e% l
如果几k大小的小文件,有很大几率恢复失败
8 e& p$ Z& k$ X) G/ l
) |- F3 r5 _! N; s& M! e+ W9 Wextundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz* Z0 B% l, K* y# c$ Q/ ?" L4 {
1
- R2 m" K% A6 R' O' {2 E9 {8 w) } z. _& x9 F" T* P( Z
- O7 F7 e- r$ [7 | r( L<6>恢复全部删除的文件
+ [* D0 `. q$ K e& S' }) J
( n% ]# E% t' m: s无需指定文件名或目录名,恢复全部删除的数据
- f; v2 G7 G! Q- b0 l' y5 t/ G8 u3 y* O/ Q
extundelete /dev/vdb1 --restore-all
* S, N6 j% h+ T/ ^+ A1
! H8 v4 s M. R- A' n8 q) X4 F; Y! e/ E$ n' O# |2 z
————————————————
& ?% q/ I3 `+ l+ x2 t; ^5 D) a+ g" j5 [+ [. ^( i
- \5 O$ F8 c3 @: Q! u7 U
|
|