深入理解linux文件系统与日志分析

深入理解linux文件系统与日志分析

linux文件系统:

文件是存储在硬盘上的,硬盘上的最小存储单位是扇区,每个扇区的大小是512字节。

inode:元信息(文件的属性 权限,创建者,创建日期等等)

block:块,连续的八个扇区组成一个块,一个块的大小是4k,创建一个文件,最小也要占4k。

操作系统读取硬盘,是一次性读取多个扇区,一个块一个块的读取数据。

创建文件:第一个是实际空间大小的要占,第二个就是元信息。元信息和实际数据都保存在硬盘上。元信息(inode)占128字节或者256字节。

一个文件必须占用一个inode(只要创建文件必须有一个inode号)

至少占用一个block(空文件,也要一个块。)

时间戳:

atime:只要读取文件就会更新这个时间

mtime:修改文件数据,更改文件的属性,都会更新这个时间

ctime:修改文件的权限也会更新这个时间。

inode的内容:

inode号:linux系统都是识别文件的inode号

元信息发生了变化,inode号也会随之改变

inode号的总数?

磁盘大小 磁盘越大inode号越多,磁盘越小inode号越少。

inode号和文件名分离,二者只是映射关系,linux系统的特有现象:

1、文件名包含特殊字符,rm可能无法正常删除,可以直接删除inode号

2、移动文件,重命名,inode是不变的

3、一旦开始对文件操作,后续所有的认证和识别都是通过inode来的,不再考虑文件名

4、元信息发生变化,inode也会发生变化

实验:

1、exit4

2、xfs 要有结论 20M 模拟把inode号耗尽,看看还能不能继续写入?能写入的话,能写入多少呢?

可以继续写入,第一次能多写61个,第二次能行134个

如果inode号满了,exit4和xfs之间有什么区别?

exit4不能继续创建文件了,但xfs还可以继续创建文件

xfs文件系统,如何能够实现备份和恢复?

centos7默认使用的文件系统就是xfs。

xfsdump 备份

xfsrestore 恢复

xfsdump 命令的选项:

-f 指定需要备份的硬盘分区(硬件设备的挂载点也可以)

-L 指定标签

-M 指定设备标签

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

xfsdump使用限制:

1、只能备份xfs文件系统

2、只能备份已经挂载的文件系统

3、只有root权限才能进行操作

4、备份之后的数据要恢复,只能使用xfsrestore解析恢复

5、如果两个设备的uuid相同,不能备份(这种情况几乎不会有)

备份完之后,恢复文件,inode号是否会发生变化?

[root@localhost ~]# xfsdump -f /opt/backup /dev/sdb2 [-L backup -M sdb2]

-f 执行文件

/opt/backup 必须是个文件,必须是个不存在的文件。不能是目录。如果已经存在,必须是个空文件。

/dev/sdb2 设备

[-L 文件标签(备份文件的标签)]

[-M 设备标签(要备份的硬盘分区)]

备份的级别:全量备份和增量备份

0也是默认 也就是全量备份

1-9是增量备份,一般不用

xfsrestore -f /opt/backup /data1/

前一个是备份的问价

后一个是恢复到指定的目录。

具体操作:

[root@localhost opt]# xfsdump -f /opt/backup /dev/sdb3 [-L backup -M sdb3]              #将data3目录下的内容进行备份
[root@localhost opt]# cd /data3         #进入data3目录下
[root@localhost data3]# ls              #查看现有的文件
123.txt  qwe.txt
[root@localhost data3]# ls -i           #查看现有文件的inode号
68 123.txt  69 qwe.txt
[root@localhost data3]# rm -rf *        #删除现有文件
[root@localhost /]# xfsrestore -f /opt/backup /data3/       #将文件恢复
[root@localhost /]# cd /data3
[root@localhost data3]# ls              #被删的文件恢复了
123.txt  qwe.txt
[root@localhost data3]# ls -i           #inode号改变了
74 123.txt  75 qwe.txt
​

EXT类型备份和恢复:

ext4只能在centos6

ext3格式:需要extundelete进行恢复

日志分析:

系统的日志类型以及日志如何分析

linux系统本身的日志和大部分的服务器程序的日志都在/var/log/

/var/log/massages 记录了linux的内核消息,各种应用程序的公共日志消息。

应用程序公共日志:开、关、重启、网络错误、程序故障这些都属于公共日志。

访问日志和一些自由业务日志不包含其中。

/var/log/cron: 记录的是定时任务的日志

/var/log/dmesg: 引导过程中的日志信息

/var/log/maillog: 记录进入或者发出的系统电子邮件信息

/var/log/secure: 用户认证的相关消息

linux的日志级别:

日志消息的级别:数字越小,优先级越高,消息越重要。

级号消息级别说明
0EMERG紧急会导致主机系统不可用,系统崩溃。磁盘满了(EMERG)
1ALERT警告必须要马上采取措施解决的问题,密码到期,数据库崩溃。
2CRIT严重比较严重的情况,磁盘读写出了故障,有些程序的功能无法启动。
3ERR error错误运行出现错误,程序启动失败,端口被占用等等,见的最多的情况,出现了也是要尽快解决的。
4WARNING提醒可能会影响功能,需要提醒用户的重要事件,但是不是报错。磁盘使用率到了85%。
5NOTICE注意也是需要用户注意的,无需处理。
6INFO信息一般信息,系统或者应用程序在工作中产生的正常消息
7DEBUG调试程序在开发阶段,调试程序时的信息。
NONE没有优先级,不记录任何日志信息

日志级别怎么定义:

*.info *:表示所有,表示系统当中的设备,或者程序。

info:包含info以及info级别以上的日志。

auth 用户认证产生的体制

authpriv: SSh,FTP登录验证的信息

news: 网络传输产生的消息

syslog:系统的相关日志

kern:系统的内核日志

user:用户进程日志

local-local7:自定义程序的日志

uucp:unix-to-unix copy 两个linux系统之间的通信

mail.info /var/log/mail.log:记录邮件的信息,包含info和info以上的,记录到/var/log/mail.log

mail.=info /var/log/mail.log: 只记录日志级别是info的

mail.!info /var/log/mail.log: 除了info的不记录,其他的都记

May 31 13:46:02 test1 systemd: Starting The Apache HTTp Server...

May 31 13:46:02:表示当前日志发生的时间

test1:表示发生的主机名

systemd:哪个系统产生了这个日志

Starting The Apache HTTp Server...:日志的具体内容

第一个实验:

ssh的日志单独的列出来,作为一个独立的日志文件。

1、关闭防火墙和安全机制

[root@test2 opt]# systemctl stop firewalld
[root@test2 opt]# setenforce 0

2、打开系统管理日志

[root@test2 opt]# vim /etc/rsyslog.conf 
73 local7.*                                                /var/log/boot.log
74 local6.*                                                /var/log/ssh.log     #在74行加一个自定义的日志

3、配置sshd_config文件

[root@test2 etc]# vim /etc/ssh/sshd_config          #进入sshd_config文件内
 32 #SyslogFacility AUTHPRIV                            #将32行注释掉
 33 SyslogFacility LOCAL6                               #将ssh日志保存到我们之前自定义的日志中去

4、将两个服务重启一下

[root@test2 etc]# systemctl restart rsyslog.service 
[root@test2 etc]# systemctl restart sshd

5、打开ssh.log的日志

[root@test2 log]# tail -f ssh.log 
May 31 16:11:03 localhost sshd[15025]: Server listening on 0.0.0.0 port 22.
May 31 16:11:03 localhost sshd[15025]: Server listening on :: port 22.
May 31 16:11:47 localhost sshd[15037]: Accepted password for root from 192.168.60.1 port 49991 ssh2

6、用另一个主机test3访问主机test2

[root@test3 ~]# ssh root@192.168.60.20
The authenticity of host '192.168.60.20 (192.168.60.20)' can't be established.
ECDSA key fingerprint is SHA256:exDKRdJYt8I/epk5vy8tx4NIWpdeTgKktVBWDTq1jmU.
ECDSA key fingerprint is MD5:ae:80:df:32:41:cb:64:3b:6c:ad:1d:92:e1:77:40:04.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.60.20' (ECDSA) to the list of known hosts.
root@192.168.60.20's password: 
Last login: Fri May 31 16:18:20 2024

7、主机test2显示test3访问test2的ssh日志

[root@test2 log]# tail -f ssh.log
May 31 16:11:03 localhost sshd[15025]: Server listening on 0.0.0.0 port 22.
May 31 16:11:03 localhost sshd[15025]: Server listening on :: port 22.
May 31 16:11:47 localhost sshd[15037]: Accepted password for root from 192.168.60.1 port 49991 ssh2
May 31 16:15:54 localhost sshd[15130]: Accepted password for root from 192.168.60.30 port 44106 ssh2

第二个实验:

配置一个日志服务器,来进行日志收集。

test2 192.168.60.20 日志收集服务器

test3 192.168.60.30 20上面产生的日志,都会发到20上,30自己不再记录日志

操作:

1、在主机test3里更改rsyslog.conf文件

[root@test3 ~]# vim /etc/rsyslog.conf 
 19 $ModLoad imtcp                  #将19行和20行的注释去掉
 20 $InputTCPServerRun 514
 54 #*.info;mail.none;authpriv.none;cron.none                /var/log/messages          #将54行注释
 55 *.info;mail.none;authpriv.none;cron.none               @@192.168.60.20          #加一个55行,将test3的系统日志放到test2内的系统日志

2、在主机test2里更改rsyslog.conf文件

[root@test3 ~]# vim /etc/rsyslog.conf 
 19 $ModLoad imtcp                  #将19行和20行的注释去掉
 20 $InputTCPServerRun 514

3、在test3里重启一下rsyslog.service文件

[root@test3 ~]# systemctl restart rsyslog.service           #重启rsyslog.service文件
[root@test3 ~]# netstat -antp | grep 514
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      16771/rsyslogd      
tcp6       0      0 :::514                  :::*                    LISTEN      16771/rsyslogd      

4、在test2里重启一下rsyslog.service文件

[root@test2 log]# systemctl restart rsyslog.service             #重启rsyslog.service文件

5、在test2里打开系统日志

[root@test2 log]# tail -f /var/log/messages
May 31 16:50:01 localhost systemd: Started Session 60 of user root.
May 31 17:00:01 localhost systemd: Started Session 61 of user root.
May 31 17:01:01 localhost systemd: Started Session 62 of user root.
May 31 17:10:01 localhost systemd: Started Session 63 of user root.
May 31 17:10:54 test2 systemd: Stopping System Logging Service...
May 31 17:10:54 test2 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="14958" x-info="http://www.rsyslog.com"] exiting on signal 15.
May 31 17:10:54 test2 systemd: Stopped System Logging Service.
May 31 17:10:54 test2 systemd: Starting System Logging Service...
May 31 17:10:54 test2 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-34.el7" x-pid="16198" x-info="http://www.rsyslog.com"] start
May 31 17:10:54 test2 systemd: Started System Logging Service.

6、在test3里模拟一下

[root@test3 ~]# logger "this is xy102"

7、在test2的系统日志里显示

[root@test2 log]# tail -f /var/log/messages
May 31 17:14:07 test2 systemd-logind: Removed session 56.
May 31 17:15:02 test3 root: this is xy102

8、在test3的系统日志里不显示

[root@test3 ~]# tail -f /var/log/messages
May 31 17:07:05 localhost systemd: [/usr/lib/systemd/system/firstboot-graphical.service:14] Support for option SysVStartPriority= has been removed and it is ignored

@@192.168.233.10

@@表示tcp协议进行数据传输

@表示使用UDP协议进行传输

LISTEN:监听,端口是否开启。端口是否正常传输数据

ESTABLISHED:表示端口之间已经建立连接而且正在传输数据。

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值