Linux云计算架构-文件系统详解
1. 关于硬盘的一些结论
# 磁盘内部不是真空的,但空气很干净。
# 磁盘分扇区,是逻辑化数据的需要,能更好的管理硬盘空间。
# 硬盘的存储容量=磁头数(盘面数)×磁道(柱面)数×每道扇区数×每道扇区字节数
# 外圈数据读取快,内圈数据读取慢
# 磁盘写数据、windows的C盘、linux的boot分区都在磁盘的外圈,要求读写速度快。
2. 文件系统结构
Linux文件系统由三部分组成:文件名、inode、block
Linux文件系统: ext3、ext4、xfs
windows文件系统: FAT32、NTFS
# inode包含文件的元信息,具体来说有以下内容:
①文件的字节数
②文件拥有者的 User ID
③文件的 Group ID
④文件的读、写、执行权限
⑤文件的时间戳,共有三个:
ctime指文件属性上一次修改的时间
mtime指文件内容上一次修改的时间
atime指文件上一次访问的时间。
⑥链接数,即有多少文件名指向这个inode
⑦文件数据 block 的位置
# 查看文件的inode信息
[root@master ~]# stat /etc/passwd
文件:"/etc/passwd"
大小:2262 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:35184466 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:passwd_file_t:s0
最近访问:2020-07-14 22:26:24.741000178 +0800
最近更改:2020-06-23 17:54:17.315020864 +0800
最近改动:2020-06-23 17:54:17.315020864 +0800
创建时间:-
# inode详解
# inode号唯一标识一个文件
# 由于文件的实际内容和inode都会占用硬盘空间,在格式化时,操作系统自动将硬盘分为两个区域。一个是数据区,存放数据,另一个是inode区,存放inode所包含的信息。
# 在格式化时,inode节点的总数已经给定,用完了,就不能创建文件了。
# 每个inode节点的大小,一般是128字节或256字节。
# 假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。
# inode数据量设置大一些:可以创建多个文件。占用空间比较大
# inode数据量设置小一些:可以创建很少文件。占用空间比较小
# 系统内部识别文件的过程:
# 首先,系统找到这个文件名对应的inode号码;
# 其次,通过inode号码,获取inode信息;
# 最后,根据inode信息,找到文件数据所在的block,读出数据。
# 查询一个普通文件的inode号码
[root@master ~]# ls -i a.txt
67394033 a.txt
# 查询一个目录文件的inode号码
[root@master ~]# ls -id /etc
33554497 /etc
# 查询系统中的inode的总数
[root@master ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 24637440 152916 24484524 1% /
devtmpfs 228628 394 228234 1% /dev
tmpfs 232906 1 232905 1% /dev/shm
tmpfs 232906 935 231971 1% /run
tmpfs 232906 16 232890 1% /sys/fs/cgroup
/dev/sda1 524288 341 523947 1% /boot
tmpfs 232906 6 232900 1% /run/user/42
tmpfs 232906 17 232889 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
# 每次修改完服务器的配置文件,都要重启服务,即重新加载配置文件。原因在于:使用vim编辑配置文件,inode会变,要重新加载,才能找到并读取该配置文件。
# blocK详解【windows中称作 簇】
# block,也可以叫做IO块
# block是真正存储数据的地方。
# block是文件系统中最小的存储单位
# 扇区是磁盘中最小的存储单位
# block设置大:效率高,利用率低。
# block设置小:效率低,利用率高。
# 查看系统blocK的大小
[root@master ~]# stat a.txt | grep IO
大小:47 块:8 IO 块:4096 普通文件
3. 如何解决磁盘空间未满,但是无法创建文件的问题?
# 成功创建文件有两个前提:①所在分区有剩余空间 ②所在分区有剩余索引节点
# 若存在剩余空间,但不存在剩余的索引节点,则不能成功创建文件。
[root@master ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 47G 3.9G 44G 9% /
devtmpfs 894M 0 894M 0% /dev
tmpfs 910M 0 910M 0% /dev/shm
tmpfs 910M 11M 900M 2% /run
tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 182M 8.0K 182M 1% /run/user/42
tmpfs 182M 24K 182M 1% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /run/media/root/CentOS 7 x86_64
[root@master ~]# df -i
文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 24637440 152916 24484524 1% /
devtmpfs 228628 394 228234 1% /dev
tmpfs 232906 1 232905 1% /dev/shm
tmpfs 232906 936 231970 1% /run
tmpfs 232906 16 232890 1% /sys/fs/cgroup
/dev/sda1 524288 341 523947 1% /boot
tmpfs 232906 6 232900 1% /run/user/42
tmpfs 232906 17 232889 1% /run/user/0
/dev/sr0 0 0 0 - /run/media/root/CentOS 7 x86_64
# 解决办法
①删除部分缓存文件,释放一部分的inode。
②备份部分缓存文件,删除文件,释放出inode。然后新建一个目录,重新挂载一个新分区,下次写数据写入新分区的挂载目录下。
# 一块新分区,在格式化后,inode总数已经固定了,可以通过-I参数指定inode的数量。
4. 如何修复服务器文件系统
# 当服务器宕机后,重启报错时,若要修复文件系统才好用,具体用法可以上网搜,这里只给出方法。
# 用之前了解清楚,请示领导才好用
输入root密码
fsck -f -y /dev/sda1 # 修复引导分区文件系统
fsck -f -y /dev/sda3 # 修复/dev/sda3对应的文件系统
reboot
想了解存储结构和磁盘分区、格式化、挂载内容的可以看博主的另一篇博客:存储结构和磁盘分区、格式化、挂载
两篇博客的学习,对linux文件系统的学习已经足够了。