一、复习知识点:

  1、扇区是最小的物理存储单位,大小为512bytes。

  2、扇区组成一个圆,成为柱面,柱面是分区的最小单位。

  3、第一个扇区很重要,因为包含了MBR(446字节)和分区表(64字节)

  4、分区的柱面范围记录在分区表中,分区表最多有4条分区记录。

  5、所以最多是3个主分区+一个扩展分区,然后扩展分区再分出逻辑分区。

  6、主分区和逻辑分区可以格式化,扩展分区不可以格式。

二、认识EXT2文件系统:

  如今的技术LVM可以把一个分区分为多个文件系统,也可以把多个分区合并为一个文件系统。

  这里仅介绍EXT2文件系统的通用概念:

  

   inode:存放权限和属性,以及block号码,一个文件占用一个。

  block:存放实际的数据,一个文件占用一个或多个。

  super block:存放文件系统的整体信息,inode/block总量、使用量等。

  文件系统一经格式化,inode与block的数量与大小就固定了。

三、linux下的EXT2文件系统:

  EXT2文件系统在格式化时会分为多个快组(block group),每个快组都有独立的inode(若干)/block(若干)/super block(一个或0个)。示例如下图:

                                                  

  1、文件系统最前面有一个启动扇区,这个启动扇区可以安装引导装载程序,可以用于制作多重引导的环境。

  2、super block中存储的内容:  dumpe2fs 设备名 <==查看文件系统信息,里面有很多信息就是super block中 的信息。

    ①记录inode/block的数量。

    ②未使用与使用的inode/block数量。

    ③inode与block的大小(inode固定为128字节,block可以为1K/2K/4K)

    ④文件系统的挂载时间、最后一次写入时间、最后一个磁盘检查时间等等

    ⑤validbit记录是否已经挂载,0或1.

    说明:每个快组中都会包含super block,但是一般只是用第一个快组的super block,其余的作为备份。一个文件系统应该仅有一个super block。

  3、文件系统描述:

    用于描述当前组块的起始block号码,以及每个区段(super block、块对应表、inode对应表、inode table 、data block等)分别介于哪个block号码之间。

  4、block bitmap(块对应表):用于记录哪些block为空,哪些已经存储了数据。

  5、inode bitmap(inode对应表):用于记录哪些inode为空,哪些已经使用。

  6、inode table:存放的是若干个inode,每个inode大小为128字节。

    A、inode首先会记录文件的属性和权限,以及实际数据存放在哪些block中。

    B、inode记录一个block号码需要占用4个字节,因此128个字节可能不够用,所以它又分为了12个直接、一个间接、一个双间接、一个三间接。如下图:

        

四、与目录树的关系:文件和目录如何记录数据?

  1、目录:

    A、ext2会分配一个inode和若干个block给目录。(目录的block一般不是用于保存文件的实际数据)

    B、inode记录目录的权限和属性,并记录block的指向。

    C、block记录目录下的文件名、文件名对用的inode,相当于记录了很多键值对。

    D、可以使用ls -i 来查看目录下文件占用的inode。

  2、文件:

    A、新建文件时,会分配一个inode,根据文件大小分配若干个block。

    B、注意,当文件过大,所需要的block很多时,inode仅靠12个直接指向就无法满足要求了,此时或许就需要间接、双间接、三间接了。

  3、目录树读取的步骤:(需要明确inode中不会记录文件名)

    A、首先判断目录的权限,通过目录的inode来判断,是否有读取和执行权限。

    B、若目录权限符合要求,通过inode找的目录对应的block号码。

    C、读取上面找到的目录block号码,在键值对中查找下级文件名,比如 etc/,找的etc/对应的inode。

    D、如果还是目录,重复上面的步骤。

    E、若是文件,通过上一步找到的inode,判断权限,若有权限,读取对应的block即可。

五、EXT2/EXT3文件的访问和日志文件系统的功能:

  1、首先讲一下新增文件的步骤:

    A、先确定用户对目录拥有w和x权限。

    B、根据inode对应表查找可用的inode号码,写入权限和属性。

    C、根据block对应表查找可用的block号码,写入数据,并更新inode的block指向。

    D、将inode与block数据同步更新到inode对应表和block对应表中。

    E、更新super block数据。

  2、上述步骤若遇到系统突然中断,就有可能出现数据不一致的状态。

    A、早期ext2会根据文件系统是否挂载以及state来判断是否进行一致性检查,但是这种检查需要搜寻整个文件系统,很耗时。

    B、日志系统就是为了解决上面所说的问题。

  3、日志文件系统:

    在文件系统中,规划处一个块,专门用于记录写入或修改文件的步骤。

    A、当出现问题时,只需要检查日志,定位修复即可。

    B、Ext3是EXT2的升级版本,带有日志功能。

    C、EXT2的特点:可利用性、数据完整性、速度以及易于转换。

  4、通过dumpe2fs 命令可以查看super block中包含的以下信息:

    Journal inode:  8

    Journal backup: inode blocks

    Journal size : 128M

六、linux文件系统的操作:

  如果在修改文件时频繁的进行磁盘读写,效率就会很慢,因此linux采用异步处理的方式:

  A、一个文件被加载到内存中,被设置为clean。

  B、当文件数据有变动,被设置为dirty。

  C、系统会定时将dirty数据写回到磁盘,保存一致性。

  D、可以使用sync命令手动强制写入磁盘。

  E、正常关机时,关机命令会调用sync命令。

  F、非正常关机时,重启会进行磁盘检验,甚至会导致文件系统的损毁。

七、挂载点(mount point)的意义:

  将文件系统与目录树结合的操作称为挂载。

八、其他linux支持的文件系统与VFS:

  ls -l /lib/modules/$( uname -r )/kernel/fs;  <==查看linux支持哪些文件系统

  cat /proc/filesystems;  <== 查看目前已经加载到内存的文件系统。

  VFS功能用来管理所有的文件系统,统一读取,不需要额外设置。

攻城狮在路上(叁)Linux(十七)--- linux磁盘与文件管理概述的更多相关文章

  1. 攻城狮在路上(叁)Linux(二十七)--- 压缩与打包之常见的压缩命令

    前面讲到,linux中的后缀名没有特殊的意义,一般是作为不同文件类型的标识而已.下面是与打包.压缩相关的后缀名介绍: *.z:compress程序压缩文件 *.gz:gzip程序压缩文件 *.bz2: ...

  2. 攻城狮在路上(叁)Linux(三十)--- 光盘写入工具

    一.基本步骤: 1.用mkisofs命令将所需备份的数据构建成镜像文件. 2.用cdrecord命令将镜像文件刻录至光盘或者DVD中. 二.mkisofs:新建镜像文件 mkisofs [-0 镜像文 ...

  3. 攻城狮在路上(叁)Linux(二十三)--- linux磁盘参数修改(设备代码、设备名)

    一.mknod:设置设备代码 linux中,所有的设备都是用文件来表示,文件通过major与minor数值来判断. major为主设备代码,minor为设备代码(需要查询),示例如下: /dev/hd ...

  4. 攻城狮在路上(叁)Linux(二十二)--- linux磁盘挂载与卸载 mount umount

    挂载就是将文件系统与目录结合的操作.挂载点就是目录,该目录就是进入分区或文件系统的入口. 一.挂载前的注意事项: 1.单一文件系统不应该被重复挂载在不同的挂载点中. 2.单一目录不应该重复挂载多个文件 ...

  5. 攻城狮在路上(叁)Linux(二十一)--- linux磁盘检查 fsck \ badblocks

    若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查.这一步是可选的,尽量少用. 使用前的建议:使用fsck命令时,被检查的分区务必不要挂载在系统上. 一.fsck: 命令格式:fsck [ ...

  6. 攻城狮在路上(叁)Linux(二十)--- Linux磁盘格式化

    磁盘完成分区之后,进行格式化,生成文件系统. 命令格式: mkfs [-t 文件系统格式] 设备文件名  <== 使用 mkfs [Tab][Tab] 可以查看linux支持的文件系统格式 示例 ...

  7. 攻城狮在路上(叁)Linux(十一)--- 用户与用户组、文件权限、目录配置

    一.用户与用户组: 3个概念:文件所有者(user).用户组(group).其他人(others). /etc/passwd  <==存放所有的用户名 /etc/shadow  <==存放 ...

  8. 攻城狮在路上(叁)Linux(零)--- 软件环境、参考书目等一览表

    1.参考书目:鸟哥的Linux私房菜. 2.环境: Cent_os.

  9. 攻城狮在路上(叁)Linux(三十一)--- vim程序编辑器

    本篇主要介绍vim编辑器的使用方式,具体内容后续补充.

随机推荐

  1. [ruby on rails] 跟我学之(10)数据输入验证

    这里简单加上几个验证,非空,最小长度,唯一 修改模型 修改app/models/post.rb文件,如下: class Post < ActiveRecord::Base #attr_acces ...

  2. 用ConfigParser模块读写配置文件——Python

    对于功能较多.考虑用户体验的程序,配置功能是必不可少的,如何存储程序的各种配置? 1)可以用全局变量,不过全局变量具有易失性,程序崩溃或者关闭之后配置就没了,再者配置太多,将变量分配到哪里也是需要考虑 ...

  3. LUA require 搜索路径指定方法

    如果是一个 *.LUA 的文件, 里面用到了自己写的库, 或者第三方写的库, 但是你不想把它放到 lua 的安装目录里, 则在代码里面可以指定require搜索的路径. package.path = ...

  4. C语言宏定义时#(井号)和##(双井号)的用法

    C语言中如何使用宏C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念).下面对常遇到的宏的使用问题做了简单总结. 关于#和## 在C语言的宏中,#的功能是将其后面 ...

  5. NUI四种提交数据方式c

    方式一: 1)前端页面 2)逻辑流参数设置 方式二: 1)前端页面 2)逻辑流参数设置 方式三:  1)前端页面 2)逻辑流参数设置 方式四: 1)前端页面 2)逻辑流参数设置

  6. ip netns相关命令

    1.增加虚拟网络命名空间   ip netns add net0   2.显示所有的虚拟网络命名空间 EULER:~ # ip netns list net0 也可通过查看/var/run/netns ...

  7. WPF 中更新界面信息

    1.Dispatcher.BeginInvoke int ii = 0; new Thread(new ParameterizedThreadStart((i) => { while (true ...

  8. sharepoint更新左侧列表的名字

    SPWeb myweb = SPContext.Current.Web;            SPList myList = myweb.Lists["nihao"];      ...

  9. 如何把一个excel工作薄中N个工作表复制到另一个工作薄中

    一般遇到标题这样的情况,许多人可能会一个一个的复制粘贴,其实完全不必那么麻烦. 你可以按以下步骤来操作: 第一步:打开所有要操作的excel工作薄\n 第二步:按住Shift键,选择所有要复制的工作表 ...

  10. bootstrap日期控件在火狐下的模态框中选择时间下拉菜单无效的解决办法

    今天收到程序组提交的一个兼容BUG,在火狐中使用模态框加载日期控件时选择时间下拉菜单没有效果(不能点击),而在谷歌中却是好的, 排错思路:1,在当前页面主层放置一个时间控件,测试通过 2,在ajax加 ...