文件系统原理

学习教程

需要理解的概念

名字 概念
inode 操作系统用于管理和存储文件的信息软件被称为文件系统,, 文件是文件数据和文件元信息组成的,文件的inode号 + 文件数据内容,代表单个文件
文件系统 文件系统将文件元信息,存放文件的(创建信息,修改信息,文件大小等) 存储在一个 叫做inode的地方,中文叫做索引节点
硬链接数量 -rw------- 1 lyr lyr 19131 4月 21 20:36 mbox 我们用ls -l 命令,看到 lyr前面有一个 1 ,这个代表硬链接数量

需要你记住的命令

命令 解释 效果
df -hT 可显示所有文件系统对i节点和磁盘块的使用情况。
ll -i 或者 ls -li 【-i 选项】输出文件的 i 节点的索引信息。 450732 -rw-rw-r-- 1 lyr lyr 151 4月 16 20:28 a.c, 第一个号码就是inode的id
ls -l –block-size=m 按照 M单位显示文件
du -h . 显示出当前目录文件大小 80K .

用户打开文件的过程

比如:一本书的目录索引相当于是 inode,每一页相当于一个 block,整本数就是一块磁盘或分区

  1. 用户通过文件名打开文件
  2. 文件系统找到文件inode号码
  3. 获取inode信息,找出文件所在的磁盘block所在的位置,

需要记住的规则:

  1. 删除软连接对元文件和硬链接无影响
  2. 删除硬连接 对软连接,元文件,也是无影响的
  3. 删除原文件,对硬连接也是无影响的,但是影响软连接
  4. 只有删除所有的原文件和所有的硬链接,这个文件才是真正被删除,文件的链接数为0
  5. 原文件和硬链接有相同的inode号码,可以理解为 超时的前门和后门,前门封了,你还可以从后门进,【访问文件】

文件系统

文件系统
NTFS windows 2000
ext2
ext3 centos5【日志型文件系统】
ext4 centos6【日志型文件系统】
xfs centos7 【日志型文件系统】
nfs network file system 网络共享文件系统
smb,server message block 服务消息框
gfs 集群文件系统,google file system ,为存储海量数据
ocfs oracle file system ,为oracle数据库研发
ceph 分布式文件系统,为存储可靠性和扩展性的分布式文件系统
swap 交换文件系统

日志文件系统

文件系统的主要区别在于,是否是日志型的文件系统

日志文件系统:更新磁盘数据之前,先写日志,如果出错误,可以通过日志恢复,

日志文件系统的主要设计思想是跟踪文件系统的变化而不是文件系统的内容。

日志文件系统中,存储系统上面有一系列节点记录了文件的操作。

日志节点上面记录的信息包括:

和日志节点关联的文件的标识符; 日志节点的序列号(version); 当前节点的 uid, gid 等信息; 其他关于文件内容分布的信息。

vfs文件系统

学习视频教程

百科

VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层

通过 vfs 统一了文件系统的差异,和vfs交换,由vfs处理不同的文件系统 ,即为各类文件系统提供了一个统一的操作界面和应用编程接口

所谓VFS就是Virtual File System 虚拟文件系统 ,也称为虚拟文件系统开关(Virtual Filesystem Switch)

VFS最早由Sun公司提出以实现NFS(Network FileSystem, 网络文件系统 )。但是现在很多Unix系统都采用了VFS(包括Linux、FreeBSD、Solaris等)。

VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层

ntfs文件系统

现在windows 一般都是用 NTFS文件系统

什么是 inode

inode包含很多的文件元信息,但不包含文件名,例如:字节数、属主UserID、属组GroupID、读写执行权限、时间戳等。

而文件名存放在目录当中,但Linux系统内部不使用文件名,而是使用inode号码识别文件。对于系统来说文件名只是inode号码便于识别的别称。

linux 如何唯一定义一个文件?

用 inode 来做

inode 号码 #

表面上,用户通过文件名打开文件,实际上,系统内部将这个过程分为三步:

1.系统找到这个文件名对应的inode号码; 2.通过inode号码,获取inode信息; 3.根据inode信息,找到文件数据所在的block,并读出数据。

其实系统还要根据inode信息,看用户是否具有访问的权限,有就指向对应的数据block,没有就返回权限拒绝。

inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode总数在格式化的时候就确定了。

硬链接与软链接 #

硬链接 #

通过文件系统的inode链接来产生的新的文件名,而不是产生新的文件,称为硬链接。

一般情况下,每个inode号码对应一个文件名,但是Linux允许多个文件名指向同一个inode号码。意味着可以使用不同的文件名访问相同的内容。

运行该命令以后,源文件与目标文件的inode号码相同,都指向同一个inodeinode信息中的链接数这时就会增加1

当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。删除一个文件名,只会使得inode中的链接数减1

需要注意的是不能对目录做硬链接。

通过mkdir命令创建一个新目录,其硬链接数应该有2个,因为常见的目录本身为1个硬链接,而目录下面的隐藏目录.(点号)是该目录的又一个硬链接,也算是1个连接数。

https://img2018.cnblogs.com/blog/1075436/201905/1075436-20190529142818988-1661438024.png

文件系统相关命令行

参考博客

在 Linux 命令的那一节,我们学了一些简单的文件操作的命令,这里我们再来学几个常用的。

首先是格式化,也即将一块盘使用命令组织成一定格式的文件系统的过程。咱们买个硬盘或者 U 盘,经常说要先格式化,才能放文件,说的就是这个。

使用 Windows 的时候,咱们常格式化的格式为NTFS(New Technology File System)。在 Linux 下面,常用的是 ext3 或者 ext4

当一个 Linux 系统插入了一块没有格式化的硬盘的时候,我们可以通过命令fdisk -l,查看格式化和没有格式化的分区。

前面我们讲过,Linux 里面一切都是文件,那从哪里看出是什么文件呢?要从 ls -l 的结果的第一位标识位看出来。

  • - 表示普通文件;
  • d 表示文件夹;
  • c 表示字符设备文件,这在设备那一节讲解;
  • b 表示块设备文件,这也在设备那一节讲解;
  • s 表示套接字 socket 文件,这在网络那一节讲解;
  • l 表示符号链接,也即软链接,就是通过名字指向另外一个文件,例如下面的代码,instance 这个文件就是指向了 /var/lib/cloud/instances 这个文件。软链接的机制我们这一章会讲解。
1
2
ls -l
# lrwxrwxrwx 1 root root   61 Dec 14 19:53 instance -> /var/lib/cloud/instances
https://img2018.cnblogs.com/blog/1075436/201905/1075436-20190529145430465-2094239338.png