码迷,mamicode.com
首页 > 其他好文 > 详细

磁盘以及文件系统管理之一

时间:2016-01-22 03:16:08      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:文件系统

磁盘结构的基本概念:

    盘面:磁盘有多个光盘组成,每一个光盘表面就叫盘面,一个光盘有两个盘面(上下两面)

    磁头(head):磁盘用来读写数据的头,每个盘面都会有一个磁头,所以磁头数==盘面数

    磁道:磁盘由内到外可以分成多个同心圆,每一个同心圆就是一个磁道,编号的时候由外向内,分别是磁道0、磁道1..

    扇区(sector):每一个磁道可以均匀地划分成各个小块,每个小块就是一个扇区

    柱面(cylinder):每个盘片上相同编号的磁道构成一个柱面,所以柱面数==单个盘的磁道数


    盘面-->多个磁道-->多个扇区

    

以下两个内容摘抄自知乎问答


    磁盘的记录方式分两种

1.旧式---非分区记录方式(不同磁道扇区数相同)

技术分享

这种方法便于磁头管理,但是不利于空间利用,每个地方的访问数据速度一样,越里面数据越拥挤


2新式--分区记录方式(不同磁道分区数不同)

技术分享

这种方式空间利用率大大提高,而且外面的磁道访问速度会比内部的快,但是不便于磁头移动管理


Q:为什么硬盘用久了读写速度会变慢?

    因为角速度一样,外面的磁道的线速度会比较快,而硬盘的写入方式是从外到里(所以0扇区是在最外面),当使用一段时间后外面的磁道被用光,越往里面速度越慢,所以这也是为什么系统建议装在c盘的原因,因为c盘最靠近外面的磁道,读写速度较快。



Q:划分柱面的作用

    我们存储数据的时候,如果一个一个盘面地存储,那样速度太慢了,因为每个磁头都是由一个机械臂控制的,所以在同一时刻它们都在不通盘面上的相同位置,所以我们把数据划分均匀的几份分别存储,速度大大提高


分区(partition):分区其实就是我们整个磁盘的逻辑边界,每一个分区只能存储一个文件系统,划分分区是按柱面进行划分的


低级格式化:当磁盘出厂时,厂商会帮我们把空盘根据其转速、介质等属性划分成一个个的磁道,扇区等等,这个过程就是低格。此时磁盘上并没有分区,所以对应的我们把磁盘分区并做成文件系统的过程就叫做高级格式化(高格)


MBR(Master Boot Record):主引导记录

    第0磁道第0扇区的512字节

        前446字节:Bootloader,引导加载器

        中间64字节:

                每16byte:标识一个分区。所以最多只能创建4个分区

                主+扩展<=4 扩展分区只能有一个

        最后2字节:Magic number

                标记MBR是否损坏

MBR是硬盘的全局属性,不属于任何分区。bios开机启动选项就是查找各个设备的MBR


Q:为什么分区表最多只能保存4个分区的信息,而我们电脑却可以有很多分区。

    因为分区表可以存储的不仅仅是主分区的信息,而且可以存储一个指针,把指针指向磁盘更大的空间,这个指针我们就叫做扩展分区。


磁盘的读写延迟:当我们跨磁道访问数据的时候,我们需要移动磁头并定位到数据的位置,这个期间所消耗的时间就是读写延迟。


ext2/3文件系统管理:

    inode(index node):索引节点,记录数据的属性(地址,权限,大小等等,但是没有文件名,文件名在目录哪里)

    文件系统把分区划分成两个部分,一部分存储数据的索引(元数据区),一部分存储数据本身,数据存储区又细分为一个个块(block),当我们存储一个文件的时候,我们在索引区查找文件对应的存储记录,但是我们怎么知道对应的块是否有数据呢,我们只需用一个位标记对应的状态,这些位结合在一起就是块位图。同样地,在元数据区,我们需要知道inode是否被使用,所以也有节点位图。


一次linux 读取 /var/log/messages文件的过程:

    首先根/是自引用的,根据/的inode找到/存储的数据块,因为/是目录,ext2/3文件系统中目录的数据块存储的是它自身下面的文件和文件所对应的inode号,所以在/的数据块上我们可以找到var的inode号,通过var的inode号,我们查找到var的数据块存储区,然后发现var也是个目录,所以又在var中找到了log的inode号,通过log的inode我们找到log的数据块,又在数据块下找到messages的inode,最后我们通过messages的inode号找到了对应的数据。


删除文件的过程:

    假设删除/var/log/messages

    首先把目录log的数据块下面messages的inode记录删除

    在元数据存储区把messages的inode信息清除

    在节点位图和块位图中把messages所占据的对应块标识为空(可用)

所以删除文件还有可能恢复,但是覆盖文件难度就大大增大了。


移动文件的过程:

    同一分区下:

        在文件对应的目录的数据块中把原来inode记录删除

        在新的目录的数据区添加一条新的inode记录

    不同分区:

        在文件对应的目录的数据块中把原来inode记录删除

        在新的分区的元数据区新建一个inode记录

        在新的目录的数据区添加一条新的inode记录

        把文件的数据块的数据复制到新的数据块

        把旧分区的inode标记为空

所以同一分区下,移动数据速度非常快,但是跨分区很慢


硬链接:两个链接指向同一个文件的inode

    只能对文件创建,不能应用于目录

    不能跨文件系统

    创建硬链接会增加文件被链接的次数


软连接:一个指向真实的inode,另一个指向这个链接的路径

    可应用于目录

    可以跨文件系统

    不会增加被链接文件的链接次数

    其大小为指定的路径所包含的字符

   

ln  [-s -v ]SRC DEST(src是源文件,dest是链接)

        

df:显示分区状况

    -i :显示inode使用情况

    -h :显示分区大小状况

    -P :显示不换行

    

本文出自 “单季稻” 博客,谢绝转载!

磁盘以及文件系统管理之一

标签:文件系统

原文地址:http://linzb.blog.51cto.com/5192423/1737474

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!