admin管理员组文章数量:1558103
文件系统层次
纵向来理解可以分为:用户层、VFS层、文件系统层、缓存层、块设备层、磁盘驱动层、磁盘物理层。
- 用户层:最上面用户层就是我们日常使用的各种程序,需要的接口主要是文件的创建、删除、打开、关闭、写、读等。
- VFS层:我们知道Linux分为用户态和内核态,用户态请求硬件资源需要调用System Call通过内核态去实现。用户的这些文件相关操作都有对应的System Call函数接口,接口调用 VFS对应的函数。
- 文件系统层:不同的文件系统实现了VFS的这些函数,通过指针注册到VFS里面。所以,用户的操作通过VFS转到各种文件系统。文件系统把文件读写命令转化为对磁盘LBA的操作,起了一个翻译和磁盘管理的作用。
- 缓存层:文件系统底下有缓存,Page Cache,加速性能。对磁盘LBA的读写数据缓存到这里。
- 块设备层:块设备接口Block Device是用来访问磁盘LBA的层级,读写命令组合之后插入到命令队列,磁盘的驱动从队列读命令执行。Linux设计了电梯算法等对很多LBA的读写进行优化排序,尽量把连续地址放在一起。
- 磁盘驱动层:磁盘的驱动程序把对LBA的读写命令转化为各自的协议,比如变成ATA命令,SCSI命令,或者是自己硬件可以识别的自定义命令,发送给磁盘控制器。Host Based SSD甚至在块设备层和磁盘驱动层实现了FTL,变成对Flash芯片的操作。
- 磁盘物理层:读写物理数据到磁盘介质。
Linux文件系统结构与原理
linux的文件大部分存放在硬盘中,与内存不同的是:硬盘的存储能力不会因为断电而消失,存储量大,但是读写速度慢。
一块硬盘的开始区域是MBR(主引导记录Master Boot Record),MBR分为三个部分:
一共512个字节 446b的bootloader(引导加载器)用来引导摸个分区加载 64b 的partition table(分区表)每16b标识一个分区,只能划分4个分区 2b 的magic nmuber(魔数)用于标记MBR是否有效
内存分为三个段:BIOS段、内核空间、用户空间。
开机时硬盘中的系统被启用,过程如下:
开机-->BIOS中的程序对电脑开始自检-->根据BIOS的设定启动次序寻找MBR-->BIOS将bootloader加载到内存中后退出-->内存读取硬盘上的partition table-->在分区中找到内核,并读入内存进行解析-->内核获得控制权-->内核启动自身-->内核找到文件系统的位置后启动文件系统。
Linux下的分区因为分区表的原因,只能划分4个分区,但都挂载在同一个文件系统树上。
分区的第一个部分是启动区(Boot block),它主要是为计算机开机服务的。Linux开机启动后,会首先载入MBR(MBR:主引导记录 在磁盘的第0盘面0磁道0扇区,大小512个字节),不属于任何文件系统,是全局的,独立于任何文件系统。
随后MBR从某个硬盘的启动区加载程序。该程序负责进一步的操作系统的加载和启动。为了方便管理,即使某个分区中没有安装操作系统,Linux也会在该分区预留启动区。启动区之后的是超级区(Super block)。它存储有文件系统的相关信息,包括文件系统的类型,inode的数目,数据块的数目。
随后是多个inode(索引节点),它们是实现文件存储的关键。在Linux系统中,一个文件可以分成几个数据块存储,就好像是分散在各地的龙珠一样。为了顺利的收集齐龙珠,我们需要一个“雷达”的指引:该文件对应的inode。每个文件对应一个inode。这个inode中包含多个指针,指向属于该文件各个数据块。当操作系统需要读取文件时,只需要对应inode的"地图",收集起分散的数据块,就可以收获我们的文件了。
最后一部分,就是真正储存数据的数据块(data block)了。
文件系统把磁盘分为两片:元数据存储区(metadata)、数据存储区(data)。
任何文件系统中的数据分为数据和元数据(metadata)。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode...)等等。但是元数据中不包含文件名,文件名存放在磁盘块上的。
文件在ext3中由:目录项、inode、数据块组成。
目录项:包括文件名和inode节点号; inode :文件索引节点,是文件基本信息的存放地和数据块的指针存放地; 数据块:文件具体内容的存放地。
文件存储结构
文件的inode结构由:inode编号,文件类型,链接数目,属主的UID、GID,文件大小,文件使用的磁盘块数目,最后一次修改、访问、更改的时间。
当文件过大,对应的数据块数量过多,inode节点本身提供的存储空间不够,会使用其他的数据块来存放数据块位置信息,最多可以有三级寻址结构,所以ext3的单个文件最大为:一级4kb/4b=2^10个数据块,二级2^10*2^10=2^20个,三级2^30个;所以最终大小是(12+2^10+2^20+2^30)*4kB=4TB.
链接的实现
硬链接共享i节点,和平常的文件一样,只有当所有关联的同一个inode号的文件都被删除,源文件才会被删除;软链接不共享i节点,可以类比与快捷方式,删除快捷方式不影响源文件。
硬链接不可以跨文件系统,软链接可以。
硬链接不可以链接不存在的文件,软链接可以。
使用stat命令查看
[root@CentOS6 data]#ln Zero.txt /data/Zero.hard
[root@CentOS6 data]#ln -s Zero.txt /data/Zero.soft
[root@CentOS6 data]#stat Zero.txt Zero.hard Zero.soft
File: `Zero.txt'
Size: 31457280 Blocks: 61440 IO Block: 4096 regular file
Device: 803h/2051d Inode: 11 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 13:53:55.977166888 +0800
Modify: 2018-03-31 13:53:56.040165372 +0800
Change: 2018-03-31 13:55:04.373168584 +0800
File: `Zero.hard'
Size: 31457280 Blocks: 61440 IO Block: 4096 regular file
Device: 803h/2051d Inode: 11 Links: 2
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 13:53:55.977166888 +0800
Modify: 2018-03-31 13:53:56.040165372 +0800
Change: 2018-03-31 13:55:04.373168584 +0800
File: `Zero.soft' -> `Zero.txt'
Size: 8 Blocks: 0 IO Block: 4096 symbolic link
Device: 803h/2051d Inode: 12 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 13:58:37.154165279 +0800
Modify: 2018-03-31 13:55:39.829163402 +0800
Change: 2018-03-31 13:55:39.829163402 +0800
目录结构
/ 根目录
/bin/ 面向所有用户,需要在单用户模式可用的必要命令,例如cat ls cp
/boot/ 引导程序文件,例如:kernel 时常是一个单独的分区
/dev/ 设备文件
/etc/ 配置文件
/home/ 用户的家目录 ‘~’
/lib/ /bin/和/sbin/下二进制文件必要的库文件
/media/ U盘 CD-ROM等的挂载目录
/mnt/ 临时挂载目录
/opt/ 可选应用软件包
/proc/ 虚拟文件系统,将内核与进程状态归档为文本文件。
/root/ 超级用户的家目录
/sbin/ 必要的系统二进制文件,例如:init ip mount
/tmp/ 临时文件,系统重启的时候将不会被保留。
/usr/ 所有的程序安装在这里,本地安装的程序和其他东西在/usr/local下
/usr/bin 用户命令,这些命令也有可能存在于/usr/local/bin
/usr/sbin 非必要的系统二进制文件,如网络服务,守护进程
/usr/lib 在/usr/sbin和/usr/bin/中的二进制文件所需要的库
/var/ 变量文件:在正常运行的系统中其内容不断变化的文件,例如:日志,脱机文件
/var/cache/ 应用程序的缓存数据
/var/lib/ 状态信息。由程序在运行时维护的持久性数据。
/var/log/ 日志文件
/var/run 已经被/run/替代,自最后一次启动以来运行中的系统的信息:如运行中的守护进程,当前登录的用户。版权声明:本文标题:1.3Linux文件系统基础 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727333274a1108795.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论