一、认识EXT2文件系统
Linux最原始的文件系统时EXT2,文件系统是创建在硬盘上。
1.1、硬盘组成以及分区的简单回顾
- 磁盘的组成:圆形盘片 + 机械手臂与磁头 + 主轴马达
- 盘片分为扇区,每个512byte,第一扇区很重要,包括的信息:MBR(446byte) + 分区表(64);
- /dev/sd[a~p]:SCSI、SATA、USB、Flash等磁盘文件名 + dev/hd[a~d]:IDE 接口磁盘文件名
- 分区:
1、分区表只有64byte而已,只能记录4条分区记录,称之为主分区或者扩展分区
2、扩展分区最多只有1个,但是他能分出很多个逻辑分区
1.2、文件系统的特性
- 分区之后一般要格式化。格式化的目的:成为操作系统能够利用的文件系统格式
- 每种操作系统能识别的文件系统不同,例如Win98之前识别的是FAT,Win2000之后识别的是NTFS
- 操作系统中的文件数据内容一般包括:文件实际内容 + 很多文件属性(权限啊、属性啊这些)。文件系统的组成通常又:
1、super block:记录文件系统的整体信息:包括inode、block的总量、使用量、剩余量、以及文件系统的格式等相关信息;
2、inode:一个文件对应一个inode,记录了文件的属性 + 该文件数据所在的Blocck块;
3、block:记录文件的内容(内容太多会占用多个block) - 这种数据访问的方法称为:索引式文件系统
- U盘的文件系统一般是将block的信息存在上一个block的信息中,一个连着一个。所以经常要碎片整理。
1.3、Linux的Ext2文件系统(inode)
表针的Linux文件系统Ext2就是使用这种inode为基础的文件系统。
- 文件系统一开始九讲inode与block规划好了,除非重新格式化,否则inode与block固定后就不在变化
- 文件系统一般会分为多个块组,而文件系统的最前端,会有一个启动扇区,用于安装引导装载程序
- data block数据块
1、Ext2文件系统中所支持的block大小有1KB/2KB/4KB三种类型,对应的单一文件限制分别为16GB/256GB/2TB
2、block的大小与数量在格式化后就不能改变了;
2、每个block中最多只能放一个文件的数据,会有浪费,但是放不下时,一个文件也可占用多个block块 - inode表格
1、inode记录的文件信息有:访问模式(rwx)、所有者所在组、文件大小、时间信息、真正内容的pointer
2、此外,inode的信息还包括:每个inode大小固定128byte,每个文件占用一个inode;文件系统能够创建的文件数量有关;
3、系统读取文件时先找到对应的inode,分析权限后再访问
4、inode、block以及文件三者之间的存放关系:
1)假如一个文件400M,每个block为4KB,至少也要10万个block,怎么存?
2)这么存block:分为直接、间接、双间接、三间接加总==16G - superblock(超级块)
1、超级快记录的是整个文件系统的基本信息
1) block与inodede 总量,已使用/未使用的量,大小
2)文件系统的关在时间/最近一次写入数据的时间/最近一次检验磁盘(fsck)的时间
3)文件系统已被挂载,则valid bit置0,否则为1.
2、一个文件系统应该仅有一个superblock,而每个block group都有可能含有superblock,原因:备份 - File System Description文件系统描述说明
1、描述block group开始与结束的block块;
2、每个区段(supoerblock bitmap inodemap datablock)分别介于那个block块之间; - block bitmap(块对照表):添加或者删除文件时定位到特定的bitmap
- inode bitmap:与block bitmap类似,记录使用与未使用的iNode号码
- 可以使用 dumpe2fs可以显示superblock 与blockgroup信息
1.4、与目录树的关系
目录与文件在Ext2文件系统记录数据的方式:
- 目录
1、在Ext2文件系统新建目录时,分配inode(目录权限以及属性,可使用inode查看) + block(记录目录的内容:文件名以及文件名所占用的inode)
2、目录所占的大小一般为:1K/2K/4K的整数倍
3、如果目录包含的文件数量多,就会占用多个block。 - 文件
1、新建文件分配的是:一个inode + 与内容大小一致的block块。 - 目录树读取
1、我们已经知道,inode本身不记录文件名,目录的block才会记录文件名信息;
2、文件读取的方式为:一层一层目录inode、block往下读。
1.5、Ext3日志文件系统
- 新建一个文件的行为:
1、对添加文件的目录检测其是否有权限;
2、找没有使用的inode(inode bitmap),并写入文件权限和属性;
3、找到没有是定的block(block bitmap),写入实际数据并inode指向block
4、更新bitmap以及superblock - 数据的不一致状态
1、例如断点导致4没有完成,造成数据不一致性
2、以往检查valid bit或者state的方式很费时,后来就引入了日志文件系统; - 日志文件系统
1、在文件系统中规划出一个块,用于专门记录或修订文件时的步骤;
2、一边对文件操作时,一边将这些步骤写入日志,如果出错,只需检测日志文件
1.6、文件系统的操作
- CPU—内存—磁盘的数据不一致性解决方式
1、内存中数据没被改变过为clean,改变过为dirty,系统不定时将dirty数据写入磁盘;
2、也可用sync命令强制写入。
1.7、挂载点的意义
- 挂载:将文件系统与目录树结合的操作称之为挂载
1、挂载点一定是目录,该目录为进入该文件系统的入口,也就是说,并不是你有任何文件系统都能使用,要挂载到目录树的某个目录后,才能使用该文件系统。
1.8、Linux VFS
Linux的内核是通过VFS(Virtual Fileststem Switch、虚拟文件系统)去读取系统文件的
二、文件系统的简单操作
2.1、磁盘与目录的总容量:df/du
- du:列出文件系统的整体磁盘使用量
1、df不加参数则将所有文件系统分区容量信息显示出来,其中包括的信息由:
1) 分区、设备名称
2)总容量、使用了多少、剩余多少
3)挂载目录
2、 使用方式
1)df [-h/i] [文件或者目录名称]
2)-h:将容量以GB、MB的形式显示
3)加上了文件或者目录的名称表示显示该目录或者文件所在分区的容量信息
3、-i:显示的是inode信息而不是硬盘容量信息
4、 有限挂载点显示的容量大小为0,表示是挂载在内存当中 - du:评估当前目录下各文件与目录所占的容量(但是只会显示目录)
1、加入-a参数才会显示目录
2、-s:列出该目录所占的容量,而不会列出每个目录所占的容量;
2.2、连接文件(不是很明白)
Linux下连接文件有两种:
hard link,硬连接或者实际连接
1、可以简单理解成:在某个目录下新建一条文件名,连接到一个现有的inode号,即加入/root/crontab它是etc/crotab的实际连接,即这两个文件命连接到同一个inode,除了文件名字,其它信息一模一样。
2、注意:不能连接到目录,目录下面还有文件,复杂度高。
3、连接举例:inode1—目录1—real inode—文件的实际内容;
inode2—目录2—real inode—文件的实际内容symbolic link(符号链接,有点类似于快捷方式,用得比较多)
1、创建一个独立的文件,会指向他连接的那个文件的文件名
2、连接举例:inode1—目录1—inode2—目录2—real inode—实际文件内容创建链接文件
1、命令:ln [-s] 源文件 目标文件,-s为创建一个符号连接,不加参数则为hard link
三、磁盘的分区、格式化、检验与挂载
如果增加一个硬盘,要做的事情有:
1、分区;——2、格式化成指定的文件系统——3、检验——4、创建挂载点(目录)
3.1、磁盘分区
- 命令:fdisk [-l] 设备名称(不是目录,可使用df命令显示目录所在的磁盘)
1、列出设备名称中所有的分区内容,接着就可能根据提示d、n、m、q、w进行磁盘的相关操作
2、fdisk查阅的设备的信息,而不是分区的信息,例如dev/hda1是分区,而dev/hda是磁盘设备
3.2、格式化磁盘
- 命令:mkfs(make file system的缩写) [-t 文件系统格式] 设备文件名
1、例如,将分区hdc6格式华为Ext3的文件系统:mkfs -t ext3 dev/hdc3
2、mke2fs,mkfs命令的格式化可以理解成默认,mke2fs可以指定各种参数,例如每个block的大小、inode的容量等,没有特殊要求,mkfs即可满足要求。
3.3、磁盘检验
- 文件系统絮乱,采用fsck(file system check)检验,是用于检查与修正文件系统错误的命令
- 这个命令本省对文件系统就有损害,否则不用(一般系统出现大问题了采用)
磁盘的挂载与卸载
- 磁盘的挂载:挂载点=目录=磁盘分区的入口
1、对文件系统(例如某一磁盘的分区、U盘、DVD/CD等文件系统)进行挂载,即创建一个指定的挂载点用于访问该文件系统
2、例如,将创建的dev/hdc6文件系统挂载到mnt/hdc6上。
3、显示已挂载的文件系统:mount -l
4、还可以挂载软盘、U盘 - 也可以对文件系统进行重新挂载,例如单用户模式下的根目录挂载点为可读,可以使用mount相关option进行重新挂载
- umount:将已挂载的文件系统进行卸载。
- 可以使用卷标(label)对文件系统进行挂载,使用dumpe2fs查询卷标
3.5、磁盘参数修改
- 文件如何表示设备:通过文件的major和minor来代替
- mknod可设置文件或者设备的类型
- 使用e2label修改卷标(Label:盘符的名称,例如“学习、生活、软件”)
- tune2fs:这个命令用的挺多的
1、-l:类似dumpe2fs -h的功能,将super block内的数据读取出来;
2、-j:将ext2的文件系统转换成ext3的文件系统;
3、-L:类似于e2label的功能
四、设置开机挂载
4.1、开机挂载:etc/fstab以及etc/mtab
- mount属于进入系统后手动挂载的,如果想要设置开机的时候就挂载的话就要修改etc/fstab的内容了。改文件包含了如下6个字段(很重要,需要记住)
1、磁盘设备文件名或者该设备的Label
2、挂载点(目录)
3、磁盘分区的文件系统
4、文件系统参数
5、是否需dump备份(0代表不要,1代表要,2代表不定期备份)
6、是否以fsck检验扇区:开机系统默认以fsck检验文件系统是否完整(clean) - 特殊设备挂载loop(镜像文件需要刻录,也能通挂载的方式访问)
1、我们下载的镜像文件一般情况下要通过刻录成光盘才能访问其中的内容,现在也可以用loop挂载。
2、创建一个大文件,然后格式化后再挂载。(可以用于帮助我们解决分区不良的情况,譬如说只分出了一个根目录,可以新建一个文件,格式化,重新挂载,相当于多出了一个分区)
五、内存交换空间swap的构建
- Linux系统安装时一定要有两个分区:根分区和内存交换分区swap,物理内存空间不足时才会用到swap,譬如说CPU读取的数据来自于内存,如果内存不足将一些用不到的数据保存到swap中
- 使用物理分区构建swap
1、分区:fdisk(接着不要忘记让内核更新分区表)
2、格式化为swap的文件系统:mkswap
3、使用:启动swap:swapon 设备文件名
4、查看:使用free命令产看内存的使用情况。 - 使用文件构建swap(loop的方式)
1、使用dd命令创建一个大文件
2、mkswap格式化
3、swapon启动
六、文件系统的特殊查看与操作
6.1、Boot Sector与super block的关系
- boot sector会占用1024B的大小控件,两者的关系与block的大小有关:
1、如果block大小为1KB时:预留的0号block为Boot sector,1号为SuperBlock
2、如果block大于1KB时,0号的内容分别有boot sector 与super block
6.2、磁盘控件的浪费
- ll命令中第一栏total显示的是文件实际占用的block数量Xblock大小的值
- 使用du命令查看目录或文件占用的block大小以及实际小大
6.3、利用GNU的parted进行分区
- fdisk能够很好地实现分区,但是不能处理高于2T以上的分区