主要定义

  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

Linux学习日记之磁盘与档案系统的更多相关文章

  1. Linux 学习笔记 1 使用最小的系统,从分区安装系统开始

    我们常用的linux系统在安装过程中大多都省略了对系统进行分区的操作,以至于后期,不了解什么是分区以及分区当中最基本的一些概念, 我们不说最细的知识,只求了解这个过程,那直接步入正题,开始第一节的学习 ...

  2. Linux学习日记-使用EF6 Code First(四)

    一.在linux上使用EF 开发环境 VS2013+mono 3.10.0 +EF 6.1.0 先检测一下EF是不是6的 如果不是  请参阅 Linux学习日记-EF6的安装升级(三) 由于我的数据库 ...

  3. Linux学习之路—磁盘分区

    1.各硬件设备在Linux中的文件名 在Linux系统中,每个设备都被当做一个文件来对待,同时在Linux系统中,几乎所有的硬件设备文件都在/dev这个目录中. 设备 设备在Linux内的文件名 ID ...

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

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

  5. Linux 学习日记 1

    这是我第一次系统地学习Linux,希望通过这个学习日记收获一些东西把-- @_@ Grub - 启动管理器   在启动时让用户选择要启动的系统.(但是windows比较霸道--重装windows后会将 ...

  6. Linux学习日记——字符处理

    (菜鸡学习日记 各种使用命令只列举了常用几种,发现错误望指正) 一.管道 在Linux 中,管道就是一个固定大小的缓冲区,大小为一页4K.它是一种通信的机制,可以使用管道符“ | ” 来连接进程,连接 ...

  7. LINUX学习之二磁盘篇

    1.Linux系统中,每个设备都被当成一个文件来对待.文件系统的最小单位是区块(Block) 设备 设备在Linux中的文件名 IDE硬盘 /dev/hd[a-d] SCSI/SATA/USB硬盘 / ...

  8. Linux学习记录--文件IO操作相关系统编程

    文件IO操作相关系统编程 这里主要说两套IO操作接口,各自是: POSIX标准 read|write接口.函数定义在#include<unistd.h> ISO C标准 fread|fwr ...

  9. Linux学习日记-(一)

    一.为什么学习Linux 大学时开始接触Linux,最开始学习的是RedHat(小红帽),感觉Linux好像很久不见的老朋友,用起来很舒服(虽然我们用的是DotNet).很喜欢它的命令模式,让我能接触 ...

随机推荐

  1. Android SD卡存储

    原创文章,转载请注明出处:http://www.cnblogs.com/baipengzhan/p/Android_SDcard_store.html 一 概念 SD卡存储空间比较大,当需要存取较大的 ...

  2. BZOJ4539: [Hnoi2016]树

    复制的树缩点,主席树查k小,毫无技术含量,纯码农题. #include<bits/stdc++.h> #define u first #define v second #define F ...

  3. python面向对象二

    1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...

  4. ng-class结合三目运算

    ng-class文档:https://docs.angularjs.org/api/ng/directive/ngClass 但是在实际项目中可能会用到三目运算,实例如下: <ul> &l ...

  5. HTTP压力测试工具

    HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的P ...

  6. 使用powershell批量修改文本为utf8

    根据上一篇powershell生成pro的方法,增加一个批量修改文本文件为utf8格式的方法 $incPath = dir -filter "*.c" -Recurse $temp ...

  7. [Machine Learning & Algorithm] 神经网络基础

    目前,深度学习(Deep Learning,简称DL)在算法领域可谓是大红大紫,现在不只是互联网.人工智能,生活中的各大领域都能反映出深度学习引领的巨大变革.要学习深度学习,那么首先要熟悉神经网络(N ...

  8. SqlDataReader和SqlDataAdapter

    SqlDataReader 高效,功能弱,只读访问SqlDataAdapter 强大,要求资源也大一点 SqlDataReader 只能在保持跟数据库连接的状态下才可以读取... SqlDataAda ...

  9. HDU4411 最小费用流

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4411 floyd处理出最短路 每个点拆为i.i+n,i到i+n连一条容量为1,费用为负无穷的边,代表这个城 ...

  10. bootstrap的table调用本列ID

    我们是用json解析数据. 后台传送data数据~ String data = JSON.toJSONString(baseInfoService.list());request.setAttribu ...