第13章-Linux文件系统结构
13.1 硬盘结构
13.1.1 硬盘结构
先纠正一下坊间误区:很多人认为盘片为了保护,硬盘内部肯定是真空的,但是(画重点了!)磁盘内部不是真空,只不过里面有过滤部件所以空气很干净。因为真空不传热量,不利于散热。
硬盘内部一般有以下主要部分物理组成:|
圆形盘片
马达
永磁铁
控制芯片
由此物理结构引出硬盘的管理方式
圆形盘片被划分扇区与磁道;相同扇区不同盘面是柱面;
【硬盘内的盘片有两个面,都可以储存数据,而硬盘内的盘片往往不止一张,常见的有两张】
扇区一般是512字节

13.1.2操作系统在读写最小单位是:簇和block
一般常用簇的大小为:4K
磁盘存储一般是从外向内存储,外面的扇区密度高
一块大的硬盘分区的时间建议如此划分
1)前面的分区格式化以4K为标准
2)最后的分区格式化为32K为标准,这样以浪费些空间换取速度

13.2 文件系统结构
Linux文件系统由三部分组成:文件名,inode,block
文件名:只是使用者查找文件方便
13.2.1 inode介绍
inode:inode包含文件的元信息,具体来说有以下内容:
   文件的大小--字节数
  
文件拥有者--UserID
   文件拥有者所在组--Group ID
  
文件的对o,g.o用户的读、写、执行权限
   文件的时间戳,共有三个:
ctime--chmod指inode上一次变动的时间如修改权限等,
mtime--modify指文件内容上一次变动的时间,
atime--access指文件上一次访问、打开或引用的时间。
  
链接数,即有多少文件名指向这个inode
  * 文件数据block的位置
例1:[root@node-1 opt]# ls -il passwd
1602 -rw-r--r-- 1 root root 1076 Feb 29 10:36 passwd
【最前的的数字就是passwd的inode号码】
inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
系统不认文件名称,只认inode号码,根据inode号来读取实际存放文件实际数据的block号
小知识点:
【对于linux系统,通过inode号可以找到文件所有存储实际数据的block】
【对于windows系统,则只能通过本inode号找到下个inode号及存储数据的block】
【所以linux系统在找文件理论速度比windows快且基本不用磁盘整理】
例2:[root@node-1 opt]# stat passwd
File: ‘passwd’
Size: 1076 Blocks: 8 IO Block:
4096 regular fileDevice: fd00h/64768d Inode: 1602 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gi
d: ( 0/ root)Access: 2020-02-29 10:36:31.501982466 +0800
Modify: 2020-02-29 10:36:31.501982466 +0800
Change: 2020-02-29 10:36:31.501982466 +0800
Birth: -

13.2.2 block介绍
block 是真正存储数据的地方
block 是文件系统中最小的存储单位 默认4K
扇区 是磁盘中最小的存储单位 512字节
block 的大小只能在格式化硬盘的时候修改
vg建立的时候也是可以指定PE的大小,默认4M,这是个逻辑结构
例3:[root@node-1 opt]# stat passwd | grep IO
Size: 1076 Blocks: 8 IO Block: 4096 regular file
13.2.2 常用文件系统
Linux文件系统: centos6常用:【ext3,ext4】centos7常用【xfs】
windows文件系统: FAT32,NTFS
13.3 硬链接和软链接
13.3.1 Linux链接概念
Linux链接分两种:一种被称为硬链接(Hard Link),另一种被称为软链接,即符号链接(Symbolic Link)。
默认情况不加参数,ln命令产生硬链接。
【硬连接】:硬连接指通过索引节点号来进行连接。inode是可以对应多个文件名的
在Linux中,多个文件名可以指向同一索引节点(inode号码).这种连接就是硬连接。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
只删除一个连接【文件名】并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
限制:
1)无法对文件夹做硬链接
2)无法跨文件系统(分区)做硬链接
例4:
[root@node-1 opt]# ln passwd passwd-h
[root@node-1 opt]# ll -i
total 8
1602 -rw-r--r-- 2 root root 1076 Feb 29 10:36 passwd
1602 -rw-r--r-- 2 root root 1076 Feb 29 10:36 passwd-h
由此看出inode号是一样的
【软连接】:另外一种连接称之为符号连接(Symbolic Link),也叫软连接。
软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。
注意:符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息,不包括其他信息
例5:
[root@node-1 opt]# ln -s passwd passwd-s
[root@node-1 opt]# ll -i
total 8
1602 -rw-r--r-- 2 root root 1076 Feb 29 10:36 passwd
1602 -rw-r--r-- 2 root root 1076 Feb 29 10:36 passwd-h
2422 lrwxrwxrwx 1 root root 6 Feb 29 11:17 passwd-s -> passwd

日常工作中遇到的问题总结:
有次遇到一个磁盘空间还有好多,但无法往这个盘中写数据
[root@node-1 opt]# df -hi
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/centos-root 18M 50K 18M 1% /
devtmpfs 973K 345 973K 1% /dev
tmpfs 976K 1 976K 1% /dev/shm
tmpfs 976K 1.2K 975K 1% /run
tmpfs 976K 16 976K 1% /sys/fs/cgroup
/dev/sda1 500K 331 500K 1% /boot
tmpfs 976K 1 976K 1% /run/user/0

用这个命令检查一下,看是否Inodes使用完了
如果是这样的话建议两种解决办法,可根据实际情况来处理
1、删除大量占用inode号的文件,一般以日志或缓存文件为主
2、备份数据重新格式化,格式化的时候指定inode表大小
mkfs.xfs -i 指定inode占用磁盘大小