extundelete工具恢复rm -rf 删除的目录(ext4)
ext3grep工具只能用于恢复ext3文件系统下删除的文件,对于ext4文件系统,可以使用extundelete工具。使用的方法类似ext3grep。 ext3grep 仅对 ext3 文件系统有效, extundelete 对 ext3 与 ext4 文件系统都有效
ext3grep-0.10.2.tar.gz
extundelete-0.2.4.tar.bz2
# extundelete /dev/sdb1 --inode 2
# extundelete /dev/sdb1 --restore-inode 57146
[root@rhel6lhr extundelete-0.2.4]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 48G 16G 31G 34% /
tmpfs tmpfs 2.0G 80K 2.0G 1% /dev/shm
/dev/sda1 ext4 283M 58M 210M 22% /boot
/dev/mapper/vg_orasoft-lv_orasoft_u01 ext4 49G 36G 11G 78% /u01
/dev/mapper/vg_orasoft-lv_orasoft_u02 ext4 7.3G 4.8G 2.2G 69% /u02
/dev/mapper/vg_orasoft-lv_orasoft_u03 ext4 6.8G 4.2G 2.4G 65% /u03
/dev/mapper/vg_oradata-lv_oradata_u04 ext4 40G 20G 18G 52% /u04
/dev/mapper/vg_oradata-lv_oradata_u05 ext4 40G 25G 14G 65% /u05
/dev/mapper/vg_orasoft-lv_orasoft_mysql ext4 976M 323M 603M 35% /var/lib/mysql
/dev/mapper/vg_orasoft-lv_orasoft_u06 ext4 11G 5.5G 4.7G 54% /u06
/dev/mapper/vg_orasoft-lv_orasoft_u07 ext4 14G 8.2G 4.8G 64% /u07
/dev/mapper/vg_mysqlsoft-lv_mysqlsoft_55 ext4 2.9G 817M 2.0G 30% /usr/local/mysql55
/dev/mapper/vg_mysqlsoft-lv_mysqlsoft_56 ext4 2.9G 1.4G 1.4G 50% /usr/local/mysql56
/dev/mapper/vg_mysqlsoft-lv_mysqlsoft_57 ext4 4.8G 3.3G 1.3G 72% /usr/local/mysql57
/dev/mapper/vg_mysqlsoft-lv_mysqlsoft_80 ext4 5.8G 2.7G 2.9G 49% /usr/local/mysql80
/dev/sr0 iso9660 3.6G 3.6G 0 100% /media/lhr/cdrom
软件下载: http://sourceforge.net/projects/extundelete/
作为一名运维人员,保证数据的安全是根本职责,所以在维护系统的时候,要慎之又慎,但是有时难免会出现数据被误删除的情况,在这个时候改如何快速、有效地恢复数据呢?本文我们就来介绍一下Linux系统下常用的几个数据恢复工具。
https://blog.51cto.com/ixdba/1566856
一、 如何使用“rm -rf”命令
在Linux系统下,通过命令“rm -rf”可以将任何数据直接从硬盘删除,并且没有任何提示,同时Linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的,因此使用这个命令要非常慎重。在使用rm命令的时候,比较稳妥的方法是把命令参数放到后面,这样有一个提醒的作用。其实还有一个方法,那就是将要删除的东西通过mv命令移动到系统下的/tmp目录下,然后写个脚本定期执行清除操作,这样做可以在一定程度上降低误删除数据的危险性。
其实保证数据安全最好的方法是做好备份,虽然备份不是万能的,但是没有备份是万万不行的。任何数据恢复工具都有一定局限性,都不能保证完整地恢复出所有数据,因此,把备份作为核心,把数据恢复工具作为辅助是运维人员必须坚持的一个准则。
二、 extundelete与ext3grep的异同
在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大,本文重点介绍extundelete的使用。
三、 extundelete的恢复原理
在介绍使用extundelete进行恢复数据之前,简单介绍下关于inode的知识。在Linux下可以通过“ls –id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:
由此可知,根目录的inode值为2。
在利用extundelete恢复文件时并不依赖特定文件格式,首先extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
四、 安装extundelete
extundelete的官方网站是http://extundelete.sourceforge.net/ ,其目前的稳定版本是extundelete-0.2.4。,在安装extundelete之前需要安装e2fsprogs和e2fsprogs-libs两个依赖包。
e2fsprogs和e2fsprogs-libs安装非常简单,这里不做介绍。下面是extundelete的编译安装过程:
成功安装extundelete后,会在系统中生成一个extundelete可执行文件。extundelete的使用非常简单,读者可以通过“extundelete --help”获得此软件的使用方法。
五、 extundelete用法详解
extundelete安装完成后,就可以执行数据恢复操作了,本节详细介绍下extundelete每个参数的含义。extundelete用法如下:
extundelete --help
命令格式:
其中参数(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,表示使用数据块大小来打开文件系统,一般用于查看已经知道大小的文件。
六、 实战:extundelete恢复数据的过程
在数据被误删除后,第一时间要做的是卸载被删除数据所在的磁盘或磁盘分区,如果是系统根分区的数据遭到误删除,就需要将系统进入单用户,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode结点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据块被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回力无天。所以,以只读模式挂载磁盘可以尽量降低数据块中数据被覆盖的风险,以提高恢复数据成功的比率。
6.1 通过extundelete恢复单个文件
1. 模拟数据误删除环境
在演示通过extundelete恢复数据之前,我们首先要模拟一个数据误删除环境,这里我们以ext3文件系统为例,在ext4文件系统下的恢复方式与此完全一样。简单的模拟操作过程如下:
2. 卸载磁盘分区
在将数据误删除后,立刻需要做的就是卸载这块磁盘分区:
3. 查询可恢复的数据信息
通过extundelete命令可以查询/dev/sdc1分区可恢复的数据信息:
根据上面的输出,标记为Deleted状态的是已经删除的文件或目录。同时还可以看到每个已删除文件的inode值,接下来就可以恢复文件了。
4. 恢复单个文件
执行如下命令开始恢复文件:
extundelete恢复单个文件的参数是“--restore-file”,这里需要注意的是,“--restore-file”后面指定的是恢复文件路径,这个路径是文件的相对路径。相对路径是相对于原来文件的存储路径而言的,比如,原来文件的存储路径是/data/passwd,那么在参数后面直接指定passwd文件即可,如果原来文件的存储路径是/data/test/mytest.txt,那么在参数后面通过“test/mytest.txt”指定即可。
在文件恢复成功后,extundelete命令默认会在执行命令的当前目录下创建一个RECOVERED_FILES目录,此目录用于存放恢复出来的文件,所以执行extundelete命令的当前目录必须是可写的。
根据上面的输出,通过md5sum命令校验,校验码与之前的完全一致,表明文件恢复成功。
6.2 通过extundelete恢复单个目录
extundelete除了支持恢复单个文件,也支持恢复单个目录,在需要恢复目录时,通过 “--restore-directory”选项即可恢复指定目录的所有数据。
继续在上面模拟的误删除数据环境下操作,现在要恢复/data目录下的ganglia-3.4.0文件夹,操作如下:
可以看到之前删除的目录ganglia-3.4.0已经成功恢复了,进入这个目录检查发现:所有文件内容和大小都正常。
6.3 通过extundelete恢复所有误删除数据
当需要恢复的数据较多时,一个个地指定文件或目录将是一个非常繁重和耗时的工作,不过,extundelete考虑到了这点,此时可以通过“--restore-all”选项来恢复所有被删除的文件或文件夹。
仍然在上面模拟的误删除数据环境下操作,现在要恢复/data目录下所有数据,操作过程如下:
可以看到所有数据全部完整地恢复了。
6.4 通过extundelete恢复某个时间段的数据
有时候删除了大量的数据量,其中很多数据都是没用的,我们仅需要恢复其中的一部分数据,此时,如果采用恢复全部数据的办法,不但耗时,而且浪费资源,在这种情况下,就需要采用另外的一种恢复机制有选择地恢复,extundelete提供了“—after”“和”--before“参数,可以通过指定某个时间段,进而只恢复这个时间段内的数据。
下面通过一个简单示例,描述下如何恢复某个时间段内的数据。
我们首先假定在/data目录下有个刚刚创建的压缩文件ganglia-3.4.0.tar.gz,然后删除此文件,接着卸载/data分区,开始恢复一小时内的文件,操作如下:
可以看到,刚才删除的文件,已经成功恢复,而在/data目录下还有很多被删除的文件却没有恢复,这就是”--after“参数控制的结果,因为/data目录下其他文件都是在一天之前删除的,而我们恢复的是一个小时之内被删除的文件,这就是没有恢复其他被删除文件的原因。
在这个操作过程中,需要注意是“--after”参数后面跟的时间是个总秒数。起算时间为“1970-01-01 00:00:00 UTC”,通过“date +%s”命令即可将当前时间转换为总秒数,因为恢复的是一个小时之内的数据,所以“1379146740”这个值就是通过“1379150340”减去“60*60=3600”获得的。
1.在安装extundelete包./configure时遇到configure: error: C++ compiler cannot create executables问题
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
configure: error: in `/root/Desktop/extundelete-0.2.4':
configure: error: C++ compiler cannot create executables
See `config.log' for more details
经过查找知道需要安装gcc-c++包
安装gcc-c++
[root@localhost Packages]# rpm -ivh gcc-c++-4.4.7-3.el6.i686.rpm
warning: gcc-c++-4.4.7-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
libstdc++-devel = 4.4.7-3.el6 is needed by gcc-c++-4.4.7-3.el6.i686
有依赖关系先装 libstdc++-devel-4.4.7-3.el6.i686.rpm
[root@localhost Packages]# rpm -ivh libstdc++-devel-4.4.7-3.el6.i686.rpm
warning: libstdc++-devel-4.4.7-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:libstdc++-devel ########################################### [100%]
再安装 gcc-c++-4.4.7-3.el6.i686.rpm
[root@localhost Packages]# rpm -ivh gcc-c++-4.4.7-3.el6.i686.rpm
warning: gcc-c++-4.4.7-3.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:gcc-c++ ########################################### [100%]
[root@localhost Packages]# rpm -qa | grep gcc-c++
gcc-c++-4.4.7-3.el6.i686
2.重新./configure显示
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
configure: error: Can't find ext2fs library
经过查找知道缺少 e2fsprogs-devel,下面开始安装
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-14.el6.i686.rpm
warning: e2fsprogs-devel-1.41.12-14.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
libcom_err-devel = 1.41.12-14.el6 is needed by e2fsprogs-devel-1.41.12-14.el6.i686
pkgconfig(com_err) is needed by e2fsprogs-devel-1.41.12-14.el6.i686
有依赖的包,所以先安装依赖包
[root@localhost Packages]# ll | grep libcom_err-devel
-r--r--r-- 49 root root 31984 12月 19 2012 libcom_err-devel-1.41.12-14.el6.i686.rpm
[root@localhost Packages]# rpm -ivh libcom_err-devel-1.41.12-14.el6.i686.rpm
warning: libcom_err-devel-1.41.12-14.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:libcom_err-devel ########################################### [100%]
解决了依赖关系,在安装 e2fsprogs-devel
[root@localhost Packages]# rpm -ivh e2fsprogs-devel-1.41.12-14.el6.i686.rpm
warning: e2fsprogs-devel-1.41.12-14.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing... ########################################### [100%]
1:e2fsprogs-devel ########################################### [100%]
3。再./configure出现,表示成功了;
[root@localhost extundelete-0.2.4]# ./configure
Configuring extundelete 0.2.4
Writing generated files to disk
4.进行make & make install
[root@localhost extundelete-0.2.4]# make
make -s all-recursive
Making all in src
extundelete.cc:571: 警告:未使用的参数‘flags’
[root@localhost extundelete-0.2.4]# make install
Making install in src
/usr/bin/install -c extundelete '/usr/local/bin'
https://www.cnblogs.com/patf/p/3368765.html
首先。Linux下很多人都喜欢用rm -rf去删除目录。但是rm --help提示这是一个非常危险的命令、谨慎用之。
这里公司一台服务器。同事在操作的过程中误删掉一个目录。而且是非常重要的。
尝试恢复cat /etc/redhat-release 查看为rhel4版本。很老了这就有一个问题出现yum无法用。
先用一个ext3grep 工具恢复。但是该工具--help 提示没有针对目录恢复的参数 只有一个all 我尝试用时间戳恢复当时时间段的数据效果不理想、
而且跟要命的是当我查看分区的时候df -aT发现这个删除的目录进入奇迹般的划分在了与/一个分区。0 0这意味着我挂载为只读分区时要杀掉一
切与/根分区有关的进程;所有反复思索后决定一个好的办法:
USB移动硬盘安装一个便携Linux系统,并在其上面安装extundelete工具因为这个工具需要几个包的支持。而rhel4的系统现在yum已经无法使用
安装支持包都很困难。索性放弃。
关于USB移动硬盘系统。与我们用的stat 硬盘安装系统一样。可以用光盘镜像安装选择USB设备为安装设备。或者用虚拟机安装都可以。这里我就
不多说推荐虚拟机 Virtual Box和 VMware(优点是你有镜像但无法刻盘)。
好了进入centOS6.4后
下载extundelete:wget http://pkgs.fedoraproject.org/repo/pkgs/extundelete/extundelete-0.2.4.tar.bz2/77e626ad31433680c0a222069295d2ca/extundelete-0.2.4.tar.bz2
1 [root@vbok src]# wget http://pkgs.fedoraproject.org/repo/pkgs/extundelete/extundelete-0.2.4.tar.bz2/77e626ad31433680c0a222069295d2ca/extundelete-0.2.4.tar.bz2
1 [root@vbok src]# tar jxvf extundelete-0.2.4.tar.bz2
直接./configure make make install 但我运行./configure时报错:
1 [root@vbok src]# cd extundelete-0.2.42 [root@vbok extundelete-0.2.4]# ./configure 3 Configuring extundelete 0.2.44 configure: error: Can't find ext2fs library
提示 ext2fs library 少几个包的支持
1 [root@vbok extundelete-0.2.4]# yum -y install ext2fs
OK 在运行make三部曲
[root@vbok extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4Writing generated files to disk
当然如果你make完后就可以使用这个工具的
1 [root@vbok extundelete-0.2.4]# make2 make -s all-recursive3 Making all in src4 extundelete.cc:571: 警告:未使用的参数‘flags’
直接在~/src/extundelete --help
[root@vbok extundelete-0.2.4]# src/extundelete --help
或者在运行 make install 这时会安装到/usr/local/bin/extundelete 下
我还是推荐make完就成了。因为假如你要恢复的目录正好是/usr 那你就还需要在./configure下加参数。浪费时间效果一样
OK来演示下恢复吧
1 [root@vbok /]# df -h 2 文件系统 容量 已用 可用 已用%% 挂载点 3 /dev/mapper/vg_vbok-gen 4 25G 541M 23G 3% / 5 tmpfs 943M 232K 943M 1% /dev/shm 6 /dev/sdb1 485M 36M 424M 8% /boot 7 /dev/mapper/vg_vbok-home 8 20G 172M 19G 1% /home 9 /dev/mapper/vg_vbok-opt10 11G 156M 9.9G 2% /opt11 /dev/mapper/vg_vbok-usr12 39G 3.2G 34G 9% /usr13 /dev/sdb3 51G 16K 51G 1% /vfat
我在/opt下创建了个目录 “1“ 下面有多个子目录和文件。然后我将其删除。
(看看现在的时间)并回到extundelete 安装目录下将opt目录挂载为只读为了保护数据防止重写。
1 root@vbok /]# cd opt/ 2 [root@vbok opt]# ls 3 1 lost+found rh 4 [root@vbok opt]# date 5 2013年 10月 14日 星期一 16:44:55 CST 6 [root@vbok opt]# rm -rf 1 7 [root@vbok opt]# ls 8 lost+found rh 9 [root@vbok opt]# cd /usr/local/src/extundelete-0.2.410 [root@vbok extundelete-0.2.4]# mount -o remount,ro /dev/mapper/vg_vbok-opt
这里说下我要用到的参数 src/extundelete --help
1 --restore-directory 'path'2 Will restore directory 'path'. 'path' is relative to the3 --restore-all Attempts to restore everything.4 --after dtime Only process entries deleted on or after 'dtime'.5 --before dtime Only process entries deleted before 'dtime'.
第一个是 恢复目录 path为路径后面跟要恢复那个目录的路径
第二个是 恢复所有
第三个是 恢复dtime这个时间戳以后删除的文件
第四个是恢复这个时间戳以前删除的文件 (这里说下,卡时间恢复是非常好用的参数。你可以指定恢复那个时间到那个时间之间的数据)
基本这几个选项就够恢复了,当然还有--restore-files 参数来恢复单个文件。
OK开始
我上面在删除的时间date了下系统时间所以我就来生成下 删除前和删除后的时间戳用来定位我要恢复的目录,然后利用工具恢复删除的目录
[root@vbok extundelete-0.2.4]# date -d "2013-10-14 16:43" +%s1381740180[root@vbok extundelete-0.2.4]# date -d "2013-10-14 16:58" +%s 1381741080[root@vbok extundelete-0.2.4]# src/extundelete /dev/mapper/vg_vbok-opt --after /1381740180 --before 1381741080 --restore-directory 1
OK恢复完成,这里要注意的是在用恢复目录选项的时候,后面接的目录是以opt后的目录。也就是说 /dev/mapper/vg-vbox-opt 已经代表了/opt这个目录我们只需要接着写 opt后面的目录 例如要恢复/opt/1/2/3 这个目录 我们后面的路径为 1/2/3 就可以恢复3这个目录了 当然有时间戳指定时间段后就可以用--restore-all恢复这个时间段删除的所有数据了。OK
1 NOTICE: Extended attributes are not restored. 2 Loading filesystem metadata ... 86 groups loaded. 3 Loading journal descriptors ... 91 descriptors loaded. 4 Searching for recoverable inodes in directory 1 ... 5 9 recoverable inodes found. 6 Looking through the directory structure for deleted files ... 7 1 recoverable inodes still lost. 8 [root@vbok extundelete-0.2.4]# cd RECOVERED_FILES/ 9 [root@vbok RECOVERED_FILES]# LS10 -bash: LS: command not found11 [root@vbok RECOVERED_FILES]# ls12 113 [root@vbok RECOVERED_FILES]# cd 114 [root@vbok 1]# ls15 11 2216 [root@vbok 1]# cd 11/17 [root@vbok 11]# ls18 2 a19 [root@vbok 11]# cd ../22/c 20 -bash: cd: ../22/c: 不是目录21 [root@vbok 11]# cd ../22/c
数据 完好无损。
在讲/opt这个分区挂载回读写的,不会的可以reboot重启下也可以
这一步很重要,并且 在误删除文件后应尽快将磁盘挂载为只读。越早进行,恢复的成功机率就越大。
1. 查看被删除文件位于哪个分区
[root @localhost ~] # mount
/dev /mapper /VolGroup -lv_root on / type ext4(rw)
/dev /mapper /VolGroup -lv_home on /home type ext4(rw)
2. 尝试将对应目录重新挂载为只读
[root @localhost ~] # mount -r -n -o remount /home
mount : /home is busy
3. 如果显示 xxx is busy
[root @localhost ~ ] # fuser -v -m /data
找出相关进程,kill.
4. 成功将目录挂载为只读
[root @localhost ~ ] # mount -r -n -o remount /home
此时在/home目录 touch 文件时,会报错:
[root @localhost ~ ] # touch txt
touch : cannot touch `txt’ : Read -only file system
之前尝试了debugfs + dd,未果。
后来安装 extundelete-0.2.4 ,:
(1) 因为sourceforge被墙,服务器上直接wget不成功,所以只能在本地翻 墙下载,链接如下:
http://superb-dca2.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
(2) 把下载的文件放到服务器
启动本地的nginx,然后在服务器上wget(当然通过其它方法也可以,只要能传到服务器):
wget http ://本机IP /extundelete -0. 2. 4.tar.bz2
(3) 解压
tar jxf extundelete - 0 . 2 . 4 .tar.bz2
(1) configure
[root @localhost extundelete -0. 2. 4] # ./configure
configure时报错,看了下config.log,确定是本机没编译环境 。
yum -y install gcc+ gcc-c++
等待,有一点慢。
安装完成后,再次config,依然报错
Configuring extundelete 0. 2. 4
configure : error : Can’t find ext2fs library
这是因为extundelete依赖e2fsprogs。
安装e2fsprogs后再次configure,成功。
[root @localhost extundelete -0. 2. 4] # yum install e2fsprogs-devel
[root @localhost extundelete -0. 2. 4] # ./configure
Configuring extundelete 0. 2. 4
Writing generated files to disk
(2) make & make install
[root @localhost extundelete -0. 2. 4] #make & make install
如果没有异常信息,基本说明安装成功.
(3) 可以到src目录验证下.
[root @localhost extundelete -0. 2. 4] # cd src
[root @localhost src] # ./extundelete
No action specified; implying --superblock.
. /extundelete : Missing device name.
Usage : . /extundelete [options] [ --] device -file
.............
[root @localhost src]# ./extundelete -v
extundelete version 0.2.4
libext2fs version 1.41.12
Processor is little endian.
如上信息,证明安装成功。
下面才真正开始数据恢复。
(如果原服务器磁盘空间够大,可以跳过这一步。)
因为被误删的数据很大(约200G),原服务器所在的物理机上也没有磁盘空间了。因些需要到远程挂载另一台服务器B上的磁盘,B是xen虚出的机器,空间也不够,但所在的物理机上还有磁盘空间,这时需要从宿主机上分空间给B。
因为是图形操作,就不再细说。只需分配足够大的空间就可以了,我当时选的是300G。
(1) 查看新磁盘是否已挂载
[nmen @dev -ubuntu -server] ls /dev /sd *
/dev /sda /dev /sda1 /dev /sda2 /dev /sda5 /dev /sda6 /dev /sda7 /dev /sda8 /dev/sdb
/dev/sdb确实已挂载。
此时新盘是未分区,也未格式化,因此需要先进行这两件事。
(2) 分区
下图是hdb的硬盘,sdb的盘也一样的操作。
(本图来自: http://www.shyw.net/bbs/yxt443333-1-1.html)
(3) 格式化
[nmen @dev -ubuntu -server] :~$ sudo mkfs -t ext3 /dev/sdb1
mke2fs 1. 41. 11 ( 14-Mar -2010)
Filesystem label =
OS type : Linux
Block size =4096 (log =2)
Fragment size =4096 (log =2)
Stride =0 blocks, Stripe width =0 blocks
22937600 inodes, 91749215 blocks
4587460 blocks ( 5.00 %) reserved for the super user
First data block =0
Maximum filesystem blocks =4294967296
2800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968
Writing inode tables : done
Creating journal ( 32768 blocks) : done
Writing superblocks and filesystem accounting information : done
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
显示以上信息说明已成功格式化。
(4) 设置卷标
sudo e2label /dev /sdb1 /restore
(5) 挂载
[nmen @dev -ubuntu -server] :~$ mkdir /restore
[nmen @dev - ubuntu - server] : ~ $ mount -vl -t ext3 /dev /sdb1 /restore
至此服务器B上挂载新硬盘结束,现在有足够空间来做存放要恢复的数据了。
通过网络, 将远程主机B共享的文件系统,挂载到需要做数据恢复的机器A。
(1) 安装
B是ubuntu系统,默认没安装nfs.
# sudo apt-get install nfs-kernel-server
(2) 配置
修改/etc/exports , 添加如下语句。
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#
/restore *(rw,sync,no_root_squash,no_subtree_check)
其中 :
/restore -- 需要与客户机共享的目录;
* -- 表示任何主机均可访问本目录,也可指定IP;
(w,sync,no_root_squash,no_subtree_check) -- 配置客户机的权限;
因为是临时使用,并且是服务器位于内网,所以设置相对随意。
(3) 使配置生效
# exportfs –rv
# /etc/init.d/nfs-kernel-server restart
(4) 验证是否配置成功
显示NFS服务器输出目录列表:
nmen @dev -ubuntu -server : showmount -e
Export list for chinahrd -ubuntu -dev :
/restore *
(5) 防火墙
因为时间紧急,并且是内网,所以临时关闭了B上的防火墙:
sudo ufw disable
可通过以下命令启用防火墙:
sudo ufw enable
将/restore目录从服务器 B 挂载到 /mnt 上。
mount -t nfs [B的IP] :/restore /mnt
命令详解如下:
# mount -t nfs [-o mount-options] server:/directory /mount-point
-o mount -options
指定可以用来挂载 NFS 文件系统的挂载选项。
server :/directory
指定包含共享资源的服务器主机名,以及要挂载的文件或目录的路径。
/mount -point
指定要挂载文件系统的目录。
这一步不是必须,但这个有助于更快的回复想要的数据。
date -d "Fri Apr 15:40:00 2014" +%s
1397202000
1397202000这个时间值,我们后期会用到。
# extundelete /dev/sdb1 --inode 2
File name | Inode number | Deleted status
. 9
.. 11
lost+found 24 Deleted
data 82 Deleted
一个分区挂载到一个目录下时,”根”目录的inode值为一般是2。
状态为deleted的是被删除的文件。
进入刚mount的远程目录/restore;
指定--after "1397202000", 表示恢复这个时间点之后的文件;
文件默认会被恢复到当前目录下的RECOVERED_FILES目录中。
cd /restore
[root @localhost restore]#[extundelete的安装路径] ./extundelete --restore-all --after "1397202000" /dev /mapper /VolGroup -lv_home
Only show and process deleted entries if they are deleted on or after 1397202000 and before 9223372036854775807.
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 6924 groups loaded.
Loading journal descriptors ... 27149 descriptors loaded.
Searching for recoverable inodes in directory / ...
696 recoverable inodes found.
Looking through the directory structure for deleted files ...
Unable to restore inode 27394319 (VMware/9.50_ps/9.55locate.vmx.lck): Space has been reallocated.
Unable to restore inode 27402241 (VMware/9.35win7/9.35win7.vmx.lck): Space has been reallocated.
Unable to restore inode 27396032 (VMware/9.35win7/9.35win7-Snapshot1.vmsn): No undeleted copies found in the journal.
Unable to restore inode 27394051 (VMware/9.36win2008/9.36win2008R2.vmx.lck/E00633.lck): Space has been reallocated.
Unable to restore inode 27394603 (lost+found/E09292.lck): Space has been reallocated.
8 recoverable inodes still lost.
一般来说,要等很久。。。
cd restore /RECOVERED_FILES$
ls
110_open_dns 111_open_dns_node1 112_DNS_node2 116_svn
删除的文件回来了,至此松一口气。
(1) 重新挂载A上的磁盘为可读写:
[root @localhost src] # mount -o remount, rw /home/
卸载服务器B上的目录。
(2) 开启B的防火墙。
sudo ufw enable
(3) 在A上对rm命令启用别名,防止沉默式删除。
vi /etc /bashrc
source /etc/bashrc
# do not delete / or prompt if deleting more than 3 files at a time #
alias rm = 'rm -I --preserve-root'
# confirmation #
alias mv = 'mv -i'
alias cp = 'cp -i' alias ln = 'ln -i'
# Parenting changing perms on / #
alias chown = 'chown --preserve-root'
alias chmod = 'chmod --preserve-root'
alias chgrp = 'chgrp --preserve-root'
(4) 在B上使用Rsync,定期备份A上数据。
参考: http://abloz.com/2013/09/12/linux-rm-rf-file-recovery-record.html
About Me
........................................................................................................................ ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除 ● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr)上有同步更新 ● 本文itpub地址: http://blog.itpub.net/26736162 ● 本文博客园地址: http://www.cnblogs.com/lhrbest ● 本文CSDN地址: https://blog.csdn.net/lihuarongaini ● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/ ● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826 ........................................................................................................................ ● QQ群号: 230161599 、618766405 ● 微 信群:可加我微 信,我拉大家进群,非诚勿扰 ● 联系我请加QQ好友 ( 646634621 ),注明添加缘由 ● 于 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成 ● 最新修改时间:2019-08-01 06:00 ~ 2019-08-31 24:00 ● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解 ● 版权所有,欢迎分享本文,转载请保留出处 ........................................................................................................................ ● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麦苗OCP、OCM、高可用网络班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 小麦苗腾讯课堂主页: https://lhr.ke.qq.com/ ........................................................................................................................ 使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。
........................................................................................................................ |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2655565/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26736162/viewspace-2655565/