怎么恢复linux下误删除的文件

时间:2021-11-07 17:33:27

  本节所讲内容:

 Linux文件的基本操作

 深入浅出linux文件系统详解

实战1:Linux下误删除的文件的恢复实战

    实战2:四种方法恢复文件企业级项目实战

 

 

 

注:讲前先问一下学员,有没有基础。如果有基础,关下面文件的基本命令,使用5分钟快速看一眼就可以了。重点讲后面。

有基础1  没有基础2

 

创建文件、查看,删除文件

touch 

作用:常用来创建空文件

语法: touch 文件名

#touch test.txt

[root@xuegod63 桌面]# touch aa

[root@xuegod63 桌面]# ls

aa

[root@xuegod63 桌面]# mkdir aa

mkdir: 无法创建目录"aa": 文件已存在

 

linux 一切皆为文件

 

mkdir

作用:创建目一切

语法:mkdir 目录名

例: mkdir /tmp/test

[root@local63 ~]# mkdir -p test/a/b/c

-p 连同父目录一起创建

 

查看

 

 

cat

作用:查看文件内容

语法:cat 文件名

例:

cat /etc/passwd

-n 空行也加行号

-b 遇到空行,就不加行号

-s 把连续的多行,压缩成一行

连续的多行压缩成一行然后加行号

cat  -ns     /etc/password

 

 

rpm -qa | grep tree

 

 

复制文件:

cp

作用:复制文件

语法:cp 源文件  目标文件

例:

[root@local63 ~]# cp /etc/passwd /tmp/test/

[root@local63 ~]# ls /tmp/test/passwd

/tmp/test/passwd

[root@local63 ~]# cp -r /boot/grub/  /tmp/test/

-r 包含子目录和文件

 

omitting   遗漏;  省略( omit的现在分词 );  删掉;  忘记做

 

删除文件和文件夹

rm -rf  文件名或目录名

-r  递归删除(可以删除目录和目录里面的东西)

-f  强行删除

 [root@local63 ~]# rm -rf /tmp/test/

注:以 这种删除后,能不能恢复。 能:1 不能:2

 

 

ext4文件系统上删除文件,可以恢复: extundelete

windows恢复误删除的文件:  final data v2.0 汉化版  和  easyrecovery  

联想:

黑客  -》  二手磁盘和手机 -》 艳照   理解:1

 

 

扩展:

Linux文件系统由三部分组成:文件名,inode,block

windows也由这三部分组成。

 

a.txt  -->inode    -> block

文件名             存放文件元数据信息       真正存放数据

 

查看文件文件名:

[root@local63 ~]# cp /etc/passwd a.txt

[root@local63 ~]# ls a.txt

a.txt

 

查看inode号:

常识: 每个文件,最少有一个inode号。

 

[root@local63 ~]# ls -i a.txt

440266 a.txt

 

查看inode中的文件属性;  通过stat命令查看inode中包含的内容

 [root@local63 ~]# stat a.txt   #查看inode信息:

  File: `a.txt'

  Size: 1720       Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d Inode: 393788      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)  Gid: (    0/    root)

Access: 2015-10-25 10:21:07.368552471 +0800

Modify: 2015-10-25 10:21:02.773527478 +0800

Change: 2015-10-25 10:21:02.773527478 +0800

 

[root@local63 ~]# ls -l a.txt

-rw-r--r-- 1 rootroot 1720 Oct 25 10:21 a.txt

 

block块:真正存储数据的地方

 

逻辑删除:

为什么删除比复制快?

1  不懂2

 

 

 

 

 

误删除文件后,第一件事要做什么???  你不心删除把老板,几十年的大片删除了。

哭,提交辞职报告

 

如何避免误删除的文件内容被覆盖???

卸载需要恢复文件的分区:或以只读的方式挂载

 

 

 

 

注:删除时,只删除了文件名。 另外,我们可以从inode中读出文件名的名字,所以通过inode可以恢复。

 

懂:1  ,不懂:2    上课时间: 20:30-21:30

 

实战:cd

 

 

下载extundelete

http://sourceforge.net/    开源软件发布中心

测试

0.加一块磁盘 1.

1. 创建一个分区

2.拷贝一些数据放到分区SDB

3.删除  rm -rf

4. extundelete  安装

5.使用四种方法恢复

 

 

准备测试分区:

 

[root@local63 /]# fdisk /dev/sdb #创建一个sdb1分区

 

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') and change display units to

         sectors (command 'u').

 

Command (m for help): p   #查看现有分区表

 

Disk /dev/sda: 21.5 GB, 21474836480 bytes

255 heads, 63 sectors/track, 2610 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000b8b35

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          26      204800   83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              26        1301    10240000   83  Linux

/dev/sda3            1301        1428     1024000   82  Linux swap / Solaris

 

Command (m for help): n   #创建一个新分区

Command action

   e   extended

   p   primary partition (1-4)

p  #创建一个主分区

Selected partition 4

First cylinder (1428-2610, default 1428):

Using default value 1428

Last cylinder, +cylinders or +size{K,M,G} (1428-2610, default 2610): +1G  #指定分区大小

 

Command (m for help): w  #保存

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

 

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.

The kernel still uses the old table. The new table will be used at

the next reboot or after you run partprobe(8) or kpartx(8)

Syncing disks.

 

[root@local63 ~]# partx -a /dev/sda  #获得新分区表

[root@local63 ~]#reboot

 

使用新的分区表:

 [root@local63 ~]# mkdir /tmp/sdb#创建挂载点

[root@local63 ~]# mkfs.ext4 /dev/sdb1#格式化

[root@local63 ~]# mount /dev/sdb1 /tmp/sdb  #挂载

 

查看挂载情况

[root@local63 ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda2             9.7G  3.8G  5.5G  41% /

tmpfs                 569M  264K  569M   1% /dev/shm

/dev/sda1             194M   28M  157M  15% /boot

/dev/sr0              3.4G  3.4G     0 100% /mnt

/dev/sdb1            1012M   34M  928M   4% /tmp/sdb1

 

复制一些测试文件,然后把这些文件再删除:

[root@local63 ~]# cp /etc/passwd /tmp/sdb/

[root@local63 ~]# cp /etc/hosts /tmp/sdb/

[root@local63 ~]# echo aaa > a.txt

[root@local63 ~]# mkdir -p /tmp/sdb/a/b/c

[root@local63 ~]# cp a.txt /tmp/sdb/a/

[root@local63 ~]# cp a.txt /tmp/sdb/a/b/

[root@local63 ~]#

 

安装tree命令:

[root@local63 ~]# rpm -ivh /mnt/Packages/tree-1.5.3-2.el6.x86_64.rpm

[root@local63 ~]# tree /tmp/sdb/

/tmp/sda4/

├── a

│   ├── a.txt

│   └── b

│       ├── a.txt

│       ├── c  #空目录

│       └── kong.txt  #空文件

├── hosts

├── lost+found

└── passwd

 

删除文件:

[root@local63 ~]# cd /tmp/sdb/

[root@local63 sda4]# ls

a  hosts  lost+found  passwd

[root@local63 sda4]# rm -rf a hosts passwd

 

误删除文件后,第一件事要做什么???

哭,提交辞职报告

 

如何避免误删除的文件内容被覆盖???

卸载需要恢复文件的分区:或以只读的方式挂载

 

[root@localhost ~]# umount /tmp/sdb

[root@local63 ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2        18G  3.5G   13G  22% /

tmpfs          1004M  224K 1003M   1% /dev/shm

/dev/sda1       194M   34M  151M  19% /boot

/dev/sr0        3.6G  3.6G     0 100% /mnt

 

上传extundeletelinux中:

windows上传extundelete文件到linux,安装xmanager  v4   或者CRT

[root@local63 ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm  

安装后,就有了rz命令和sz命令

rz : 上传windows中的文件到linux

sz :将linux中的文件传到windows

 

 

解压并安装extundelet

[root@local63 extundelete-0.2.4]# tar jxvf extundelete-0.2.4.tar.bz2

 

[root@local63 ~]# cd extundelete-0.2.4

[root@local63 extundelete-0.2.4]# ls

acinclude.m4  autogen.sh   configure     depcomp     LICENSE      Makefile.in  README

aclocal.m4    config.h.in  configure.ac  install-sh  Makefile.am  missing      src

[root@local63 extundelete-0.2.4]# ./configure   #检查系统安装环境

Configuring extundelete 0.2.4

configure: error: Can't find ext2fs library

 

源码编译出错后,常见解决方法:

方法1:[root@local63 Packages]# rpm -ivh ext2fs^C   #按两下tab键。 一般情况,ext2fs就是要安装的软件包的名字开头。如果存在 自动补全

 

方法2:[root@local63 Packages]# ls *ext2fs*   #查找关键字

方法3:[root@local63 Packages]# ls *2fs*    #查找部分关键字

方法4: VIP 课程 。  终极大招

 

[root@local63 Packages]# ls *2fs*

e2fsprogs-1.41.12-11.el6.x86_64.rpm

e2fsprogs-devel-1.41.12-11.el6.i686.rpm

e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm

e2fsprogs-libs-1.41.12-11.el6.i686.rpm

e2fsprogs-libs-1.41.12-11.el6.x86_64.rpm

[root@local63 Packages]#

[root@local63 Packages]# uname -m

x86_64

 

[root@local63 Packages]# rpm -ivh e2fsprogs-libs-1.41.12-11.el6.x86_64.rpm

warning: e2fsprogs-libs-1.41.12-11.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

Preparing...                                                            ########################################### [100%]

package e2fsprogs-libs-1.41.12-11.el6.x86_64 is already installed

 

 

解决:

[root@local63]# rpm -ivh /mnt/Packages/e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm

warning: /mnt/Packages/e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

Preparing...                ########################################### [100%]

   1:e2fsprogs-devel        ########################################### [100%]

查看安装后生成的文件:

[root@local63 Packages]#rpm -qpl e2fsprogs-devel-1.41.12-11.el6.x86_64.rpm | more

 

 

 

[root@local63 extundelete-0.2.4]# make  #编译,把源代码编译成可执行的二进制文件。

-j  4  第一次听说:1

-j 4   使用4进程同时编译,提升编译速度 或 使用4核CPU同时编译。

 

-j 4  #这个参数,今天第一次知道;1

编译mysql,内核,apache ,使用 -j 4 ,会快  -j 后的数字要和你的CPU核心数一样。

 

 

使用top -》 P 查看哪个进程使用CPU最多 : cc1 (c 语言编译器)

 

[root@local63 extundelete-0.2.4]# make install  #安装

Making install in src

  /usr/bin/install -c extundelete '/usr/local/bin'

[root@local63 extundelete-0.2.4]# ls /usr/local/bin/extundelete

/usr/local/bin/extundelete

 

 

开始恢复:

方法1:通过inode结点恢复

方法二:通过文件名恢复

方法三:恢复某个目录,如目录a下的所有文件:

方法四:恢复所有的文件

 

懂:1 , 不懂:2

 

[root@local63 ~]# umount /tmp/sda4/

[root@local63 ~]# mkdir test  #创建一个目录使用于存放恢复的数据

[root@local63 ~]# cd test/

 

方法1:

通过inode结点查看被删除的文件名字:

[root@local63 test]# extundelete /dev/sdb1 --inode 2

.                                                2

lost+found                                        11

passwd                                            12             Deleted

hosts                                             13             Deleted

a                                                 7313           Deleted

 

[root@local63 ~]# mkdir test  #创建一个目录使用于存放恢复的数据

方法1:通过inode结点恢复

[root@local63 test]# extundelete /dev/sdb1 --restore-inode 12

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 9 groups loaded.

Loading journal descriptors ... 63 descriptors loaded.

[root@local63 test]# ls

RECOVERED_FILES

[root@local63 test]# diff /etc/passwd RECOVERED_FILES/file.12  # 没有任何输出,说明一样

 

方法二,通过文件名恢复

[root@local63 test]# extundelete /dev/sdb1--restore-filepasswd

 

方法三:恢复某个目录,如目录a下的所有文件:

[root@local63 test]# extundelete /dev/sdb1 --restore-directory a

[root@local63 test]# tree RECOVERED_FILES/a/

RECOVERED_FILES/a/

├── a.txt

└── b

└── a.txt

 

下面是原来的目录结构:

[root@local63 ~]# tree /root/sda4-back/a/

/root/sda4-back/a/

├── a.txt

└── b

    ├── a.txt

    ├── c

└── kong.txt

 

方法四:恢复所有的文件

[root@local63 test]# extundelete /dev/sdb1 --restore-all

 

[root@local63 test]# tree RECOVERED_FILES/

RECOVERED_FILES/

├── a

│   ├── a.txt

│   └── b

│       └── a.txt

├── hosts

└── passwd

这是删除前的数据:

[root@local63 ~]# tree /tmp/sda4/

/tmp/sda4/

├── a

│   ├── a.txt

│   └── b

│       ├── a.txt

│       ├── c  #空目录

│       └── kong.txt  #空文件

├── hosts

├── lost+found

└── passwd

 

extundelete在恢复文件的时候能不能自动创建空文件和目录

1 不能2

答:不能。

REHL7  xfs系统  可以的

 

 

总结:

方法1:通过inode结点恢复

方法二:通过文件名恢复

方法三:恢复某个目录,如目录a下的所有文件:

方法四:恢复所有的文件

 

 

tree讲课风格:1