当前位置: 首页 > news >正文

深入理解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 51454 #*.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:表示端口之间已经建立连接而且正在传输数据。

相关文章:

  • 智能化改造的关键点
  • 不是我愿意孤独,而是周围找不到同类
  • 大模型之路,从菜鸟到模型大师只需要一步
  • 初出茅庐的小李博客之使用立创开发板(ESP32)连接到EMQX Platform【MQTT TLS/SSL 端口连接】
  • 如何构建最小堆?
  • 爬虫学习--18.反爬斗争 selenium(3)
  • Inno Setup磁盘跨越必须启用,因为程序大于21000000000
  • 解析Java中1000个常用类:Error类,你学会了吗?
  • 考CCIE的难点在哪?英语不好?
  • 等保系列之——网络安全等级保护测评工作流程及工作内容
  • 解决 git 命令 Problem with the SSL CA cert (path? access rights?)
  • 反射、类加载、静态代理,jdk动态代理,cglib代理
  • java8 stream流的用法
  • 命令模式(行为型)
  • spring分析工具_springboot startup analyze的部署和使用
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 《剑指offer》分解让复杂问题更简单
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • Fastjson的基本使用方法大全
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • in typeof instanceof ===这些运算符有什么作用
  • IP路由与转发
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • rc-form之最单纯情况
  • Vue.js 移动端适配之 vw 解决方案
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 反思总结然后整装待发
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 老板让我十分钟上手nx-admin
  • 利用jquery编写加法运算验证码
  • 悄悄地说一个bug
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 探索 JS 中的模块化
  • 系统认识JavaScript正则表达式
  • 新手搭建网站的主要流程
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # 达梦数据库知识点
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #在 README.md 中生成项目目录结构
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (八)Flink Join 连接
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (三)终结任务
  • (十一)手动添加用户和文件的特殊权限
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)jQuery 基础
  • (转)甲方乙方——赵民谈找工作
  • ****Linux下Mysql的安装和配置
  • .Net 路由处理厉害了
  • .NET序列化 serializable,反序列化
  • [Android] Binder 里的 Service 和 Interface 分别是什么
  • [APUE]进程关系(下)
  • [C++] 从零实现一个ping服务