Linux数据恢复

对于一名运维人员来说,保证数据的安全是根本职责。所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候改如何快速、有效地恢复数据呢?本文就主要介绍一款Linux恢复数据的神器。

extundelete恢复原理


extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。

extundelete安装

extundelete的官方下载地址,目前的稳定版本是extundelete-0.2.4。

1
2
3
4
5
yum -y install e2fsprogs.x86_64 e2fsprogs-devel.x86_64 e2fsprogs-libs.x86_64 # 安装依赖包
tar -jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure --prefix=/usr/local/extundelete
make && make install

成功安装extundelete后,会在系统中生成一个extundelete可执行文件。可以通过“extundelete –help”获得此软件的使用方法。

extundelete命令详解


extundelete [options] [action] device-file

  • options
    –version, -[vV],显示软件版本号。
    –help,显示软件帮助信息。
    –superblock,显示超级块信息。
    –journal,显示日志信息。
    –after dtime,时间参数,表示在某段时间之后被删的文件或目录。
    –before dtime,时间参数,表示在某段时间之前被删的文件或目录。

  • action
    –inode ino,显示节点“ino”的信息。
    –block blk,显示数据块“blk”的信息。
    –restore-inode ino[,ino,…],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。
    –restore-file ‘path’,恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。
    –restore-files ‘path’,恢复命令参数,表示将恢复在路径中已列出的所有文件。
    –restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。
    -j journal,表示从已经命名的文件中读取扩展日志。
    -b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。
    -B blocksize,表示使用数据块大小来打开文件系统,一般用于查看已经知道大小的文件。

恢复数据实战

这里特别提醒一下,当确定删除重要的数据了,这时候千万千万不要往这块磁盘上写数据。正确的操作应该是立马umount,然后以只读方式挂载(mount -o remount,ro /dev/test)到其他服务器或测试机。否则有可能会出现数据恢复不了的情景。

查看文件系统


1
2
3
4
5
6
7
8
df -hT
文件系统 类型 容量 已用 可用 已用%% 挂载点
/dev/mapper/vg_weiwang1-lv_root
ext4 50G 40G 7.2G 85% /
tmpfs tmpfs 5.3G 0 5.3G 0% /dev/shm
/dev/vda1 ext4 485M 32M 428M 7% /boot
/dev/mapper/vg_weiwang1-lv_home
ext4 44G 182M 42G 1% /home

找到对应的文件系统和挂载点

查看当前路径下的文件目录删除情况


1
2
3
4
5
6
7
8
9
10
11
extundelete --inode 2 /dev/vda1
lost+found 11
grub 65025
efi 65027
222 32513 Deleted
.vmlinuz-2.6.32-358.el6.x86_64.hmac 12
System.map-2.6.32-358.el6.x86_64 13
config-2.6.32-358.el6.x86_64 14
symvers-2.6.32-358.el6.x86_64.gz 15
vmlinuz-2.6.32-358.el6.x86_64 16
initramfs-2.6.32-358.el6.x86_64.img 17

恢复被删除文件


1
2
3
extundelete /dev/vda1 --restore-file 222 # 恢复单个文件
extundelete /dev/vda1 --restore-directory grub # 恢复单个目录
extundelete /dev/vda1 --restore-all # 恢复所有被删除数据

补充


在Linux系统下,通过命令“rm -rf”可以将任何数据直接从硬盘删除,并且没有任何提示,同时Linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的,因此使用这个命令要非常慎重。其实有一个方法,那就是将要删除的东西通过mv命令移动到系统下的/tmp目录下,然后写个脚本定期执行清除操作,这样做可以在一定程度上降低误删除数据的危险性。
其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据,因此,把备份作为核心,把数据恢复工具作为辅助是运维人员必须坚持的一个准则。

火柴 wechat
扫描上方二维码关注我的博客!
0%