档案系统特性:为什么磁碟分割完需要格式化(format)才能使用吗?

答:因为每种作业系统所设定的档案属性和权限并不相同,为了存放这些档案所需的资料(所以需要格式化成作业系统能够利用的档案系统格式filesystem)  

linux的正规档案系统:EXT2(Linux second extended file system, ext2fs),默认windows是不认识EXT2档案系统的

一个可被挂载的资料为一个档案系统而不是一个分割槽(以前一个分割槽只能被格式化成一种档案系统,所以我们说一个filesystem就是一个partition)

档案系统是如何运作的:

1>.档案系统通常会将这两部分的资料分别存放到不同的区块,权限与属性放置到inode中,至于实际资料则放置到data block中

2>.superblock超级块:记录整个档案系统的整体资讯,包括inode与block的总量、使用量、剩余量,以及档案系统的格式和相关资讯

3>.inode:记录档案的属性,一个档案占用一个inode,同时记录此档案的资料所在的block的号码

4>.block:实际记录档案资料的内容,如果内容太大,则占用多个block

对比以下两种档案系统:

 磁盘重组:当档案写入的block太过于离散,此时档案读取的效能将会变的特别差,就需要考虑【重组】了;

 磁盘重组:可以将统一档案所属的block整合到一起,资料的读取就会很容易

 索引式档案系统:(因为是索引式的档案系统,所以基本不需要考虑经常性的磁盘重组,当然如果档案系统使用太久了,经常的删除/新增/修改档案时,造成档案资料太过于离散,就需要考虑重组一下)

  FAT档案系统:(由于FAT档案系统它的block不能一次性读取完,需要依次读取,当同一资料的block太过离散时,读取数据就会很慢,需要三不五时的重组)

  

 

档案系统一开始就把inode与block规划好了,除非重新格式化,否则inode与block固定后就不再变化

  ext2档案系统示意图:

 

 每一个区块群组六大主要内容说明:

 data block(资料区块):EXT2档案系统中所支援的block大小有1k、2k、4k三种,由于block的大小不同,导致该档案系统能够支持的磁碟最大容量和最大单一档案容量并不相同

  

 限制:

  1.block的大小和容量在格式化之后就不能再进行修改了(除非重新格式化)

  2.每个block内最多只能放置一个档案的资料

  3.如果档案的大小大于block的大小,则一个档案可能占用多个block的数量

  4.如果档案的大小小于block的大小,则block的剩余容量不能再被使用(磁盘空间浪费)

 

 inode table(inode表):它的大小和数量也是在格式化的时候就固定了的

  inode记录一个block的号码要花费4byte的容量

  记录的信息:

    该档案的存取模式(read/write/excute)

    该档案的拥有者和所属群组(owner/group)

    该档案的容量(size)

    该档案的建立和修改的时间(ctime)

    最近一次的读取时间(atime)

    最近一次的修改时间(mtime)

    定义档案特性的旗标,比如SUID...

    该档案真正的内容指向(pointer)

  特色:

    每个inode大小固定为128bytes(新的ext4和xfs可以设定到256bytes)

    每个档案都只会占用一个inode

    档案系统能够建立的数量与inode的数量有关

    系统读取档案时需要先找到inode,先分析inode里面的权限和使用者是否符合,若符合才能开始实际读取block的内容

  inode结构示意图:

  

  a>.inode有12个直接存储block号码:12 * 1K = 12K

  b>.inode有1个间接存储(使用一个block块存储block号码):(1K * 1024)/ 4 *1K = 256K(记录一个block号码需要4byte,则一个block可以存储256个block号码)

  c>.inode有1个双间接存储(使用一个block存储256个block号码,通过这256个block来记录更多的block号码):((1K * 1024)/ 4 )* ((1K * 1024)/ 4) * 1K = 2562K

  d>.inode有1个三间接存储(使用一个block存储256个block号码,通过这256个block来记录256*256个的block号码,通过256*256个block来记录256个block:((1K * 1024)/ 4 )* ((1K * 1024)/ 4) * ((1K * 1024)/ 4 )* 1K = 2563K

  总额:将直接、间接、双间接、三间接的量相加,(12 + 256 + 2562 + 2563)/ 1024 / 1024 = 16GB(对照上面data block档案限制表)

  由于EXT2档案系统的限制(某些程序只能捕捉到小于2GB大小的档案,跟档案系统无关),1K大小的block结果一致,但是2K和4K的结果不一致

   

  superblock(超级快,一般大小为1024bytes):记录整个filesystem的相关整体资料,没有superblock就没有filesystem

  记录的主要资讯:

  block与inode的总数量

  未使用与已使用的block和inode的数量

  block与inode的大小(block大小有1K,2K,4K,而inode大小128bytes或256bytes)

  filesystem的挂载时间,最后一次写入的时间,最后一次检验磁碟(fsck)的时间等档案系统的相关资讯

  一个valid bit 的值,若档案系统已被挂载则为0,未被挂载则为1

  注意:每个block group都有可能含有superblock(之前说一个档案系统只有一个超级块superblock),如果后续的block group内含有超级块superblock,则是对第一个block group的超级块的一个备份,这样可以进行superblock的救援

  filesystem description(档案系统描述):这个区段描述每个block group的起始和结束的号码,以及每个区段(superblock、bitmap、inodemap、data block)分别介入哪些block号码之间

  block bitmap(块位图,区块对照表):作用标记哪些block是空的未使用的(当新增档案时,通过block bitmap就可以知道哪些block可以存储内容和资料;当你删除某个档案时,block bitmap就会释放对应的block,将它标记为【未使用】)

  inode bitmap(节点对照表):跟block bitmap类似,block bitmap只是记录使用与未使用的block号码,而inode bitmap则是记录使用与为使用的inode号码

  

  dumpe2fs:查询ext家族superblock资讯的指令(centos7.x档案系统多为xfs,暂时不太支持dumpe2fs)

  

  

档案系统与目录树的关系:

  目录:在档案系统中,建立一个目录时,档案系统会分配一个inode给目录,以及至少一块block给该目录(这个block记录了该目录下档案的档名和每个档案对应的inode号码)

  

  目录树的读取:

  

  filesystem大小与磁碟的读取效能:

    问:档案系统规划的太大(例如:100GB),由于磁盘上的资料总是来来回回的,而资料写入磁碟不可能是连续性的block,是填充式的写入,哪个block空的就往哪写,如果写入档案的block真的分的很散,就会出现档案资料离散的问题,虽然ext2档案系统的inode里面记录了block的号码,可以一次性的读取全部的block出来,但是如果太过于离散,就会发生读取效能低下的问题,因为机械手臂要不停的来来回回的在磁碟上面频繁的读取;

    答:把filesystem的资料全部复制出来,然后将filesystem重新格式化一下,再将资料给它复制回去就OK了

  此外filesystem规划太大,资料写入系统最前面和最后面的block号码中,造成磁碟的机械手臂读取资料时移动幅度过大,也会造成读取效能下降,机械手臂在搜寻整个filesystem时,也会花费很多时间去搜寻,所以filesystem不是规划的越大越好,要根据你主机的用途来进行规划

 

filesystem ext2/ext3/ext4档案的存取与日志式的档案系统的功能

  写入档案流程:

  

  资料不一致(Inconsistent)状态

    比如你的档案资料在写入档案系统时,遇到了紧急情况(断电,系统核心发生错误。。。),还没来得及将更新inode bitmap、block bitmap、superblock,此时会发生metadata数据的内容与实际资料存储内容不一致的状态(使用e2fsck程序来检测修复,当档案系统太大时,使用e2fsck程序时太费时了,所以就有了后来的日志式的档案系统

  日志式的档案系统(Journaling filesystem)

    步骤:1.预备:当系统要写入一个档案时,会现在日志记录区中记录某个档案准备要写入的资讯

       2.实际写入:开始写入档案的权限与资料,开始更新metadata的资料

       3.结束:完成资料与metadata的更新后,在日志记录区当中完成该档案的记录

linux档案系统的运作:通过一个非同步处理(asynchronously)的方式

  当系统载入一个档案到记忆体后,如果该档案没有被更动,在记忆体区段的档案资料会被设定为干净的(clean);如果该档案被更动了,在记忆体中该档案资料就会被设定为(dirty),此时所以的动作都还是在主记忆体中执行,并没有写入磁盘(可以使用指令:sync来强制主记忆体将设定为dirty的档案资料刷新写入磁盘)

  作用:

    系统会将常用的档案资料放入主记忆体额缓冲区,以便加速档案系统的读写

    承上,因此linux系统中的实体主记忆体都会被用光,这是正常情况,可加速系统效能

    你可以手动使用sync强制记忆体中设定为dirty的档案资料刷新写入磁盘

    若正常关机,则关机指令会尝试主动呼叫sync指令强制将档案资料刷新写入磁盘

    若不正常关机(停电、当机或不明情况),档案资料尚未写入磁盘,因此重新开机后系统会花费很多时间进行磁盘检查,甚至可能导致档案系统的损坏(非磁碟损坏)

linux:挂载点的意义:

  将档案系统与目录树结合的动作称之为挂载;

  挂载一定是目录,该目录为进入该档案系统的入口

  xfs filesystem它的目录最顶层的inode一般是128号

其他linux支援的档案系统与vfs

  

  

  VFS(作用):进行管理系统的所以filesystem,它会主动帮我们识别做好读取那种filesystem的准备动作

   

  

  centos 7开始,为什么要舍弃ext家族的档案系统而使用xfs呢?

  答:

    a.ext家族的档案系统支援度广,但是格式化超级慢(采用预先把inode,block,superblock规划好,不需要动态去配置,系统可以直接用)

    b.xfs(高容量磁碟,高效能档案系统)【复原速度,建置速度】

  xfs(高容量磁碟,高效能档案系统):规划三部分(资料区、档案系统活动登录区log section、即时运作区)

    资料区(与ext家族的block group差不多):inode与block都是在系统需要的时候才分配(动态分配,格式化超级快),并且block与inode有多种不同的容量设置,block的容量可以是512byte-64K,在linux下面由于主记忆体控制的关系(分页档容量的关系),最高可以设置成4K而已(可以设置成16K,但是linux是不允许你挂载的,所以设置了也没用)inode则可以设置为256byte-2M,基本保留256就够了;

  

   档案系统的简单操作指令:df(列出系统已挂载档案系统整体容量的使用情况)、du(评估档案系统的磁碟使用情况,常用在推估目录所占容量)

   df:

    

    

  

   du:

         

实体连接与符号连接:

  hard link(实体连接、实际连接、硬体连接):在某个目录下新增一笔档名连接到某个inode号码关联记录而已

    hard link设定连接档,磁盘的空间和inode的数量是不会改变的,hard link只是在某个目录下的block中多写入一个关联资料而已,并不会改变inode的数量,同时一般不会改变block的数量(因为hard link的关联资料量很小,一般不会产生太多空间来存储;如果刚好存放资料的block被档案资料内容填满了,那可能就会增加bock的数量了)

    hard link只能在单一的filesystem中进行,不能跨档案系统,同时不能link目录

    问题:为什么不能link目录呢?

    答:因为如果link目录,连接的资料需要连同被连接目录下的所以资料都建立连接,比如你要link实体连接/etc目录建立一个连接/etc_hd的目录,这时候/etc_hd目录底下的所以档案都需要与/etc目录下面的档案建立hard link,而不只是/etc_hd连接到/etc而已;如果要在/etc_hd下面建立档案,连带着/etc底下的档案资料又要重新link一遍,因此造成环境相当大的复杂度

    

  symbolic link(符号连接,相当于windows下面的快捷方式):建立一个独立的档案(会占用inode和block),而这个档案会让资料的读取指向它link的哪个档案的档名;当来源档被删除了,那符号链接档也打不开了

  

  练习:

  

关于目录的link数量:

   

   

内容参考自鸟哥linux私房菜,传送门:http://linux.vbird.org/;

linux:磁碟与档案系统管理的更多相关文章

  1. 鸟哥私房菜基础篇:Linux 磁碟与档案系统管理习题

    猫宁!!! 参考链接:http://linux.vbird.org/linux_basic/0230filesystem.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-我们常常说,开机的时候 ...

  2. Linux磁盘与文件系统管理笔记

    ### Linux磁盘与文件系统管理 linux 最传统的文件系统格式是EXT2,centos7 默认文件系统是xfs(日志式文件系统) 磁盘的组成: 盘片 机械手臂 主轴马达 (机械硬盘) 磁盘格式 ...

  3. Linux学习笔记—Linux磁盘与文件系统管理(转载)

    认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...

  4. linux备忘录-日志档案

    linux的日志档案 linux的日志档案记录系统或程序在运行过程中产生的一些信息,例如事件的记录,错误的记录等等.特别是在发生错误时,我们可以通过日志档案找到错误发生的根源,例如当我们无法启动邮件服 ...

  5. Linux学习笔记之Linux磁盘及文件系统管理笔记

    Linux磁盘及文件系统管理 CPU,memory(RAM),I/O i/o: disks,ehtercard disks:持久存储数据 接口类型: IDE(ata): 并口,133MB/s;并行总线 ...

  6. linux 磁盘与文件系统管理 (鸟哥私房菜)

    各种接口磁盘在Linux中的文件名分别为 /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash随身碟等接口的磁盘文件名 /dev/hd[a-d][1-63]:为IDE接口的磁 ...

  7. Linux磁盘与文件系统管理概要

    Linux磁盘与文件系统管理 硬盘组成与分区 硬盘组成 圆形的盘片(主要记录数据) 机械手臂与磁头(可读取盘片上的数据) 主轴马达,转动盘片,让机械手臂的磁头在盘片上读取数据 扇区(Sector)为最 ...

  8. [Linux]经典面试题 - 系统管理 - 备份策略

    [Linux]经典面试题 - 系统管理 - 备份策略 目录 [Linux]经典面试题 - 系统管理 - 备份策略 一.备份目录 1.1 系统目录 1.2 服务目录 二.备份策略 2.1 完整备份 2. ...

  9. Linux知识体系之磁盘与档案系统管理

    硬盘的物理组成:由许许多多的圆形硬盘盘所组成.宜居硬盘盘能够容纳的数据量,而有所谓的单碟或者多碟. 首先,硬盘里一定会有所谓的磁头(Head)在进行该硬盘上面的读写动作,而磁头是固定在机械手臂上的,机 ...

随机推荐

  1. 理解 Python 中的 *args 和 **kwargs

    Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def test_defargs(one, two = 2): print 'Required argument: ', one ...

  2. 如何开启mysql计划事件

    如何开启mysql计划事件 (2012-07-26 12:21:23) 转载▼ 标签: mysql 事件计划 it 分类: MySQL 首先在sql中查询计划事件的状态:SHOW VARIABLES ...

  3. 用正则表达式替换html标签

    下面的代码用于修改html文本中的img标记,修改后的html适用于lazyload方式的图片加载: protected string LazyPicProcess(string content) { ...

  4. Rochester Memory Hardware Error Research Project

    http://www.cs.rochester.edu/research/os/memerror/

  5. java Reentrant Lock

    //Listing 7-1. Achieving Synchronization in Terms of Reentrant Locks import java.util.concurrent.Exe ...

  6. JavaScript函数参数与调用

    函数调用: /* 1. 函数调用 */ ,,,); /* 2. 方法调用 */ this.CName = "全局"; var o = { CName:"o类", ...

  7. 弹窗文件js+css

    // 每个弹窗的标识 var x =0; var idzt = new Array(); var Window = function(config){ //ID不重复 idzt[x] = " ...

  8. 【Android测试】【第一节】性能——CPU

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5065083.html 前言 本来打算写完全部的自动化测试之 ...

  9. LeetCode -- Triangle 路径求最小和( 动态规划问题)

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  10. windows下安装yaf和git

    不得不说win7下安装yaf比mac下安装yaf简单多了 1. phpinof()看一下你的php版本.我的是php 5.4所以我选择是php_yaf-2.1.9-x86-5.4-zts-nodebu ...