一.inode与block
1.1 block块
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode。 因此,一个文件必须占用一个inode,并且至少占用一个block。inode不包含文件名。文件名是存放在目录当中的。Linux 系统中一切皆文件,因此目录也是一种文件。
1.2 inode号
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
所以,当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。
1.2.1 查看文件名对应的inode 号码
两种方式
ls -i文件名
stat 文件名
inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据:另一个是inode区,存放inode所包含的信息。每个inode的大小,一般是128字节或256字节。
1.2.2 查看每个硬盘分区对应的inode总数
通常情况下不需要关注单个inode的大小,而是需要重点关注inode.总数。inode的总数在格式化时就给定了,执行"df-i"命令即可查看每个硬盘分区对应的inode总数和已经使用的inode数量。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘12.8%
由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。这时直接删除inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的inode 号码。
find ./ -inum 52305140 -exec rm -i {} \;
find ./ -inum 50464299 -delete
扩展
inode节点耗尽故障处理
#使用fdisk创建分区/dev/sdb1, 分区大小30M即可
fdisk /dev/sdb
mkfs.ext3 /dev/sdb1
mkdir /opt/test
mount /dev/sdb1 /opt/test
df -i
还可用inode号7669
#模拟inode节点耗尽故障
for ((i=1; i<=8000; i++)) ;do touch /opt/test/file$i;done 或 i=i+1 或i+=1
touch 1
df -i
df -hT
容量空间可用27M,然而创建不了文档
#删除文件恢复
rm -rf /opt/test/*
df -i
df -hT
二.恢复误删除的文件
2.1 EXT类型文件恢复
恢复误删除的文件ext3
extundelete 是一一个开源的Linux 数据恢复工具,支持ext3、 ext4文件系统。 ( ext4只能在centos6版本恢复)
#使用fdisk创建分区/dev/sdb1, 格式化ext3文件系统
fdisk /dev/sdb
partprobe /dev/sdb
#当你运行 partprobe /dev/sdb
时,你实际上是在告诉系统重新读取 /dev/sdb
这个磁盘的分区表。(重启也行)
mkfs.ext3 /dev/sdb1
mkdir /opt/test
mount /dev/sdb1 /opt/test
df -hT
#安装依赖包
yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++
#编译安装extundelete
cd /opt/test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
tar jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4/
./configure --prefix=/usr/1ocal/extundelete && make && make install 或
./configure && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/
#模拟删除并执行恢复操作
cd /opt/test
echo a>a
echo a>b
echo a>c
echo a>d
ls
extundelete /dev/sdc1 --inode 2 #查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。
rm -rf a b
extundelete /dev/sdc1 --inode 2
cd ~
umount /test
extundelete /dev/sdc1 --restore-all #恢复/dev/sdc1 文件系统下的所有内容
#在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件
ls RECOVERED FILES/
2.2 xfs类型文件备份和恢复
恢复误删除的文件XFS
CentOs 7系统默认采用xfs类型的文件,xfs类型的文件可使用xfsdump 与xfsrestore 工具进行备份恢复。
xfsdump 的备份级别有两种: 0表示完全备份; 1-9表示增量备份。xfsdump的备份级别默认为0。
xfsdump的命令格式为:
xfsdump |-f 备份存放位置要备份的路径或设备文件
xfsdump命令常用的选项:
-f: 指定备份文件目录
-L: 指定标签session label
-M: 指定设备标签media labe........ 。
-s:备份单个文件,-s后面不能直接跟路径
xfsdump使用限制:
1.只能备份已挂载的文件系统
2.必须使用root的权限才能操作
3.只能备份XFS文件系统
4.备份后的数据只能让xfsrestore解析
5.不能备份两个具有相同UUID的文件系统(可用blkid命令查看)
#使用fdisk创建分区/dev/sdb2,格式化xfs文件系统
fdisk /dev/sdb 或 partprobe /dev/sdb
mkfs.xfs /dev/sdb2 # mkfs.xfs [-f] /dev/sdb2
mkdir /data
mount /dev/sdb1 /data/
cd /data
cp /etc/passwd ./
mkdir test
touch test/a
#使用xfsdump命令备份整个分区
rpm -qa | grep xfsdump
yum install -y xfsdump
xfsdump -f /opt/dump_sdb2 /dev/sdb2 [-L dump_sdb2 -M sdb2]
或
xfsdump -f /opt/dump_sdb2 /dev/sdb2 -L dump_sdb2 -M sdb2
#模拟数据丢失并使用xfsrestore 命令恢复文件
cd /opt/data/
rm -rf ./*
ls
xfsrestore -f /opt/dump_sdb2 /opt/data/
增量备份
xfsdump -l 1 -f /opt/dump_sdb2_level_1 /dev/sdb2 -L dump_sdb2_level_1 -M sdb2
XFSdump的增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或修改的文件。
三.分析日志文件
内核及系统日志由系统服务rsyslog 统一管理,主配置文件为/etc/rsyslog.conf
Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/1og/下。
3.1常见的一些日志文件
3.1.1 内核及公共消息日志
/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。
对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
3.1.2 计划任务日志
/var/log/cron: 记录crond计划任务产生的事件信息。
3.1.3 系统引导日志:
/var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息。
3.1.4 邮件系统日志:
/var/log/maillog: 记录进入或发出系统的电子邮件活动。
3.1.5 用户登录日志
/var/log/secure: 记录用户认证相关的安全事件信息。
/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式
/var/1og/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式
/var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式
vim /etc/rsyslog.conf #查看rsyslog.conf配置文件
*.info;mail.none;authpriv.none;cron.none /var/1og/messages
*.info #表示info等级及以,上的所有等级的信息都写到对应的日志文件里
mail.none #表示某事件的信息不写到日志文件里( 这里比如是邮件)
Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要) :
0 EMERG(紧急):会导致主机系统不可用的情况。
1 ALERT(警告):必须马上采取措施解决的问题。
2 CRIT(严重):比较严重的情况。
3 ERR (错误) :运行出现错误。
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
5 NOTICE (注意) :不会影响正常功能,但是需要注意的事件。
6 INFO(信息):一般信息。
7 DEBUG(调试):程序或系统调试信息等。
公共日志/var/log/messages文件的记录格式
时间标签:消息发出的日期和时间。
主机名:生成消息的计算机的名称。
子系统名称:发出消息的应用程序的名称。
消息:消息的具体内容。
程序自己维护日志记录,httpd 网站服务程序使用两个日志文件:
access_log : #记录客户访问事件
error_log #记录错误事件。
3.2 详细日志分析命令
users:命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数
who:命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用户名、终端类型、登录日期及远程主机
w:命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的输出内容要丰富一些
last:命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前主机可能已被入侵
lastb:命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息
有哪些系统常见日志
/var/log/messages //系统主日志文件
[root@localhost ~]# cat /var/log/messages | wc -l
3784
tail -f或者tailf或tail -100查看
时间,主机名,服务,具体信息
/var/log/dmesg //开机后的内核自检信息,dmesg命令看的是一样的
/var/log/secure //涉及到登陆,验证之类的都会记录比如su
用户日志采用二进制格式,但可以用命令查看,避免认为修改内容,保证日志的有效性
/var/log/wtmp(last)
/var/log/btmp(lastb)
/var/log/lastlog(lastlog)所有账号的登录信息
还有一些服务的日志比如
/var/log/yum.log
/var/log/cron
也并不是所有安装的程序的日志都会在/var/log下,只有rpm包安装的才会,源码装的在自己指定的目录中
例如httpd,源码安装的日志目录在/usr/local/httpd/logs/
四.journalctl工具
journalctl工具是CentOS-7才有的工具
Systemd 统一管理所有 Unit 的启动日志。带来的好处就是 ,可以只用journalctl一个命令,查看所有日志(内核日志和 应用日志)。日志的配置文件/etc/systemd/journald.conf
ps -ef | grep journald
journalctl -b //查看本次启动的日志
journalctl -k //查看内核日志
[root@localhost log]# journalctl | wc -l //查看系统总共的日志
2787
journalctl -xe 经常用来查看最近报错的日志
-e:从结尾开始看
-x:提供问题相关的网址
注:日志工具可研究:Webmin、 Webalizer、Awstats等专用日志分析工具
五.日志文件的分析方法
熟悉了系统中的主要日志文件以后,下面将介绍针对日志文件的分析方法。分析日志文 件的目的在于通过浏览日志查找关键信息、对系统服务进行调试,以及判断发生故障的原因等。本小节主要介绍三类日志文件的基本格式和分析方法。
对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用 tail、more、less、cat等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志文件(如用户日志),则需要使用特定的查询命令。
1.内核及系统日志
内核及系统日志功能主要由默认安装的 rsyslog-7.4.7-16.el7.x86_64.rpm 软件包提供。rsyslog 服务所使用的配置文件为/etc/rsyslog.conf。通过查看/etc/rsyslog.conf 文件中的内容,可以了解到系统默认的日志设置
grep -v "^$" /etc/rsyslog.conf //过滤掉空行
2.日志消息的等级
0-7
rsyslog服务
ps -ef | grep rsyslogd //查看服务是否开启
vim /etc/rsyslog.conf //rsyslog服务配置文件
mail.* 代表比*等级高的都记录,*代表任何,也就是说任何日志都记录
.none 代表不记录日志
日志存放位置为*:所有日志高于疼痛这个等级就会对所有在线用户广播
.=代表只记录=后面级别的日志
.!代表除了!后面级别的日志不记录其他的都记录
存放路径之前有“-”代表先放入缓存足够大之后再存放在路径
也可以自定义日志
vim /etc/rsyslog.conf
加入一行内容
*.info /var/log/info.log
systemctl restart rsyslog //重启服务之后/var/log下面就生成了info.log了
六.日志文件放入日志文件服务器
rpm -ql rsyslog #查看模块
1.服务端配置
[root@localhost ~]#vim /etc/rsyslog.conf
编辑文件取消第19 20 行注释允许服务器使用TCP 514端口接收日志 ;
19 $ModLoad imtcp
20 $InputTCPServerRun 514
[root@localhost ~]#netstat -ntap |grep 514
查看514端口是否开启
[root@localhost ~]# systemctl restart rsyslog
重启rsyslog日志服务
2.客户端配置
[root@www1 ~]# vim /etc/rsyslog.conf
修改日志服务配置文件
90 *.* @@192.168.126.131:514
行数 所有 TCP 服务端IP 端口
#把所有日志采用TCP协议发送到192.168.10.13的514端口上 ;
#两个@ 代表使用 tcp 一个代表udp
[root@localhost ~]# systemctl restart rsyslog
重启rsyslog日志服务
3.测试方法
1、测试客户机上新建用户
[root@localhost ~]# useradd liqi
#服务器端查看
[root@localhost ~]# vim /var/log/secure
2、测试客户机上写日志进去
[root@localhost ~]#logger "this is test log from 192.168.126.131"
#服务器端查看
[root@localhost ~]# vim /var/log/messages
七.日志轮替logrotate
日志轮替(log rotate)在IT行业中,特别是在系统管理中,指的是一个自动化的归档过期日志文件的过程。当服务器上运行的大型软件(如LAMP等)产生大量的日志时,日志轮替提供了一个有效的方法来限制日志文件的大小,同时保留近期的日志用于分析。
logrotate
可以对单个日志文件或者某个目录下的文件按时间、大小进行切割、压缩操作,指定日志保存数量,还可以在切割之后运行自定义命令。它通常基于crontab
运行,按照计划的频率(通常是每天)执行,以节省空间和方便整理。
rpm/yum和源码都可以使用,rpm/yum直接轮替,不需要额外设置,根据配置文件的设置执行
/etc/logrotate.conf
dateext参数
weekly 每周一次轮替daily每日,monthly每月
轮替4次
create 新建新日志
dateext 按日期改名,否则会自动改名为file.1、file.2等等
minsize 一定达到这个值才轮替,否则就算时间到了也不轮替
size 只有到达这个值才轮替,跟时间无关
其他日志比如yum都放在include路径里了
把自己的日志加入轮替
1、编辑配置文件/etc/logrotate.conf(管理不方便)
2、编辑成文件放到/etc/logrotate.d目录下
vim /etc/logrotate.conf
/var/log/mine.log {
weekly
rotate 5
create
}
logrotate -fv /etc/logrotate.conf //强制执行轮替,但是目录下的都会轮替,-v查看
-d, --debug
: 进入调试模式,显示将会做什么但不真正执行日志轮替。-f, --force
: 强制轮替日志文件,即使它们没有超过大小限制或时间限制。-m, --mail command
: 发送邮件给指定的命令,而不是默认的mail
命令。通常用于发送日志文件的副本给管理员。-s, --state statefile
: 使用指定的状态文件而不是默认的状态文件(通常是/var/lib/logrotate/status
)。-v, --verbose
: 显示详细的输出信息。-l, --log STRING
: 写入日志信息到指定的文件或标准错误(stderr)之外的地方。--version
: 显示logrotate
的版本信息。-?, --help
: 显示帮助信息并退出。--usage
: 显示简短的用法信息并退出。
改过配置文件之后必须先把服务重启再把lograte重启
-
Allocating hash table for state file, size 15360 B
这表示logrotate
正在为一个状态文件(通常是用于跟踪哪些日志文件已经被轮替过的)分配一个哈希表,并指定了其大小为15360字节。状态文件通常包含了关于哪些日志文件已经被处理过(即轮替或压缩)的信息。 -
Handling 1 logs
这告诉你有1个日志文件正在被logrotate
处理。 -
rotating pattern: /var/log/zabbix/zabbix_agent2.log weekly (12 rotations)
这定义了轮替的模式。具体来说,/var/log/zabbix/zabbix_agent2.log
这个日志文件将被每周轮替一次,并且会保留最近的12个备份文件。 -
empty log files are not rotated, old logs are removed
这表示如果日志文件是空的,它不会被轮替。另外,旧的日志文件(超过12个备份的)会被删除。 -
considering log /var/log/zabbix/zabbix_agent2.log
logrotate
正在考虑是否需要轮替/var/log/zabbix/zabbix_agent2.log
这个日志文件。 -
log does not need rotating (log has been already rotated)
这表示logrotate
已经确定该日志文件不需要被轮替,因为它已经被轮替过了(可能是在最近的一次logrotate
执行中)。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 文件系统与日志分析
发表评论 取消回复