一、认识EXT2文件系统:
    a、硬盘的组成:转动小马达+存储的磁盘+读写的机械臂
    b、磁盘的一些概念 
            扇区为最小的物理储存单位,每个扇区为512B
            将扇区组成一个圆,就是磁柱,磁柱是最小的分割单位
            第一扇区最重要,a、主要开机区及分割表,其中MBR占有446B,而partition table 则占有64B
   c、inode block superblock 三个数据的意义
            inode:存放文件的属性,权限,一个档案占用一个inode,同时记录次档案的数据所在的block号
            block:实际存放的数据,若档案太大时,会占用多个block
            superblock:记录整个档案的整体信息,包括inode/block的总量,使用量剩余量,以及文件系统的格式与相关信息等
        效果:当文件系统需要A档案时,只要找到inode号,就知道了需要读取哪些block号内的数据内容,就可以按顺序,依次取出来(磁盘最多转一圈)
        与此对比的还有种文件系统FAT(WIN 98 前就是用的它。。好渣哦), 它是这样,首先没有inode,block一开始就读取数据,然后在最后告知下一个block号,依次循环,a-b  b-c c-d,这样很有可能因为数据比较分散,磁盘需要转好几圈才能读取出完整的数据,window系统不是有个磁盘整理么,就是为了将分散的数据,集中起来,提升读取性能呢。一般来说EXT2系统因为有索引所以不太需要整理
    d、block inode 在文件系统一开始格式化的时候就规划好了,除非重新格式化,否则不会变了,如果实际的LINUX中,如果单纯的只用inode/block/superblock 在文件系统高达数百GB时,将所有的inode与block分一级放在一起,很不明智,数量太庞大了,不容易管理,所以需要像军队管理那样,一个团里有很多个营,一个营里有很多个连....都有自己的联络系统,但最终都向团长汇报连上的最正确的信息
    e、每一个区块(block group)的六个主要内容说明:
        ·block
        1、datablock 是用来放置档案内容数据的地方,每个block大小都已经固定(文件系统格式化的时候),
        2、每个block内最多只能够放置一个档案的数据
        3、承上,如果档案的大小大于每个block的大小,肯定会占用多个block
        4、承上,如果档案的大小小于每个block的大小,剩余的block容量就不会再被使用,磁盘空间会被浪费
        ·inode
        1、每个inode大小均固定为128B
        2、每个档案仅会占用一个inode而已
        3、承上,因此文件系统能够建立的档案数量与inode总量有关
        4、系统读取档案时需要先找到inode,并分析所记录的权限是否符合,再开始去block实际读取block内容
        机智的开发者:
        inode 包含 12个 直接指向, 1个 间接指向,1个双间接指向,1个三间接指向。其中间接指向是指把Block用来储存block指向
        我们来算下,假设block为1K,而inode大小为固定128B,记录一个block号需要4B,那么,一个inode最大能记录多少大的文件
            12个直接指向: 12* 1K
            1个间接指向1K/4B * 1K = 256* 1K 一层
            1个双间接 1K/4B*1K /4B * 1K = 256* 256 * 1K 应该发现规律了吧  两层
            1个三间接 256*256*256*1K = 16G,三层 
        我良辰,不得不说,66666
        ·superblock 
        记录的东西: block与inode的总量;未使用和已使用的inode/block数量;block与inode的大小;
                              文件系统挂载时间、最近一次写入数据时间、最近一次检验磁盘(fsck)的时间等文件系统相关信息;
                             一个valid bit 数值,若此文件系统已被挂载,则valid bit 为0 ,若未被挂载,则为1
        superblock的大小为1024B,每个block group 都可能含有superblock 事实上除了第一个 block group 内会吨有 superblock 乀外,后续癿         block group 丌一定吨有 superblock , 而若吨有 superblock 则该 superblock 主要是做为第一个 block group 内 superblock 癿备仹咯,这样可以迚行 superblock 癿救援呢!
        ·Filesystem Description
        这个区段可以描述每个block group 的开始与结束的block号码,以及说明每个区段(superblock, bitmap, inodemap, data block)分别介于哪一个block之间,这部分可用dumpe2fs来观察
        ·block bitmap (区块对照表)
        记录哪些block 是空的,新增文档的时候会用到,当删除文件时,block bitmap就会对对应的block做标记,表示已经释放
        ·inode bitmap (inode 对照表)
        和上面的类似,记录未使用的inode
        深入的一些:在EXT2系统中建立一个目录,系统至少分配一个inode和一个block, 在inode中记录分配到的block的号码以及该目录的属性及权限,而在block中记录目录下的文档名以及这些文档的inode号码,总结来说,其实inode不记录文档名称,文档名称在分配给目录的block中,所以!增加,删除目录中的文件和W权限有关,因为目录中的文件,是写在block中,需要修改权限。目录的读权限也是这个原因,一定要能够读 目录的inode,和block,才能知道目录中的文档的inode,继而读取文档的内容
        f、 df:列出文件系统的整体磁盘使用量;
             du:评估文件系统的磁盘使用量(帯用在推估目录所占容量)
        g、
    LINUX读取的流程:/etc /etc/passwd 该档案的读取流程为(假设为 vbird 这个一般的使用者):
1. /的inode:
    找到系统根目录/的inode,根据inode的权限,可以读取inode指向的目录block,查etc的目录inode号
2、/etc的inode:
    找到etc的inode根据权限,判断vbird这个账号可以有rx权限,就读取inode指向的目录block,查passwd的inode号
3、/etc/passwd
    找到了passwd的inode号,根据里面的权限,判断能读,那就根据inode里面描述的block号,依次把数据读出来
LINUX写入的流程: 
    1、先判断用户在这个目录下是否有w权限
    2、去inode bitmap 找一个干净的inode号分配,并将新档案的权限/属性写入,
    3、去block bitmap 找block开始写写写,并不管更新inode,我写入的block号
    4、写完数据后,将inode和block数据同步更新到inode bitmap,block bitmap,并更新superblock的内容
h、关于两种链接,一种:实体链接,另一种,快捷方式,like windows
    实体链接(Hard Link):ln 两个文件指向相同的inode号码 最大的好处:安全,一个地方删除操作后,另一个地方还指向了它,所以实际改文档通过文件系统还能被找回来(每个文档都需要inode的记录来指向,如果没有了inode指向,就等于黑户!等于死人了,no one would find you !),不能link目录,太复杂,目前还不支持,仅支持文件哦
    快捷键链接(Symbolic Link):ln -s  Symbolic link 就是在建立一个独立的档案,而这个档案会让数据读取指向他link的那个档案的当名,也就是说,他block里面,存的是文件名!中转站,可以这么理解吧
    有个特别牛的,如果新建一个目录,例如mkdir /tmp/test 这个目录会包含 /tmp/test /tmp/test/. /tmp/test/..  最后一个 .. 其实也是目录,指向的是上一层目录,所以,上面那层 /tmp/link会增加1 ,而 /tmp/test 和/tmp/test/. 指向的是同一个目录所以新建目录 默认link数是2!666666
    h、磁盘与目录的容量 
        1、df:列出文件系统的整体磁盘使用量
        2、du: 评估文件系统的磁盘使用量(常用在推估目录所占容量)
        3、删除磁盘分区槽:fdisk
        4、磁盘格式化:mkfs
        5、磁盘检查:fsck、badblocks
        6、磁盘的挂载和卸载:mount
        7、磁盘参数修订:mknod
        8、使用实体分割槽建置swap
    I、最后重点回顾
        1、基本上linux的正统文件系统都为Ext2。该文件系统内的信息主要有:
                ·superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
                ·inode:记录档案的属性,一个档案占用一个inode,同事记录此档案的数据所在的block号码;其中 12个直接指向 一个 间接指向 一个 双间接指向一个三简接指向
                ·block:实际记录档案的内容,若档案太大时,会占用多个block
    2、ext2文件系统的数据存取为索引式文件系统
    3、需要碎片整理的原因就是文档写入的block太过于离散了,此时档案的读取效能将会变得很差。这个时候可以透过碎片整理将同一个档案所属的blocks汇整在一起
    4、ext2文件系统主要有:boot sector,superblock,inode bitmap.block bitmap,inode table,data block 等六大部分
    5、data block 是用来放置档案内容数据地方,在ext2文件系统中所支持的block大小有1K 2K 4K三种而已
    6、inode 记录档案的属性/权限等数据,其他重要项目为:每个inode大小固定为128B;每个文档仅会占用一个inode而已;因此文件系统能够建立的档案数量与inode的数量有关;
    7、档案的block在记录档案的实际数据,目录的block则在记录该目录地下文件名与其inode号码对照表;
    8、日志式文件系统会多出一块记录区,随时记载文件系统的主要活动,可加快系统复原时间;
    9、Linux文件系统为增加效能,会让主存储器作为大量的磁盘告诉缓存;
    10、实体链接只是多了一个文件名对该inode号码的链接而已;
    11、符号链接就是windows的快捷方式功能。里面放的是文件名
    12、磁盘的使用必须要经过:分割、格式化与挂载,分别管用的指令为:fdisk,mkfs,mount三个指令
    13、开机自动挂载可参考/etc/fstab之设定,设定完毕务必使用mount -a 测试语法是否正确

鸟哥的LINUX私房菜基础篇第三版 阅读笔记 三 Linux磁盘与文件系统管理的更多相关文章

  1. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 一

    1. Linux的档案权限与目录配置      一.基础知识:             a.分为三类,拥有者(owner).群组(group).其他人(other)             b.三个核 ...

  2. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 四 档案的文件系统的压缩和打包

    1.压缩文件案的用途与技术     a.用途,简单来说,就是节约磁盘空间.如果从传输角度讲,占用宽带也会小很多(Apache就有自动压缩的功能,节省宽带资源,提升网站的输出能力)     b.压缩技术 ...

  3. 鸟哥linux私房菜基础篇

    1)注销:exit2)指令太长:命令太长的时候,可以使用反斜杠 (\) 来跳脱[Enter]符号,使挃令连续到下一行3)系统语言显示和设置命令:echo $LANG,显示当前系统语言:简体中文zh_C ...

  4. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 二

    Linux档案与目录管理 1.一些比较特殊的目录,需要用力的记下来 .         代表当前层目录 ..        代表上一层目录 -        代表前一个工作目录   (这个好屌!其他的 ...

  5. 《鸟哥的Linux私房菜--基础篇》学习

    第四章 显示日期与时间的指令:date 输入: (base) liyihuadeMacBook-Pro:~ liyihua$ date 输出: Thu Jun 6 08:44:02 CST 2019 ...

  6. 鸟哥Linux私房菜基础学习篇学习笔记3

    鸟哥Linux私房菜基础学习篇学习笔记3 第十二章 正则表达式与文件格式化处理: 正则表达式(Regular Expression) 是通过一些特殊字符的排列,用以查找.删除.替换一行或多行文字字符: ...

  7. 鸟哥Linux私房菜基础学习篇学习笔记2

    鸟哥Linux私房菜基础学习篇学习笔记2 第九章 文件与文件系统的压缩打包: Linux下的扩展名没有什么特殊的意义,仅为了方便记忆. 压缩文件的扩展名一般为: *.tar, *.tar.gz, *. ...

  8. 鸟哥Linux私房菜基础学习篇学习笔记1

    鸟哥Linux私房菜基础学习篇学习笔记1 第三章 主导分区(MBR),当系统在开机的时候会主动去读取这个区块的内容,必须对硬盘进行分区,这样硬盘才能被有效地使用. 所谓的分区只是针对64Bytes的分 ...

  9. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

随机推荐

  1. Spring + Spring MVC + Hibernate项目开发集成(注解)

    在自己从事的项目中都是使用xml配置的方式来进行的,随着项目的越来越大,会发现配置文件会相当的庞大,这个不利于项目的进行和后期的维护.于是考虑使用注解的方式来进行项目的开发,前些日子就抽空学习了一下. ...

  2. [LeetCode]N-Queens 八皇后问题扩展(经典深层搜索)

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  3. Redis 3.0集群搭建/配置/FAQ

    ·声明 1,已官网中文教程为基础,边看边学,结合环境现状搭建. 2,哥对Ruby不热爱.不熟悉.不感冒,所述内容如有疑义请谅解. 3,3.0官说集群还在测试中,其实用用也还算马马虎虎,对外集群API真 ...

  4. c语言复杂声明解析

    这是个好东西,接触c语言好几年了,第一次看到这东西,惊喜万分. 先提供个分析案例,以后看方便 vector <int> * (*seq_array[]) (int )={func1,fun ...

  5. VisualStudio2012轻松把JSON数据转换到POCO的代码

    原文:VisualStudio2012轻松把JSON数据转换到POCO的代码       在Visual Studio 2012中轻松把JSON数据转换到POCO的代码,首先你需要安装Web Esse ...

  6. ios MKNetworkKit 的使用

    常用框架比如:AFNetworking,ASIHttpRequest,SDWebImage,MKNetWorKit等. iOS5已出来这么久了,而ASIHttpRequest的作者已经申明不更新了,在 ...

  7. Appium0.18.x迁移到Appium1.x须知事项

    英文原版:https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md Migr ...

  8. 来选择一款适合你网站的CMS建站程序吧

    1:首页我们要搞清楚什么叫cms? ContentManagementSystem就是cms的全名,意思就是内容管理系统.cms整站系统是以文章系统为核心,增加用户需要的模块,如文章.图片.下载等,提 ...

  9. 转载:你需要知道的16个Linux服务器监控命令

    源址:http://web.itivy.com/article-653-1.html 如果你想知道你的服务器正在做干什么,你就需要了解一些基本的命令,一旦你精通了这些命令,那你就是一个 专业的 Lin ...

  10. awk精简教材

    awk就不多介绍了,最优秀的文本处理工具之一 一.内置变量表 属性 说明 $0 当前记录(作为单个变量) $1~$n 当前记录的第n个字段,字段间由FS分隔 FS 输入字段分隔符 默认是空格 NF 当 ...