标签:xfs dev extent lin https 独立 info 分布 多个
文件系统的最终目的是把大量数据有组织的放入持久性的存储设备中(如硬盘和磁盘)。
磁盘的物理组成为:
常见存储设备最开始的扇区由MBR和分区表组成,Linux开机启动需要MBR加载开机管理程序(grub、grub2等)。剩余的空间可能被分成数个分区,每个分区的信息被记录在第一个扇区的分区表中。
典型的Linux分区如下所示:
磁盘分区完毕后需要进行格式化之后操作系统才能够使用这个文件系统,为什么需要格式化?因为每种操作系统所设定的文件属性/权限不同,为了存放这些文件所需的数据,需要将分区进行格式化成为操作系统能够使用的文件系统格式。
传统的磁盘与文件系统,一个分区只能够被格式化成为一个文件系统。但是LVM与RAID这些技术可以将一个分区格式化为多个文件系统(LVM),也能将多个分区合成一个文件系统(LVM,RAID),因此现在成一个可被挂载的数据为一个文件系统,而不是一个分区为一个文件系统。
inode记录的文件的权限属性以及该文件实际数据存放的data block号,inode至少记录如下数据:
每个inode有一个唯一的整数编号(inode number)表示,每个文件都只对应一个inode(因此文件系统能够建立的文件数量与inode的数量有关);
inode的数量和大小在格式化的时候确定,每个inode能够存储的数据块指针总数是固定的,如果文件需要的数据块超过了这一总数,inode需要额外的空间来存储数据块指针(直接、间接、双间接、三间接记录区);
系统读取一个文件时需要先找到文件对应的inode,并分析inode记录的权限与用户是否符合,若符合则沿着指针将指向的block内容收集起来,就可以在内存中组成一个文件的数据。
系统写入一个文件时,分配一个空白inode给该文件,将其inode编号记入该文件所属目录,然后选取空白数据块,让inode的指针指向这些数据块,并放入内存中的数据。
superblock记录整个filesystem相关信息,主要记录如下信息:
一般来说一个superblock的大小为1024bytes。
在Linux下的文件系统建立一个目录时,文件系统会分配一个inode与至少一块block给该目录:
inode本身不记录文件名,文件名的记录是在目录的block中,因此文件的新增/删除/更名文件名与目录的w权限有关。当读取某个文件时,必须经过目录的inode与block才能找到待读取文件的inode号码,并最终读取文件的block数据。
每个文件系统都有独立的inode/block/superblock等信息,文件系统需要能够链接到目录树才能够被使用,将文件系统与目录树结合的动作称之为:挂载,挂载点必须是目录,该目录作为进入该文件系统的入口。
Linux支持多种文件系统,那么Linux的核心如何管理不同的文件系统?
整个Linux系统透过虚拟文件系统(Virtual Filesystem System)的核心功能去读取文件系统,即Linux支持的文件系统都是由VFS管理。虚拟文件系统作为一个通用的文件系统,抽象了文件系统的四个基本概念:文件、目录项(dentry)、索引节点(inode)、挂载点,VFS在内核中为用户层的文件系统提供了相关的接口,VFS实现了open()、read()等系统调用使得用户层程序可跨文件系统操作。
VFS存在四个基本对象:
Ext 文件系统家族对于文件格式化的处理方面,采用的是预先规划出所有的 inode/block/meta data 等 数据,未来系统可以直接取用, 不需要再进行动态配置的作法。但如果磁盘容量很大,在格式化的时候预先分配inode和block的时间会很长很长。
xfs 文件系统在资料的分布上,主要规划为三个部份,一个资料区 (data section)、一个文件系统活动 登录区 (log section)以及一个实时运作区 (realtime section)。
data section
inode/data block/superblock 等数据都放置在这个区块,数据区与 ext 家族的 block group 类似,也是分为多个储存区群组 (allocation groups) 来分别放置文件系统所需要的数据。 inode 与 block 都是系统需要用到时动态配置产生,故格式化动作超级快。
log section
主要用来纪录文件系统的变化,文件的变化会在这里纪录下来,直到该变化完整的写入到数据区后, 该笔纪录才会被终结。
realtime section
当有文件要被建立时,xfs 会在这个区段里面找一个到数个的 extent 区块,将文件放置在这个区块内,等到分配完毕后,再写入到 data section 的 inode 与 block 去 ( extent 区块的大小 得要在格式化的时候就先指定 4K -1G)
为了解决文件的共享使用,Linux引入了两种链接:
一个inode号对应多个文件名,这些文件为硬链接(它们有共同的inode),硬链接特性如下:
若文件的data block中存放的是另一个文件的路径名的指向,则该文件是软链接,软链接的特性如下:
参考技术书籍:《鸟哥的Linux私房菜》
参考博客:https://www.cnblogs.com/vamei/p/3506566.html
https://www.ibm.com/developerworks/cn/linux/l-cn-hardandsymb-links/
标签:xfs dev extent lin https 独立 info 分布 多个
原文地址:https://www.cnblogs.com/wanao/p/12937675.html