Linux文件系统与日志分析

一、文件与存储系统的inode与block

1.1、硬盘存储

  • 最小存储单位:扇区(sector)
    • 每个扇区大小:512字节

1.2、文件存取

  • 最小存取单位:块(block)
  • 连续八个扇区组成:块(block)
    • 每个块大小:4K
  • 文件数据:实际数据与元信息
  • 操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
  • 文件数据包括实际数据元信息(类似文件属性),文件数据存储在“块"中

1.3、inode

  • 定义:存储文件元信息的区域
  • 包含:创建者、创建日期、文件大小、文件权限等的区域
  • 特点:
    • 一个文件必须占用一个inode
    • 格式化文件系统时确定inode的总数
    • 至少占用一个block
    • 不包含文件名,文件名是存放在目录当中的。

元信息包括

  • 文件的字节数
  • 文件拥有者的userid
  • 文件的groupid
  • 文件的读,写,执行权限
  • 文件的时间戳

1.4、文件名与inode

  • 文件名存放位置:目录
  • 译名为"索引节点",也叫i节点
  • inode号码:操作系统识别文件的唯一标识,一个文件必须占用一个inode,并且至少占用一个block。
  • 每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux系统内部不使用文件名,而使用inode号码来识别文件。
  • 访问文件流程:
  1. 根据文件名查找inode号码
  2. 通过inode号码获取inode信息
  3. 检查用户权限
  4. 指向数据block并读取数据

1.4.1、硬盘分区后的结构

文件夹的indoe号中包括当前文件夹中文件名字文件的indoe号
先确定文件夹后再通过indoe找到block,如果一个block放不下数据,则可以占用多个block.
例如,有一个10kb的文件需要存储,
则会占用3个block(默认一个是4k),虽然最后一个block不能占满,
但也不能再放入其他文件的数据。
这3个block 有可能是连续的,也有可能是分散的,所以会有磁盘碎片。

1.4.2、访问文件的简单流程

1.5、Linux系统特点

  • 一切皆文件
  • 目录也是一种文件

1.6、查看文件名对应的inode 号码有两种方式

  • ls -i  文件名
  • stat  文件名

很显然stat看的更详细一些

1.7、linux系统文件三个主要的时间属性

  • ctime(change time)

最后一次改变文件或目录 (属性)的时间

  • atime(access time)

最后一次访问文件或目录的时间

  • mtime(modify time)

最后一次修改文件或目录(内容)的时间

1.8、inode 占用

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

一个是数据区,存放文件数据,

另一个是inode区,存放inode所包含的信息。

每个inode的大小,一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数。inode的总数在格式化时就给定了,执行"df   -i"命令即可查看每个硬盘分区对应的的inode总数和已经使用的inode数量。

inode节点的总数,在格式化时就给定了,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘12.8%。

由于inode号码与文件名分离,导致Linux系统具备以下几种特有的现象:
1.文件名包含特殊字符,可能无法正常删除。可直接删除inode,能够起到删除文件的作用;
2.移动文件或重命名文件,只是改变文件名,不影响inode 号码;
3.打开一个文件以后,系统就以inode 号码来识别这个文件,不再考虑文件名。
4.文件数据被修改保存后,会生成一个新的inode 号码。

 1.8.1、实验1

先创建大量空文件

for ((i=1; i<=8680; i++)); do  
    touch /test/file$i  
done

 或者

touch {1..8680}.txt 

i占用满

 但是磁盘空间还有

当再创建其他的的时候

二、硬链接与软链接

为文件或目录建立链接文件
链接文件分类
硬链接

ln  源文件目标位置

 软链接

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

 详细内容看精讲第八段内容

云计算【第一阶段(12)】Linux常用命令精讲【二】_云计算怎么把目录改名-CSDN博客

三、恢复误删除的文件

3.1、恢复误删除的文件ext3

EXT类型文件恢复
extundelete 是一一个开源的Linux 数据恢复工具,支持ext3、 ext4文件系统。 ( ext4只能在centos6版本恢复,但是目前企业用centos6版本极少,略过)

3.1.1、实验1

安装位置:切勿将extundelete安装到你误删的文件所在硬盘上,以避免数据被覆盖的风险

需要挂载一个ext3的盘

1.安装依赖包
yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++ 
2.编译安装extundelete
cd /test
wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

3.解压
tar jxvf extundelete-0.2.4.tar.bz2

4.切换目录

cd extundelete-0.2.4/

5.指定configure的配置路径 --prefix
./configure --prefix=/usr/local/extundelete && make && make install 或
./configure && make && make install

6.如果配置了指定的上面路径需要软链接
ln -s /usr/local/extundelete/bin/* /usr/bin/

模拟删除并执行恢复操作

cd /opt/yczj

切换到挂载点磁盘

添加数据
echo a>a
echo a>b
echo a>c

extundelete /dev/sdb2 --inode  2  #查看文件系统/dev/sdb2下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。

rm -rf a b
extundelete /dev/sdb2  --inode 2

可以发现被删除了


cd ~
umount /test

extundelete /dev/sdc1 --restore-all #恢复/dev/sdc1 文件系统下的所有内容

#在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件



ls RECOVERED FILES/

3.2、恢复误删除的文件XFS

xfsdump用于创建xfs文件系统的备份,而xfsrestore则用于将这些备份数据恢复到原始状态或指定位置,搭配使用。

xfsdump命令格式

xfsdump    -f    备份存放位置           要备份的路径或设备文件

xfsdump备份级别 (默认为0)

  • 0:完全备份
  • 1-9:增量备份

xfsdump常用选项:-f,-L,-M,-s

-f: 指定备份文件目录
-L: 指定标签session label
-M: 指定设备标签media labe
-s:备份单个文件,-s后面不能直接跟路径

xfsrestore命令格式

xfsrestore   恢复文件的位置      存放恢复后文件的位置

xfsdump使用限制

  • 只能备份已挂载的文件系统
  • 必须使用root的权限才能操作
  • 只能备份xfs文件系统
  • 备份后的数据只能让xfsrestore解析
  • 不能备份两个具有相同uuid的文件系统

实验

首先创建分区,格式化xfs,挂载

在挂载的地方创建一个文件

先查看rpm -qa | grep xfsdump如果未安装yum install -y xfsdump

备份

xfsdump -f      /opt/dump_sdb    /dev/sdb1       

可以加   -L dump_sdb -M sdb1

模拟删除,在挂载目录删除

恢复

xfsrestore  -f   /opt/dump_sdb1  /opt/ycnh

四、分析日志文件

4.1、日志的功能

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

4.2、日志文件的分类

  • 内核及系统日志

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

  • 用户日志

记录系统用户登录及退出系统的相关信息

  • 程序日志

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


4.3、日志保存位置

默认位于: /var/log/目录下
主要日志文件介绍

  • 内核及公共消息日志 /var/log/messages
  • 计划任务日志 /var/log/cron
  • 系统引导日志 /var/log/dmesg
  • 邮件系统日志 /var/log/maillog
  • 用户登录日志 /var/log/lastlog  /var/log/secure  /var/log/wtmp  /var/run/btmp

4.3.1、常见的一些日志文件介绍:

/var/log/messages: 记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
/var/log/cron: 记录crond计划任务产生的事件信息。
/var/log/dmesg: 记录Linux系统在引导过程中的各种事件信息。
/var/log/maillog: 记录进入或发出系统的电子邮件活动。
/var/log/secure: 记录用户认证相关的安全事件信息。
/var/log/lastlog: 记录每个用户最近的登录事件。二进制格式
/var/1og/wtmp: 记录每个用户登录、注销及系统启动和停机事件。二进制格式
/var/run/btmp: 记录失败的、错误的登录尝试及验证事件。二进制格式

4.4、rsyslog

内核及系统日志由系统服务rsyslog 统一管理,主配置文件为/etc/rsyslog.conf
Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/1og/下。
软件包:rsyslog-7.4.7-16.el7.x86_64
主要程序:/sbin/rsyslogd
配置文件:/etc/rsyslog.conf

4.5、日志消息的级别

日志级别级号消息级别说明
EMERG0紧急会导致主机系统不可用的情况
ALERT1警告必须马上采取措施解决的问题
CRIT2严重比较严重的情况
ERR3错误运行出现错误
WARNING4提醒可能会影响系统功能的事件
NOTICE5注意不会影响系统但值得注意的信息
INFO6信息一般信息,程序或系统调试信息等
DEBUG7调试详细的调试信息,用于开发或故障排除

4.6、日志记录的一般格式

4.7、用户日志分析

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

  • /var/log/lastlog: 最近的用户登录事件
  • /var/log/wtmp: 用户登录,注销及系统开,关机事件
  • /var/run/utmp: 当前登录的每个用户的详细信息
  • /var/log/secure 与用户验证相关的安全性事件

分析工具
users,who,w, last, lastb

4.7.1、分析工具详细分析命令

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


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

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

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

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

4.8、程序日志分析

由相应的应用程序独立进行管理
web服务:/var/log/httpd/
access_log,error_log
代理服务:/var/log/squid/
access.log,cache.log
FTP服务:/var/log/xferlog


分析工具
文本查看,grep过滤检索, webmin管理套件中查看
awk, sed等文本过滤,格式化编辑工具
webalizer  Awstats等专用日志分析工具

4.9、日志管理策略

  • 及时作好备份和归档
  • 延长日志保存期限
  • 控制日志访问权限

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

  • 集中管理日志

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

4.10、日志管理工具

4.10.1、Logrotate

(轮转,日志切割)       centos7  自带的一个

概念

Logrotate是一个在Linux系统中广泛使用的日志文件管理工具,主要用于日志文件的切割、压缩、删除和创建新日志文件等操作,以节省磁盘空间并方便日志管理

作用

1.如果没有日志轮转,日文件会越来越大
2.将丢弃系统中最旧的日志文件,以节省空间
3.logrotate本身不是系统守护进程,它是通过计划任务crond每天执行计划任务

Logrotate的常用参数

  • -v, --verbose:显示详细的转储过程信息。
  • -f, --force:强制进行日志转储,忽略配置文件中设置的时间间隔或大小限制。
  • -d, --debug:测试配置文件是否有错误,但不实际执行转储操作。
  • -m, --mail=command:压缩日志后,通过指定的命令发送日志到指定邮箱。
  • -s, --state=statefile:使用指定的状态文件记录转储的日志信息。

Logrotate的定时执行

  • Logrotate通常通过cron服务定时执行。在Linux系统中,/etc/cron.daily/logrotate 脚本负责每天执行一次Logrotate。
  • 用户也可以根据需要手动执行Logrotate,例如使用logrotate -vf /etc/logrotate.conf 命令强制立即执行一次转储操作。


配置

- 计划任务:/etc/cron.daily/logrotate
- 程序文件:/usr/sbin/logrotate
- 配置文件: /etc/logrotate.conf
- 日志文件:/var/lib/logrotate/logrotate.status

也可以在这里配置系统特定日志

以下是一个简单的Logrotate配置示例,用于切割和压缩/var/log/myapp.log日志文件:

/var/log/myapp.log { 
daily # 每天切割一次 
rotate 7 # 保留7个备份 
compress # 压缩备份文件 
missingok # 如果日志文件丢失,不报错继续滚动下一个日志 
notifempty # 如果日志文件为空,不进行轮转 
create 640 myuser mygroup # 切割后创建新文件,并设置权限和所有者 
}

 更多独立配置文件详解

配置参数说明
compress使用gzip压缩转储后的日志文件
nocompress不对转储后的日志文件进行压缩
copytruncate对于还在被打开中的日志文件,先备份当前日志并截断原文件
nocopytruncate备份日志文件但不截断原文件
create mode owner group使用指定的权限、所有者和所属组创建新的日志文件
nocreate不创建新的日志文件(仅保留备份)
delaycompress与compress一起使用时,延迟到下一次转储时才压缩当前转储的日志文件
nodelaycompress覆盖delaycompress选项,转储时立即压缩日志文件
errors address将转储时的错误信息发送到指定的Email地址
ifempty即使是空文件也进行转储(默认行为)
notifempty如果文件为空,则不进行转储
mail address将转储的日志文件发送到指定的E-mail地址
nomail转储时不发送日志文件到任何E-mail地址
olddir directory将转储后的日志文件放入指定的目录(需与当前日志文件在同一文件系统)
noolddir转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript在转储之前需要执行的命令(prerotate与endscript需单独成行)
postrotate/endscript在转储之后需要执行的命令(postrotate与endscript需单独成行)
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
rotate count指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
tabooext [+] listlogrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig.rpmsavev, 和~
size size当日志文件到达指定的大小时才转储(单位可以是bytes、KB或MB)
sharedscripts对每个匹配的日志文件条目,prerotatepostrotate脚本只运行一次,无论匹配了多少个日志文件
nosharedscripts对每个转储的日志文件,都执行一次prerotatepostrotate脚本(默认行为)
missingok如果日志不存在,不提示错误,继续处理下一个日志文件
nomissingok如果日志不存在,提示错误(默认行为)

4.10.2、webalizer日志分析工具

webalizer是一个高效的、免费的web服务器日志分析程序。其分析结果以HTML文件格式保存,从而可以很方便的通过web服务器进行浏览。Internet上的很多站点都使用webalizer进行web​​​​​​​服务器日志分析。

Webalizer是用C写的程序,所以其具有很高的运行效率。在主频为200Mhz的机器上,webalizer每秒钟可以分析10000条记录,所以分析一个40M大小的日志文件只需要15秒。

webalizer支持标准的一般日志文件格式(Common Logfile Format);除此之外,也支持几种组合日志格式(Combined Logfile Format)的变种,从而可以统计客户情况以及客户操作系统类型。并且现在webalizer已经可以支持wu-ftpd xferlog日志格式以及squid日志文件格式了。webalizer支持命令行配置以及配置文件。可以支持多种语言,也可以自己进行本地化工作。webalizer支持多种平台,比如UNIX、linux、NT, OS/2 和 MacOS等。

软件:httpd 作为webalizer的页面服务器

4.10.3、journalctl命令

journalctl工具是CentOS-7才有的工具
Systemd 统一管理所有 Unit 的启动日志。带来的好处就是 ,可以只用journalctl一个命令,查看所有日志(内核日志和 应用日志)。日志的配置文件/etc/systemd/journald.conf 


ps -ef | grep journald


journalctl -b    //查看本次启动的日志

journalctl -k     //查看内核日志

journalctl -xe  经常用来查看最近报错的日志
-e:从结尾开始看
-x:提供问题相关的网址

其他

日志工具可研究:Webmin、 Webalizer、Awstats等专用日志分析工具

  • 34
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值