Linux文件系统与日志分析

本文详细介绍了Linux文件系统中的inode和block概念,用户访问数据的过程,以及查看和管理inode的方法。此外,讨论了链接文件的类型、创建与恢复,特别关注了EXT和XFS文件系统的数据恢复。最后,阐述了日志文件的功能、分类、重要日志文件及其分析,以及日志管理策略,强调了日志在系统故障排查中的关键作用。
摘要由CSDN通过智能技术生成

目录

引言

一、inode和block概述

1、文件的结构

2、block(块)含义

3、inode(索引节点)含义

4、用户访问数据的过程

5、查看文件名对应的inode号码的方式

6、Linux系统文件三个主要的时间属性

7、inode的大小

8、inode的特殊作用

9、inode节点耗尽故障处理

二、链接文件

1、链接文件分类

2、创建硬链接和软链接的命令

3、恢复EXT类型的文件

4、恢复XFS类型的文件

三、日志文件

1、日志的功能

2、日志文件的分类

3、日志保存位置

4、主要日志文件介绍

5、由系统服务rsyslog统一管理

6、日志消息的级别

7、日志记录的一般格式

8、用户日志分析

9、程序日志分析

10、日志管理策略

总结


引言

在Linux系统中,文件系统的运行block和inode息息相关,当Linux系统出现的各种故障时,故障的症状是最易发现的,而导致这一故障的原因才是最终排除故障的关键,熟悉日志文件,才能进一步的了解一般故障的分析与解决办法,及时解决各种系统问题。

一、inode和block概述

1、文件的结构

文件数据包括元信息(inode)与实际数据(block),文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。一个文件必须占用一个inode,并且至少占用一个block,inode不包含文件名,文件名是存放在目录当中的,Linux系统中一切皆文件,因此目录也是一种文件。

2、block(块)含义

一般连续八个扇区组成一个"块"(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。

3、inode(索引节点)含义

存储文件元信息(类似文件属性,比如文件的创建者、创建日期、文件大小文件权限等)的区域就叫做inode。

4、用户访问数据的过程

每个inode都有一个号码,操作系统用inode号码来识别不同的文件,Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码,通过inode号码获取inode信息,根据inode信息,看该用户是否具有访问这个文件的权限,如果有,就指向相对应的数据block,并读取数据。

5、查看文件名对应的inode号码的方式

①ls   -i   文件名

②stat   文件名

6、Linux系统文件三个主要的时间属性

①ctime(change time):最后一次改变文件或目录(属性)的时间

②atime(access time):最后一次访问文件或目录的时间

③mtime(modify time):最后一次修改文件或目录(内容)的时间

7、inode的大小

①inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。

②一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。

③每个inode的大小,一般是128字节或256字节。

④通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。

⑤inode的总数在格式化时就给定了,执行"df-i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。

8、inode的特殊作用

由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:

①当文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用。

②移动文件或重命名文件,只是改变文件名,不影响inode 号码。

③打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。

④文件数据被修改保存后,会生成一个新的inode 号码。

[root@localhost ~]# touch a.txt
[root@localhost ~]# stat a.txt 
  文件:"a.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:803h/2051d	Inode:67165812    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2021-08-20 18:18:23.366966825 +0800
最近更改:2021-08-20 18:18:23.366966825 +0800
最近改动:2021-08-20 18:18:23.366966825 +0800
创建时间:-
[root@localhost ~]# find ./ -inum 67165812 -delete 
[root@localhost ~]# stat a.txt 
stat: 无法获取"a.txt" 的文件状态(stat): 没有那个文件或目录

或者
[root@localhost ~]# find ./ -inum 67165812 -exec rm -i {} \;
[root@localhost ~]# stat a.txt 
stat: 无法获取"a.txt" 的文件状态(stat): 没有那个文件或目录

9、inode节点耗尽故障处理

首先添加一块硬盘,使用fdisk创建分区/dev/sdb1, 分区大小10M即可
操作步骤如下:
[root@localhost ~]# mkfs.ext3 /dev/sdb1
[root@localhost ~]# cd /
[root@localhost /]# mkdir xm
[root@localhost /]# mount /dev/sdb1 /xm
[root@localhost /]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sdb1          2560      11     2549       1% /xm
[root@localhost /]# for ((i=1; i<=2549; i++));       #(模拟inode节点耗尽故障)
> do 
> touch /xm/${i}.txt;
> done
[root@localhost /]# df -i
文件系统          Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/sdb1          2560    2560        0     100% /xm
[root@localhost /]# cd /xm
[root@localhost xm]# touch a.txt
touch: 无法创建"a.txt": 设备上没有空间
[root@localhost xm]# rm -rf ./*          #(删除文件恢复)
[root@localhost xm]# ls
[root@localhost xm]# df -i
/dev/sdb1          2560      10     2550       1% /xm
[root@localhost xm]# touch a.txt
[root@localhost xm]# ls
a.txt

二、链接文件

为文件或目录建立链接文件

1、链接文件分类

链接文件

软链接(又称为符号链接)

硬链接

删除原始文件后

失效

仍旧可用

适用范围

适用于文件或目录

只可用于文件

保存位置

与原始文件可以位于不同的文件系统中

必须与原始文件在同一个文件系统(如一个Linux分区)内

2、创建硬链接和软链接的命令

①硬链接:ln 源文件 目标位置

②软链接:ln -s 源文件或目录 链接文件或目标位置

3、恢复EXT类型的文件

使用extundelete工具,extundelete是一个开源的Linux数据恢复工具,支持ext3、ext4文件系统。( ext4只能在CentOS6版本恢复)

首先添加一块硬盘,使用fdisk创建分区/dev/sdb1,分区大小默认即可
操作步骤如下:
[root@localhost ~]# mkfs.ext3 /dev/sdb1     #(格式化ext3文件系统)
[root@localhost ~]# cd /
[root@localhost /]# mkdir xm
[root@localhost /]# mount /dev/sdb1 /xm
[root@localhost /]# df -Th
文件系统       类型      容量  已用  可用 已用% 挂载点
/dev/sdb1      ext3       20G   45M   19G    1% /xm
[root@localhost /]# yum install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++ -y     #(安装依赖包)
[root@localhost xm]# cd /home/
[root@localhost home]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2    #(编译安装extundelete)
[root@localhost home]# tar jxvf extundelete-0.2.4.tar.bz2 
[root@localhost home]# cd extundelete-0.2.4/
[root@localhost extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install
[root@localhost extundelete-0.2.4]# ln -s /usr/local/extundelete/bin/* /usr/bin/
[root@localhost extundelete-0.2.4]# cd /xm
[root@localhost xm]# echo a>a
[root@localhost xm]# echo a>b
[root@localhost xm]# echo a>c
[root@localhost xm]# echo a>d
[root@localhost xm]# ls
a  b  c  d  lost+found
[root@localhost xm]# extundelete /dev/sdb1 --inode 2    #(查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。)
[root@localhost xm]# rm -rf a c
[root@localhost xm]# ls
b  d  lost+found
[root@localhost xm]# cd ..
[root@localhost /]# umount /xm
[root@localhost /]# extundelete /dev/sdb1 --restore-all     #(恢复/dev/sdc1 文件系统下的所有内容)
[root@localhost /]# cd RECOVERED_FILES/     #(在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件)
[root@localhost RECOVERED_FILES]# ls
a  c
[root@localhost RECOVERED_FILES]# cat a
a
[root@localhost RECOVERED_FILES]# cat c
a

4、恢复XFS类型的文件

①xfsdump命令格式(备份):xfsdump  -f  备份存放位置要备份的路径或设备文件

②备份级别有两种: 0表示完全备份;1-9表示增量备份。xfsdump的备份级别默认为0。

③常用的选项

选项

含义

-f

指定备份文件目录

-L

指定标签session label

-M

指定设备标签media labe

-s

备份单个文件,-s后面不能直接跟路径

④xfsdump使用限制:只能备份已挂载的文件系统;必须使用root的权限才能操作;只能备份XFS文件系统;备份后的数据只能让xfsrestore解析;不能备份两个具有相同UUID的文件系统(可用blkid命令查看)。

⑤xfsrestore命令格式(恢复):xfsrestore  -f  恢复文件的位置存放恢复后文件的位置

⑥模拟删除并执行恢复操作

首先添加一块硬盘,使用fdisk创建分区/dev/sdb1,分区大小默认即可
操作步骤如下:
[root@localhost ~]# mkfs.xfs /dev/sdb1 
[root@localhost ~]# cd /
[root@localhost /]# mkdir xm
[root@localhost /]# mount /dev/sdb1 /xm
[root@localhost /]# df -h
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb1        20G   33M   20G    1% /xm
[root@localhost /]# cd /xm
[root@localhost xm]# cp -r /var/log/ ./
[root@localhost xm]# ls
log
[root@localhost xm]# xfsdump -f /opt/dump_sdb1 /dev/sdb1
 -> dump_sdb1   
 -> sdb1
[root@localhost xm]# rm -rf ./*
[root@localhost xm]# ls
[root@localhost xm]# xfsrestore -f /opt/dump_sdb1 ./
[root@localhost xm]# ls
log

三、日志文件

1、日志的功能

①用于记录系统、程序运行中发生的各种事件

②通过阅读日志,有助于诊断和解决系统故障

2、日志文件的分类

①内核及系统日志:由系统服务rsyslog统一进行管理,日志格式基本相似

②用户日志:记录系统用户登录及退出系统的相关信息

③程序日志:由各种应用程序独立管理的日志文件,记录格式不统一

3、日志保存位置

默认位于:/var/log目录下

4、主要日志文件介绍

内核及公共消息日志

/var/log/messages

计划任务日志

/var/log/cron

系统引导日志

/var/log/dmesg

邮件系统日志

/var/log/maillog

用户登录日志

/var/log/lastlog
/var/log/secure
/var/log/wtmp
/var/run/btmp

①内核及公共消息日志:/var/log/messages记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。

②计划任务日志:/var/log/cron记录crond计划任务产生的事件信息。

③系统引导日志:/var/log/dmesg记录Linux系统在引导过程中的各种事件信息。

④邮件系统日志:/var/log/maillog: 记录进入或发出系统的电子邮件活动。

⑤用户登录日志:/var/log/secure 记录用户认证相关的安全事件信息;/var/log/lastlog记录每个用户最近的登录事件。二进制格式;/var/log/wtmp记录每个用户登录、注销及系统启动和停机事件(二进制格式);/var/run/btmp记录失败的、错误的登录尝试及验证事件(二进制格式)。

5、由系统服务rsyslog统一管理

①软件包: rsyslog-7.4.7-16.el7.x86_64

②主要程序:/sbin/rsyslogd

③配置文件:/etc/rsyslog.conf

[root@localhost ~]# vim /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

*.info:表示info等级及以,上的所有等级的信息都写到对应的日志文件里(info表示6级以上的所有的日志都会记录在/var/log/messages)

mail.none:表示某事件的信息不写到日志文件里( 这里比如是邮件)

6、日志消息的级别

级号

消息

级别

说明

0

EMERG

紧急

会导致主机系统不可用的情况

1

ALERT

警告

必须马上采取措施解决的问题

2

CRIT

严重

比较严重的情况

3

ERR

错误

运行出现错误

4

WARNING

提醒

可能影响系统功能,需要提醒用户的重要事件

5

NOTICE

注意

不会影响正常功能,但是需要注意的事件

6

INFO

信息

一般信息

7

DEBUG

调试

程序或系统调试信息等

7、日志记录的一般格式

more /var/log/messages或vim /var/log/messages(时间标签+主机名+子系统名称+消息字段)

①时间标签:消息发出的日期和时间。

②主机名:生成消息的计算机的名称。

③子系统名称:发出消息的应用程序的名称。

④消息字段:消息的具体内容。

8、用户日志分析

①保存了用户登录、退出系统等相关信息

/var/log/lastlog:最近的用户登录事件

/var/log/wtmp:用户登录、注销及系统开、关机事件

/var/run/utmp:当前登录的每个用户的详细信息

/var/log/secure:与用户验证相关的安全性事件

②分析工具

①users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。

②who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机。

③w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些。

④last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵。

⑤lastb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。

9、程序日志分析

①由相应的应用程序独立进行管理

Web服务:/var/log/httpd/

access_log、error_log

代理服务:/var/log/squid/

access.log、cache.log

FTP服务:/var/log/xferlog

注释:access_log (记录客户访问事件);error_log(记录错误事件)

②分析工具

文本查看、grep过滤检索、Webmin管理套件中查看

awk、sed等文本过滤、格式化编辑工具

Webalizer、Awstats等专用日志分析工具

10、日志管理策略

①及时作好备份和归档

②延长日志保存期限

③控制日志访问权限:日志中可能会包含各类敏感信息,如账户、口令等

④集中管理日志:将服务器的日志文件发到统一的日志文件服务器;便于日志信息的统一收集、整理和分析;杜绝日志信息的意外丢失、恶意篡改或删除。

总结

1、文件的数据存储在block中,连续八个扇区组成一个"块",一个块是4K大小,是文件存取的最小单位。

2、元信息存放到inode当中,每个inode都有一个号码,操作系统用inode号码来识别不同的文件,每个inode的大小,一般是128字节或256字节。

3、使用extundelete工具能够恢复误删除的文件;使用xfsdump工具只能备份XFS文件系统;备份后的数据只能让xfsrestore解析。

4、日志数据常见的三种类型是内核及公共消息日志计划任务日志系统引导日志邮件系统日志以及用户登录日志

5、日志消息的级别:0(紧急);1(警告);2(严重);3(错误);4(提醒);5(注意);6(信息);7(调试)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值