IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> linux文件系统原理详解2-文件系统、文件链接、挂载 -> 正文阅读

[系统运维]linux文件系统原理详解2-文件系统、文件链接、挂载

硬盘异步写入机制

我们知道一般要操作一个文件必须先将其加载到内存中,如果文件每次次该都立刻回写到硬盘,那么肯定会频繁等待磁盘的IO,导致效率低下。
为了解决上述问题linux采用异步处理方式,加载到内存中的文件,如果没有被修改过那么该文件的状态就是 干净的,否则就是脏的,读写操作都是在内存中执行,这样效率高,然后不定时将内存中的脏数据回写到硬盘。
这样的好处是,不用频繁等待磁盘io,所以效率变高,但是缺点是内存中的脏数据还未写入到磁盘时,如果发生不正常关机,那么内存中已经修改的数据可能会丢失。
我们可以通过sync 命令来强制将内存的脏数据回写到硬盘,事实上我们在执行关机命令时 该命令会自动调用sync命令。
linux 操作系统会将常用的文件都加载到内存中,所以会看到内存占用很高的情况,这是正常的。

硬盘挂载

将文件系统和操作系统目录树结合的过程我们称为挂载。文件系统只能挂载到目录,挂载的目录就是这个文件系统的入口。

支持的文件系统类型

linux支持很多其他的文件系统
传统文件系统:ext2 minix fat 等
日志文件系统:ext3 ext4 ntfs zfs 等
网络文件系统:NFS SMBFS 等
可以通过如下命令来查看,当前系统支持的 文件系统

[root@localhost ~]# ls -l /lib/modules/$(uname -r)/kernel/fs
total 20
-rw-r--r--. 1 root root 5984 Apr  1  2020 binfmt_misc.ko.xz
drwxr-xr-x. 2 root root   25 Apr  6  2021 btrfs
drwxr-xr-x. 2 root root   30 Apr  6  2021 cachefiles
drwxr-xr-x. 2 root root   24 Apr  6  2021 ceph
......
drwxr-xr-x. 2 root root   24 Apr  6  2021 nfsd
drwxr-xr-x. 2 root root 4096 Apr  6  2021 nls
drwxr-xr-x. 2 root root   27 Apr  6  2021 overlayfs
drwxr-xr-x. 2 root root   27 Apr  6  2021 pstore
drwxr-xr-x. 2 root root   28 Apr  6  2021 squashfs
drwxr-xr-x. 2 root root   23 Apr  6  2021 udf
drwxr-xr-x. 2 root root   23 Apr  6  2021 xfs

通过如下命令开查看已经加载到内存中的文件系统

[root@localhost ~]# cat /proc/filesystems 
nodev   sysfs
......
nodev   autofs
nodev   pstore
nodev   mqueue
nodev   selinuxfs
        xfs

虚拟文件系统(VFS)

Linux支持那么多的文件系统,那么它是如何同时操作多个文件系统的呢?其实linux系统在操作的时候不用关心具体的文件系统的细节,它直接操作的是经过抽象的虚拟文件系统。虚拟文件系统再根据具体文件系统执行相应的操作,如下:
在这里插入图片描述

XFS文件系统

从centos7 开始linux预设的文件系统由原来的ext4 编程了xfs,为什么linux舍弃了支持度最好的ext家族呢?
因为:ext 文件系统需要在格式化的时候预先规划好所有的 inode block 等内容,随着磁盘容量的不断扩充,向着PB EB发展,ext文件系统初始化会非常耗时。 随着虚拟化的发展巨型文件也越来越多,在操作这种巨型文件时需要考虑效率问题,而xfs就是一个适合巨型文件和高容量磁盘的文件系统。

xfs是一个文件日志系统,主要分为三部分,资料区、文件修改日志区、实时运行区
资料区
就像ext2中的 inode/block/super block ,所有的数据都存放在这个区域,有点像ext2 中的 block group ,xfs 该区域也分为多个存储群组,每个群组中都包含:superblock、剩余空间管理、inode分配。需要说明的是 xfs的inode 和 data block 都是在使用时才动态分配。因此xfs初始化特别快。
同时 xfs中的 block 和 inode 都支持多重容量,block 容量支持512bytes-64k,inode 容量支持 256 byte-2M。注意:xfs 支持这么大的容量linux 操作系统未必都支持。

日志区
如前文所述,修改文件内容时先将修改内容写入到日志区,待文件内容修改完毕,再从日志区清除相关记录。xfs 支持外部磁盘来作为日志区。如果用SSD可以提高效率。

实时运行区
当有文件创建时,xfs会总这个区域内找到一定数量的 extent区块,将文件写入到区块内,呆inode 等动态分配完毕后,再讲内容写入到 inode 和 data block 中, 该区域大小 4K-1G,最好不随便改动,默认即可。

xfs文件系统查看命令
如下命令可以查看xfs文件系统的信息

[root@localhost ~]# xfs_info /dev/sda1
meta-data=/dev/sda1              isize=512  [一个inode的容量]    agcount=4【存储群组的个数】, agsize=65536【每个存储群组包含的iblock数量】 blks
                                          
         =                       sectsz=512  【扇区大小为512byte】 attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096【每个datablock 的大小4K】   blocks=262144【文件系统共有这么多个 data block】, imaxpct=25
         =                       sunit=0      swidth=0【和磁盘阵列相关】 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal【表示日志区在本文件系统内不是外部文件系统】               bsize=4096【每一个块 4K】   blocks=2560【共2560块  4K*2560=10M】, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096【运行时区域 共4K】   blocks=0, rtextents=0

查看磁盘/目录容量

通过上文得知,磁盘的使用情况在 supber block 中保存,每个文件的大小则在文件的inode中保存。
df命令:可以列出文件系统的整体使用情况
du命令:查看文件系统/目录的磁盘使用情况

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 1.4G     0  1.4G   0% /dev
tmpfs                    1.4G     0  1.4G   0% /dev/shm
tmpfs                    1.4G  9.6M  1.4G   1% /run
tmpfs                    1.4G     0  1.4G   0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  5.7G   12G  34% /
/dev/sda1               1014M  150M  865M  15% /boot
tmpfs                    278M     0  278M   0% /run/user/0

df 主要是从 super block中读取全局数据所以速度很快
du命令是到文件系统中去搜寻数据,因此速度可能会慢

[root@localhost ~]# du -sh
457M    .

文件硬链接

由上一篇文章我们直到,文件名保存在目录中,文件内容保存在 文件inode中,如果同一个文件inode 被多个目录保存 这就是硬链接。
举例:文件 etc/a 是文件 /etc/b 的硬链接那么 这两个文件的 inode 是相同的,除了文件名两个文件的所有信息都相同。效果如下:

[root@localhost ~]# cd  /etc
[root@localhost ~]# > a
[root@localhost ~]#  ln a b


[root@localhost etc]# ll -i
total 1044
19333837 -rw-r--r--.  2 root root      0 May 30 07:34 a
19333837 -rw-r--r--.  2 root root      0 May 30 07:34 b

优点
通过两个文件名 都可以读写该文件,且在一个文件中完成修改后,另一个文件马上就可以看到修改后的内容。删除一个文件后还可以通过另一个文件访问。
缺点
只是在目录的data block中增加记录了文件名和 inode号码,因此这种关联 不能跨文件系统。且因为对目录建立硬链接时处理逻辑复杂,所以不能链接目录,

文件软链接

软连接又称为符号链接,和windows下的快捷方式类似。这种链接方式会建立一个独立的文件(有自己的inode),这个文件的数据读取会指向被连接的文件。示例如下:

[root@localhost ~]# mkdir test
[root@localhost ~]# cd test
[root@localhost test]# echo 11111 > a.txt
[root@localhost test]# ln -s a.txt b.txt
[root@localhost test]# ll -i 
total 4
35297085 -rw-r--r--. 1 root root 6 May 30 07:49 a.txt
35297087 lrwxrwxrwx. 1 root root 5 May 30 07:49 b.txt -> a.txt

我们可以看到两个文件的 inode 不同 是两个文件,而且软链接文件中会保存目标文件的信息。我们可以看到示例中链接文件大小是5,其实就是因为目标文件的名字 a.txt长度是5. 因为链接文件只是保存了目标文件名称,所以如果目标文件被删除那么连接文件也就无法访问文件内容了。
相比之下 似乎 硬链接更安全,但是由于限制太多 软连接用户更广泛。软连接支持目录

硬链接会增加文件的链接数 如下,为a.txt 建立硬链接c.txt 后,a.txt 连接数变为2 ,软连接不会增加这个数量

[root@localhost test]# ln a.txt  c.txt
[root@localhost test]# ll
total 8
-rw-r--r--. 2 root root 21 May 30 07:53 a.txt
lrwxrwxrwx. 1 root root  5 May 30 07:49 b.txt -> a.txt
-rw-r--r--. 2 root root 21 May 30 07:53 c.txt
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-07-20 19:20:33  更:2022-07-20 19:23:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 9:15:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计