内容摘要:恢复系统中删除的文件是一个非常繁琐的过程,而 e2undel 这个工具可以用来方便地恢复文件系统中已删除的文件。本文将首先讨论 e2undel 的工作原理和用法,并对之进行一些改进。然后讨论了文件系统故障、文件系统重建、磁盘物理损坏等情况下应该如何恢复数据。
_init 和 _fini 这两个函数分别在打开和关闭动态链接库时执行,分别用来打开和关闭日志文件。如果某个命令(例如 rm)执行了 rmdir 系统调用,就会被这个库接管。rmdir 的处理比较简单,它先搜索到真正的 rmdir 系统调用的符号表,然后使用同样的参数来执行这个系统调用,如果成功,就将有关索引节点和文件名之类的信息记录到日志中(默认是 /var/e2undel/ e2undel)。
这个库的使用非常简单,请执行下面的命令:
清单6. libundel 的设置
# cp libundel.so.1.0 /usr/local/lib
# cd /usr/local/lib
# ln -s libundel.so.1.0 libundel.so.1
# ln –s libundel.so.1.0 libundel.so
# ldconfig
# mkdir /var/e2undel
# chmod 711 /var/e2undel
# touch /var/e2undel/e2undel
# chmod 622 /var/e2undel/e2undel
上面的设置仅仅允许 root 用户可以恢复文件,如果希望让普通用户也能恢复文件,就需要修改对应文件的权限设置。
现在尝试以另外一个用户的身份来删除些文件:
清单7. 设置libundel之后删除文件
$ export LD_PRELOAD=/usr/local/lib/libundel.so
$ rm -rf e2undel-0.82
要想记录所有用户的删除文件的操作,可以将 export LD_PRELOAD=/usr/local/lib/libundel.so 这行内容加入到 /etc/profile 文件中。
现在使用 e2undel 来恢复已删除的文件就变得简单多了,因为已经可以通过文件名来恢复文件了:
清单8. e2undel 利用 libundel 日志恢复删除文件
# ./e2undel -a -t -d /dev/sda2 -s /tmp/recover/
./e2undel 0.82
Trying to recover files on /dev/sda2, saving them on /tmp/recover/
/dev/sda2 opened for read-only access
/dev/sda2 was not cleanly unmounted.
Do you want wo continue (y/n)? y
489600 inodes (489531 free)
977956 blocks of 4096 bytes (941559 free)
last mounted on Fri Dec 28 20:45:05 2007
reading log file:
found 24 entries for /dev/sda2 in log file
searching for deleted inodes on /dev/sda2:
|==================================================|
489600 inodes scanned, 26 deleted files found
checking names from log file for deleted files: 24 deleted files with names
user name | 1 <12 h | 2 <48 h | 3 <7 d | 4 <30 d | 5 <1 y | 6 older
-------------+---------+---------+---------+---------+---------+--------
root | 0 | 0 | 0 | 2 | 0 | 0
phost | 24 | 0 | 0 | 0 | 0 | 0
Select user name from table or press enter to exit: phost
Select time interval (1 to 6) or press enter to exit: 1
inode size deleted at name
-----------------------------------------------------------
310083 0 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82
310113 2792 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/BUGS
310115 3268 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/HISTORY
310116 1349 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/INSTALL
310117 1841 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/INSTALL.de
310118 2175 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/Makefile
310119 12247 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/README
310120 9545 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/README.de
310121 13690 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/apprentice.c
310122 19665 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/ascmagic.c
310123 221 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/common.h
310124 1036 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/compactlog.c
310125 30109 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/e2undel.c
310127 2447 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/e2undel.h
310128 1077 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/file.c
310129 2080 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/file.h
310130 4484 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/find_del.c
310131 2141 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/is_tar.c
310132 2373 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/libundel.c
310133 7655 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/log.c
310134 39600 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/magic.h
310135 4591 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/names.h
310136 13117 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/softmagic.c
310137 5183 Dec 29 17:23 2007 /tmp/test/undel/e2undel-0.82/tar.h
来源:ibm 作者:冯锐 王磊 责编:豆豆技术应用
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- redhat/Fedora
- Ubuntu Linux
- IBM AIX
- FreeBSD
- Solaris
- NetBSD
- SCO Unix
- find基本用法
- ldd命令原理及用法例子
- su和sudo命令的区别与使用技巧
- Linux操作系统下的dd命令技巧
- 关于Top命令的参数详解
- 关于Tar命令的使用
- SSH实用技巧及常用命令使用
- Linux后台执行命令
- VI命令使用技巧集锦
- Vmstat命令列出的属性详解
- 如何查看及修改文件读写权限
- 最大可存储的单文件容量
- ext2/ext3文件系统介绍
- 常用压缩格式的压缩解压方法
- Linux系统的引导过程详细解析
- Configure参数解释说明
- Linux下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法