• Linux学习日记之磁盘与档案系统


    主要定义

    1. 磁盘的物理组成
      磁盘主要由圆形磁盘(多张)、机械手臂、磁头等组成。每张磁盘都有不同的磁道,半径相同的磁道组成了磁柱,沿着中心划线可将磁盘分成若干扇区,每个扇区的大小是512Bytes。
    2. 磁盘分割
      磁盘分区的重点是记录每一个分割区的起始与结束磁柱,而这个记录放在MBR(主引导记录),MBR最多提供四个分区记录,多于4个的要使用扩展分区。
    3. 文件系统
      磁盘分区完成后要进行格式化,而格式化就是给磁盘设置合适的文件系统(如:ext2、ext3),每一个分区只能指定一种文件系统,文件系统是规定存取数据的方式。磁盘最小的储存单们是扇区(sector),每个sector的大小是512个字节,但是文件系统中规定的最小存取单位并不是512个字节,文件系统中引入了逻辑区块(Block)的概念,每个Block的大小可以根据需要设成不同,在考虑Block大小时要考虑到以下两个方面:读取效率、磁盘空间,Block太大容易学浪费空间,另外一方面如果Block太小,在存取大的文件时效率会降低,所以应根据实际的需要合理的安排Block的大小。
    4. EXT2文件系统
      EXT2文件系统将文件分为两部分进行储存, 一部分保存文件的属性,另一部分保存文件的内容,前者为inode后者为Block,我们在将磁盘格式化为ext2时必须指定inode与Block的大小才行,也就是说会建立inode table 与block table两个区域。Block是记录文件内容的区域,inode记录文件相关属性及文件内容放置在哪个block,简单说inode除了记录文件属性同时还必须要有指向的功能,即指向文件内容放置的区块(Block),好让操作系统可以正确取得文件内容。Inode记录的信息包括以下:文件的拥有者与群组、文件的存取模式(read、write、execute)、文件的类型、文件状态改变的时间(ctime)、最近一次的读取时间(atime)、最近修改的时间(mtime)、文件的大小、文件类型的旗标、该文件真正内容的指针(pointer)

    系统存取文件的过程
    目录
    当在Linux下新建 一个目录时,ext2会分配一个inode与至少一块Block给该目录。其中,inode记录该目录相关属性,并指向分配到的那块Block;而Block则是记录这个目录下相关连的文件的关联性!

        档案
    当在linux下新建 一个文件时,ext2会至少分配一个inode与相对于该文件大小的Block数量给该文件。

        注意:inode本身并不记录文件名,只记录文件的相关属性,至于文件名则是记录在目录所属的block区域!另外文件与目录的关连性是通过目录的block区域记录文件的相关连接实现的。所以当我们读取一个档案的内容时,我们的linux会先由根目录取得该档案上层目录所在的inode,再由该目录所记录的文件关连性(在该目录所属的block区域)取得该档案的inode,最后经由inode提供的block指向,取得最终的档案内容。以下为例子:

    一块分区在ext2下会被格式化为inode table和block area 两个区域,以上图的方式来表达比较容易理解。读取文件的流程为:

    1. 操作系统根据根目录的相关资料可取得/etc这个目录所在的inode,并前往读取/etc这个目录的相关属性。
    2. 根据/etc的inode资料,可以取得/etc这个目录底下所有档案的关连数据是放在哪一个block当中,并前往该block读取档案的关连性内容;
    3. 根据上步可知目标文件的inode所在地,并前往该inode;
    4. 由上个步骤inode,可以读取目标文件的所有属性,并前往inode所指向的block区域,取得文件内容。
      注:目录最大的功能就是提供文件的关连性,在关连性里面,最主要的是文件名与inode对应的数据。

    更多内容参考 :http://www.cnblogs.com/ggjucheng/archive/2012/08/22/2651641.html

  • 相关阅读:
    iOS开发--关闭ARC
    iOS开发--libxml/HTMLparser.h file not found 解决方法 (libxml.dylib错误处理)
    leetcode -- Dungeon Game
    网络编程之协程——gevent模块
    网络编程之协程——greenlet模块
    网络编程之协程
    网络编程之进程池与线程池
    网络编程之多线程——线程queue
    网络编程之多线程——信号量,Event,定时器
    网络编程之多线程——死锁现象与递归锁
  • 原文地址:https://www.cnblogs.com/wangrx/p/5949343.html
Copyright © 2020-2023  润新知