7-1Linux文件系统概念
1.磁盘组成与分区
组成:碟片(扇区Sector➡柱面Cylinder),机械臂,转动马达
分区:MBR分区(老),GBT系统(新)
MBR分区:第一个扇区最重要:包含主引导记录Master boot record(MBR)及分区表
GBT分区:分区表数量扩充,支持的大小也更大,现代更加采用
2.文件系统特性
每个操作系统所能使用的文件系统并不相同
例如: win98➡FAT, win2000➡NTFS, Linux正统➡ex2(Linux second Extended file system, ext2fs)
传统的磁盘只能一个分区一个文件系统,但随着新技术的发展,分区和文件系统可以是一对多、多对一的关系,所以现在称一个可被挂载的数据为一个文件系统
Linux文件系统组成:
Inode:存放文件的权限(rwx)与属性(owner, group,time 、etc),还有
datablock:存放实际数据
superblock:记录一些整体信息,inode/block数量,剩余量,文件系统格式与相关信息等
索引式文件系统:
非索引式文件系统:
FAT文件系统为例
磁盘重组:
一个文件存放在过于离散的block,查找不方便,这时候会重组让block更集中,方便查找,索引式文件系统不太需要重组,非索引式文件系统经常需要重组
3.ex2文件系统
ext2文件系统每个分区都是独立的系统,都拥有inode,block, superblock
Datablock:
三种大小限制关系图:
其他限制:
原则上,block 的大小与数量在格式化完就不能够再改变了
每个block只能存放一个文件,文件大小与block空间:多了放多个block,少了就只能浪费,不能放下一个文件
Ps:格式化之前想想该系统适合多大的block来设置合适的block size
inode table
每个文件仅占用一个inode,所以文件系统能创建文件的数量取决于inode的数量
存储内容:
inode与block的关系:
每个inode有12个直接指向的block, 一个间接,一个双间接,一个三间接的block
当文件过大时,会用间接block再来存储别的block的数据,以提高inode能支持的最大文件的大小(设置1Kblock➡ 16GB文件大小,推导省略)
superblock
记录的是整个文件系统的相关信息:
一个文件系统可能有多个superblock,但是只有第一个block group的起效果,其他的superblock起备份作用
filesystem description(文件系统描述说明)
描述了每个block group的开始与结束的block 号码
可用dumpe2fs来查看
block bitmap
用来辅助新建文件时判断哪些block可用(为空)
dumpe2fs:
查询ext家族superblock的信息的指令
blkid
#叫出目前系统有被格式化的设备
dumpe2fs [-bh] 设备文件名
#-b: 列出保留为坏轨的部分
#-h:仅列出superblock相关的信息
dumpe2fs命令先列出superblock的相关信息,再列出每个block group的相关信息
4.fs与目录树的关系
目录:文件系统会分配给目录一个inode和一个block, inode存储block所在位置,block存储目录下的文件名与对应的inode号码
ps:注意文件名不记录在自己的inode里,记录在目录的block里!!!
#-i:查看文件占用inode号码
ls -li
用 ll命令查看目录 的block:
全是4k的倍数,因为一个block为4k
问题:文件是如何被找到的? ---递归查找inode和block
答:先找挂载点 / 的inode,然后查到该目录block的内容,找到下一级目录的对应的inode号码,然后再循环找,直到最终找到查找文件的block将数据读出(如果可读的话)
5.ext文件存取与日志式文件系统功能
metadata:中介数据:包括superblock, inode bitmap, block bitmap
数据存放区域: inode table , block table
一句话:文件新建依靠bitmap
日志式文件系统:
ext2是非日志文件系统, ext3/4增加了日志功能
可以解决非日志文件系统因为数据一致性问题而需要开机全盘扫描检测的低效
单独在文件系统划分一个区块来存储文件修改日志
6.Linux文件系统与内存关系
•系统会将常用的文件数据放置到内存的缓冲区,以加速文件系统的读/写;
• 承上,因此 Linux 的实体内存最后都会被用光!这是正常的情况!可加速系统性能;
• 你可以手动使用 sync 来强迫内存中设置为 Dirty 的文件回写到磁盘中;
•若正常关机时,关机指令会主动调用 sync 来将内存的数据回写入磁盘内;
•但若不正常关机(如跳电、死机或其他不明原因),由于数据尚未回写到磁盘内,因此重新开机后可能会花很多时间在进行磁盘检验,甚至可能导致文件系统的损毁(非磁盘损毁)。
7.挂载点(mount point)
挂载:将文件系统与目录树结合的动作(即链接到目录树)叫挂载
df -h #查看各个设备的挂载,可查看不同文件系统
mount | grep '\home' #查看 \home的挂载点
#如果挂载点相同,但是inode不同,则说明这几个文件指向的内容是一样的!(硬链接link)
8.Linux支持的文件系统与VFS
#查看目前系统支持哪些文件系统
ls -l /lib/modules/$(uname -r)/kernel/fs
#查看系统目前已载入到内存中支持的文件系统
cat /proc/filesystems
Linux VFS(Virtual Filesystem Switch)
作用:帮助我们管理整个Linux所支持的文件系统,我们不需要知道每个partition是什么文件系统,vfs帮我们管理和读取。
9.XFS系统
centos目前已经用xfs系统取代了ext文件系统!
优点:
ext家族缺点:格式化很慢(需要先规划出所有的inode、block、metadata数据),xfs更快
支持更好的虚拟化应用(虚拟化磁盘来源是巨型文件,处理巨型文件需要更高的性能)
组成:
Data section:
和ext一样,保存 inode 、block、superblock等数据
log section:
日志区大概
realtime section:
文件创建时,现在这个区找extern区块,后续再写入到data section的inode与block中去!
xfs_info命令:
查看xfs文件系统,与ext中dumpe2fs功能类似
7-2 Linux文件系统操作
1.磁盘与目录容量df
df/du:
df #列出文件系统的”整体“磁盘使用量
du xxx # 评估”某个fs“的磁盘使用量
内存fs:
/proc
/dev/shm:利用内存虚拟出来的磁盘空间,通常是总实体内存的一半。在该目录下创建任何数据文件的存取速度非常快!(重启则消失!)
2.实体链接和符号链接: ln
ln [-sf] #创建link
-s:如果不加任何参数就进行链接,那就是hard_link,至于s就是symbolic
-f:如果目标文件存在时,就主动的将目标文件直接移除后再创建!
hard link:
直接通过文件系统的Innode链接来产生新文件名(文件名不是文件!)
由于文件名只在目录中存储,但是文件内容则与inode有关(一个具体的文件内容占用一个inode)(有问题请见7-1),hardlink是在目录下新建了多个文件名去指向同一个innode!
问题:link会占用磁盘的inode和block吗?
实质上就是在某个目录的block下多写入了一个关联数据,不会增加inode和block的消耗!
限制:
不能跨文件系统
不能link目录
Symbolic link:
类似windows 的快捷方式,让你快速链接到目标文件、目录
原理:创建一个独立的文件,这个文件会让数据的读取指向他的link的那个文件的文件名