文件系统与硬盘

以前比较多地关注存储系统的层级系统,而对于文件系统与硬盘之间的关系一直忽略了,这些天在看opentack架构,对这部分比较感兴趣,就查了一下。之前只知道内存与硬盘之间的交互关系,也即虚拟存储器(包括页式存储和页表的多级索引)的概念,而对于文件系统与硬盘,其实是另外一个系统,直接inode+block进行索引,下面这篇文章说的比较明白。

http://guafei.iteye.com/blog/1061281

 

文件系统是建立在硬盘上面的

扇区(Sector)为最小的物理储存单位,每个扇区为 512 bytes;
将扇区组成一个圆,那就是磁柱(Cylinder),磁柱是分割槽(partition)的最小单位;
第一个扇区最重要,里面有:(1)主要开机区(Master boot record, MBR)及分割表(partition
table), 其中 MBR 占有 446 bytes,而 partition table 则占有 64 bytes。

为什么要进行格式化,就是讲硬盘格式化成操作系统能识别的文件系统,存储信息

linux的文件系统EXT2有三个部分:inode,data block ,superblock
superblock:记彔此 filesystem 的整体信息,包括 inode/block 的总量、使用量、剩余量, 以
及文件系统格式不相关信息等;
inode:记彔档案的属性,一个档案占用一个 inode,同时记彔此档案癿数据所在的block 号码;
block:实际记彔档案的内容,若档案太大时,会占用多个 block

EXT2是索引式文件系统哦,通过inode直接记录数据的block号,进行数据的查找
FAT是闪存式文件系统,它没有inode,读取数据时,是通过类似与链表来读各个block,当block块比较分散的时候,那么就比较麻烦了,windows的磁盘碎片整理就是把空余的block整理下,方便数据的读取。而EXT2基本上不用进行磁盘的碎片整理。
详细可以看书本的244页

在格式化硬盘的时候,inode和block的大小都已经确定下来了。
原则上,block 的大小不数量在格式化完就不能够再改发了(除非重新格式化);
每个 block 内最多叧能够放置一个档案的数据;
承上,如果档案大于 block 的大小,则一个档案会占用多个 block 数量;
承上,若档案小于 block ,则该 block 癿剩余容量就不能够再被使用了(磁盘空间会浪费)

既然大的 block 可能会产生较严重的磁盘容量浪费,那举我们是否就将 block 大小订为 1K 即可?
这也不妥,因为如果 block 较小的话,那举大型档案将会占用数量更多的 block ,而 inode 也要记彔
更多癿 block 号码,此时将可能寻致文件系统不良的读写效能。

inode和block等都是分块管理的,就是许多data block组合成一个块。

在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),这个启动扇区可以安装开机管理程
序, 这是个非帯重要的设计,因为如此一来我们就能够将不同的开机管理程序安装到个别的文件系统
最前端,而不用覆盖整颗硬盘唯一的MBR, 这样才能能够制作出多重引导的环境啊!

inode分析:
每个 inode 大小均固定为 128 bytes;
每个档案都仅会占用一个 inode 而已;
承上,因此文件系统能够建立的档案数量不 inode 的数量有关;
系统读取档案时需要先找到 inode,分析 inode 所记彔的权限不用户是否符合,若符合才能
够开始实际读取 block 的内容

Superblock 是非帯重要,因为我们这个文件系统癿基本信息都写在这里,因此,如果 superblock
死掉了, 你的文件系统可能就需要花费很多时间去挽救啦!一般来说, superblock 癿大小为
1024bytes。

block bitmap (区块对照表)
inode bitmap (inode 对照表)

使用dumpe2fs命令可以查看三个部分的详细信息

目录与inode/block的关系:
当我们在 Linux 下的 ext2 文件系统建立一个目录时, ext2 会分配一个 inode 不至少一块 block 给该
目彔。其中,inode 记彔该目彔的相关权限和属性,并可记彔分配到的那块 block 号码; 而 block 则
是记彔在这个目彔下的文件名和该文件名占用的 inode 号码数据。

EXT2文件系统读取档案,也是通过inode和block来进行的,具体步骤可以参考书本的252页
新增档案的话,也是有步骤的,具体看252-253

当在写入数据的时候,突然断电,假使inode table和data table已经更新了,但是block还没有写入,那么就造成数据的不一致,虽然linux在重启的时候会扫描整个硬盘来检查,但是这样的效率实在太低来,所以
日志文件系统产生了,在filesystem中划出一块区域,来存放数据的写入信息,当发生错误时可以直接查看日志文件就可以了。
EXT2和EXT3的区别就是后者增加了文件系统

我们知道内存的速度要比硬盘快,因此如果能够将帯用癿档案放置到内存当中,这不就会增加系统
性能吗? 没错!是有这样的想法!因此我们 Linux 系统上面文件系统和内存有非常大的关系喔:
系统会将帯用癿档案数据放置到主存储器癿缓冲区,以加速文件系统癿读/写;
承上,因此 Linux 癿物理内存最后都会被用光!这是正帯癿情冴!可加速系统效能;
你可以扃劢使用 sync 来强迫内存中讴定为 Dirty 癿档案回写到磁盘中;
若正帯关机时,关机挃令会主劢呼叨 sync 来将内存癿数据回写入磁盘内;
但若丌正帯关机(如跳电、当机戒其他丌明原因),由亍数据尚未回写到磁盘内, 因此重新吪劢后
可能会花徆多时间在迚行磁盘检验,甚至可能寻致文件系统癿损毁(非磁盘损毁)。

每个文件系统都有独立的inode/block/superblock等信息,这个文件系统要能够链接到目录才能给我们使用,将文件系统链接到目录的过程叫做挂载
每个分区都是一个独立的文件系统,比如你分区的时候分了/ /home /boot  那么就有三个文件系统与之对应

linux是通过VFS(Virtual Filesystem Switch)来控制文件系统。通过这个使用者可以不关心所对应的文件系统是什么格式的。
命令df查看磁盘的使用情况,主要是读取superblock部分的内容

如果使用df -a那么系统会出现/proc这个挂载点,但是里面的东西为0,因为这个里面的东西都是挂载到内存中的,所以不占硬盘的任何空间
du这个命令会直接到文件系统内去搜寻所有的档案数据,所以使用这个命令会比较慢点

linux下创建类似与windows的快捷方式叫做Symbolic Link,创建的命令是:ln -s filename filelink  这个如果删除了主文件,那么就会出错,找不到文件。
linux下还有一种创建快捷方式叫做hard link,创建的命令是:ls filename filelink   这个如果删除了住文件,不会出错,还是能找到
一个空目录下面会存在.和..两个目录。当我们建立新目录的时候,新目录的link数是2个(/tmp/test和/tmp/test/.),而且上级目录会增加一个link(/tmp/test/..)
进行磁盘分区格式化等命令fdisk,而df是查看磁盘的使用情况

在命令行下进行磁盘的分区等操作需要看这一章

磁盘格式化命令mkfs。mkfs -t ext3 /dev/hdc6   但是它不能指定文件系统的block,inode等大小,指定这种大小可以用命令 mke2fs
fsck检查文件系统是否出错。至于badblocks则是用来检查硬盘或软盘区有没有坏轨指令

 

posted @ 2012-07-20 22:13  EE_NovRain  阅读(829)  评论(0编辑  收藏  举报