日志 内核及系统日志由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下
Inode和block
文件是存储在硬盘上的,硬盘的最小存储单位叫做"扇区”,每个扇区存储512字节。
- block(块):一般连续八个扇区组成一个"块",一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
- inode:每个文件都有一个inode号码,操作系统用inode号码来识别不同的文件。inode不包含文件名。
文件数据包括实际数据与元信息。文件数据存储在block中,文件元信息存在inode中。而文件名是存放在目录当中的。 因此,一个文件必须占用一个inode,并且至少占用一个block。
Linux系统中一切皆文件,因此目录也是一种文件。
Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码使于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
访问文件过程
- 用户在Linux系统中试图访问一个文件
- 系统会先根据文件名去查找它对应的inode号码
- 通过inode号码,获取inode信息
- 根据inode信息,看该用户是否具有访问这个文件的权限
- 如果有权限,就指向相对应的数据block,并读取数据;如果没有权限,拒绝访问
查看inode号的方法
- ls -i命令:查看文件名对应的inode号码
ls -i 文件名
- stat命令:查看文件inode信息中的inode号码
stat 文件名
Linux系统文件三个主要的时间属性
- atime(access time):最后一次访问文件或目录的时间
- mtime(modify time):最后一次修改文件或目录内容的时间
- ctime(change time):最后一次改变文件或目录属性的时间
inode号数量有限
每个文件系统(分区)中inode号数量是有限的,可使用df -i查看。
tips:inode号也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区,存放inode所包含的信息。
inode号被占满
-
建立一个新的分区
-
创建足够多的文件将inode号占满
-
inode号已经被占满
-
此时无法再在该分区创建文件
Linux系统中特殊现象
由于inode号码与文件名分离,Linux系统有以下几种特有现象:
- 文件名包含特殊字符,可能无法正常删除。这时根据inode删除,能够起到删除文件的作用
- 移动文件或重命名文件,只是改变文件名,不影响inode号码
- 打开一个文件以后,系统就以inode号码来识别这个文件,不再考虑文件名
- 使用vi编辑器修改文件数据保存后,会生成一个新的inode号码
文件名包含特殊字符,无法正常删除文件
如果rm 文件名删除不了文件,可通过inode号删除文件(通过find查找删除)。
文件名包含特殊符号,不好删除
vi编辑器修改文件数据生成一个新的inode号码的原因
原因:在编辑文件时,会有一个.文件名.swp的隐藏文件,当保存退出后,该文件会替代原文件。
- 创建一个新的文件
- vim编辑该文件,发现该目录下多了个.123.swp的文件
- 保存退出,发现文件123的inode号改变
- 发现.123.swp的文件已经消失
恢复EXT类型文件
操作前的准备:(ext4只能在centos6中,实验用ext3)
编译安装extundelete软件包
-
安装依赖包
- e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm
- e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm
-
配置、编译及安装
- extundelete-0.2.4.tar.bz2
模拟删除并执行恢复操作
- 安装依赖包
- 建立新分区,格式化,挂载
- 编译安装
- 如果出现下图所示问题,那是因为gcc组件不完整,执行安装。 执行yum install gcc gcc-c++即可
- 建立extundelete软链接
- 建立几个新文件
- 查看文件系统/dev/sdb2下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录
- 删除文件
- 发现有文件被删除,先解挂载,以免后面写入的数据覆盖
- 输入该文件恢复命令,发现当前目录多了RECOVERED_FILES,这里面包含被恢复的文件,数据也还在文件内
xfs类型文件备份和恢复
CentOS 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump与xfsrestore工具进行备份恢复。
xfsdump的备份级别有两种:0表示完全备份;1-9表示增量备份。xfsdump的备份级别默认为0。
- 完全备份:指备份你所指定的所有文件,不管它以前有没有备份过
- 增量备份:指只备份新增加的文件或者内容发生变化的文件
xfsdump 的命令格式为:xfsdump -f 备份存放位置 要备份文件的路径或设备
xfsdump命令常用的选项
选项 | 作用 |
---|---|
-f | 指定备份文件目录 |
-L | 指定标签session label |
-M | 指定设备标签media label |
-s | 备份单个文件,-s 后面不能直接跟路径 |
xfsdump使用限制
- 只能备份己挂载的文件系统
- 必须使用root的权限才能操作
- 只能备份XFS文件系统
- 备份后的数据只能让xfsrestore解析
- 不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
备份过程
- 创建分区,格式化,建立文件系统,挂载
- 复制文件和创建目录及文件
- 开始备份操作
- 完成操作
- 删除分区中所有目录和文件
- 进行恢复操作
- 回到被删文件的分区,发现数据已复原
备份操作的选项
用了标签可直接完成操作,不用交互。
选项 | 作用 |
---|---|
-L | 指定标签 |
-M | 指定备份的设备标签 |
日志文件
日志的作用
日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的日记”。(用于记录系统、程序运行中发生的各种事件)
日志文件对于诊断和解决系统中的间题很有帮助。通过阅读日志,有助于诊断和解决系统故障日志文件的分类,系统一旦出现问题时及时分析日志就会有据可寻。
日志文件的分类
-
内核及系统日志:
- 由系统服务rsyslog统一进行管理,日志格式基本相似
- 主配置文件/etc/rsyslog.conf
-
用户日志:记录系统用户登录及退出系统的相关信息
-
程序日志:由各种应用程序独立管理的日志文件,记录格式不统一
日志的保存位置及主要日志文件
默认保存位置:/var/log
主要日志文件 | 位置 | 记录信息 |
---|---|---|
内核及公共消息日志 | ./var/log/messages | 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等 |
计划任务日志 | ./var/log/cron | 记录crond计划任务产生的事件信息 |
系统引导日志 | ./var/log/dmesg | 记录Linux系统在引导过程中的各种事件信息 |
邮件系统日志 | ./var/log/maillog | 记录进入或发出系统的电子邮件活动 |
用户登录日志 | ./var/log/lastlog | 记录用户认证相关的安全事件信息 |
内核及系统日志
系统由rsyslog所定的规则,将日志写到对应文件,规则在rsyslog.conf配置文件中。
查看rsyslog.conf配置文件
规则配置格式:[设备.级别 动作]
设备字段说明
设备字段 | 作用 |
---|---|
auth | 用户认证时产生的日志 |
authpriv | ssh、ftp等登录信息的验证信息 |
daemon | 一些守护进程产生的日志 |
ftp | FTP产生的日志 |
lpr | 打印相关活动 |
mark | rsyslog服务内部的信息,时间标识 |
news | 网络新闻传输协议(nntp)产生的消息 |
syslog | 系统日志 |
uucp | Unix-to-Unix copy两个unix之间的相关通信 |
console | 针对系统控制台的消息 |
cron | 系统执行定时任务产生的日志 |
kern | 系统内核日志 |
local0~local7 | 自定义程序使用 |
邮件日志 | |
user | 用户进程 |
Linux系统内核日志消息的优先级别
数字等级越小,优先级越高,消息越重要
数字等级 | 英文标识 | 作用 |
---|---|---|
0 | emerg(紧急) | 会导致主机系统不可用的情况。如系统崩溃 |
1 | alert(警告) | 必须马上采取措施解决的问题。如数据库被破坏 |
2 | crit(严重) | 比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能 |
3 | err(错误) | 运行出现错误。不是非常紧急,尽快修复的 |
4 | warning(提醒) | 可能影响系统功能,需要提醒用户的重要事件。不是错误,如磁盘用了85%等 |
5 | notice(注意) | 不会影响正常功能,但是需要注意的事件 |
6 | info(信息) | 一般信息 |
7 | debug(调试) | 程序或系统调试信息等 |
none | 没有优先级,不记录任何日志消息 |
例子解释:
- “mail.info /var/log/maillog”比指定级别更高的日志级别,包括指定级别自身,保存到/var/log/maillog中
- “mai1.-info /var/log/maillog”明确指定日志级别为info,保存至/var/log/maillog
- “mail.!info /var/1og/maillog”除了指定的日志级别(info)所有日志级别信息,保存至/var/log/maillog
- “* .info /var/log/maillog”所有facility的info级别,保存至/var/log/maillog
- “mail.* /var/log/maillog”mail的所有日志级别信息,都保存至/var/loq/maillog
- “mail.notice;news.info /var/log/maillog”mail的notice以上记得日志级别和news的info以上的级别保存至/vax/1og/maillog
- “mail,news.crit -/var/log/maillog”mail和news的crit以上的日志级别保存/var/log/maillog中;"-"代表异步模式
日志记录的一般格式
用户登录日志
保存了用户登录、退出系统等相关信息
- /var/log/secure:与用户验证相关的安全性事件
- /var/log/lastlog:最近的用户登录事件
- /var/log/wtmp:用户登录、注销及系统开、关机事件
- /var/run/utmp:当前登录的每个用户的详细信息
分析工具
- users、who、w、last、lastb
- last命令用于查询成功登录到系统的用户记录
- lastb命令用于查询登录失败的用户记录
程序日志
由相应的应用程序独立进行管理
Web服务:/var/log/httpd/
- 记录客户访问事件:access_log
- 记录错误事件:error_log
日志管理策略
-
及时作好备份和归档
-
延长日志保存期限
-
控制日志访问权限
- 日志中可能会包含各类敏感信息,如账户、口令等
-
集中管理日志
-
将服务器的日志文件发到统一的日志文件服务器
-
便于日志信息的统一收集、整理和分析
-
杜绝日志信息的意外丢失、恶意篡改或删除
-