深入管理Linux文件系统

inode与block详解

inode和block的概述

文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
一般连续八个扇区组成一一个"块" (block) ,一一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一一次性连续读取多个扇区,即一个块一个块的读取的。
文件数据包括实际数据与元信息( 类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。因此,一个文件必须占用一个inode, 并且至少占用一个block。
inode不包含文件名。文件名是存放在目录当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系 统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是—对应关系,每个inode号码对应一一个文件名。
所以,当用户在Linux系统中试图访问-一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block, 并读取数据。
在这里插入图片描述

inode的内容

ls -i 文件名
stat 文件名
在这里插入图片描述Linux系统文件有三个主要的时间属性(看上图所示)
最近访问(Access):最后一次访问文件或目录的时间
最近更改(Modify):最后一次修改文件或目录(内容)的时间
最近改动(Change):最后一次改变文件或者目录(属性)的时间

inode目录文件的结构

在这里插入图片描述
每一行称为一个目录项
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
linux系统内部不使用文件名,而是使用inode号来识别文件
对用户而言,文件名只是inode号码便于识别的别称

用户通过文件名打开文件时,系统内部的过程:
系统找到这个文件名对应的inode号码
通过inode号码,获取inode信息
根据inode信息,找到文件数据所在的block,读出数据
在这里插入图片描述

inode的大小

在这里插入图片描述
inode也会消耗硬盘空间,每个inode大小一般是128字节或256字节。
格式化的时候,系统会自动将硬盘分成两个区域:
一个是数据区域,存放文件数据
另一个是inode区,存放inode所包含的信息
通常情况下不需要关注单个inode的大小,而是需要关注inode的总数;inode的总数在格式化的时候就给定好了。
执行“df -i”可以查看每个硬盘分区时对应的inode总数和已使用的inode数量。
由于inode号码与文件名是分离的,这种机制导致了Linux系统具备以下几种特有的现象:
1.文件名包含特殊字符的话可能就无法正常删除了,这时需直接删除inode才能起到删除文件的作用
2.移动文件或者重命名文件,只是会改变文件名,并不影响inode号码
3、打开一个文件以后,系统会以inode号来识别这个文件,而不是去考虑文件名
4.文件数据被修改保存后,会生成一个新的inode号
这种机制下,软件可以在不关闭的情况下进行更新,而且不需要重启,因为系统是通过inode号码来识别运行中的文件而不是通过文件名
这样,在更新的时候(就像你在进入vim编辑器编辑的过程),新版的文件会以同样的文件名再生成一个新的inode,而不会影响到运行中的文件
等到再一次运行这个软件的时候(wq),文件名就会指向新版文件,同时回收掉旧版文件的inode号(更新inode号)

inode耗尽故障处理

之前我们学习过,每个文件与inode是相互对应的关系,也就是说每个文件都会有一个inode号码,但这样就会有可能会发生inode已经用光,但硬盘还未存满的情况
一旦发生这种情况后,我们就无法再在硬盘上创建新文件了,为了更直观的让大家理解,下面通过一个案例来模拟Linux文件系统中文件数量耗尽的故障
第一步:新增一块30m的磁盘
在这里插入图片描述
第二步:新建一个目录然后挂载
**加粗样式**
第三步:使用带“-i”选项的df命令确认该文件系统中i节点的使用情况,可见inode有7424个
在这里插入图片描述
第四步:模拟节点耗尽故障
在这里插入图片描述
第五步:查看可用分区。确实用完,但是只占用了分区的4%。由此可以得出:磁盘创建文件的数量受到磁盘容量大小以及inode号的数量限制
在这里插入图片描述
在这里插入图片描述

修复故障

我们理解了故障的由来,那么问题就比较好解决了,可以“ls -a”查看所有文件(包含隐藏文件)
然后找出该分区中占用大量i节点的细小文件,并进行转移或删除即可
对于许多用户公用的文件系统,建议为相关用户设置磁盘限额(包括文件数量、磁盘空间两方面)

硬链接与软链接

在Linux下面的链接文件有两种:一种类似于windows的快捷方式功能的文件,可以快速连接到目标文件或目录,这种称之为软链接,另一种则通过文件系统的inode链接来产生文件名,而不是产生新文件,这种称之为硬链接。

硬链接

一般情况下,文件名和inode号码是相对应的关系,每个inode号对应一个文件名
但Linux系统允许多个文件名指向同一个inode号,这表示可以用不同的文件名访问相同的内容
“ln”命令可以创建硬链接,命令格式为:ln 源文件 目标
运行该命令后,源文件与目标文件的inode号码相同,都指向一个inode,inode信息中的“链接数”这时会增加1
当一个文件拥有多个硬链接的时候,再对文件内容进行修改,则会影响到所有的文件名,但删除一个文件名不会影响到其他文件名,删除一个文件名只会使inode号中的“链接数”减一
在实际环境中硬链接几乎不会应用到,且不能对目录做硬链接
示例:
新建一个sanfen文件,查询inode号和链接数
在这里插入图片描述
再创建一个硬链接,可以看到inode号相同,而且链接数增加1,变成了2在这里插入图片描述
删除源文件sanfen,发现硬链接没有受到影响,只有链接数又减成了1
在这里插入图片描述

软链接

软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名
例如:
文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径
读取文件A时,系统会自动将访问者导向文件B
此时,文件A就称为文件B的“软链接(soft link)”或者“符号链接(symbolic link)”
这意味着,文件A依赖于文件B而存在着,如果删除了文件B,那么文件A就会开始报错
这是软链接和硬链接最大的不同:文件A指向文件B的文件名,而不是inode号码,文件B的inode“链接数”不会因此变化
创建软链接的格式:ln -s 源文件或目录 目标文件或目录
示例
创建一个新文件zhangsan,再为它创建一个软链接,这是inode号发生改变,软链接文件时指向源文件的
在这里插入图片描述
删除源文件zhangsan,lisi开始报错
在这里插入图片描述

恢复误删文件

我们删除一个文件,实际上不是清楚inode节点和block的数据,只是在这个文件的父目录里面的block中,删除掉这个名字的文件。Linux是通过Link的数量来控制删除的,只有当一个文件不存在任何Link的时候这个文件才会删除。
所以,在误删除的情况下可以用extundelete恢复工具来恢复文件,它是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统。

准备(编译安装extundelete)

先新建磁盘分区
在这里插入图片描述
格式化
在这里插入图片描述
挂载
在这里插入图片描述
在安装extundelete之前,需要先安装两个依赖包
在这里插入图片描述
然后下载安装wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
在这里插入图片描述
解压
在这里插入图片描述
配置

在这里插入图片描述
创建软链接,把前者文件放入/usr/bin目录中,让系统能识别extundelete的所有命令
在这里插入图片描述

模拟删除

在这里插入图片描述

**加粗样式**

xfs类型的文件备份和恢复

概述

另外一种类型,不是直接删除恢复了,而是备份恢复
CentOS7默认采用xfs类型的文件,xfs类型的文件可以用xfsdump与xfsrestore工具进行备份恢复
xfsdump的备份级别有两种: 0表示完全备份: 1-9表示增量备份
增量备份:备份完毕之后,磁盘若有新增内容,它只会备份新增内容,而不是再一次的进行完整备份
xfsdump 的备份级别默认为0.

命令格式

xfsdump -f

常用指令

-f:指定备份文件目录
-L:指定会话标签(如果不指定的话,直接执行会提示我们输入)
-M:指定设备标签
-s:备份单个文件(后面不能直接跟路径)

使用限制

只能备份已挂载的文件系统
必须使用root的权限才能操作
只能备份XFS文件系统
备份后的数据只能让xfsrestore解析

示例

新建磁盘分区/dev/sdc1,大小随意,格式化为xfs,并挂载到新建的/zhangsan目录下
在这里插入图片描述
进入张三目录下,先复制一个文件进去,再新建一个目录和文件
在这里插入图片描述
使用xfsdump备份整个分区/dev/sdc1 到目录/opt/dump_sdc1下
在这里插入图片描述
在这里插入图片描述
删除文件来达到模拟数据丢失的状态,并使用xfsrestore命令恢复文件

在这里插入图片描述

分析日志文件

日志的功能

用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障

日志文件的分类

内核及系统日志:由系统服务rsyslog统—进行管理,日志格式基本相似;主配置文件letc/rsyslog.conf
用户日志:记录系统用户登录及退出系统的相关信息
程序日志:由各种应用程序独立管理的日志文件,记录格式不统一

常见的日志文件

对于Linux系统中的日志文件,有必要了解其各自的用途,这样才能在需要的时候更快更准确的找到问题所在,及时解决各种故障,下面介绍一些常见的日志文件

日志文件介绍
内核及公共消息日志:/var/1og/messages记录Linux内 核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等
计划任务日志:/var/log/cron记录crond计划任务产生的事件信息
系统引导日志:/var/1og/dmesg记录Linux 系统在引导过程中的各种事件信息
#邮件系统日志:/var/ log/maillog记录进入或发出系统的电子邮件活动
用户登录日志:/var/1og/secure记录用户认证相关的安全事件信息
/var/log/lastlog记录每个用户最近的登录事件;二进制格式
/var/log/wtmp记录每个用户登录、注销及系统启动和停机事件;二进制格式(反正你看不懂)
/var/run/btmp记录失败的、错误的登录尝试及验证事件;二进制格式

日志优先级

优先级
数字等级越小,优先级越高,消息越重要

数字命令作用
0EMERG(紧急)会导致主机系统不可用的情况
1ALERT(警告)必须马上采取措施解决的问题
2CRIT(严重)比较严重的情况
3ERR(错误)运行出现错误
4WARNING(提醒)可能影响系统功能,需要提醒用户的重要事件
5NOTICE(注意)不会影响正常功能,但是需要注意的事件
6INFO(信息)一般信息
7DEBUG(调试)程序或系统调试信息等

日志记录的一般格式

内核及大多数系统消息都被记录到公共日志文件/var/log/messages中,而其他一些程序消息被记录到各自独立的日志文件中,此外日志消息还能够记录到特定的存储设备中,或者直接发送给指定用户
在这里插入图片描述

日志管理策略

及时做好备份和归档
延长日志保存期限
控制日志访问权限:日志中会包含各类敏感信息
集中管理日志:将日志统一发送至日志文件系统服务器,便于管理,分析,统一规划,避免日志信息以外丢失,被恶意篡改,删除等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值