FRI.文件系统

FRI.文件系统

文件系统

  • 文件是操作系统提供给用户/应用程序操作硬盘的一种功能
  • 文件系统是操作系统内核中负责组织管理硬盘的程序,文件系统提供了文件这种功能
操作系统: 	  文件系统 1       文件系统 2       文件系统 3
硬盘:          分区 1          分区 2          分区 3
							 sda1           sda2            sda3

PS: 一个文件系统对应一个分区
df = disk filesystem
df -h 查看容量
df -T 查看文件系统类型
df -i 查看 Inode 数量
海量小文件会造成空间有余,而Inode 号不足,在服务器中出现次数较多
大文件会造成成空间不足,Inode 号还有剩余
  • Linux 系统: 文件系统
以下均为日志文件系统:
- ext3
- ext4(CentOS6 默认)
- xfs(CentOS7 默认)
- btrfs(非常消耗 CPU,暂时还不稳定)
效率: ext3 < ext4 < xfs < brtfs
  • windiws 系统: 文件系统
- FAT32
- NTFS

PS: 为防止突然断电导致 buffer 缓存区的数据消息,在等待数据的过程中,会将产生数据的命令先记录到硬盘,然后再从硬盘的日志文件系统重新运行,能在一定程度上防止数据丢失

  • 文件组成
1. 文件的元信息(元数据),例如权限(rwx)、拥有者、群组、时间参数等,即文件的描述信息
2. 文件的实际内容

文件系统通常会将这两部分的分别存放在不同的区块

1. 文件的元信息放置到 inode 区块中
2. 文件的实际内容则放置到 data block中
# 强调: 每个 inode 与 block 都有自己的编号

另外文件中有一个超级区块(superblock)会记录整个档案系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等

补充说明:

# 硬盘的最小存取单位-->扇区
# 操作系统的最小存取单位-->block块

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector),每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个扇区一个扇区地读取,这样效率太低,于是操作系统中的文件系统负责将磁盘的多扇区组织成一个个的block块,这样操作系统就可以一次性读取一个"块"(block),即一次性连续读取多个扇区。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,"即连续八个 sector组成一个 block。"

总结文件系统的三种区块inode、block、superblock的意义如下:

# 1. superblock:
记录此filesystem的整体信息,包括inode/block的总量、使用量、剩余量, 以及文件系统的格式与相关信息等;

# 2. inode:
(1) 记录文件元信息,包括文件对应的一个或多个block块号码
(2) 一个文件被分配唯一一个inode

# 3. block:
(1) 记录文件实际内容
(2) 一个文件过大时可能会被分配多个block快,即一个文件可能对应多个block块的号码,这些号码都存放在该文件的innode里

inode信息

  • 文件的inode中文译名为"索引节点",是 UNIX 操作系统中的一种数据结构,其本质是结构体。

  • Inode负责储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小inode 。

  • 从根本上讲, inode 中存放的是除了文件的名字以及文件真实内容之外、所有有关文件的信息/元数据(metadata),如下

● inode 编号
● 用来识别文件类型,以及用于 stat C 函数的模式信息
● 链接数,即有多少文件名指向这个inode。
● 属主的ID (UID)
● 属主的组 ID (GID)
● 文件的字节数
● 文件所使用的磁盘块的实际数目
● 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
● 指向数据块的指针 
  • 可以用stat命令,,查看某个文件的inode信息:
[root@localhost ~]# stat egon.txt 
  文件:"egon.txt"
  大小:0          块:0          IO 块:4096   普通空文件
设备:803h/2051d   Inode:16813492    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2022-12-16 16:25:29.664259627 +0800
最近更改:2022-12-16 16:25:29.664259627 +0800
最近改动:2022-12-16 16:25:29.664259627 +0800
创建时间:-

# 三种时间解释
atime : access time 访问文件内容的时间。对文件进行一次读操作,它的访问时间就会改变。例如像:cat、more等操作,但是像之前的stat还有ls命令对atime是不会有影响的。


mtime : modify time 修改文件内容的时间。文件的内容被最后一次修改的时间,我们经常用的ls -l命令显示出来的文件时间就是这个时间,当用vim对文件进行编辑之后保存,它的mtime就会相应的改变;比如:如:echo aa >> a.sh 或vim a.txt 修改内容


ctime : change time 指inode上一次文件属性变动的时间。当文件的状态被改变的时候,状态时间就会随之改变,例如当使用chmod、chown等改变文件属性的操作是会改变文件的ctime的。chmod +x a.txt
  • 例1:使用cat命令查看文件后,文件atime变更
[root@localhost ~]# touch egon.txt
[root@localhost ~]# stat egon.txt 
  文件:"egon.txt"
  大小:0          块:0          IO 块:4096   普通空文件
设备:803h/2051d   Inode:16813492    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2022-12-16 16:25:29.664259627 +0800
最近更改:2022-12-16 16:25:29.664259627 +0800
最近改动:2022-12-16 16:25:29.664259627 +0800
创建时间:-
[root@localhost ~]# cat egon.txt 
[root@localhost ~]# stat egon.txt 
  文件:"egon.txt"
  大小:0          块:0          IO 块:4096   普通空文件
设备:803h/2051d   Inode:16813492    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2022-12-16 16:29:26.162262768 +0800
最近更改:2022-12-16 16:25:29.664259627 +0800
最近改动:2022-12-16 16:25:29.664259627 +0800
创建时间:-
[root@localhost ~]# 

"""
若在执行 cat 查看命令之后,且不进行更改操作,再次使用 cat,atime 时间不变 -- 由于打开过文件,文件保存在 cache 缓存中,不再重新从硬盘读取,因此 atime 不变
"""
  • 使用vim命令写文件w后,文件atime、mtime、ctime都会变更。如果vim打开后只是查看没有写的话,只会变更atime。

  • 例3:

[root@localhost ~]# stat egon.txt 
  文件:"egon.txt"
  大小:9          块:8          IO 块:4096   普通文件
设备:803h/2051d   Inode:17696455    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2022-12-16 16:35:21.943267492 +0800
最近更改:2022-12-16 16:35:46.131267813 +0800
最近改动:2022-12-16 16:35:46.131267813 +0800
创建时间:-
[root@localhost ~]# chmod 000 egon.txt 
[root@localhost ~]# stat egon.txt 
  文件:"egon.txt"
  大小:9          块:8          IO 块:4096   普通文件
设备:803h/2051d   Inode:17696455    硬链接:1
权限:(0000/----------)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2022-12-16 16:35:21.943267492 +0800
最近更改:2022-12-16 16:35:46.131267813 +0800
最近改动:2022-12-16 16:36:43.423268574 +0800
创建时间:-
[root@localhost ~]# 

  • 硬链接与软链接
硬链接

0.对硬链文件内容进行修改,会影响到所有文件名
1.硬链接文件与源文件具有相同inode的不同文件名:一个文件只能有一个inode号,但多个文件的inode号可以相同
2.删除硬链接或者原文件之一,不影响另一个文件名的访问,除非所有的都删除掉,所以硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
3.删除所有硬链接,数据会在被磁盘检查或者新数据写入时候删除回收。
4.通过ln [原文件] [目标文件]设置硬链接
5.通过rm –f 删除硬链接
6.目录不可创建硬链接,并且硬链接无法跨区
软链接

#0. 对软链的源文件或目标文件内容进行修改,会影响到所有文件名;
#1. 软链接文件与源文件具有不同的inode号
#2. 删除软连接文件的源文件,软链接文件将无法使用,软链接作用
- 1.软件升级 
- 2.企业代码发布 
- 3.不方便目录移动
#3. 删除源文件后,软连接文件无效,应该也一起删除掉,以便回收
#4. 执行ln –s [原文件] [目标文件]创建软链接
#5. rm –f 删除软链接
#6、可以对目录创建软链接,并且软连接可以跨分区
软链接: 软链接指向文件,因此两个文件指向的 Inode 号不一样,因此源文件删除,目标文件即失效
PS: 
	1.软链接指向的为文件名,因此可以跨分区链接
	2.文件夹和文件均可进行软链接

硬链接: 硬链接指向同一个 Inode 号, 因此即使源文件删除,目标文件依然有效
PS: 
	1.硬链接指向同一个 Inode 号,且各分区文件系统可以不同,因此不能跨分区建立
	2.硬链接只针对文件

若一去不回便一去不回

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值