文件系统和日志管理
文件系统:文件系统提供了一个接口,用户用来访问硬件设备(硬盘、光驱)------------- 在硬件设备上对文件的管理
-
1、文件存储在硬盘上(机械硬盘:一个扇区
-
2、文件中硬盘上的最小存储单位:块 ------- block ------- 一个块的大小是4k ------- 一个块就是连续的8个扇区
存储文件的方式:
实际数据和元信息
↓
- 实际数据:文件内部的数据保存在硬盘上
- 元信息:文件的所有者,所在组,最后一次修改时间,文件的大小,文件的权限
存储元信息的标识:inode号
inode号:不包含文件名,每个文件(目录)创建时都会分配一个全局(当前设备)--------- 标识可以一样
-
/dev/sdb1 /data1 ------ 2
-
/dev/sdc1 /data2 ------ 2
-
当一个文件被删除之后,inode号也会回收,供下一个文件继续使用
系统都是识别文件的inode号 -------------> 一个文件必须有一个inode号,至少占用一个块
一个客户端在linux系统中创建一个test1.txt且内容为123的文件,那么硬盘就会保存所创建文件的inode号元信息和实际数据,另一个客户端则可通过硬盘:
- 1、获取文件的inode
- 2、找到文件中磁盘当中的位置
- 3、根据元信息查询这个用户的权限
- 4、有权限才能对文件进行指定的操作
- 5、更新数据 ---- 文件内容进行了修改,inode号有可能发生变化
- 6、如果权限发生变化,inode号一定会变
查看inode号的命令:
- ls -i
- stat + 文件名(目录)
访问时间:atime ----- accesstime,当用户读这个文件时就会更新时间
修改时间:mtime ----- modify time:更新数据大小和权限时,会修改这个时间、
变更时间:ctime ----- status time:修改权限和属性时,会发生变化
inode号用尽了,文件就无法再创建了,怎么查看一个文件系统可用的inode号?
↓↓↓
df -i:查看挂载点inode号使用的情况(用了多少,还剩多少)
- inode号:硬盘的空间越大,可用的inode号就越多
工作当中涉及的环境:
1、dev:开发环境
2、sit:测试环境 -------- 测试人员以及运维人员使用的环境
3、pre:预生产环境 -------- sit和pre环境,与生产环境是同步的,开发、测试、运维都可以使用
4、prd:生产环境 --------- 对外提供访问的环境
inode号和文件名分离,使得linux操作系统会出现以下几个现象:
- 文件包含特殊字符可能无法正常删除(rm -rf),只能通过inode号进行删除
- 剪切或者重命名文件,inode号不会发生变化
- 当我们对文件进行操作时,系统以inode号来识别,不以文件名识别
- 文件的数据发生变化,文件的权限发生变化,inode号也会发生变化(写入数据越多,就有可能变化)
模拟inode号耗尽的情况:
- ext4:用完了inode号,ext4系统不能再创建文件
- xfs:inode号用尽,xfs还可以创建文件70 ~ 80个,200个 ~ 400个
文件的备份和恢复
ext4和xfs:
ext4 :有概率无法恢复
★★★★★xfs实现备份和恢复:
- xfsdump ----- 备份
- xfsrestore ----- 恢复
xfsdump恢复有两个级别:0 、1~9
↓
0:表示完全备份
1~9:增量备份(不用)
xfsdump默认级别就是0,全备份
★★★★★xfsdump的常用选项:
- -f:指定备份文件目录
- -L:指定标签
- -M:指定设备标签
- -s:备份单个数据(一般不使用)
xfsdump -f /opt/backup /dev/sdb2[-L back up -M sdb2]
↓
- -f /opt/backup :backup是一个文件,而且必须是空文件,否则备份会失败,而且不能是目录
- /dev/sdb2 备份的设备
- -L:备份文件的标签
- -M:备份设备的表
- 把/dev/sdb2里面的所有文件备份到/opt/backup的文件当中,备份的是二进制代码,通过代码恢复inode号
xfsrestore -f /opt/backup /data2
↓
- -f:指定从哪个备份文件进行恢复
xfs备份恢复注意点:
1、只有root权限才能备份和恢复
2、备份的目录必须是已挂载的设备
3、挂载的设备必须是xfs文件系统
4、恢复数据必须使用xfsrestore进行解析
5、两个设备的UUID相同不能备份
总结:inode号的机制:元信息、耗尽后ext4不可再创建,xfs可以
xfs
xfsdump备份
xfsrestore恢复
日志系统:
日志:记录系统或者是应用运行期间所有信息的文档,记录了一些必要的信息(关键的信息)
信息的意义:
1、判断系统或者程序是否正常
2、记录了故障的信息,告诉我们是什么原因产生的故障
一般来说,系统的日志:
/var/log/syslog ---------- ubuntu
/var/log/messages ---------- centos
服务日志:
- 1、一般的应用安装完成之后,/var/log/服务的名称/
- 2、自定义位置,修改应用的配置文件,可以自定义服务的日志路径
- 3、日志的位置就在应用的安装目录 logs目录
基本上90%的应用日志的目录都是logs
都是以.log为结尾的文件
常见的系统日志文件:
-
cd /var/log/
-
/var/log/syslog:记录了linux系统的内核消息以及各种应用的公共日志信息(由系统控制产生的消息),包括启动,IO错误,网络错误,程序的故障等等
服务自己的日志:记录的就是使用这个程序过程中产生的信息,不会记录到系统的日志中
系统日志:基于操作系统控制,产生的日志信息
/var/log/cron:记录定时任务产生的日志信息
/var/log/secue:用户登录系统认证的相关信息
/var/log/millog:记录的是电子邮件的信息
linux日志的级别:
-
0-7:
数字越小,优先级越高,消息越重要 -
0 :EMERG:最高级别,紧急,系统/应用不可用,系统崩溃,服务崩溃的重要信息
-
1:ALERT:警告,必须马上采取措施的信息,磁盘快满了,数据库被破坏
-
2:CRIT:严重,程序的功能丧失,程序无法正常访问
-
3:ERROR:错误,运行出现了错误,需要尽快修复(看情况)
-
4 :warning:提醒,可能有影响,但是不重要,只是提醒用户
-
5:NOTICE:注意,不影响正常功能,但是需要注意
的事件,无需处理 -
6:INFO:信息,一般信息,正常运行的信息
-
7:DEBUG:调试,开发人员调试程序时产生的信息
-
none:没有优先级,不记录任何消息日志
↑
↑
以上的优先级,可以用户自定义日志的级别,以获取我们想要的内容
* . *
左边:应用名称
右边:日志级别
-
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:*所有的程序的info以及info级别以上都收集
-
Mail.*:mail的所有级别的日志都收集
*. info;mail.none;nginx=error /var/log/syslog:
所有程序的一般及一般以上和邮件的日志不记录和nginx只记录error的日志 保存到/var/log/syslog
设备的字段:
auth:用户认证的日志
systemd:系统管理程序的日志
cron:定时任务的信息
user:用户进程的信息
mail:邮件信息
kern:系统内核的信息
local:自定义服务,我们可以自己定义我们需要保存的日志 0~7 都可以使用,对应的程序设置的local等级要一致
- 日志产生的时间 ---------- 主机名 ----------- systemd[1](systemd就是设备字段,[1]运行的pid号,systemd这个程序是系统当中的第一个进程,systemd是所有进程的父进程)---------日志的内容
-
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给客户端的响应码,nginx给客户端的响应码,告诉用户访问的结果是成功还是失败
实验:
1、ssh服务单独存放
rsyslog:linux系统管理系统日志的工具
cd /opt
vim /etc/rsyslog.conf
set nu
49行 ------- local6.* /var/log/ssh.log
vim /etc/ssh/sshd_config
28/29行 ------- SyslogFacility LOCAL6
只要修改了应用的配置文件,要想生效,必须重启该应用
systemctl restart rsyslog.service
systemctl restart sshd
cd /var/log
ssh root@192.168…
- journalctl日志管理器:查看系统日志,应用日志不在管理范围之内
↓
journalctl -u 应用名称:只看某个应用
journalctl_PID=? 进程的pid号:根据pid号查看
- 查看指定用户的日志:
journalctl_UID=0 --since today (指定用户今天的日志)
journaltcl_UID=0 --since yesterday (指定用户昨天的日志)
journalctl -xe
查看系统中systemd的错误日志