rm -rf / #此方法删除不了/目录;

rm -rf /* #此方法可以删除/目录下的所有内容,禁止使用;

40.1、前言:

作为一个多用户、多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的。尽管删除命令只是在文件节点中作删除标记,

并不真正清除文件内容,但是其他用户和一些有写盘动作的进程会很快覆盖这些数据。不过,对于家庭单机使用的Linux,或者误删

文件后及时补救,还是可以恢复的。

40.2、文件误删除情况一:

当前系统有多用户,其中一个用户对文件进行修改,另一个用户对文件进行删除操作,此时该文件

的进程id还是存在的通过以下命令进行恢复;

1、窗口一:

[root@nfs01 ~]# cd /tmp

[root@nfs01 tmp]# echo 'test' >test.txt

[root@nfs01 tmp]# cat test.txt

test

[root@nfs01 tmp]# cat >>test.txt

1

2

3

2、窗口二:

[root@nfs01 ~]# rm -vf /tmp/test.txt

已删除"/tmp/test.txt"

[root@nfs01 ~]# ls /tmp

[root@nfs01 ~]#

[root@nfs01 ~]# lsof | grep -i "delete"

cat 4715 root 1w REG 8,2 7 131075 /tmp/test.txt (deleted)

正在使用的命令 pid进程号 root用户 打开的文件句柄 /tmp/test.txt文件是delete状态

[root@nfs01 ~]# ls /proc/4715/fd

0 1 2

[root@nfs01 ~]# cp -v /proc/4715/fd/1 /tmp/test.txt

"/proc/4715/fd/1" -> "/tmp/test.txt"

[root@nfs01 ~]# ls /tmp

test.txt

[root@nfs01 ~]# cat /tmp/test.txt

test

1

2

3

3、对于一个正在使用的vim编辑的文件的用户,文件被其他用户删除后,编辑的用户保存文件后,文件依旧存在;

40.3、文件误删除情况二:

1、当前系统只有一个用户在登录,对文件进行了误删除操作(如果有多个用户进入单用户模式);

2、当前的测试环境:

(1)使用fdfisk /dev/sdb命令创建一个/dev/sdb1主分区并挂载到 /test/目录下;

[root@nfs01 ~]# df -hT

Filesystem Type Size Used Avail Use% Mounted on

/dev/sda2 ext4 57G 5.4G 49G 10% /

tmpfs tmpfs 297M 0 297M 0% /dev/shm

/dev/sda1 ext4 190M 36M 145M 20% /boot

/dev/sdb1 ext4 2.0G 3.0M 1.9G 1% /test

(2)生成测试文件和目录:

[root@nfs01 ~]# cd /test/

[root@nfs01 test]# echo 'lc_2018/9/14' >lc_test.txt

[root@nfs01 test]# mkdir test

[root@nfs01 test]# echo 'mkdir test' >test/dir.txt

[root@nfs01 test]# tree

.

├── lc_test.txt

├── lost+found

└── test

└── dir.txt

2 directories, 2 files

(3)删除/test/目录中的内容:

[root@nfs01 test]# rm -rvf test/ lc_test.txt

已删除"test/dir.txt"

已删除目录:"test"

已删除"lc_test.txt"

[root@nfs01 test]# ls

lost+found

3、注意事项及解决思路:

(1)停止对当前分区进行任何操作,防止inode值被覆盖;

(2)通过dd命令对当前分区进行备份,防止通过第三方软件恢复失败,造成数据丢失;

[root@nfs01 test]# dd if=/dev/sdb1 of=/tmp/sdb1_test.bak

记录了4194303+0 的读入

记录了4194303+0 的写出

2147483136字节(2.1 GB)已复制,71.7973 秒,29.9 MB/秒

(3)对当前的分区进行卸载;

[root@nfs01 ~]# umount /dev/sdb1

[root@nfs01 ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda2 57G 7.4G 47G 14% /

tmpfs 297M 0 297M 0% /dev/shm

/dev/sda1 190M 36M 145M 20% /boot

(4)下载并安装第三方开源工具;

下载地址:http://zy-res.oss-cn-hangzhou.aliyuncs.com/server/extundelete-0.2.4.tar.bz2

[root@nfs01 tools]# rz -y

rz waiting to receive.

Starting zmodem transfer. Press Ctrl+C to cancel.

Transferring extundelete-0.2.4.tar.bz2...

100% 105 KB 105 KB/sec 00:00:01 0 Errors

[root@nfs01 tools]# tar -xjf extundelete-0.2.4.tar.bz2

[root@nfs01 tools]# cd extundelete-0.2.4

[root@nfs01 extundelete-0.2.4]# ./configure --prefix=/application/extundelete0.2.4

Configuring extundelete 0.2.4

configure: error: Can't find ext2fs library

[root@nfs01 extundelete-0.2.4]# yum install e2fsprogs-devel e2fsprogs -y

[root@nfs01 extundelete-0.2.4]# rpm -qa e2fsprogs-devel e2fsprogs

e2fsprogs-1.41.12-24.el6.x86_64

e2fsprogs-devel-1.41.12-24.el6.x86_64

[root@nfs01 extundelete-0.2.4]# ./configure --prefix=/application/extundelete0.2.4 #参数配置;

Configuring extundelete 0.2.4

Writing generated files to disk

[root@nfs01 extundelete-0.2.4]# make #编译;

make -s all-recursive

Making all in src

extundelete.cc:571: 警告:未使用的参数‘flags’ #忽略此错误

[root@nfs01 extundelete-0.2.4]# echo $?

0

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

Making install in src

/usr/bin/install -c extundelete '/application/extundelete0.2.4/bin'

(5)数据恢复

[root@nfs01 extundelete-0.2.4]# cd /application/extundelete0.2.4/bin/

1)查询/dev/sdb1分区可恢复的数据信息,标记为deleted状态的是已经删除的文件或目录;

[root@nfs01 bin]# ./extundelete /dev/sdb1 --inode 2

........................................................................

File name | Inode number | Deleted status

. 2

.. 2

lost+found 11

lc_test.txt 12 Deleted

test 8193 Deleted

文件名 inode值 文件的状态

2)恢复单个文件:

[root@nfs01 bin]# ./extundelete /dev/sdb1 --restore-file lc_test.txt

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 16 groups loaded.

Loading journal descriptors ... 47 descriptors loaded.

Successfully restored file lc_test.txt

#恢复的文件在当前目录下的“RECOVERED_FILES”目录中;

[root@nfs01 bin]# ls RECOVERED_FILES/

lc_test.txt

3)恢复单个目录:

[root@nfs01 bin]# ./extundelete /dev/sdb1 --restore-directory test

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 16 groups loaded.

Loading journal descriptors ... 47 descriptors loaded.

Searching for recoverable inodes in directory test ...

3 recoverable inodes found.

Looking through the directory structure for deleted files ...

2 recoverable inodes still lost.

[root@nfs01 bin]# ls RECOVERED_FILES/

lc_test.txt test

[root@nfs01 bin]# ls RECOVERED_FILES/test/

dir.txt

4)恢复所有的文件和目录:

[root@nfs01 bin]# ./extundelete /dev/sdb1 --restore-all

NOTICE: Extended attributes are not restored.

Loading filesystem metadata ... 16 groups loaded.

Loading journal descriptors ... 47 descriptors loaded.

Searching for recoverable inodes in directory / ...

3 recoverable inodes found.

Looking through the directory structure for deleted files ...

0 recoverable inodes still lost.

如果重复恢复的话,不会覆盖之前恢复目录中的文件,会生成filename_v1....的形式进行

(6)挂载磁盘并拷贝数据:

[root@nfs01 bin]# mount /dev/sdb1 /test

[root@nfs01 bin]# mount

/dev/sdb1 on /test type ext4 (rw)

[root@nfs01 bin]# cp -av RECOVERED_FILES/* /test/

"RECOVERED_FILES/lc_test.txt" -> "/test/lc_test.txt"

"RECOVERED_FILES/test" -> "/test/test"

"RECOVERED_FILES/test/dir.txt" -> "/test/test/dir.txt"

[root@nfs01 bin]# ls /test

lc_test.txt lost+found test

40.4、内容补充:

1、lost+found:

几乎每个被格式化过的Linux分区都会有,意外后(非正常关机等)找回的文件一般在这里面。这个目录

是储存发生意外后丢失的文件的,只有root用户才能打开。如果删除了该文件夹,生成的命令是mklost+found;

2、fsck分区修复:

修复分区之前需要卸载分区;

(1)如果Linux分区有损坏情况,启动有问题,不能正常进入文本或图形界面。那么一般会出现提示,需要输入Root密码登录后采用

fsck -t ext4 /usr/local可以修复;

(3)fsck -t ext4 /dev/sdb 修复系统分区无法挂载的情况;

报错:mount: wrong fs type, bad option, bad superblock on /dev/mapper/oraclevg-oraclelv,

missing codepage or helper program, or other error

In some cases useful info is found in syslog - try

dmesg | tail or so

(3)fsck命令详解:

-t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数

-s : 依序一个一个地执行 fsck 的指令来检查

-A : 对/etc/fstab 中所有列出来的 partition 做检查

-C : 显示完整的检查进度

-d : 列印 e2fsck 的 debug 结果

-p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行

-R : 同时有 -A 条件时,省略 / 不检查

-V : 详细显示模式

40、Linux文件误删除恢复操作的更多相关文章

  1. Linux文件误删除恢复操作

    作为一个多用户.多任务的操作系统,Linux下的文件一旦被删除,是难以恢复的.尽管删除命令只是在文件节点中作删除标记,并不真正清除文件内容,但是 其他用户和一些有写盘动作的进程会很快覆盖这些数据.不过 ...

  2. Linux下文件误删除恢复案例

    说明:将/etc/profile文件删除,然后恢复 在linux中为什么讲文件删除还能恢复呢? 详见:文件删除原理 http://blog.csdn.net/grantlee1988/article/ ...

  3. centos文件误删除恢复

    Centos 文件误删除 当意识到误删除文件后,切忌千万不要再频繁写入了,否则 你的数据恢复的数量将会很少. 而我们要做的是,第一时间把服务器上的服务全部停掉,直接killall 进程名 或者 kil ...

  4. Linux 下误删除恢复,(文件名无法找回)

    手贱命令写错了,直接把一个目录下的文件全删了,用下面的方法虽然恢复了,但是还是有几个文件没有找回来...(可以找回,但是要在另一个盘进行操作) 如果不小心用rm –rf xxx删除了文件或目录,在ex ...

  5. Linux 文件类型及操作

    一.  文件类型 1.Linux文件类型如下图所示: 2.Linux文件类型有许多种,不同的文件类型代表特殊意义,使用以下命令可以查看文件类型: [root@VMredhat6 ~]# ls  -l  ...

  6. Linux文件的IO操作 一

    系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

  7. Linux文件误删恢复

    一.需求研究 分析对比debugfs.testdisk 6.14.extundelete,对比各自官网介绍和操作说明本次决定研究extundelete对文件和目录的恢复操作. 二.项目内容 1.工具安 ...

  8. Linux文件与目录操作 ls 命令(2)

    说文件操作是最频繁地操作也不为过,在Linux中,使用ls命令可以列出当前目录中所有内容,本篇就先说说ls命令.本文所说的文件指文件和目录. ls命令常用选项 -a:显示指定目录下所有子目录与文件,包 ...

  9. linux 文件和目录操作

    1 相对路径和绝对路径 (与C++中概念相似) cd /root/cat 绝对路径 cd ../文件名/ 相对路径,指相对某个文件而言的 2 切换目录 cd  当前目录 进入某个目录 pwd 显示当前 ...

随机推荐

  1. [刷题] 300 Longest Increasing Subsequence

    要求 给定一个整数序列,求其中的最长上升子序列长度 子序列元素可不相邻 元素相等不算上升 一个序列可能有多个最长上升子序列,但最长的长度只有一个 思路 暴力解法:选择所有子序列进行判断((2^n)*n ...

  2. Ubuntu 配置本地源

    Ubuntu 配置本地源 操作系统 Ubuntu 20.04.2 LTS 一.挂载 iso 到本地 mount -t iso9660 -o loop /dev/sr0 /media/cdrom //- ...

  3. CAP 与数据一致性

    分布式系统的假设是,工作在网络环境下的系统拥有多个节点,而这些节点本身会由于各种原因而变得不稳定.这其中就有一个非常重要的概念--CAP原理.这个原理指导着大多数分布式系统的设计过程,CAP原理大致是 ...

  4. haproxy env 安装与基础配置

    1. 安装 Use docker.package or source installations to install 第三方仓库 https://pkgs.org/download/haproxy ...

  5. Python数学建模-02.数据导入

    数据导入是所有数模编程的第一步,比你想象的更重要. 先要学会一种未必最佳,但是通用.安全.简单.好学的方法. 『Python 数学建模 @ Youcans』带你从数模小白成为国赛达人. 1. 数据导入 ...

  6. Spring Boot - 自定义 Banner 图案

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 前言 ...

  7. Log4j实战,依赖分析

    背景 在项目中经常被log4j的各种依赖冲突搞的焦头烂额,久病成良医啊,在这里记录一下我对log4j的理解与分析 log4j 与 log4j2 log4j2是log4j的升级版,二者互不兼容,据说lo ...

  8. [源码解析] 深度学习分布式训练框架 Horovod (1) --- 基础知识

    [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 目录 [源码解析] 深度学习分布式训练框架 Horovod --- (1) 基础知识 0x00 摘要 0x01 分布式并 ...

  9. python 定时任务APScheduler 使用介绍

    python 定时任务APScheduler 使用介绍   介绍: APScheduler的全称是Advanced Python Scheduler.它是一个轻量级的 Python 定时任务调度框架. ...

  10. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...