这两天学习的操作性东西比较多,慢慢整理吧。
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大小有1kb,2kb和4kb三种。原则上,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(超级块):记录的信息主要有:
block与inode的总量;
未使用与已使用的inode/block数量;
block与inode的大小(block为1k、2k、4k,inode为128bytes);
文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件系统的相关信息;
一个valid bit数值,若此文件系统已被挂载,则valid bit为0,若未被挂载,则valid bit为1。
super block信息可以用dumpe2fs命令来查看。
4.file system description(文件系统描述说明)
这个区段可以描述每个block group的开始与结束的block号码,以及说明每个区段(super block、bitmap、inodemap、date block)分别介于哪一个block号码之间。这部分能够用dumpe2fs来查看。
5.block bitmap(块对照表)
记录使用与未使用的block号码。
6.inode bitmap(inode对照表)
记录使用与未使用的inode号码。
日志文件系统(Journaling file system)
预备:当系统要写入一个文件时,会先在日志纪录块中记录某个文件准备要写入的信息;
实际写入:开始写入文件的权限与数据;开始更新meta data的数据。
结束:完成数据与meta data的更新后,在日志记录块当中完成该文件的记录。
linux文件系统的异步处理:
系统加载一个文件到内存后,如果该文件没有被改动过,则在内存区段的文件数据会被设置为(clean)。但如果内存中的数据被更改过(例如使用vim编辑过文件),此时该内存中的数据会被设置为dirty。此时所有的操作都还在内存中执行,并没有写入到磁盘中。系统会不定时地将内存中设置为dirty的数据写回磁盘,以保持磁盘与内存数据的一致性。
linux系统上的文件系统与内存的关系:
系统会将常用的文件数据放置到主存储器的缓冲区,以加速文件系统的读/写,因此linux的物理内存最后都会被使用光,这是正常现象,可加速系统性能;
可以手动使用sync来强迫内存中设置为Dity的文件回写到磁盘中;
正常关机,关机命令会主动调用sync来将内存的数据回写到磁盘中;
不正常关机(断电、死机等),由于数据尚未回写到磁盘内,因此重新启动后可能会花很多时间进行磁盘检验,甚至可能导致文件系统的损坏(非磁盘损坏)。
挂载:每个文件系统都有独立的inode、block、super block等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统与目录树结合的操作成为挂载。
文件系统的简单操作:
df:列出文件系统的整体磁盘使用量,-h以人们较易阅读的GB、MB、KB等格式自行列出,-i不用硬盘容量,而以inode的数量来显示。
du:评估文件系统的磁盘使用量(常用于评估目录所占容量)。-s列出总量,不列出每个目录占用容量,-S列出子目录的总计,与-s不同,-m以MB单位显示。
连接文件(link file):ln linkfile newfilename;ln -s linkfile newfilename;
hard link(硬连接或实际连接):在某个目录下创建一条文件名连接到某inode号码的关联记录,通过文件系统的inode连接来产生新的文件名,而不是新文件。文件名只于目录有关,但是文件内容则与inode有关。hard link限制:不能跨文件系统,不能连接目录。
symbolic link(符号连接,即windows下快捷方式):创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。源文件被删除后,symbolic link的文件会显示无法打开。由symbolic link所创建的文件为一个独立的新的文件,所以会占用掉inode和block。
本文出自 “开忈的主题” 博客,谢绝转载!
原文地址:http://xeyes.blog.51cto.com/9232813/1584349