|
|
作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的9 d3 q. {- s# I2 }1 w& T
& i1 ]7 v$ d, R' Q
2 j; Y X( }! T ?
6 A C0 _3 t! _1 }/ c! D% T一、用运SecureCRT远程对操作系统上,查看一下当前系统版本号,及文件系统格式. H O0 A1 @( d! W2 _
' }2 n- M$ l0 }8 v2 B1 C O6 L6 e+ ]+ q
" ^7 d$ [ ]# U6 ~4 ]& H
/ ?3 I' N# e1 D, O5 S# ?/ v
$ W# m+ ]2 P( g' t8 O' B
二、为方便本次实验,我们新创建一文件。 s2 U) g, z( e5 k/ |) S2 k
" W1 ?8 c2 E' s' c B% P" F2 s7 a3 y( R# c6 d0 g2 f
2 s y: q6 t& ^( f- X$ e3 n) i5 [
. V: C6 ~0 \! h8 G( r& V) K+ S
7 A0 ]% Q+ a0 f! Z三、执行删除操作
% M6 B2 [8 F. W3 A! ?# t! Y; w( d: g1 P% d# U
. M* W* q& H9 G, v. _0 B0 }: F
: A# a- K1 F1 T) Orm -rf web_1.txt
" r; \6 Q; O) [ b- y% o1 S6 D8 L! J7 w! e
3 q0 r! T! d3 D& w9 S" | N, ^2 S: b3 `9 X
8 s7 r3 w' \, H' _& i& p6 U四、运用,系统自还工具debugfs来修复2 B' S8 O/ F& ?7 z; M9 i. B, }
) ]3 \$ t" N6 t5 s5 d7 R: v1 e; o% U/ c5 e' R+ E/ c0 v0 S5 ?. l
$ U3 Y0 P2 C/ [' U
( m9 V- e \- b# B5 f
@1 ^& L# Y1 i* ?. @ i1 n. \( |: F! [( v. s- e
4 E+ `* C3 y) @+ R( d
五、打开,刚刚被删除文件所在的分区
7 S7 ^. z5 ? @7 ^- H% R3 r9 C/ t* C3 i
*****************************************************************************************
$ Q0 S2 z2 B) b7 k6 j- a( w- X9 h$ _ m
1 C+ L+ M7 C& X; {1 S查看目录在分区3 t. V6 E, I0 v5 Y5 H
; q9 A3 |3 ] n) c' ?- d" f' r. g3 y
+ z+ @: A3 ?. j5 _ { M3 A- |. p, T2 E2 t5 Y: I9 \9 r/ T% W
- A6 ^: f: \# ^
& O7 B6 |. o* |- Z8 J) ^4 }3 n F******************************************************************************************
6 \, ]; [5 |# R) u) L
' D: ~) w" z) f
5 K3 Q# U0 [$ g7 c" P
% V" l1 J: p/ O& s
+ E# ] R) A6 E# \$ u. r
; N- J: H9 n5 g' `: O4 I) d
0 u# D2 w. z! C4 G' J( d: t( S2 `3 P- z
4 K6 D. K) \) V/ a$ P! h- f% D6 A
. A) e: ^8 h5 c1 c; o+ I2 f六、用ls 加-d参数显示刚刚删除文件所在的目录
0 o, G, y& K0 Y% y8 {6 L" w
' N. F( D" S/ N5 B+ ]5 p$ m" t& }
( ]' y8 z: X# W5 n6 [* ]+ ?7 d& n* ]/ {$ t
o ^- R/ a+ n# f V+ n
( C" L& u- b* U2 i
/ j J& k& e- o% V9 Q7 H) h5 \" |# D1 P% B( a
七、显示有<>尖括号的就是我们要找的文件Inode 号 执行logdump –I <19662057> e* H6 a1 C! o/ x
( T: C/ y) J) w- `
/ ]2 q: G. r `4 Y& _3 G/ H$ o: b1 B6 X
+ n0 F! ~6 X, K$ D4 E! J$ V) w9 K. \" g- [ F' R6 E W/ `4 q
8 ?2 o% L4 T. ] i8 ~; h/ b" |0 c; n. S" O3 d$ e
2 r$ U; E- p( m2 S2 [- k9 D8 B' b1 B: [; y7 q! g
八,执行完命令后,显示了一屏信息,我们需要的是下面这一行,并且要记住,后面的值
) D! p: M. p. |# |: E
/ ^9 ]* E- Y* K
6 Q! E" b r" M. ^- P7 N* O
* C* L" h; U+ P8 b
6 d. z/ L d, d3 \5 i
' L% c; q4 ~8 t9 b; m6 _. z o7 E$ B0 A' O" v. w& S8 {, K
% }* W3 ^6 G }& | U, [
. [8 r) a0 Q/ B/ z0 g7 D) d: r, E( J9 w% X
4 s! k) E/ ]9 X- Q" T1 Y9 L z2 w' n
5 u: v/ l" i2 i1 e9 ~* O九、退出dedugfs
8 Z9 H" D8 x Z6 M. K1 G7 Z: z1 b1 Z* J# X' P- M0 b+ {2 C
qiut
, A8 x" @+ q, V/ L
% J; G3 `7 [7 ]5 _
& E) ?; A& W( S
* N3 R! L/ Y. Q. J十,执行如下命令
0 f" t& I( D1 N* |! I6 s
/ g% Z& }: a9 J; N0 U7 } `! s4 ?! F
' d% z$ S9 t/ V1 P! T3 y
bs与下图offset值一致,skip与block值一致
4 Q6 i' {3 {9 R- W# _$ X" r" V$ T! w$ r
& T0 J- ? w& W2 J$ ~
8 Q2 B) u/ ^! A0 u5 |+ d% o9 T; U4 r
0 h) |0 N6 r3 S D7 l
9 U; z9 s: o N# b% v* ]& n
: ]! H8 _# ?( m; K Q: l十一,以上结果表示恢复成功我们看下/opt/wb_1目录下到底有没有! @/ c, `5 m1 [
. N$ y" R7 o& _) P1 Q/ P) m4 \5 q* m$ A' @0 r# ^
: L* `. w* }, P- t' _8 `- o
1 u* n# R: b$ {9 C; p- c2 T' I; v, [: N+ a2 ?/ v7 Z
' F8 h8 r6 M) f
, y$ K) f4 O# K9 P4 l9 n恢复成功!
+ f h: ?* `+ O0 H2 b/ z% Y Z7 Q/ _9 t1 P" ]0 e
恢复文件操作& U V; |/ Q! j( L# Q" @
环境:
5 ^- }) c* {" {在/mnt下有一些文件,其中一个文件train.less正在被查看,然后另一个终端将其删除" X9 ?! p R V! \
! d' G: L" W" d" T& D. ~【1】lsof查看, q9 C6 E. w2 g8 y# w
1 k% D/ x$ ]; [1 s0 W1 R查看正在使用删除文件的进程号+ Q H* ]9 G) n
! k" @/ ^% ^$ I" ]7 y! y5 K) Nlsof /mnt
+ b, S* z" P2 {% a: W& H/ C8 ]1& Z: {, j6 w% T" f- b8 N4 t
) L7 B6 Q- x: y: [7 ~5 X' k' A3 ?$ D8 p% ]; e T) n
3 e4 u( W" B( O/ R, j
" i; j, S7 u) J& {3 q' G【2】恢复
! u, @3 h/ y& z v0 I4 e0 ?+ S( @6 O. T5 k. \
切换到/proc下,删除文件对应的进程的pid下的文件描述符中的目录中;将对应的内容重定向或cp到其他文件中+ g; c, r) X# x: |$ x5 O% N
重点关注:PID 与 FD8 |& X/ ?8 d/ Z, E. G
, ]3 n' I/ w; @9 J) l. H
cd /proc/31284/fd/# j# f5 q5 m2 u7 [: X7 q& {
cat 4 > /mnt/ferris_train.less
) M7 m. |1 L. a8 G1
$ f' Z- N- X9 A2! g( |1 n/ F! N
0 v( j, H; I& {; R
% j; W- I/ f9 _; o
& q) R' r( `3 }! C" J7 h) R' C/ H" p0 x! A$ e, Y
# R6 H( w. _) q: h- \7 l- \
. V( B8 Q) T) j D% L
extundelete8 B/ J1 J* d- D7 t5 B! X* J) J
原理:
- z, g/ Q/ |/ m使用存储在分区日志中的信息,尝试恢复已从ext3或ext4的分区中删除的文件
9 ^6 Q! s5 h! k$ |2 V# D ^3 [
3 o: W/ X y* L4 @4 n! ~$ O% {优点:& T+ { B) j% ?% B+ o% `7 s& i9 U
相比于ext3grep只能恢复ext3文件系统的文件,其适用范围更广,恢复速度更快* s0 ]; Q; }. Z9 `
1 q, l) S1 T6 T8 g$ C7 Z
extundelete官方地址(官方文档):1 m, s3 P/ p2 }; a4 e7 P& k
http://extundelete.sourceforge.net+ T4 S; Z6 B# R/ X j7 ~, H
# m0 u" k$ T; O5 ~) M$ ^! Dextundelete下载地址:
7 r y# S. E6 Q0 g! o4 a shttp://downloads.sourceforge.net ... elete-0.2.4.tar.bz2
& k2 s7 ~5 {9 c) b( G! c6 V(最新版本的extundelete是0.2.4,于2013年1月发布)
6 F; R+ b0 b3 _( b+ D1 @: g7 ^2 z9 R2 v, q6 l6 [4 w$ I& q
注意:
" J$ N2 C! P: M6 B6 m# R. R2 V, v
* S3 J" S' s/ ^# n在数据删除之后,要卸载被删除数据所在的磁盘或是分区
" h1 t4 ]* U$ X2 e# p" u% V+ p& J, A$ G+ B4 L
如果是系统根分区遭到误删除,就要进入单用户模式,将根分区以只读的方式挂载,尽可能避免数据被覆盖% Z5 R% ?" F+ |9 t# ]3 S
( T- _" C4 Q/ O! S M8 n
数据被覆盖后无法找回& C1 ~) {: W* N3 w0 g" Q- N; U
; R# F ]: Y: P6 x
恢复仍有一定的机率失败,平时应对重要数据作备份,小心使用rm
6 l5 @) c( H0 ]! s9 M; ]& T' H6 P [/ n# p0 J
安装
. \! |' p. y& v3 S% [<1>依赖安装' @: v8 Z. P [0 Z, F! I2 v- p1 m
7 e% }# Q) L* \centos安装操作
) O) K8 g7 b6 q( Y: lyum install e2fsprogs-devel e2fsprogs* gcc*" L6 d. @! _0 G) D6 Q. e
% f0 V2 i1 U: V0 i4 O5 E. Eubuntu安装操作
7 M( w j( m' p7 oapt-get install build-essential e2fslibs-dev e2fslibs-dev- o, D# r' S6 F( D
1& x4 W, l% W. u- A
22 F2 B. C' @( u5 y2 g* L& D
3" ]" Y/ p7 X% b; `" F/ [ G7 j' B
4
* w# c8 I+ }2 d: N. c6 C5
! _ C+ w0 w3 h0 A& u6 f4 g3 C<2>编译安装) P2 R5 s. v; U9 @ m- B0 i
& M: k8 X7 |! v. i6 B0 Wwget http://downloads.sourceforge.net ... elete-0.2.4.tar.bz20 p! s+ T2 u. a0 T4 {
tar xf extundelete-0.2.4.tar.bz2. f& r3 b% W, P
cd extundelete-0.2.4 O% d# B+ Z8 q8 T" q
./configure: D' |3 f* `$ @% y9 B
make
5 s3 ?1 J& d$ d/ m3 jmake install( S, I, S% ~- Z. H
1
8 r" h' Z* u7 q" }9 M7 g2
# f( K3 o( i& m. [0 J+ t3
( C6 z T- k& v% S* J) u0 m4
6 E5 |5 n' N- U2 f/ X7 Q+ e3 R0 j$ j1 o5- Z2 A# R- {4 D# l. s
6' ^* O+ O3 F5 R. S* |1 I Y) U
8 I5 y: P' H' P: _
# @6 E$ t* `+ z" M* Z8 _
cd /root/extundelete-0.2.4/src
& I5 z* m' N, u( h1
) o4 {5 B8 m" F; f9 Y0 H
5 |( z; G% x, N
4 G# L' s- U, I; ~1 N/ yextundelete -v
. I5 z2 k. E) z/ x4 B14 e+ n' t; S6 P, ^# A; p
4 v" y. v+ B6 ^, w2 H; x& }' k5 R7 p" e6 G8 a8 X
执行make命令会在src目录下生成extundelete可执行文件,可在此直接执行恢复命令。) b+ T; X9 r2 h7 |8 Z; O9 n
执行make install会将程序安装在/usr/local/bin/下 g2 h ]. Q2 G) R
) G1 ~) f2 y2 C4 Q
恢复文件操作- |. _" ]! S) @5 r& Y
执行extundelete命令的当前目录必须是可写的。( }. `3 D) ~* H' p6 a s- E
) j0 J" v" N1 O/ G6 u
<1>查看要恢复文件的分区的文件系统5 [7 `0 F0 \) b8 q; _: h
- B$ `- s7 T& Udf -Th A" i( m0 e& V5 P2 K% F
14 G2 {7 O8 k* e) P- H
5 {6 ~: |8 b" V
% T& _$ ~$ C7 `
<2>对要恢复文件的分区解除挂载. b+ A7 \! g H+ G8 i- K
9 f/ d- s# l. B: `umount /mnt1 [+ E5 ]9 K: O( m* g) d
1+ r; v/ i W3 H$ _( g. k7 O
P! x0 W) m8 a) u& f
( ?8 u% H+ r* O& f' @) z<3>查看可以恢复的数据& I2 x' a1 t- B; v5 l9 k
( b' Z1 C, S3 I" {
指定误删文件的分区进行查找* V5 e1 }% r6 I T5 H" S4 `- f
最后一列标记为Deleted的文件,即为删除了的文件& F/ y7 B7 ~# R8 V; X8 B
% j) b2 j' [& k
extundelete /dev/vdb1 --inode 2 (根分区的inode值是2)1 Z4 K7 Y# [: s; o0 ~
1
, E/ q7 d V5 P( f% i: K, Y7 Y( l* H* n: }0 X# m) A& P* C2 ^
: W2 s$ w; ~% f4 e0 I' Q$ E& e
<4>恢复单个目录
3 ~+ ~ _3 B% i( W; k, `( [4 F5 B" }) d% K0 f
指定要恢复的目录名
* `4 M9 w% }9 h$ n' C如果是空目录,则不会恢复
' s. b) r6 ?0 `1 \% e
6 {7 K! P7 `' |% ^: n% d$ oextundelete /dev/vdb1 --restore-directory ferris
8 f, I' S; B" h$ @9 h15 f0 v& `! i% l" ~4 E
' ~' h# j0 Y$ q: Z. q) `; { B
. q7 A- l% B6 c* w5 c. b; H) C0 A+ |$ z/ e( u0 C
- u1 U& D4 d+ F2 w3 }6 t当执行恢复文件的命令后,会在执行命令的当前的目录下生成RECOVERED_FILES目录,恢复的文件都会放入此目录中。如未生成目录,即为失败。7 c" t* u6 n# C3 @2 j- x
' @* _3 E, o1 S$ X<5>恢复单个文件- m# D5 C& j+ U8 u3 V( s. t
2 V# M& u7 o7 F8 f/ P+ N1 R+ B指定要恢复的文件名) X/ o1 v) q" c; d9 h, {1 y% p
如果几k大小的小文件,有很大几率恢复失败
9 W% p$ \& W! X) v( z
: F& O* s* F! @3 r; ^2 z) ?4 d7 Bextundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz: N0 E. l' V- {2 o4 F% }
1! W( P! m7 ~5 p5 {! U1 l8 P2 p
8 U" H* h. n4 H& [# `
/ T' t2 _/ w4 a9 A<6>恢复全部删除的文件( x+ X! U& E/ i) O: K, x, m$ b$ s
" r9 y+ m( f3 [4 R无需指定文件名或目录名,恢复全部删除的数据% `2 ]7 ?9 v1 b/ L4 P, j% y5 g
1 E) K7 u3 [8 z( G
extundelete /dev/vdb1 --restore-all
; h+ }$ O+ k" M3 [1; w! d( Y8 Z. G; l. }
9 y, T$ k' ^7 v- i; }: D: m, b
————————————————5 ]- ^+ \8 ?- E4 {: W1 Q N
' m+ A( L& Y! `# t" f
' f) S1 e9 Z# K0 l6 J/ y
|
|