文件系统与日志分析

241 阅读10分钟

inode 与 block

Inode(索引节点):

每个文件和目录在Linux文件系统中都有一个对应的inode。Inode是存储文件元数据(如文件类型、权限、所有者等)的数据结构。它包含了文件的大小、创建时间、修改时间、访问时间以及指向文件数据所在block的指针等信息。通过inode,系统可以快速定位、管理和访问文件的元数据和数据内容。每个文件系统都有一定数量的inode,文件和目录在创建时将使用其中一个可用的inode。

 

Block(块):

Block是文件系统中存储数据的最小单位。文件数据被分割成多个固定大小的块,并分布在硬盘上的不同位置。当文件被读取或写入时,系统会根据文件的inode中的指针信息来定位并读取相应的块。块的大小可以根据文件系统的不同而有所变化,常见的块大小为4KB或8KB。连续的八个扇区组成一个block,是文件存取的最小单位

inode是文件的索引节点,存储文件的元数据,而block是文件的数据存储单元,存储文件的实际内容。

 

文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。

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

当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找自己文件夹中的目录项,之后找到对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。

 

inode表中记录对应文件的元信息:

inode number 节点号

文件类型

文件的读、写、执行权限

文件属主的UID

文件属组的GID

链接数(指向这个文件名路径名称个数)

该文件的大小和不同的时间戳

指向磁盘上文件的数据块指针

有关文件的其他数据

目录

目录是个特殊文件,目录文件的内容保存了此目录中文件的列表,以及inode number对应关系。

 

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。

每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

一个目录是目录下的文件名和文件inode号之间的映射。

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。

Linux系统内部不使用文件名,而使用inode号码来识别文件。

对于用户,文件名只是Inode号码便于识别的别称。

 

一般indoe表会占用文件系统磁盘空间的1%大小  

image.png

Linux中主要文件时间属性:

atime(access time):最近访问

最后一次访问文件的时间

mtime(modify):最近更改

最后一次更改文件内容的时间

ctime(change time):最近改动

最后一次改变文件元信息的时间

 

不打开文件的话,atime不变。例如使用echo追加内容,atime不会变,因为文件没有被打开访问。

修改文件内容的话,mtime会变,ctime也会变。

如果只修改文件的权限,ctime变,mtime不变。

指令 与 indoe 与 删除无法释放空间

cp 命令:

分配一个空闲的inode号,在inode表中生成新条目

在目录中创建一个目录项,将名称与inode编号关联

拷贝数据生成新的文件

 

rm 命令:

硬链接数递减,从而释放的inode号可以被重用

把数据块放在空闲列表中

删除目录项

数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖

 

mv命令:

如果mv命令的目标和源在同一设备,

不影响inode表(除时间戳)或磁盘上的数据位置;

系统会删除旧的目录对应关系,新建目录对应关系。

 

 

若删除文件但无法释放空间 可能是该文件正在运行中 结束进程即可释放


日志

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

可通过阅读日志,诊断和解决系统故障  

日志重要级别

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)

       一般日志级别信息存储在 /var/log/syslog 文件中  可通过 tail less grep 查看信息

0    EMERG(紧急)       会导致主机系统不可用的情况

1    ALERT(警告)        必须马上采取措施解决的问题

2    CRIT(严重)          比较严重的情况

3    ERR(错误)           运行出现错误

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

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

6    INFO(信息)           一般信息

7    DEBUG(调试) 程序或系统调试信息等

主要日志

日志类型

系统日志(syslog):系统日志是记录系统级别的活动和事件的日志。它由syslog守护程序处理,并按照不同的优先级(如错误、警告、信息)进行分类。系统日志一般存储在/var/log目录下,常见的系统日志文件包括messages、syslog和kern.log。

身份验证日志(auth.log):身份验证日志记录与系统登录、身份验证和授权相关的活动。它包括登录成功、失败的记录、su命令的使用、sudo命令的使用等。身份验证日志一般位于/var/log目录下的auth.log文件。

内核日志(kern.log):内核日志记录与内核相关的事件,如内核启动信息、硬件错误、设备驱动程序消息等。内核日志一般存储在/var/log目录下的kern.log文件。

安全日志(secure):安全日志记录与系统安全相关的事件,如用户登录、sudo活动、权限更改、安全策略违规等。安全日志一般位于/var/log目录下的secure或auth.log文件。

服务日志:各种服务(如Web服务器、数据库服务器等)也会生成特定的日志,用于记录服务的活动、访问请求、错误等。这些日志一般存储在服务的配置文件中指定的位置。

启动日志(boot.log):启动日志记录系统启动期间的信息,包括启动过程中的硬件检测、加载驱动程序、启动服务等。启动日志位于/var/log目录下的boot.log文件。

 

 

主要文件 与 目录位置:

内核及公共消息日志

/var/log/ messages

它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,以及用户自定义安装软件的日志,也会在这里列出

 

身份验证日志

/var/log/ auth.log

记录与系统登录、身份验证和授权相关的活动

 

计划任务日志

/var/log/ cron

记录与系统定时任务相关的曰志

 

系统引导日志

/var/log/ dmesg

记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息

邮件系统日志

/var/log/ maillog

记录邮件信息的曰志

 

用户登录日志

/var/log/ lastlog

记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看

 

/var/log/ secure

记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

 

/var/log/ wtmp

永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看

 

/var/log/ btmp

记录无效登录尝试的信息,包括登录失败的用户名、时间、尝试的来源等。

 

/var/tun/ ulmp

记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看

日志记录的一般格式:

事件产生的时间

产生事件的服务器的主机名

产生事件的服务名或程序名

事件的具体信息

 

日志可以确保有效、安全和可持续地管理和利用日志信息,以满足业务需求、故障排除、安全审计和合规性要求等。因此非常重要,需要做好备份等工作。

 

 

管理策略:

  1. 及时做好备份和归档

  2. 控制日志访问权限

    日志中可能会包含各类敏感信息,如账户、口令等。

  3. 集中管理日志

    将服务器的日志文件发到统一的日志文件服务器

    便于日志信息的统一收集、整理和分析

    确保日志信息安全 类如:意外丢失、恶意篡改或删除等

 


rsyslog 日志管理系统

rsyslog 相关文件

程序包:rsyslog

主程序:/usr/sbin/rsyslogd

CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}

CentOS 7,8:/usr/lib/systemd/system/rsyslog.service

配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf

库文件: /lib64/rsyslog/*.so

 

/etc/rsyslog.conf 配置文件的管理模块

global块:用于设置全局配置选项,如DefaultNetstreamDriver、DefaultNetstreamDriverCAFile等。

module指令:用于加载模块。可以通过load参数指定要加载的模块,如imuxsock(Unix socket输入模块)和imklog(内核日志输入模块)。

ruleset块:用于定义特定规则集。每个规则集可以包含多个规则和规则语句,用于处理不同的日志来源和执行特定的过滤和操作。

规则语句:用于定义日志来源、过滤条件和操作。可以使用通配符、条件判断、正则表达式等来匹配和筛选日志。常见的规则语句包括input(指定日志来源)、if(条件判断)、filter(过滤器)和action(操作)等。

template指令:用于定义日志存储的格式和模板。可以使用预定义的模板(如RSYSLOG_TraditionalFileFormat)或自定义模板。

规则行:用于指定将日志发送到特定位置或进行特定处理的规则。可以指定日志级别和要存储或转发到的目标文件、远程服务器等。

默认规则行:如果没有其他规则匹配时,将应用于所有未处理的日志。通常用于将日志存储到默认的系统日志文件中。

其他配置选项:/etc/rsyslog.conf文件中还可以包含其他配置选项,如 Permissions, PrivDropToUser、PrivDropToGroup等,用于进一步配置rsyslog的行为和限制。