MBR
主引导记录(Master Boot Record)512Bytes
BootLoader程序(446Bytes)
LILO: LInux LOader不能引导1024柱面以后的分区内核(嵌入式)
GRUB: GRand Unified Bootloader
剩余空间(64bBytes)
16Bytes
标识一个分区4个主分区 Or 主+扩展 <= 4
2Bytes
Magic Number(标记MBR是否有效)
文件系统
是一个管理软件,他本身不在此分区上,用Metedata编录,实现按名对众多文件的快速访问
分区存储空间划分为2片:
1、元数据存储区(直接访问块编号)
块位图:为数据存储区每一块有1位对应的存储位,1被使用,0空闲,加速查找空闲磁盘块的机制。
IndexNode表:每个INode条目均有全局唯一的号码,权限、大小、属主组、时间戳、对应的磁盘块编号
INode表位图:为INode表存储区的每一块有1位对应的存储位,1被使用,0空闲,加速查找空闲磁盘块的机制。(INode表也有位图,因为也需要存储)
super global block全局描述信息,当前磁盘有多少块组
block group块位图,INode位图等
2、数据存储区(由逻辑存储单元BLOCK组合,每个块有编号,1表示非空闲,0表示空闲)
目录也是文件,也需要占据磁盘块:IndexNode 文件名 (目录项 dentry)
定位 /var/log/messages 可以建立缓存条目,不用每次都查找
根INode(块编号)-->根BLOCK(var对应的INode号码)-->varINode(var块编号)-->varBLOCK(log对应的INode号码)-->logINode(log块编号)-->logBLOCK(message对应的INode号码)-->messageINode(message块编号)-->message数据
新建/backup/test.txt10k
首先扫描INode表位图,寻找空闲INode,并占用此条目,找到backup目录对应的磁盘块,建立test.txt名并对应之前找到的空闲INode,扫描块位图,给大于存储和尽量连续的磁盘块,剩下的磁盘块归为空闲在块位图中。
删除/backup/test.txt10k
找到backup对应的磁盘块,删除对应条目(INode号码+文件名);在INode表位图中标记其INode为可用,最后在块位图中标记其块可用
复制
创建文件+填充磁盘块
剪切(不跨分区)
只是修改路径制定
剪切(新分区建立新文件)
把老分区磁盘块填充至新分区磁盘块,删除老分区文件(磁盘块还在)
链接文件
符号链接
本来INode应该存储磁盘块编号的内容变为一串字符串(路径名),存储大小等于字符串大小
硬链接
指向同一个INode的不同路径彼此之间可以叫做硬链接共用磁盘块
ls -lnumber 此文件被硬链接的次数
小于等于1的时候才能真正删除
删除硬链接文件只是删除其目录对应磁盘块条目中的条目
创建硬链接
1、只能对文件创建,不能对目录
2、不能跨文件系统(分区),因为每个分区的INode号码是唯一的,不可以在不同目录下
3、创建硬链接会增加文件被链接的次数
ln /tmp/link/a /tmp/link/b
ls -i /tmp/link/
1966427 a 1966427 b
创建符号链接
1、可以对目录和文件
2、可以跨文件系统
3、不会增加被链接次数
rm a
ln -s /tmp/link/b /tmp/link/a
ls -i /tmp/link/
1966428 a 1966427 b
du 显示目录和目录中每个文件占用磁盘空间大小并显示
-s 目录及其目录中所有子文件占据磁盘空间大小之和并显示
-h 显示单位
df 显示所有分区使用情况,以1K-blocks的方式显示
-h 显示磁盘所有分区使用大小size
-i 显示磁盘所有分区使用情况,以INode方式显示
设备文件
存储在Inode当中的主设备号,次设备号,不占空间,没有大小
设备文件的主要目的是作为设备的访问入口
b按块为单位,随机访问设备硬盘
c按字符为单位,线性设备
crw-rw---- 1 root tty 4, 61 Jul 25 09:43 tty61
主设备号
标识设备类型
次设备号
标识同一种类型中不同设备
p也没有大小
mknod[OPTION]...NAME TYPE [MAJOR MINOR]
-m 制定权限 mknod -m 640 mydev c 66 0
硬盘设备的设备文件名
IDE,ATA hd
SATA sd 看内核识别的先后次序 USB SATA SCSIsda sdb sdc /dev/sda1..4 5(第一个逻辑分区)
SCSI sd
USB sd
a,b,c.....来区别同一种类型下的不同设备
IDE
第一个IDE口主、从
/dev/hda /dev/hdb/dev/hda1..4 5(第一个逻辑分区)
第二个IDE口主、从
/dev/hdc /dev/hdd
查看当前系统识别了几块硬盘
fdisk -l [/dev/to/some_device_file]
管理磁盘
分区文件系统本身属于内核中的功能,创建文件系统需要用户控件的命令结合内核所支持的这种功能来完成
不同内核支持的文件系统类型不尽相同
每个分区都是一个独立的文件系统,每个分区可以使用不用文件系统,它们最终都要归并到根下
这种归并的方式称为挂在,根是自引用,内核脱离硬盘知道根在哪里
例如 /usr目录如果/在1号分区,那么/usr目录就是/磁盘块中的条目,/usr目录对应的磁盘块中存储该目录下的所有文件(INode+文件名)条目
如果/下usr目录挂载到2好分区,那么usr就作为访问2号分区的入口,根据入口可直接写入数据到2号分区
不管是默认,还是作为入口,/下usr目录都是位于1号分区的
就算再加一块硬盘,向访问,其实也是在/下添加条目,先访问/找到该条目,作为入口过去。
可见/分区至关重要,称作/文件系统(/bin /sbin 不能独立出去)
低级格式化
创建磁道
高级格式化
创建文件系统
虚拟文件系统(VFS)
支持众多不同类型的文件系统,类似于库,让上层通过VFS调用不同下层的时候看起来一样。
常见文件系统类型
FAT32 NTFS ISO9660 CIFS ext2 ext3 ext4 xfs reiserfs jfs nfs ocfs2 gfs2 swap
VFS
用户进程没有去操作硬件的特权,这些进程所运行的模式就是用户模式,运行的空间叫做用户空间
CPU从内而外有4个环
内核运行在 最里面的是ring 0 (内核空间)文件系统应该在内核空间
VFS也是内核的模块功能,对于用户进来看只需要调用VFS接口,后续接口有VFS来完成判定
用户进程运行在 最外面ring 3 (用户空间)
系统调用功能调用的接口(函数)
两个内容不同的文件是无法使用同一个磁盘块的
磁盘块是文件系统对硬盘的一种逻辑管理机制,跟硬盘本身没有关系
概念
1024byte=1k 1024k=1M 1024M=1G 1024G=1T
数据存数区域磁盘块有10000个,应该事先预留多少个INode呢?
每多少个块创建一个INode,每8K创建一个INode,每个块大小是多少呢?
对于操作系统而言,块大是确定的,指的是2的N次方个字节
一般来讲block size 1024Byte 2048Byte 4096Byte
1KB 2KB 4KB
实际上到底有多少种情况取决于CPU,因为磁盘上的数据是不能被直接访问的
CPU使用数据必须先装进内存中,一个块不可能只装一半数据,要么一个块全装进去,要么一下装几个块
内存的空间页框(page)大小 一般一个page可以放入 1个磁盘块 2磁盘块 4个磁盘块
4KB2KB1KB
page的大小通常是4K
因此如果是1K的磁盘块 一次需要装进4个
页框大小取决于CPU平台不一样
一个磁盘块只能属于一个文件,存储最小单位
小文件多就使用1K,减少浪费,大文件多就使用4K,加快载入内存速度,page通常都为4K
通常只有普通文件和目录占用磁盘块大小
一个分区中数据存储区又分为若干磁盘块组
一个分区应该有几个磁盘块组,取决于空间大小
一个磁盘块组应该有多大,取决于块位图和INode位图的大小
一个磁盘块组中的每一块对应其块位图中的一个位,每个位图通常使用一个磁盘块进行标识的,比如一个磁盘块1K
一个磁盘块组只能有一个对应的位图
1K=1024*8=8192bit 一个bit可以标识一个磁盘块(一个磁盘块可能是 1K 2K 4K) 这么多个块组合磁盘块组
分区构成
元数据区
1、super block(备份)
多少块组、每个块组中包含多少块、块大小、空闲磁盘块、已用磁盘块、空闲INode、已用INode
2、GDT(块组描述表)
每个块组的块组名、每个快组的起始和结束块编号
3、块位图
4、INode表(一个磁盘块组只能有一个Inode表)
5、INode表位图
数据存储区
1、BootBlock多系统时候,存放另一个系统的bootloader
2、N个块组
每个块组中元数据区
1、super block不是每个块组中都有
2、GDT(快组描述表)每个块组的块组名、每个快组的起始和结束块编号
3、块位图
4、INode表
5、INode表位图
数据存数区
1、Data Blocks