一、 Linux运维人员学会备份相当重要node
删除文件恢复mysql
第一种状况:linux
当前系统有多个用户,其中一个用户对文件进行修改,则另外一个用户对文件进行了删除操做,那么,这时候如何进行操做?sql
解决方法:后端
经过文件打开的PID以及打开文件的文件句柄运维
lsof | grep –i deleteide
cp /proc/file_pid/fd/句柄 /path/file_name工具
删除之后不要再对磁盘进行任何操做 以避免恢复不可逆this
1. 在linux打开一个文件有一个对应的文件进程id生成在proc下面 只要进程id存在 即便文件被删除咱们根据进程id就能够恢复spa
实验: 启用两个登陆 并都是root用户登陆
Cp /etc/issue . 此时的点表示当前目录 将etc下的issue文件复制到当前目录
用户1:cat >> issue 并输入this is test
用户2: rm –rf issue
ls查看是否被删除
lsof –i |grepdelete Lsof查看进程号 lsof | grep –i delete 查看我后端有哪些文件被删除
cd /proc/2747/fd/
cp 1 /tmp/issue 复制后并查看cat/tmp/issue 此时的1为上一命令的句柄
解释: cat说明是一个命令 2747是pid root用户操做的
1w 打开文件进程它所使用的一个文件句柄 根据这个恢复
最后面字段的意思 我打开一个文件 状态是deleted状态 可是有进程存在
第二种状况:
当前系统只有一个用户在登陆,对文件进行了误删除操做,那么这个时候如何进行操做 前提该文件系统为日志文件系统
注意事项以及解决思路:
1. 中止对当前分区作任何操做 防止其余文件把删除文件的inode值覆盖
2. 经过dd命令对当前分区进行备份,防止经过第三方软件恢复失败,形成数据的丢失
dd if=/path/filename of=/dev/sdb1
3. 经过umount对当前设备分区基于卸载 umount /dev/sda or umount /mount_point
4. 下载并安装第三方开源工具,进行对丢失的文件进行搜索并进行还原
5.
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
6. 编译安装 安装此软件时必须安装依赖的库文件 yum install e2fsprogs* -y
对源码包解压
相应的命令进行对源码文件配置属性 ./configure or cmake(对mysql编译的时候用的到)
make && make install 编译以及编译安装
extundelete相关命令安装成功后而后利用这个命令对咱们丢失文件所在的目录或者设备进行全文搜索
1. extundelete –node 2/dev/sdb1
2. extundelete –restore-inodeinode /dev/sdb1
3. extundelete –restore-all /dev/sdb1
4. 文件目录 时间 extundelete --help
实验:
1. 创建一单独的分区为日志文件系统 并挂载
blkid /dev/sdb1 查看是否为日志文件系统
mount /dev/sdb1/root/test
2. mkdir /root/test/test_directory –p
cp/etc/passwd /etc/issue /etc/inittab . 复制三个文件到test_directory目录
rm –rf test_directory/
umount /dev/sdb1
3. wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar–jxf *****.bz2
安装以前安装依赖包yuminstall e2fsprogs* -y
make时候提示 如下警告忽略
4.安装成功后
1. extundelete –node 2/dev/sdb1
2. extundelete –restore-inodeinode /dev/sdb1 恢复特定inode号文件
3. extundelete –restore-all /dev/sdb1 恢复全部文件
恢复后为 挂载
mount /dev/sdb1 /root/test
将一下三个文件拷贝到原有文件系统sdb1