1、认识EXT2文件系统
1.1、硬盘组成与分割的复习
1)磁盘组成主要有:
圆形的磁盘盘(主要记录数据的部分)
机械手臂,与在机械手臂上的磁盘读取头(可擦写磁盘盘上的数据)
主轴马达,可以转动磁盘盘,让机械手臂的读取头在磁盘盘上读取数据;
2)扇区为最小的物理单位,每个扇区为512bytes;
将扇区组成一个圆,那就是磁柱,磁柱是分割槽的最小单位;
每一个扇区最重要,里面有:主要开机区MBR以及分割表,其中MBR占有446bytes,分割表占有64bytes;
3)各种接口的磁盘在Linux中的文件名为:
/dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash随身碟等
/dev/hd[a-d][1-63]:为IDE接口的磁盘文件名;
1.2、文件系统特性:索引式文件系统
1)磁盘分区完毕后需要进行格式化,之后操作系统才能够使用这个分割槽。因为每种操作系统所设定的文件属性/权限不同,为了存档档案所需要的数据,所以需要将磁盘格式化,以成为操作系统能够利用的文件系统格式(filesystem);
例如:Windos98以前的微软操作系统主要利用的文件系统是FAT(或者FAT16),windows2000以后的版本有所谓的NTFS文件系统,而Linux的正统文件系统为Ext2。此外,默认情况下,windows操作系统是不会认识Linux的Ext2的;
传统磁盘一个分割槽只能够被格式化称为一个文件系统,但现在我们通常可以称呼一个可被挂在的数据为一个文件系统而不是一个分割槽;
2)索引式文件系统运作过程(Linux系统)
Linux操作系统将档案实际内容和档案属性分别放置在两个不同的地方,权限与属性放置到inode中,至于实际数据则放置到data block区块中,另外还有一个超级区块(superblock)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等;
- superblock:记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量以及文件系统的格式与相关信息;
- inode:记录档案属性,一个档案占用一个inode,同时记录此档案的数据所在的block号码;
- block:实际记录档案的内容,若档案太大时,会占用多个block;
每个inode和block都有编号,而每个档案都会占用一个inode,inode内则有档案数据放置的block号码,当然也能够读出该档案的实际数据了;这种数据存储的方法称为索引式文件系统;- 注:磁盘碎片整理的原因就是档案写入的block太过于离散了,此时档案读取的效能将会变得很差所致,这个时候可以透过碎片整理将同一档案所属的blocks汇整在一起,这样数据的读取会比较容易;故Linux一般不需要碎片整理
1.3、Linux的EXT2文件系统(inode):data block,inode table,superblock,dumpe2fs
Ext2文件系统在格式化的时候是区分为多个区块群组(block group)的,每个区块群组都有独立的inode/block/superblock系统。
- data block(资料区块)
data block是用来放置档案内容数据的地方,在Ext2文件系统中所支持的block大小有1k,2k及4k三种。
block限制:
原则上block的大小和数量在格式化完就不能够再改变了(除非重新格式化);
每个block内最多只能够放置一个档案的数据;
如果档案内容大于block的大小,则一个档案会占用多个block数量;
如果档案内容消息block的大小,改block的剩余容量就不能够在使用了(磁盘空间浪费);
Block大小 | 1KB | 2KB | 4KB |
---|---|---|---|
最大单一档案限制 | 16GB | 256GB | 2TB |
最大文件系统总容量 | 2TB | 8TB | 16TB |
- inode的内容记录档案的属性以及该档案实际数据是放置在哪些block内。基本上,inode记录的档案数据至少有以下内容:
1、 该档案的存取模式;
2、该档案的拥有者和群组;
3、该档案容量;
4、该档案建立或状态改变的时间;
5、最近一次读取的时间;
6、最近修改的时间;
7、该档案真正内容的指向;
注意:
1、每个indoe大小固定为128bytes;
2、每个档案都仅会占用一个inode而已;
3、文件系统能够建立的档案数量与inode的数量有关;
4、系统读取档案时需要先找到inode,并分析inode所记录的权限与用户是否符合,若符合才能够开始实际读取block的内容;- Superblock(超级区块)
记录整个filesystem相关信息的地方,没有Superblock,就没有这个filesystem了。主要记录信息如下:
1、block与inode总量;
2、未使用与已使用inode/block数量;
3、block与inode的大小(block为1,2,4kb,inode为128bytes);
4、filesystem的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等的文件系统相关信息;
5、一个valid bit数值,若次文件系统被挂载,则valid bit为0,若未被挂载,则valid bit为1;- Flilesystem Description (文件系统描述说明)
这个区块可以描述每个block group的开始与结束的block号码,以及说明每个区块分别介于哪一个block号码之间;- block bitmap(区块对照表)
block bitmap可以知道哪些block是空的- inode bitmap(inode对照表)
inode bitmap可以知道哪些inode未使用;
1.4、与目录树关系
Linux系统下,每个档案都会占用一个inode,且可依据档案内容的大小来分配多个block给该档案使用;
- 目录
当我们在Linux的ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块block给该目录。其中inode记录该目录的相关权限与属性,并可记录分配到的那块block号码,而block则是记录这个目录下的文件名与该文件名占用的inode号码数据。- 档案
我们在Linux下的ext2建立一个一般档案时,ext2会分配一个inode与相对于该档案大小的block数量给该档案。- 目录树读取
当我们读取某个档案时,就务必会经过目录的inode和block,然后找到那个待读取档案的inode号码,最终才会读取到正确的档案的block内的数据。- filesystems大小与磁盘读取效能
虽然我们的 ext2 在 inode 处已经将该档案所记录的 block 号码都记上了, 所以资料可以 一次性读取,但是如果档案真的太过离散,确实还是会发生读取效率低落的问题。 因为磁盘读取头还 是得要在整个文件系统中来来去去的频繁读取! 果真如此,那举可以将整个 filesystme 内的数据全部 复制出来,将该 filesystem 重新格式化, 再将数据给他复制回去即可解决这个问题。
1.5、EXT2/EXT3档案的存取与日志式文件系统的功能
新建一个档案或目录时,Ext2处理过程:
- 先确定用户对于新增档案的目录是否具有w和x的权限,若有的话才新增;
- 根据inode bitmap找到没有使用的inode号码,并将新档案的权限/属性写入;
- 根据blockbitmap找到没有使用的block号码,并将实际的数据写入block中,且更新inode的block指向数据;
- 将刚刚蟹肉的inode与block数据同步更新到inode bitmap和block bitmap中,并更新superblock的内容;
一般来说,我们将inode table与data block称为数据存放区域,其他如superblock,inode bitmap等区块称为metadata(中介资料);
- 数据的不一致状态
metadata的内容与实际数据存放区产生不一致的情况- 日志式文件系统
1、预备:当系统要写入一个档案时,会现在日志记录区块中记录某个档案准备要写入的信息;
2、实际写入:开始写入档案的权限和数据,开始更新metadata的数据;
3、结束:完成数据与metadata的数据更新后,在日志记录区块完成该档案的记录;
1.6、Linux文件系统的运作
异步处理:解决磁盘写入的速度要比内存慢很多,耗时在等待硬盘的写入/读取上的问题
当系统加载一个档案到内存后,如果该档案没有被更动过,则在内存区段的档案数据会被设定为干净的(clean)。但如果内容中的数据被更改过了,此时内容中的数据会被设定为脏的(dirty)。此时所有的动作都还在内容中执行,并没有写入到磁盘中,系统会不定时的将内存中设定为脏(dirty)的数据写入到磁盘中,以保证磁盘与内容数据的一致性;
1.7、挂载点的意义
挂载:将文件系统与目录树结合的动作;
重点:挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是你有任何文件系统都能使用,必须要挂载到目录树的某个目录后,才能够使用该文件系统的。
1.8、其他Linux支持的文件系统与VFS
常见的文件系统有:
- 传统文件系统:ext2/minix/MS-DOS/FAT/iso9660(光盘)
- 日志式文件系统:ext3/ReiserFS/Windows NTFS/IBM's JFS
- 网络文件系统:NFS/SMBFS
虚拟档案系统VFS用于管理filesystem,省去我们需要自行设定读取文件系统的定义;
2、文件系统简单操作
2.1、磁盘与目录的容量:df,du
- df:列出文件系统的整体磁盘容量;
df 【-ahikHTM】目录或文件名
由于df主要读取的数据几乎都是针对一着整个文件系统,因此读取的范围主要是Superblock内的信息,所以这个指令显示结果的速度会非常的快。在显示的结果中要特别注意那个根目录的剩余容量,因为我们所有的数据都是由根目录衍生出来的,因此当根目录剩余容量为0时,Linux可能就问题很大了。 - du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
du 【-ahskm】档案或目录名称
与df不一样的是,du这个指令其实会直接到文件系统内去搜寻所有的档案数据,所以du指令运作会执行一小段时间,默认情况下,容量的输出是以KB来设计的;
2.2、实体链接与符号链接:ln
在Linux底下的链接档有两种,一种类似Windows的快捷方式功能的档案,可以让你快速的链接到目标档案(或目录),另一种则是透过文件系统的inode连接来产生新档名,而不是产生新档案,这种称为实体链接。
- Hard Link(实体链接,硬式链接或实际链接)
hard link只是在某个目录下新增一笔档名链接到某inode号码的关联记录而已;
一般来说,hard link只是在某个目录下的block多写入一个关联数据而已,既不会增加inode也不会耗用block数量;- Symbolic Link(符号链接,亦即快捷方式)
Symbolic Link就是建立一个独立的档案,而这个档案会让数据读取指向他link的那个档案的档名。由于只是利用档案来做为指向的动作,所以,当来源档被删除后,symbolic link的档案就会开不了。- ln 【-sf】来源文件 目标文件
-s:如果不加入任何参数就进行链接,那就是hard link,而-s就是symbolic link;
-f:如果目标文件存在时,就主动的将目标文件直接移除后再建立;
3、磁盘的分割、格式化、检验与挂载
如果想在系统新增一颗硬盘,需要:
1、对磁盘进行分割,建立可用的patition;
2、对partition进行格式化,已建立系统可用filesystem;
3、若想要仔细一点,则可对刚刚建立好的filesystem进行检验;
4、在Linux系统上,需要建立挂载点(亦即目录),并将它挂载上来;
3.1、磁盘分区:fdisk,partprobe
磁盘分区:fdisk
fdisk 【-l】 装置名称
- 删除磁盘分区槽
- 新增磁盘分区槽
- 操作环境说明
以 root 的身份进行硬盘的partition 时,最好是在单人维护模式底下比较安全一些, 此外,在迚行 fdisk 的时候,如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的 partition 给他卸除,然后再重新进入 fdisk 一遍,重 新写入 partition table ,那举就可以成功啰!
3.2、磁盘格式化:mkfs,mke2fs
- mkfs:(make filesystem)
mkfs 【-t 文件系统格式】 装置文件名- mke2fs
mke2fs 【-b block大小】【-i block大小】【-L 标头】【-cj】 装置
3.3、磁盘检验:fsck,badblocks
- fsck:用来检查不修正文件系统错诨癿挃令
fsck 【-t 文件系统】【-ACay】装置名称- badblocks:用来检查硬盘戒软盘扂区有没有 坏轨癿挃令
badblocks -【svw】装置名称
3.4、磁盘挂载与卸除:mount,umount
挂载前确认:
1、单一文件系统不应该被重复挂载在不同的挂载点;
2、单一目录不应该重复挂载多个文件系统;
3、要作为挂载点的目录,理论上应该是空目录才是;
- mount:挂载
mount -a
1、 挂载Ext2/Ext3文件系统
mount 装置文件名 挂载点
2、 挂载CD或DVD光盘
3、格式化与挂载软盘
4、挂载随身碟
5、重新挂载根目录与挂载不特定目录- umount:将装置档案卸除
umount 【-fn】装置文件名或挂载点
使用Label name进行挂载
3.5、磁盘参数修订:mknod,e2label,tune2fs,hdparm
-mknod
mknod 装置文件名 【bcp】【Major】【Minor】
-e2label
e2label 装置名称 新的label名称
- tune2fs
tunes2fs 【-jlL】装置代号- hdparm
hdparm 【-icdmXTt】装置名称
4、设定开机挂载
4.1、开机挂载/etc/fstab及/etc/mtab
开机挂载,修改/etc/fstab文件。限制
1、根目录/是必须挂载的,而且一定要先于其他mount point被挂载进来;
2、其他mount point必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构;
3、所有的mount point在同一时间内,只能挂载一次;
4、所有patition在同一时间之内,只能挂载一次;
5、如若进行卸除,必须先将工作目录移到mount point(及其子目录)之外;
cat /etc/fstab
- 磁盘装置文件名或该装置的Label;
- 挂载点(mount point);
- 磁盘分区槽的文件系统;
- 文件系统参数;
- 能够被dump备份指令作用;
- 是否以fsck检验扇区;
4.2、特殊装置loop挂载(映像档不刻录就挂载使用)
- 挂载光盘/DVD映像文件;
- 建立大档案以制作loop装置档案;
5、内存置换空间(swap)之建制
swap的功能就是在应付物理内存不足的情况下所造成的内存延伸记录功能。
CPU读取的数据都来自于内存,当内存不足的时候,为了让后续的程序可以正常的运作,因此在内存中暂不使用的程序和数据就会被挪到swap中了。此时内存就会空出来给需要执行的程序加载。
5.1、使用实体分割槽建制swap
步骤:
1、分割:先使用fdisk在你的磁盘中分割一个分割槽给系统swap。由于Linux的fdisk预设会将分割槽的ID设定为Linux的文件系统,所以可能还得要设定一下system ID;
2、格式化:利用加你的swap格式的mkswap 装置文件名就能够格式化该分割槽称为swap格式;
3、使用:将swap装置启动,swapon 装置文件名
4、观察:透过free来观察内存容量;
5.2、使用档案建制swap
1、使用dd来新增一个128MB的档案在/tmp底下;
2、使用mkswap将/tmp/swap这个文件格式化为swap的文件格式;
3、使用swapon启动/tmp/swap;
5.3、swap使用上的限制
在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 的限制了,
但是,最多还是仅能建立到 32 个 swap的数量!
而且,由于目前 x86_64 (64 位) 最大内存寻址到 64GB, 因此, swap 总量最大也是仅能达64GB 就是了!