为甚serve 修改dev不能跑_学会这个骚操作,再也不怕从删库到跑路

da8bb17058df0f8123b177302ecc85c9.png

@[toc]

删库是不可能删库的,这辈子都不可能删库的,删根行吗? 满足你:

[root@zmgaosh ~

83f87802b471b2b11f16bc9f5f839b57.png
写在前面: 博主是一名投身教培事业的标准八零后,叛逆而且追求自由,昵称取自于苏轼的《水调歌头》中的“高处不胜寒”,时刻提醒自己要耐得住寂寞,受的了孤独,在技术的道路上,不畏艰难,勇往直前。 我已经将全部的linux运维体系整理到了gitee上, https:// gitee.com/gaosh08/Linux Family 欢迎star,投稿,交流,后续还会有python系列和java系列。

今天我们不删数据库,我们来聊聊误删除文件如何能不能恢复?

  • [ ] 能
  • [ ] 不能

你选哪个,答案是能,这事我们得先从原理讲起

Linux操作系统文件删除原理

Linux文件系统由三部分组成:文件名,inode,block

zmedu.txt -->inode --> block 文件名 存放文件元数据信息 真正存放数据

文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。
文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
我们访问的任何数据,都是先找到inode,然后根据inode去找到相应硬盘的位置。如果没有inode号,就无从找到硬盘上的数据。

这个inode号在哪里呢?

[root@zmgaosh ~

从上个例子看一看到b.txt的inode号是262170

-在inode里面包含的元信息,具体内容如下:

  • Size 文件的字节数
  • Uid 文件拥有者的User ID
  • Gid 文件的Group ID
  • Access 文件的读、写、执行权限 文件的时间戳,共有三个: Change 指inode上一次变动的时间 Modify指文件内容上一次变动的时间 Access 指文件上一次打开的时间
  • Links 链接数,即有多少文件名指向这个inode
  • Inode文件数据block的位置
  • Blocks 块数
  • IO Blocks 块大小
  • Device 设备号码

我们还可以通过stat来查看inode的信息

[root@zmgaosh ~

敲黑板: 在Linux操作系统中,文件名只是inode号码便于识别的绰号,操作系统通过inode号来识别文件,而非文件名。

作为用户我们打开一个文件,在系统内部的流程是这样的: 1. 系统找到这个文件名对应的inode 号码 2. 通过inode号码,获取inode信息 3. 根据inode信息,找到文件数据所在的block,读出数据

同样的Linux系统是通过link的数量来控制文件删除的,删除指的是文件名到inode的链接被删除了,但是文件在磁盘上的block数据块并未被删除。

所以我们想要恢复,只需要恢复对应的inode节点号就可以恢复数据,但前提是,数据没有被覆盖掉。 那么问题来了: 误删除文件之后,我们第一时间要做的事情是什么?

  • [ ] 辞职跑路
  • [ ] 卸载要恢复的文件分区
  • [ ] 要恢复的分区以只读的形式挂载

跑路是不可能跑路的,这辈子都不会跑路的!

6c13a3945ac85a90c20c2c77df9aade3.png

如果误删除文件或者数据我们怎么办?

既然事情已经发生,作为运维我们只能上手解决,还好我遇到了它。extundelete

2b6ae6e23096c967ad5cd5792b70692a.png

下载网址:http://sourceforge.net/

实验思路:

  1. 虚拟机新加一块硬盘(此硬盘用于创建数据,删除数据,恢复数据的模拟)
  2. 对新加的硬盘sdb进行分区,格式化,以及挂载
  3. 在新盘上进行创建数据,然后删除数据
  4. 对数据进行恢复

1 . 新加硬盘

39d57b1bb1a4c5e7d90f00a6612fd011.png

a2a619914903f940da91b5a4e884f811.png

df11fe0828ebe16f00b76a63a6f5ecc8.png

909dc00f721fd2098ba29ebdbd160739.png

abb86c625c9de2e23efb249096c99a19.png

ed3918d9a8d7070c20937858b0ced5ec.png

8044509dff94f146f30652db8e3ceb71.png

2. 进行分区

[root@gaosh63 /

[root@gaosh63 ~]#reboot 或 [root@gaosh63 ~]# partx -a /dev/sdb #获得新分区表

3. 使用新的分区表,格式化并挂载:

[root@gaosh63 /

4. 复制一些测试文件,然后把这些文件删除,然后演示恢复:

[root@gaosh63 ~

开始删除文件:

[root@gaosh63 ~

误删除文件后我们要第一时间卸载分区或者以只读方式挂载:

[root@localhost ~

5. 安装extundelet 进行文件的恢复操作

1) 上传extundelete到linux中:

2) 解压并安装extundelte

[root@gaosh63 extundelete-0.2.4

3) 尝试进行恢复

方法1:通过inode结点恢复 方法2:通过文件名恢复 方法3:恢复某个目录,如目录a下的所有文件: 方法4:恢复所有的文件

[root@gaosh63 ~

首先我们要通过inode结点找到被删除的文件名:

[root@gaosh63 test

然后我们开始恢复:

方法1:通过inode结点恢复

[root@gaosh63 test

查看是否与源文件一样:

[root@gaosh63 test

0827c48180afd45a012d487bc81b1dd0.png

方法2:通过文件名恢复

[root@gaosh63 test

方法3:恢复某个目录,如目录a下的所有文件:

[

]

下面是原来的目录结构:

├── a.txt
└── b
    ├── a.txt
    ├── c
└── kong.tx

由上图可见空文件是无法恢复的。

方法4:恢复所有的文件

[root@gaosh63 test

总结:备份数据是王道

当数据被误删(一般指的是物理文件损坏或者rm导致的误删)造成数据丢失,你会如何处理?

  • 如果有备份,可以通过mysqldump+binlog来实现全量恢复,xtrabackup来实现增量恢复
  • 没有备份但是做了主从同步,或者双主结构,可以把从库提升为主库来恢复数据
  • 如果你们公司没有备份,也没有从库,可以通过extundelete来恢复数据。

切记:任何补救措施都是事故,并不会显得有多高大上,高大上的运维应该是做好线上线下运维规范,确保不出现运维事故。

b119ec4b895beab337a36ae1464d175c.gif
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值