【转载】深入理解Linux文件系统
1.rm-rf删除目录里的文件后,为什么可以恢复?
首先创建一个空目录test,目录的blocksize为4096字节
为了空目录还是4096?首先,目录的大小取决它所包含的文件的inode(访问时间,文件的字节数,uid和gid),4096的大小是在建立文件系统时规划的。可以使用dumpe2fs查看
看到根分区的blocksize是默认4096
下面继续,我们在新建的test目录里创建1000个文件
1
|
for ((i= 0 ; i< 1000 ; i++)); do touch file$i; done |
由于创建了1000个新文件,所以test目录的blocksize也变大了,随即我们把test目录下的所有文件删除,再次查看test目录发现,目录里为空,但是目录本身的bocksize仍然不变,这也就是我们“数据恢复”的原理:因为rm-rf只是删除了directoryentry相关的描述符(dirfd)而datablocks,inodes和metadata仍然存在磁盘里。
可以使用stace查看我的想法,rm-rf过程中主要调用unlinkat()和fstatat64()两个systemcall
fstatat()这个systemcall作用是getfilestatusrelativetoadirectoryfiledescriptor
unlinkat()这个systemcall作用是removeadirectoryentryrelativetoadirectoryfiledescriptor
可以看出删除的过程中只是获取与目录文件描述信息有关的文件状态并且删除directoryentry对应的文件描述符(其实“目录”的内容就是一长串directoryentry的数据结构,directoryentry用来描述文件名和inode地址)因为datablocks,inodes以及inodes里存放的metadata(文件大小、所属关系等)仍然存在磁盘里,所以目录的大小在删除目录里文件后没有任何变化。
所以使用photorec恢复一下被删除的文件,轻而易举的恢复了。
2.关于使用vim编辑文件大小问题
我们创建一个文件file,vim打开输入内容“1234567”共7个字节
查看file文件的大小为8个字节
使用od查看,vim会自动补上一个字节\n换行符,所以7个字节变成8个字节
3.软连接大小问题
首先给install.log文件创建一个软连接名为install,查看软连接install的大小为11字节,为什么是11字节呢?数数原文件的文件名字节数11字节,这就对了。
4.如何删除一个文件
1.删除文件描述符(filedescriptor),由第一个问题可以知道,执行rm-rf*后其实删除的文件是可以恢复的,也就是说文件的数据还是可以被访问的,是因为datablocks,inodes以及inodes里存放的metadata都在磁盘上。
2.删除元数据(metadata),可以使用>filename,datablock里的真实数据依然存在磁盘里。
3.删除真实数据(datablock),需要产生一些随机数填充文件,然后再删除文件
顺序是ddif=/dev/randomof=filename然后rm-rffilename
这样真实数据就会被删除。更快的方法是使用设备/dev/urandom,不过虽然没有/dev/random的随机性强,但已经能满足擦除磁盘数据的目的了。
为什么使用/dev/random设备比使用/dev/zero设备更好一些呢?
两者设备都会读取之前数据记录(datatrace),使用/dev/zero会比使用/dev/random设备更容易读取到之前的数据记录(datatrace)。
【转载】深入理解Linux文件系统的更多相关文章
- 理解Linux文件系统之inode
很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...
- [转]理解Linux文件系统之inode
很少转发别人的文章,但是这篇写的太好了. 理解inode 作者: 阮一峰 inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统 ...
- 理解Linux文件系统之 inode
一.inode是什么? 理解inode,要从文件储存说起. 文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会 ...
- 理解Linux文件系统挂载参数noatime nodiratime
很多线上服务器为了提供文件系统IO性能,会在挂载文件系统的时候指定“noatime,nodiratime”参数,意味着当访问一个文件和目录的时候,access time都不会更新.但是如果未指定上面的 ...
- [转载] 深入理解Linux修改hostname
原文: http://www.cnblogs.com/kerrycode/p/3595724.html 当我觉得对Linux系统下修改hostname已经非常熟悉的时候,今天碰到了几个个问题,这几个问 ...
- 深入理解Linux文件系统与日志分析
一.inode和bolck概述 二.链接文件 三.inode节点耗尽故障处理 四.EXT类型文件恢复 五.xfs文件备份和恢复 六.日志文件 一.inode和bolck概述 1.定义 文件数据 文件数 ...
- 深入理解Linux文件系统与日志文件
目录: 一.inode与block 二.inode内容 三.inode的号码 四.inode的大小 五.链接文件 六.inode节点耗尽故障处理 七.恢复EXT类型的文件编译安装extundelete ...
- Linux 文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别
文件系统缓存dirty_ratio与dirty_background_ratio两个参数区别 (2014-03-16 17:54:32) 转载▼ 标签: linux 文件系统缓存 cache dirt ...
- Linux文件系统十问---深入理解文件存储方式(rhel6.5,EXT4)【转】
本文转载自:https://blog.csdn.net/tongyijia/article/details/52832236 前几天在红黑联盟上看了一篇博客<Linux文件系统十问—深入理解文件 ...
随机推荐
- idea_复制包名类名
- 用TWaver加载大型游戏场景一例
游戏中经常会出现一些大型的户外场景,例如一个小镇.一座古城等.通常这种场景中包含了较多的建筑.道路.桥梁等等元素,其3D模型比较大且复杂.在使用TWaver加载时,可使用一些技巧,让加载速度更快.显示 ...
- [Python数据结构] 使用List实现Stack
[Python数据结构] 使用List实现Stack 1. Stack 堆栈(Stack)又称为栈或堆叠,是计算机科学中一种特殊的串列形式的抽象数据类型(ADT),其特殊之处在于只能允许在阵列的一端进 ...
- 利用 Python 批量修改文件名
开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干! 1 函数介绍 1.1 os 模块 (1)os.lisdir() >>> import os >>> ...
- spring boot 的使用(一)
1. 启动spring-boot项目 mvn spring-boot:run cd target java -jar xxxx.jar xxxx代表生成的jar包
- DESEncrypt对称加密解密
分享一个很好用的DESEncrypt对称加密解密的类 using System; using System.Security.Cryptography; using System.Text; usin ...
- Convolutions in TensorFlow
Convolutions in TensorFlow Convolutions without training You might already be familiar with the term ...
- 旅游电车(cogs 1175)
[问题描述] Henryy国正致力于首都的一个旅游电车建设工程.首都有N个旅游景区.Henryy国的电车永远只沿道路规定的方向行驶,为了不使投入使用的电车有可能无法回到它的起始站,Henryy希望知道 ...
- tyvj2059 元芳看电影
描述 神探狄仁杰电影版首映这天,狄仁杰.李元芳和狄如燕去看电影.由于人实在是太多了,入场的队伍变得十分不整齐,一个人的前面可能会出现并排的好多人.“元芳,这队伍你怎么看?”“大人,卑职看不出这队伍是怎 ...
- zoj——2588 Burning Bridges
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little cou ...