当前位置:   article > 正文

Linux的文件系统结构_linux的文件系统由两层结构组成()

linux的文件系统由两层结构组成()

1、硬盘结构

磁盘的内部并不是真空的,只是空气很干净;利于散热

文件系统结构,理解文件系统,就得从文件存储说起

磁盘的专业术语

  • 磁盘的内部是金属片,将原型的盘片分成若干个扇形区域,
  • 若干个扇区就组成一个盘片
  • 以盘片中心为圆心,把盘片分成若干个同心圆
  • 每一个划分圆的线条就是磁道
  • 盘片中相同位置的磁道形成柱面
硬盘的存储容量=磁头数*磁道=扇区数*字节数
  • 1

磁道从外向内从0开始顺序进行编号;

比较古老的CHS(Cylinder/Head/Sector)磁头、柱面、扇区结构体系

现在磁盘都采用这种技术:ZBR(Zoned Bit Recording)区位记录

使用ZBR区位记录法做的磁盘特点:

  • 读外圈的数据块,内圈的数据慢

windows安装系统的C盘或者Linux boot分区一般安装在最外头

Linux的boot分区也是在最外面

簇和block

其实这两个玩意是同一个概念

簇是windows系统常用的说法

block是linux系统常用的说法

2、文件系统结构

Linux的文件系统有三部分组成:文件名、inode、block

Linux的文件系统:ext2 、ext3、ext4、xfs

Windows的文件系统:FAT32、NTFS

Linux的文件名
[root@node0 ~]# ls /etc/passwd			#这个就是文件名
/etc/passwd
#我们直接操作的目录或者文件都是有文件名的
  • 1
  • 2
  • 3

文件的时间戳:

  • ctime:只inode上次变动的时间
  • mtime:只文件内容上次改变的时间
  • atime:文件上一次打开的时间
  • 链接数:有多少个文件名指向这个inode
  • 文件数据block的位置
inode的内容

inode包含文件的元信息、

  • 包括文件的字节数
  • 文件所有者
  • 文件所属组
  • 文件的读写执行权限;

inode的大小

硬盘在格式化创建文件系统的时候,系统会分成两个区域,

  • 一个是存放文件数据的
  • 另外一个是inode区域
  • 每个inode节点的大小,一般是128或者是256直接
  • inode的总数,在格式化的时候就设定了,
  • 每个文件都有一个inode号,Linux是用inode号来识别不同的文件

Linux查找文件的原理:

  • 系统内部不使用文件名来查找,而是通过inode号码来识别文件
  • 系统找文件对应的inode号码
  • 然后通过inode号码获取inode信息
  • 然后再找文件所在的block,读取数据
[root@node0 data]# ls -i aa.txt 
51015462 aa.txt
[root@node0 data]# df -i
文件系统         Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3      9180672   59024 9121648       1% /
devtmpfs        250786     339  250447       1% /dev
tmpfs           253511       1  253510       1% /dev/shm
tmpfs           253511     648  252863       1% /run
tmpfs           253511      16  253495       1% /sys/fs/cgroup
/dev/sda1       256000     326  255674       1% /boot
tmpfs           253511       1  253510       1% /run/user/0
	#如果inode号码使用完毕,但是硬盘空间还有数据还是无法写入;
[root@node0 data]# ls -ild /root
33574977 dr-xr-x---. 2 root root 183 93 08:56 /root
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

inode的特殊作用

由于inode号码与文件名分离,所以有些特殊现象

  • 如果文件名包含特殊符号,无法删除文件名,可以删除inode号
  • 移动文件名的时候,改名了,但是inode号是没变的
  • 打开一个一个文件名,系统以inode号码识别文件,系统无法通过inode号识别文件名
#如果修改了文件内容后,inode号会随之改变
[root@node0 data]# touch b.txt
[root@node0 data]# ls -i b.txt 
51015468 b.txt
[root@node0 data]# vim b.txt 
s
sisdjflsjd

[root@node0 data]# ls -i b.txt 
51015470 b.txt

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
stat命令

作用:查看文件的详细信息

语法:stat+文件名

[root@node0 data]# stat passwd 
  文件:"passwd"
  大小:1002      	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:51015463    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2021-09-05 21:29:18.218094011 +0800
最近更改:2021-09-05 21:29:18.218094011 +0800
最近改动:2021-09-05 21:29:18.218094011 +0800
创建时间:


	#ctime:指文件上次属性变动的时间,包括所有者所属组、读写等等
	#atime:指上次文件被查看的时间
	#mtime:指文件内容被改变的时间
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

实战:

模拟黑客入侵文件的实验

#黑客首先会修改时间,再植入木马程序
[root@node0 data]# stat aa.txt 
  文件:"aa.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:803h/2051d	Inode:51015462    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2021-09-05 21:28:32.853090870 +0800
最近更改:2021-09-05 21:28:32.853090870 +0800
最近改动:2021-09-05 21:28:32.853090870 +0800
创建时间:-

[root@node0 data]# date -s "21:28:32"
2021年 09月 05日 星期日 21:28:32 CST
[root@node0 data]# echo hahah > aa.txt 
[root@node0 data]# stat aa.txt 
  文件:"aa.txt"
  大小:6         	块:8          IO 块:4096   普通文件
设备:803h/2051d	Inode:51015462    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2021-09-05 21:28:32.853090870 +0800
最近更改:2021-09-05 21:28:37.823000403 +0800
最近改动:2021-09-05 21:28:37.823000403 +0800
创建时间:-

[root@node0 data]# chmod +x aa.txt 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
block块大小

block是真正存储数据的地方

block是文件系统中最小的存储单位

扇区是磁盘中最小的存储单位;

在Linux系统中是block

在windows系统中是簇

问题:如果直接使用扇区、不使用block会怎么样?

操作系统读取数据的时候,如果按照一个扇区一个扇区查找的话512字节就会太慢了

所以需要读取一个块财会

多个扇区组成的“块”是文件系统存储的最小单位

如果随意调整簇或者是block的大小

  • 优点:速度快、节约查找的时间
  • 缺点就是:浪费空间
  • block太大:效率高、利用率低
  • block太小:效率低、利用率高
[root@node0 data]# stat passwd | grep IO
  大小:6         	块:8          IO 块:4096   普通文件
  • 1
  • 2

3、硬链接与软连接

Linux链接分为两种硬链接与软连接

ln命令

作用:创建硬链接与软连接

语法:ln+选项+源文件+链接文件名

选项:

  • -s:创建软链接
[root@node0 data]# ln passwd passwd.hard			#创建硬链接
[root@node0 data]# ln -s passwd passwd.soft			#创建软链接
[root@node0 data]# ll pass*
-rw-r--r-- 2 root root 6 95 21:28 passwd
-rw-r--r-- 2 root root 6 95 21:28 passwd.hard			#硬链接属性与源文件一致的
lrwxrwxrwx 1 root root 6 95 23:13 passwd.soft -> passwd	#软链接的属性是满权限,但是限制的是源文件的权限


#尝试链接目录
[root@node0 data]# ln oldboy/ oldboy.hard		#硬链接无法链接目录
ln: "oldboy/": 不允许将硬链接指向目录
[root@node0 data]# ln -s oldboy/ oldboy.sort.d

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
硬链接

特点:

  • 硬链接通过索引节点号来进行链接,inode号是可以读音多个文件名
  • 硬链接的作用是允许多个文件名同时指向一个索引节点,
  • 一个文件名也可以拥有多个有效路径名,可以防止误删除的功能
  • 硬链接是不可以跨分区链接;
  • 当文件真正被删除的情况就是所有的相同inode号的文件删除
  • 删除源文件,链接文件依然可用
  • 无法针对目录进行
软链接

特点:

  • 软链接是可以跨分区的
  • 软链接的权限是满权限;
  • 相当于windows的快捷方式
  • 删除源文件,链接文件不可用
  • 链接文件可以链接目录

4、实战

实战背景:

在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了80%,还有1.9G的剩余空间,但是无法创建新的文件。当时使用的是root用户。服务器没有被黑。

#首先需要查看一下系统的基本情况
[root@node0 data]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        18G  2.5G   16G   15% /
devtmpfs        980M     0  980M    0% /dev
tmpfs           991M     0  991M    0% /dev/shm
tmpfs           991M  9.4M  981M    1% /run
tmpfs           991M     0  991M    0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M   25% /boot
tmpfs           199M     0  199M    0% /run/user/0

	#只要有权限就能创建新文件?
	
#还需要排查inode节点数
[root@node0 data]# df -i
文件系统         Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda3      9180672   59027 9121645       1% /
devtmpfs        250786     339  250447       1% /dev
tmpfs           253511       1  253510       1% /dev/shm
tmpfs           253511     648  252863       1% /run
tmpfs           253511      16  253495       1% /sys/fs/cgroup
/dev/sda1       256000     326  255674       1% /boot
tmpfs           253511       1  253510       1% /run/user/0

#后来用df -i查看了一下/data所在的分区的索引节点(inode),发现已经用满(IUsed=100%),导致系统无法创建新目录和文件。

#解决的方案:
解决方案1:删除/data目录中的部分文件,释放出/data分区的一部分inode。
解决方案2 : 在/data备份好一些文件,然后删除这些文件,释放一些inode,

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
实战背景:

重启服务器后出现ctrl+D报错

解决办法:

  • 输入root密码
    • fsck -f -y /dev/sda6 #哪个分区有文件,修复哪个分区
    • 然后reboot
fsck命令

作用:修复文件系统的命令

语法:fsck+选项+分区

选项:

  • -y:所有都自动回答yse
  • -f:强制修复
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/319534
推荐阅读
相关标签
  

闽ICP备14008679号