3.linux文件操作跟磁盘存储对应过程
2016-04-28 14:00
691 查看
由于iNode太多了,从iNode中找一个特定的条目太麻烦了,所以我们要对iNode抽象一层索引出来。计算机最快的一种查找方式就是键值对查找。
添加是怎么完成的?
当文件系统创建完成之后,会在整个元数据区域为每一个iNode创建一个位图(bitmap)区域。每一个iNode都在bitmap中占据一位。已使用的iNode,其标志位置为1,未使用的iNode,其标志位置为0。当我们需要找一个空闲的iNode时,只需要扫描一下bitmap。同理数据区也是用bitmap来管理block。前者称为节点位图,后者称为块位图。
有了bitmap就大大加快了创建文件时的工作过程。
删除是怎么完成的?
删除文件时只需要在节点位图中把文件对应的iNode标记为0就可以了。
当要统计硬盘已使用空间时,扫描节点位图中iNode标志位为1的文件占多少个block,然后乘以每个block的大小。为什么删除了的文件能找回来,是因为数据在block中没有动,只是把block对应的块位图标记为0。当我们在存新的文件进来时,就把块位图标志位为0的block覆盖掉。这也就是为什么当我们删除了文件,如果添加好多新的文件进来后就不容易找回旧文件的原因。块位图标记为0后,块位图对应的iNode也要标记为0,这个iNode以后也可以被其他文件所使用了,再者,目录block中对应的条目也被删除了。
文件粉碎机的原理:生成一大堆随机数把以标志位为0的block覆盖掉。强行覆盖block。
剪切是怎么完成的?
本来文件放在/var/log/messages,把文件剪切到/var/test下,改名a.txt。
首先找到test目录,在test目录的路径映射表上建一个条目,名称叫a.txt,a.txt的iNode直接指向/var/log/messages的iNode,然后把/var/log目录上的messages条目删除掉就行了。剪切的过程就是在一个目录上把对应的条目删除,在另一个目录上创建新的条目。剪切既没有动数据也没用动iNode,只是更改的目录的条目。然而剪切到另一个分区是另一码事了。因为每一个分区都是独立。一个分区就是一个文件系统。跨分区剪切的过程是先复制再删除。
添加是怎么完成的?
当文件系统创建完成之后,会在整个元数据区域为每一个iNode创建一个位图(bitmap)区域。每一个iNode都在bitmap中占据一位。已使用的iNode,其标志位置为1,未使用的iNode,其标志位置为0。当我们需要找一个空闲的iNode时,只需要扫描一下bitmap。同理数据区也是用bitmap来管理block。前者称为节点位图,后者称为块位图。
有了bitmap就大大加快了创建文件时的工作过程。
删除是怎么完成的?
删除文件时只需要在节点位图中把文件对应的iNode标记为0就可以了。
当要统计硬盘已使用空间时,扫描节点位图中iNode标志位为1的文件占多少个block,然后乘以每个block的大小。为什么删除了的文件能找回来,是因为数据在block中没有动,只是把block对应的块位图标记为0。当我们在存新的文件进来时,就把块位图标志位为0的block覆盖掉。这也就是为什么当我们删除了文件,如果添加好多新的文件进来后就不容易找回旧文件的原因。块位图标记为0后,块位图对应的iNode也要标记为0,这个iNode以后也可以被其他文件所使用了,再者,目录block中对应的条目也被删除了。
文件粉碎机的原理:生成一大堆随机数把以标志位为0的block覆盖掉。强行覆盖block。
剪切是怎么完成的?
本来文件放在/var/log/messages,把文件剪切到/var/test下,改名a.txt。
首先找到test目录,在test目录的路径映射表上建一个条目,名称叫a.txt,a.txt的iNode直接指向/var/log/messages的iNode,然后把/var/log目录上的messages条目删除掉就行了。剪切的过程就是在一个目录上把对应的条目删除,在另一个目录上创建新的条目。剪切既没有动数据也没用动iNode,只是更改的目录的条目。然而剪切到另一个分区是另一码事了。因为每一个分区都是独立。一个分区就是一个文件系统。跨分区剪切的过程是先复制再删除。
相关文章推荐
- 2.Linux文件和目录之间对应关系
- linux REDHAT6.4下安装ArcGIS Server 10.1
- VM安装linux
- linux按位运算datalab-handout
- 解决Linux c语言运行时候“段错误 (核心已转储)”问题-采用gdb 解决
- centos 6.7 zerorpc TypeError
- Linux内核分析 期末总结
- 王高利:Kvm虚拟化(4)__为客户机添加virsh console支持
- CentOS 7 安装 mysql-5.6.14
- linux基础(四)
- GraphicsMagick在centos环境的安装
- linux 小技巧
- Centos安装
- Linux下C语言Mysql数据库使用范例
- Linux下python安装升级详细步骤 | Python2 升级 Python3
- Linux System Admin Handbook - Service Config
- win10 安装vagrant + VirtualBox并安装系统(linux/centos/ubuntu)
- CentOS yum更换为国内的源,解决安装软件时无法从国外镜像下载的问题
- CentOS 7 安装 php-5.6.20
- Linux下远程连接Jupyter+pyspark部署教程