首页 > 代码库 > 我和linux的第十二天

我和linux的第十二天

这两天学习的操作性东西比较多,慢慢整理吧。

 

linux硬盘与文件系统管理(一)

整块磁盘的组成主要有:

圆形的盘片(主要记录数据的部分);

机械手臂与机械手臂上的磁头(可读写磁盘上的数据);

主轴马达,可以转动盘片,让机械手臂上的磁头在盘片上读写数据。

磁盘上盘片的物理组成:

扇区(Sector)为最小的物理存储单位,每个扇区为512bytes

将扇区组成一个园,那就是柱面(Cylinder),柱面是分区(partition)的最小单位;

第一个扇区最重要,里面有硬盘主引导记录(Masterbootrecord,MBR)及分区表(partition table),其中MBR占有446bytes,而partition table则占有64bytes

linux分区的定义:

主分区与扩展分区最多可以有4个(硬盘的限制);

扩展分区最多只能有一个(操作系统限制);

逻辑分区由扩展分区持续分出来的分区;

能够被格式化后作为数据访问的分区为主要分区与逻辑分区,扩展分区无法格式化;

逻辑分区的数量依操作系统而不同,linux系统中,IDE硬盘最多有59个逻辑分区(5~63号),SATA硬盘则有11个逻辑分区(5~15号)。

Super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;

inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码;

block:实际记录文件的内容,若文件太大时,会占用多个block

磁盘碎片整理:文件写入的block太过于离散了,此时文件读取的性能将会变得很差,通过碎片整理将同一个文件所属的block汇合在一起,这样数据的读取会比较容易。

一个块组(block group)有6部分:

1.date block:在Ext2文件系统中所支持的block大小有1kb2kb4kb三种。原则上,block的大小与数量在格式化完就不能够再改变了(除非重新格式化);每个block内最多只能够放置一个文件的数据,如果文件大于block大小,则一个文件会占用多个block数量,如果一个文件小于block大小,则该block的剩余空间不能再被使用(磁盘空间会浪费)。

2.inode table:记录的文件数据:

该文件的访问模式(read/write/excute);

该文件的所有者与组(owner/group);

该文件的大小;

该文件创建或状态改变的时间(ctime);

最近一次读取的时间(atime);

最近修改的时间(mtime);

定义文件特性的标志(flag),如SetUID等;

该文件真正内容的指向(pointer)。

inode基本特征:

每个inode大小均固定为128bytes

每个文件仅占用一个inode,因此文件系统能够创建的文件数量与inode的数量有关;

系统读取文件时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容。

3.super block(超级块):记录的信息主要有:

blockinode的总量;

未使用与已使用的inode/block数量;

blockinode的大小(block1k2k4kinode128bytes);

文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息;

一个valid bit数值,若此文件系统已被挂载,则valid bit0,若未被挂载,则valid bit1

super block信息可以用dumpe2fs命令来查看。

4.file system description(文件系统描述说明)

这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段(super blockbitmapinodemapdate block)分别介于哪一个block号码之间。这部分能够用dumpe2fs来查看。

5.block bitmap(块对照表)

记录使用与未使用的block号码。

6.inode bitmapinode对照表)

记录使用与未使用的inode号码。

日志文件系统(Journaling file system

预备:当系统要写入一个文件时,会先在日志纪录块中记录某个文件准备要写入的信息;

实际写入:开始写入文件的权限与数据;开始更新meta data的数据。

结束:完成数据与meta data的更新后,在日志记录块当中完成该文件的记录。

linux文件系统的异步处理:

系统加载一个文件到内存后,如果该文件没有被改动过,则在内存区段的文件数据会被设置为(clean)。但如果内存中的数据被更改过(例如使用vim编辑过文件),此时该内存中的数据会被设置为dirty。此时所有的操作都还在内存中执行,并没有写入到磁盘中。系统会不定时地将内存中设置为dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。

linux系统上的文件系统与内存的关系:

系统会将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读/写,因此linux的物理内存最后都会被使用光,这是正常现象,可加速系统性能;

可以手动使用sync来强迫内存中设置为Dity的文件回写到磁盘中;

正常关机,关机命令会主动调用sync来将内存的数据回写到磁盘中;

不正常关机(断电、死机等),由于数据尚未回写到磁盘内,因此重新启动后可能会花很多时间进行磁盘检验,甚至可能导致文件系统的损坏(非磁盘损坏)。

挂载:每个文件系统都有独立的inodeblocksuper block等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统与目录树结合的操作成为挂载。

 

文件系统的简单操作:

df:列出文件系统的整体磁盘使用量,-h以人们较易阅读的GBMBKB等格式自行列出,-i不用硬盘容量,而以inode的数量来显示。

du:评估文件系统的磁盘使用量(常用于评估目录所占容量)。-s列出总量,不列出每个目录占用容量,-S列出子目录的总计,与-s不同,-mMB单位显示。

连接文件(link file):ln linkfile newfilenameln -s linkfile newfilename;

hard link(硬连接或实际连接):在某个目录下创建一条文件名连接到某inode号码的关联记录,通过文件系统的inode连接来产生新的文件名,而不是新文件。文件名只于目录有关,但是文件内容则与inode有关。hard link限制:不能跨文件系统,不能连接目录。

symbolic link(符号连接,即windows下快捷方式):创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。源文件被删除后,symbolic link的文件会显示无法打开。由symbolic link所创建的文件为一个独立的新的文件,所以会占用掉inodeblock。

本文出自 “开忈的主题” 博客,谢绝转载!

我和linux的第十二天