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 ~]
/etc/passwd
文件的时间戳:
- 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]
51015462 aa.txt
[root@node0 data]
文件系统 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
[root@node0 data]
33574977 dr-xr-x---. 2 root root 183 9月 3 08:56 /root
inode的特殊作用
由于inode号码与文件名分离,所以有些特殊现象
- 如果文件名包含特殊符号,无法删除文件名,可以删除inode号
- 移动文件名的时候,改名了,但是inode号是没变的
- 打开一个一个文件名,系统以inode号码识别文件,系统无法通过inode号识别文件名
[root@node0 data]
[root@node0 data]
51015468 b.txt
[root@node0 data]
s
sisdjflsjd
[root@node0 data]
51015470 b.txt
stat命令
作用:查看文件的详细信息
语法:stat+文件名
[root@node0 data]
文件:"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
创建时间:
实战:
模拟黑客入侵文件的实验
[root@node0 data]
文件:"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]
2021年 09月 05日 星期日 21:28:32 CST
[root@node0 data]
[root@node0 data]
文件:"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]
block块大小
block是真正存储数据的地方
block是文件系统中最小的存储单位
扇区是磁盘中最小的存储单位;
在Linux系统中是block
在windows系统中是簇
问题:如果直接使用扇区、不使用block会怎么样?
操作系统读取数据的时候,如果按照一个扇区一个扇区查找的话512字节就会太慢了
所以需要读取一个块财会
多个扇区组成的“块”是文件系统存储的最小单位
如果随意调整簇或者是block的大小
- 优点:速度快、节约查找的时间
- 缺点就是:浪费空间
- block太大:效率高、利用率低
- block太小:效率低、利用率高
[root@node0 data]
大小:6 块:8 IO 块:4096 普通文件
3、硬链接与软连接
Linux链接分为两种硬链接与软连接
ln命令
作用:创建硬链接与软连接
语法:ln+选项+源文件+链接文件名
选项:
[root@node0 data]
[root@node0 data]
[root@node0 data]
-rw-r--r-- 2 root root 6 9月 5 21:28 passwd
-rw-r--r-- 2 root root 6 9月 5 21:28 passwd.hard
lrwxrwxrwx 1 root root 6 9月 5 23:13 passwd.soft -> passwd
[root@node0 data]
ln: "oldboy/": 不允许将硬链接指向目录
[root@node0 data]
硬链接
特点:
- 硬链接通过索引节点号来进行链接,inode号是可以读音多个文件名
- 硬链接的作用是允许多个文件名同时指向一个索引节点,
- 一个文件名也可以拥有多个有效路径名,可以防止误删除的功能
- 硬链接是不可以跨分区链接;
- 当文件真正被删除的情况就是所有的相同inode号的文件删除
- 删除源文件,链接文件依然可用
- 无法针对目录进行
软链接
特点:
- 软链接是可以跨分区的
- 软链接的权限是满权限;
- 相当于windows的快捷方式
- 删除源文件,链接文件不可用
- 链接文件可以链接目录
4、实战
实战背景:
在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情况,发现/data分区只使用了80%,还有1.9G的剩余空间,但是无法创建新的文件。当时使用的是root用户。服务器没有被黑。
[root@node0 data]
文件系统 容量 已用 可用 已用% 挂载点
/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
[root@node0 data]
文件系统 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
解决方案1:删除/data目录中的部分文件,释放出/data分区的一部分inode。
解决方案2 : 在/data备份好一些文件,然后删除这些文件,释放一些inode,
实战背景:
重启服务器后出现ctrl+D报错
解决办法:
- 输入root密码
- fsck -f -y /dev/sda6 #哪个分区有文件,修复哪个分区
- 然后reboot
fsck命令
作用:修复文件系统的命令
语法:fsck+选项+分区
选项:
|