文件系统和日志管理
一. 文件系统
- 1. 存储文件的方式
- 1.1 实际数据
- 1.2 元信息
- 1.2.1 inode
- 1.2.2 查看inode号
- 1.2.3 inode号和文件名分离
- 1.2.4 inode号耗尽的情况
- 1.3 工作环境
- 1.4 文件的备份和恢复
- 1.4.1 ext4
- 1.4.2 xfs
- 1.4.3 xfsdump的常用选项
- 1.4.4 备份
- 1.4.5 恢复
- 1.4.6 xfs备份恢复注意点
- 1.5 文件查看流程
- 二. 日志管理
- 2.1 常见的系统日志文件
- 2.2 优先级
- 2.3 收集邮件的信息
- 2.4 设备的字段
- 2.5 系统日志
- 2.6 应用日志
- 2.7 journalctl
- 2.7.1 查看指定用户的日志
- 三. 练习
文件系统提供了一个接口,用户用来访问硬件设备(硬盘)
硬件设备上对文件的管理
文件存储在硬盘上,硬盘最小的存储单位是512字节一扇区
文件在硬盘上的最小存储单位:块 block一个块的大小是4k,一个块就是连续的8个扇区
1. 存储文件的方式
实际数据和元信息
1.1 实际数据
文件内部的数据保存在硬盘上
1.2 元信息
文件的所有者,所在组,最后一次修改时间,文件的大小,文件的权限存储元信息的标识:inode号
1.2.1 inode
不包含文件名,每个文件(目录)创建都会分配一个全局(当前设备)唯一的识别码。
识别码inode,当一个文件被删除之后,inode号也会回收,供下一个文件继续使用。
系统都是识别文件的inode号
一个文件必须有一个inode号,至少占一个块
1.2.2 查看inode号
ls -i
stat 文件名
root@du:/opt# stat backup
文件:backup
大小:22728 块:48 IO 块大小:4096 普通文件
设备:803h/2051d Inode:2359298 硬链接:1
权限:(0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
访问时间:2024-11-07 11:39:09.692492375 +0800
修改时间:2024-11-07 11:36:39.377775368 +0800
变更时间:2024-11-07 11:36:39.377775368 +0800
创建时间:2024-11-07 11:35:43.955012178 +0800
-
访问时间:2024-11-07 11:39:09.692492375 +0800
atime accesstime:当用户读这个文件,更新这个时间 -
修改时间:2024-11-07 11:36:39.377775368 +0800
mtime modify time:更新数据大小和权限时,会修改这个时 -
间变更时间:2024-11-07 11:36:39.377775368 +0800
ctime status time:只当修改权限和属性时,会发生变化。
inode号用尽了,文件无法再创建了,查看一个文件系统可用的inode号
df -i #查看挂载点inode号使用的情况
root@du:/opt# df -i
文件系统 Inodes 已用I 可用I 已用I% 挂载点
tmpfs 495174 1117 494057 1% /run
/dev/sda3 3899392 238080 3661312 7% /
tmpfs 495174 1 495173 1% /dev/shm
tmpfs 495174 5 495169 1% /run/lock
/dev/sda2 0 0 0 - /boot/efi
tmpfs 99034 90 98944 1% /run/user/128
tmpfs 99034 66 98968 1% /run/user/0
/dev/sdb1 2621440 3 2621437 1% /data1
/dev/sdb2 2620928 5 2620923 1% /data2
inode号:硬盘的空间越大,可用的inode号越多
1.2.3 inode号和文件名分离
linux操作系统会出现以下几个现象:
- 文件包含特殊字符可能无法正常删除(rm -rf),只能通过inode号进行删除
- 剪切或者重命名文件,inode号不会发生变化
- 当我们对文件进行操作时,系统以inode号来识别,不以文件名
- 文件的数据发生变化,文件的权限发生变化,inode号也会发生变化
1.2.4 inode号耗尽的情况
- ext4
用完了inode号,ext4文件不能在创建文件 - xfs
inode号用尽,xfs还可以创建文件 70-80个 200-400个
1.3 工作环境
- dey:开发环境 开发人员专用
- sit:测试环境 测试人员以及运维人员使用的环境
- pre:预生产环境 sit和pre环境与生产环境是同步的 开发 测试 运维
- prd:生产环境 对外提供访问的环境
1.4 文件的备份和恢复
1.4.1 ext4
有概率失败
1.4.2 xfs
实现备份和恢复:(apt -y install xfsdump #安装依赖环境)
- xfsdump 备份
- xfsrestore 恢复
xfsdump恢复有两个级别:0 1-9
0:表示完全备份
1-9:增量备份(不用)
xfsdump默认级别就是0,全量备份
1.4.3 xfsdump的常用选项
-f 指定备份文件目录
-L 指定标签
-M 指定设备标签
-s 备份单个文件(一般不使用)
1.4.4 备份
xfsdump -f /opt/backup /dey/sdb2 [-L backup -M sdb2]
-f /opt/backup backup是一个文件,而且必须是空文件,否则备份会失败,而且不能是目录
/dev/sdb2 备份的设备
-L 备份文件的标签
-M 备份设备的标签
把/dev/sdb2里面的所有文件备份到/opt/backup的文件当中。备份的是二进制代码,通过代码恢复inode号
1.4.5 恢复
xfsrestore -f /opt/backup /data2
-f 指定从哪个备份文件进行恢复
1.4.6 xfs备份恢复注意点
- 只有root权限才能备份和恢复
- 备份的目录必须是已挂载的设备
- 挂载的设备必须是xfs文件系统
- 恢复数据必须使用xfsrestore进行解析
- 两个设备的UUID相同不能备份
1.5 文件查看流程
- 获取文件的inode
- 找到文件在磁盘当中的位置
- 根据元信息查询这个用户的权限
- 由权限才能对文件进行指定的操作
- 更新数据:文件内容进行了修改inode号有可能发生变化。
- 如果权限发生变化,inode一定会变
二. 日志管理
日志:记录系统或者是应用运行期间“所有信息”的文档。记录了一些必要信息,关键的信息。
信息的意义:
- 判断系统或者程序是否正常
- 记录了故障的信息,告诉我们是什么原因产生的故障。
系统日志:
- /var/log/syslog (ubuntu)
- /var/log/messages (centos)
服务日志:
- 一般的应用安装完整之后,/var/log/服务的名称
- 自定义位置,修改应用的配置文件,可以自定义服务的日志路径
- 日志的位置就在应用的安装目录 logs目录
基本上90%的应用日志的目录都是logs。
都是以.log为结尾的文件
2.1 常见的系统日志文件
- /var/log/syslog:记录了linux系统的内核消息以及各种应用的公共日志信息(系统控制产生的消息)包括启动,IO错误,网络错误,程序的故障等等。
- 服务自己的日志:记录的就是使用这个程序过程中产生的信息,不会记录到系统的日志中
- 系统日志:基本操作系统控制,产生的日志信息
- /var/log/cron:记录的时定时任务产生的信息
- /var/log/secure:用户登录系统认证的相关信息
- /var/log/maillog:记录的是电子邮件的信息
2.2 优先级
数字越小,优先级越高,消息越重要(0-7)
- 0 EMERG 紧急,系统/应用不可用,系统崩溃,服务崩溃的重要信息。
- 1 ALERT 警告,必须马上采取措施的信息,磁盘快满了,数据库被破坏
- 2 CRIT 严重,程序的功能丧失,程序无法正常访问
- 3 ERROR 错误,运行出现了错误,需要尽快修复(看情况)
- 4 warning 提醒可能影响,但是不重要,只是提醒用户。不属于报错的范围
- 5 NOTIC 注意 不影响正常功能,但是需要注意的时间,无需处理
- 6 INFO 信息 一般信息,正常运行的信息。
- 7 DEBUG 调试 开发人员调试程序时产生的
none 没有优先级,不记录任何消息日志
以上的优先级,可以用户自定义日志的级别,已获取我们想要的内容。
2.3 收集邮件的信息
*.*
左边:应用名称
右边:日志级别
Mail.info #收集邮件的信息,包含 info 以及 info 以上级别的信息
Mail.info /var/log/mail.log 收集邮件的信息,包含 info 以及 info 以上级别的信息
Mail.=info /var/log/mail.log 收集邮件的信息,只收集 info级别的信息
Mail.!info 除了 info 级别的信息,其他的都收集
*.info /var/log/syslog 表示所有的程序
Mail. *表示所有级别的日志都收集
*.info;mail.none;nginx.=error
/var/log/syslog
所有的程序的一般及一般以上和邮件的日志不记录和nginx只记录error的日志 保存到 /var/log/syslog。
2.4 设备的字段
auth 用户认证的日志
systemd 系统管理程序的日志
cron 定时任务的信息
user 用户进程信息
mail 邮件信息
kern 系统内核的信息
local 自定义服务,我们可以自己定义我们需要保存的日志 0-7都可以使用。对应的程序设置的local等级要一致
2.5 系统日志
Nov 7 13:54:33 test1 systemd[1]: Failed to start A high performance web server and a reverse proxy server.
- Nov 7 13:54:33 #日志产生的时间
- test1 #主机名
- systemd[1]: #systemd就是设备字段,[1]运行的pid号,systemd这个程序是系统当中的第一个进程,systemd是所有进程的父进程。
- Failed to start A high performance web server and a reverse proxy server. #日志的内容
2.6 应用日志
192.168.233.1 – [07/NOV/2024:13:52:58 +0800]“GET /123 HTTP/1.1” 404 197 “”“Mozila/5.0 (windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36”
- 192.168.233.1 #谁访问了nginx的服务
- [07/NoV/2024:13:52:58 +0800] #访问nginx的时间
- 'GET /123 HTTP/1.1"
#GET 访问nginx的方式
#/123 访问的内容
#http/1.1:访问使用协议 - 404 #当对方请求之后,nginx给客户端的响应码,告诉用户访问的结果是成功还是失败
- “Mozila/5.0 (windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36” #记录客户端访问nginx的方式。
2.7 journalctl
日志管理工具:只能查看系统日志
- journalctl -u 应用名称 #
- journalctl _PID=? 进程的pid号
2.7.1 查看指定用户的日志
journalctl _UID=0 --since today #指定用户今天的日志
journalctl _UID=0 --since yesterday #指定用户昨天产生的日志
journalctl -xe #查看系统中systemd的错误的日志
三. 练习
ssh服务单独存放
root@du:/# cd /opt
root@du:/opt# vim /etc/rsyslog.conf
脚本 :set nu #显示层数
local6.* /var/log/ssh.log (50层)
root@du:/opt# vim /etc/ssh/sshd_config
脚本 SyslogFacility LOCAL6 (27层)
root@du:/opt# systemctl restart rsyslog.service
root@du:/opt# systemctl restart sshd
#只要修改了应用的配置,要想生效,必须重启该应用
root@du:~# ssh root@192.168.246.7 #另一个虚拟机远程连接
root@du:/var/log# tail -f ssh.log
Nov 7 15:59:03 du sshd[2854]: Server listening on 0.0.0.0 port 22.
Nov 7 15:59:03 du sshd[2854]: Server listening on :: port 22.
Nov 7 16:01:20 du sshd[2854]: Received signal 15; terminating.
Nov 7 16:01:21 du sshd[2868]: Server listening on 0.0.0.0 port 22.
Nov 7 16:01:21 du sshd[2868]: Server listening on :: port 22.
Nov 7 16:07:39 du sshd[2879]: Failed password for root from 192.168.246.8 port 40486 ssh2
^Z
[5]+ 已停止 tail -f ssh.log
root@du:/var/log# tail -f syslog
Nov 7 16:01:16 du rsyslogd: [origin software="rsyslogd" swVersion="8.2112.0" x-pid="2860" x-info="https://www.rsyslog.com"] start
Nov 7 16:01:20 du systemd[1]: Stopping OpenBSD Secure Shell server...
Nov 7 16:01:20 du sshd[2854]: Received signal 15; terminating.
Nov 7 16:01:20 du systemd[1]: ssh.service: Deactivated successfully.
Nov 7 16:01:20 du systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 7 16:01:20 du systemd[1]: Starting OpenBSD Secure Shell server...
Nov 7 16:01:21 du sshd[2868]: Server listening on 0.0.0.0 port 22.
Nov 7 16:01:21 du sshd[2868]: Server listening on :: port 22.
Nov 7 16:01:21 du systemd[1]: Started OpenBSD Secure Shell server.
Nov 7 16:07:39 du sshd[2879]: Failed password for root from 192.168.246.8 port 40486 ssh2
^Z
[6]+ 已停止 tail -f syslog