找回密码
 注册
查看: 3555|回复: 0

Linux文件误删除恢复操作

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2020-4-27 10:48:07 | 显示全部楼层 |阅读模式
作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删文件后及时补救,还是可以恢复的0 f$ L- S2 x& U$ M
5 ]/ w- v. {& M' m2 E
( U: u! F# v3 O7 a' m
# a' t' o* ]2 y% A
一、用运SecureCRT远程对操作系统上,查看一下当前系统版本号,及文件系统格式
" S! K0 J" G) Q3 p9 l; E
" o: t9 _+ a6 J4 s+ @" g* C3 D! M% U' o$ R7 H% ]# t* v5 L+ R" O) n2 ^

0 j  V1 m# X# B: K5 C8 j- w% `+ I1 |" d- B* d6 t* g
, S6 ^! I- n& s$ j, L
二、为方便本次实验,我们新创建一文件。
3 `4 V7 [% o1 i" L4 T) j
4 I! W/ `  S% N3 `# L
- p/ ^: T1 t1 [6 m2 @# O
4 a1 ^1 n% N) }1 k  Q' s4 Y" v7 J8 z( y  h  ~0 J) J7 m; w

) {, j: H. x2 F: V9 u三、执行删除操作" ?. i; Q5 G, l

, v/ i5 ~& S' Z. h8 ?5 J& |& Z' {& p. {" V6 `
5 _7 }1 m5 U; [9 k5 B
rm -rf  web_1.txt
) E8 J/ p5 k( X2 \+ b% {; @: l4 x% _3 L, T9 R" r2 N& x. f

7 P& z# I0 l! T4 h7 e# o& {
; e8 ^6 ~, O+ D7 E6 I) I) }: Z四、运用,系统自还工具debugfs来修复
9 S( N  \" A1 u! Y" H- T% Q% Y6 i* e. k7 }' V: u8 x

) k$ I  H. H" X- Y7 p4 g
& F8 d! v1 D7 q+ M0 Y1 Z# M, |# g4 ?3 m( w! [
( I7 e7 P: h8 s6 ^
/ S$ j, {" r" A0 m: F7 D

+ T$ v# Z/ f5 x+ {% p% ?/ N五、打开,刚刚被删除文件所在的分区
, F  h7 ~! A: r/ p/ @1 `/ J4 s$ `7 o5 g$ Z; X7 H/ K; p- y
****************************************************************************************** [& N0 i9 Q% R' m
0 p% p( ~8 b# y5 i9 I
查看目录在分区
1 P0 }3 }& K1 C7 r  D* N2 G8 P( N
$ g3 G% j% f1 Q# z; _- h
7 @! Z" T" E4 v% C: u5 Z2 }" a/ S, ^' X6 Y! s% k* K/ f. A
8 T  X$ ?* S. L, R5 s# V

" Q. b! ~: c! C2 _# d******************************************************************************************
) j) P& |9 G( G. Q1 {
# F0 S0 g* h5 E$ f: p
8 o& m9 ]5 m6 t+ Q# r- y8 p' i$ f  B) P
3 C- H4 ~* l# {4 L" y

$ F# k8 u: H  A! Y* F+ h2 B) \9 s& J- t' D1 J
8 p. S" ~2 U0 Q& _- `

* L5 q; V! P- c6 v1 n5 B六、用ls 加-d参数显示刚刚删除文件所在的目录& ^' z/ P5 O( P$ n* Q6 k
( {7 \- c/ B5 G1 d2 X+ V

( T. J$ Y+ N8 V9 x+ p- p$ F$ w: ~

" d' w- _7 p: J& t0 A% V8 b
4 o- F) z, n5 z+ b$ M4 q) o4 Q4 m, _" h" {* L' H1 [% a' L0 R3 l8 R; P& l, C
& O8 A, q- h) L4 D, F( I
七、显示有<>尖括号的就是我们要找的文件Inode 号 执行logdump –I  <19662057>
0 l5 ~* W" Q$ r& C' d7 [
2 ]/ Y0 O: M' A. _- f( l
0 V* y) b2 C2 u4 l2 ^  l+ [; o
1 H! w) g4 }+ D
" v& E: s8 ?# I5 j5 ], {
& V5 e* {0 ?3 ]6 ]8 u
% F" V0 N$ r! T) U
4 Q# k/ h% f! e
& Y$ F4 w' A8 O4 x. a2 ]# g
- h. Z" [( s( W% u, }4 }1 d八,执行完命令后,显示了一屏信息,我们需要的是下面这一行,并且要记住,后面的值
6 v2 U* h$ m. Q* j/ y- A2 j
) \2 }: C. t& I0 F  b
  r/ Y9 _% U: R+ k' n; s# m* l
* A4 w0 t5 _$ @7 d- M/ q% ^7 K3 ?4 m( i/ t2 C/ f. X! P! `0 y' R
6 }4 v' z) |, n7 N7 O, a

, _/ h( m/ q6 M7 Q$ }6 Y
1 O! A' `3 \. z7 y' I# c- S- l
0 R' k; x: ?/ V9 s$ W1 i# N- g7 j% @" u

  V  _. C0 ]8 L( P1 N$ }9 r) `& ~; ?% E9 M
九、退出dedugfs% A8 R/ T- w$ Q' d# r( W

7 T8 [: h" O+ E  S8 w1 mqiut
0 R' `$ D8 i3 p. k- c" P6 F1 f% V- ~9 g/ H5 G& W

7 T1 u+ E" @5 m: q0 n+ R* S! f% M$ H* [: i
十,执行如下命令. y$ V8 o4 C! q% L' i" v

" }! Z, S! m1 y% z
% p/ d# T+ |# \# f1 e5 T
# m6 x1 M3 v6 Z1 `$ k- sbs与下图offset值一致,skip与block值一致
. w( n$ z4 O% m" o' z  F$ B. `4 c  o  r3 _6 s! D( J4 r" l

3 g, [! }& N; F  ?8 e0 e6 V4 F7 ?# w/ w; r6 S

7 `$ h- _& `8 H
7 T9 D) @# g( q. L- ^: l$ k. k7 o
十一,以上结果表示恢复成功我们看下/opt/wb_1目录下到底有没有
* P, M! o8 R3 u  t2 k* M: f
/ D) D- a3 c) u/ W
& `/ A3 x4 {0 Z0 k0 i: N5 f  Q, M; U; g& [4 k8 V# `; S

& t9 g6 {+ U/ R, f8 @, s6 d" k9 c8 W7 E2 t5 L9 P  I

7 W6 y! f+ c& S( e6 ]! \1 B- Y: E: _3 e. H( i# v0 N
恢复成功!4 i: X: m. r- p# G2 [2 V! W  L
7 ]* i! u9 K2 ]1 Z
恢复文件操作0 t9 Z1 P3 g" S" f% Y" `. g
环境:
; n4 P2 Y6 Y& G9 R1 p在/mnt下有一些文件,其中一个文件train.less正在被查看,然后另一个终端将其删除
) O9 n: ~: y$ a0 k- q
8 D" E- G# t4 m8 A% Y+ y【1】lsof查看0 u9 Z2 S+ p: F2 p$ A' t
2 }7 T3 L1 K% N0 X6 `
查看正在使用删除文件的进程号
  A- I: p0 [3 U1 K5 H  ^, d/ F& A8 v+ c) u
lsof /mnt# v3 S# `8 V. [/ z& V
13 F1 r- y" j1 c( n+ S/ ]+ v
& @* g+ F; t4 K7 a; |. j

, A* N1 i+ X& u0 t8 I  Z/ b4 U8 V! x2 S- U
- |* O0 v; B7 P4 j8 H8 l2 V8 Z
【2】恢复! H- Q. B. w/ D( F
9 O' p( `9 b% l3 l
切换到/proc下,删除文件对应的进程的pid下的文件描述符中的目录中;将对应的内容重定向或cp到其他文件中8 g4 L# O7 W& ?" i
重点关注:PID 与 FD
: N3 t) F9 P7 u9 d" ~
: t: o; F5 S, Z( u1 {; k0 {3 p   cd /proc/31284/fd/
- A+ a4 ^- N( c7 x0 R' p5 J4 O7 w   cat 4 > /mnt/ferris_train.less. y* N+ H/ ^2 e  E& M+ m
14 {5 J; t8 A7 _  v$ r7 d6 m% x1 F
2
: m' ~8 G  S: `6 ?% a2 p* K& {1 A! \1 Q9 d" b! E/ a* n( I
: c* j! a$ \3 ]* T

- N: W7 N. s5 t9 F7 j8 M& J% d4 s" |7 o# F- M) A. w
1 O' b" T4 l, P
! _  F3 ^: j) V
extundelete% b1 m: ^! P. a& W+ }; k
原理:/ Z. `8 I( h0 ?  {7 y: V
使用存储在分区日志中的信息,尝试恢复已从ext3或ext4的分区中删除的文件3 N% _  u9 i* ~3 b- }
! C8 [/ Z. |  C% k
优点:
' M" W" T3 a; D相比于ext3grep只能恢复ext3文件系统的文件,其适用范围更广,恢复速度更快
9 L/ v# i% [/ @" G8 j8 Q8 ]0 T3 h2 x
extundelete官方地址(官方文档):
4 K% C! _% h/ rhttp://extundelete.sourceforge.net# j1 q9 E& ?+ B- k- c' i
# n& ]$ U$ U2 ], b- g
extundelete下载地址:/ s) F4 B: V. u8 _" Z9 N- T+ ^
http://downloads.sourceforge.net ... elete-0.2.4.tar.bz2
" F5 B+ x/ \, }8 }. q(最新版本的extundelete是0.2.4,于2013年1月发布); T4 Y0 x% ?$ l: i6 h& L
0 `- C# E$ P2 Z( g1 }, I# l/ Q
注意:& K" x5 S/ l0 d0 l( {, }

" ^' k' Z( n3 }$ f: V8 m0 X在数据删除之后,要卸载被删除数据所在的磁盘或是分区
8 V% x6 J. w/ F; L0 d/ I$ k8 z
如果是系统根分区遭到误删除,就要进入单用户模式,将根分区以只读的方式挂载,尽可能避免数据被覆盖
( u1 }- b# N. g( ]& P1 v9 u8 e6 S/ ^; g& b& f: k. C
数据被覆盖后无法找回8 Y, k# {1 c; O

% y! K& s2 E) B恢复仍有一定的机率失败,平时应对重要数据作备份,小心使用rm; z- t. f& b5 b, w& H2 o- U

6 p8 E, f  v  C* M9 v8 E7 p安装
$ D; U: M, j4 @! C% L: N<1>依赖安装4 a9 m5 g( l7 ?6 F9 b. }
, L( [. \7 ~; W3 `) {+ H+ V
centos安装操作
, `( V9 |* U$ E$ B* V) ~8 s) kyum install e2fsprogs-devel   e2fsprogs* gcc*
6 x* O# A. C* l; n/ ~6 m5 N
- \% Y% k5 L( zubuntu安装操作4 w3 A" l0 z7 ^2 H1 k, V
apt-get install build-essential  e2fslibs-dev  e2fslibs-dev
# A* @* H9 _$ ^! ?" F  Z$ o: o7 R9 O1" m) s% U7 a, [5 a, O: I
25 @/ X- V' w! h/ _8 U* S' ~( H
30 }5 u: O) o- @7 _! z( O* d
4
) V7 F1 A9 G2 c! C' A, r8 e% P5
. a+ ]; j+ A# Z1 b<2>编译安装2 q0 o. q5 a" E9 v) O% q6 u
& p/ C4 `1 g# C. E
wget http://downloads.sourceforge.net ... elete-0.2.4.tar.bz25 G3 j& }% f4 ?: {# ]5 @5 V
tar xf  extundelete-0.2.4.tar.bz2
$ K: c% c1 M( M# b2 ycd  extundelete-0.2.4' v( w5 s/ C0 @- u2 ?2 W+ q6 u
./configure
  X5 P, ^8 e$ ^3 \5 H9 g) ymake3 [$ b. n: ]0 }  g9 z# E* [( g, A
make install( p, K" R6 U) Q1 K) l3 M* l0 I
1
% d/ S% f2 @& D28 z5 |9 a. V7 Y9 ^6 L
3# Y. e: v7 s, m% g3 H$ g
4
# O* D) O2 F: [: ~  m$ m3 L/ [9 H, ?3 E5
- t6 l: E1 H9 ?0 i1 E6
- Q! }: m/ ?1 T- b
4 o, Q) V! L% I
9 A4 {- ~0 D0 W9 C/ Fcd /root/extundelete-0.2.4/src
9 R) d& \: @3 X4 S; Z  W1
! n" S0 K! v6 s- u
$ Y- D# X: c5 L5 w* y0 y' z' k! o5 _& b% [  {& g
extundelete -v ' X) Q+ P+ E" p
1. Z. r6 s* r% \$ Y3 m* K: o
2 d. T: g+ L. C0 t
9 b) A0 X9 T$ D! Y7 {% [
执行make命令会在src目录下生成extundelete可执行文件,可在此直接执行恢复命令。5 R9 u# m) y/ O  X8 @
执行make install会将程序安装在/usr/local/bin/下
- g% x' |4 ?1 [7 i8 H# E8 F6 L( G( v7 i5 H2 |6 l- z
恢复文件操作0 i  N& o6 k3 a; Z2 w4 q
执行extundelete命令的当前目录必须是可写的。
  E# C% Z/ H4 _7 r7 O1 D  e. P2 q2 b: a8 c
<1>查看要恢复文件的分区的文件系统
9 V5 U9 N/ f- G/ X) W4 O% Z' C2 b) H, d
df  -Th( N7 y! H) O. q4 P
10 b0 A/ C1 ]2 I+ b" C! ]

* I: f4 s; o( ]7 n8 F  {' p3 W* f2 v4 _6 B, P7 @
<2>对要恢复文件的分区解除挂载
& E/ U- z+ w; E9 a0 p* t! K2 I# b4 L. b* Z
umount /mnt
8 P! H, F9 v' Y6 X; `& l3 \, c9 D12 j$ b1 |2 y/ ?9 U8 D5 P

4 h2 e$ p' e) w
2 ?: t: S; f- M9 y' U5 }1 f<3>查看可以恢复的数据
$ S  L/ g2 i: {  S
0 B1 {- S. G( T0 B5 S指定误删文件的分区进行查找7 y( r& b( t% T8 t* s; ^9 N. }
最后一列标记为Deleted的文件,即为删除了的文件
$ V- b( b3 g0 n' s: x: h% ~' P% l. ?, F( ]0 [- _3 Z
extundelete /dev/vdb1 --inode 2 (根分区的inode值是2)9 v% g% D7 O  z( O0 t  J
1, h6 x% G; F% L7 c7 F5 i
6 j8 _+ A7 h" R4 k

) }" `7 a2 c( I6 B/ x<4>恢复单个目录. O  }0 H6 i. l2 A" O& L
: O9 x2 f+ l- A
指定要恢复的目录名7 E9 G# U8 N! A, q
如果是空目录,则不会恢复
3 ^* T' d) K0 x' Y7 G0 Z
7 ^; J" P: I  _; wextundelete /dev/vdb1 --restore-directory  ferris
, M5 Y  B) Z! X; t9 a0 o1
3 r+ }2 H5 i5 H4 p8 U
% @- U& E* S* F  Q; T- w. b3 L1 r, J) m

) ^& n# X) x& D2 y1 l: l0 b$ }- J* e  _1 M1 d
当执行恢复文件的命令后,会在执行命令的当前的目录下生成RECOVERED_FILES目录,恢复的文件都会放入此目录中。如未生成目录,即为失败。
: ~, N6 |) h) U
7 s9 Y+ t6 p6 f7 x4 f<5>恢复单个文件) i0 L2 Q( y8 @- P$ g0 \: W

' |0 F/ V. \+ D指定要恢复的文件名, E5 |- Y, Y4 y" }* J& d
如果几k大小的小文件,有很大几率恢复失败6 Y' X0 A7 l" [# K) C1 y7 g3 V  u6 q
! n8 l, _) q% r' V! D
extundelete /dev/vdb1 --restore-file openssh-7.7p1.tar.gz
. E4 o$ X! x  X1
9 ^2 E# m, p$ a& I' w& L. {5 q
* L. v6 ]+ ?0 G2 a) u' T. o3 F9 J; b' X& ~3 n8 V0 {
<6>恢复全部删除的文件% g, q2 [3 h6 P
9 |4 b  E9 a# O; X: k2 F6 p
无需指定文件名或目录名,恢复全部删除的数据
* @; b+ Y7 ~% X; l3 s: @0 O) \4 G# v8 q
extundelete /dev/vdb1 --restore-all
! @/ h$ R; r* y3 q8 H2 i, D$ g1
9 v6 x: z7 C! f' B. r4 U: O" {3 q6 v3 K) X, _% b6 {3 q
————————————————: T# Z. D7 o9 v

, ]5 n! U3 O9 @! m( k; [
8 V. k+ A2 c9 N) U9 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 05:35 , Processed in 0.026234 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表