inode和block
linux两种存储机制
linux的存储有两种机制:inode号、block(实际存储的大小)
1、文件会生成一个inode号 (一般inode号占用的空间为512k左右(一个扇区的大小)/128字节-256字节)
2、文件必然会占用存储空间 block块最小为4k,如果文件大小不满4k也要占一个block块
即一个文件必须占有一个inode号,创建的文件不满4k也要占一个block块
inode号相关概述
- inode号:元信息(相当于文件的属性)
- 存储的元信息:文件的创建者、更改日期、文件的大小、文件的权限等,根据inode号为标识存储在硬盘
- inode号若是用尽,即使磁盘还有空间也无法创建数据
- df -i查看inode号使用情况
- 为什么一定要有inode号? linux一切皆文件,目录也是文件
- linux内部如何识别文件:识别的是inode号,即系统通过inode号来识别文件
- 对于系统来说,文件名只是inode号的别称,是为了方便用户使用。文件名和inode号一一对应在文件的元信息当中不包含文件名
例:向pup文件中写内容:
pup——通过inode号寻找——到硬盘上打开此文件——检索此文件的元信息,查看用户是否有权限访问文件以及是否有写的权限——写入数据123——保存文件(检索元信息,用户是否能在当前目录写入。更改元信息,此时文件的inode号会发生变化)
stat 文件名:可以查询文件的详细信息
atime:访问这个文件就会改变此时间
mtime:修改文件数据内容
ctime:修改文件的权限或者属性,更改文件内容也可能会变
文件名和inode号剥离之后:(特点)
1、文件名包含特殊字符,可能无法正常删除。这时可以通过inode号,直接找到数据所在块,直接删除
2、移动、重命名不影响inode号
3、一旦打开文件之后,系统全部以inode号来识别文件,此时文件名不再考虑
4、vim编辑器修改文件内容之后,可能会生成一个新的inode号
5、文件名不在元信息当中
根据inode号删除文件:
实验
xfs文件系统模拟inode号用尽的情况
vm创建新磁盘
创建分区:
格式化:
创建data并挂载:
查看可用inode号并模拟inode号用尽:
发现还是可以继续创建文件:
文件恢复
xfs文件系统进行备份和恢复
centos7默认使用xfs文件系统
xfsdump的备份是有级别的,0表示全量;1-9表示增量备份
xfsdump的命令格式和选项:
-f:指定备份文件的目录,xfsdump -f 备份文件的存放位置 要备份的路径和设备 [指定标签]
-L:指定设备标签
-l:指定备份级别
-M:指定标签
-s:备份单个文件 -s后面不能直接跟路径
xfsdump使用限制
1、只能恢复已挂载的文件系统设备
2、只能备份xfs文件系统
3、必须要有root权限
4、数据恢复只能通过xfsrestore解析,进行恢复
5、若两个设备的UUID相同,则无法进行备份
数据备份与恢复命令
数据要先备份,才能恢复
xfsdump:备份磁盘数据
xfsrestore:恢复数据
实验
全量备份
检查是否安装xfsdump:
[root@pup ~]# xfsdump -f /opt/backup /dev/sdb1 [-L backup -M sdb1]
- -f /opt/backup //backup这个文件只能是未存在的文件,不能是目录(备份文件的文件名不能重复)
- [-L backup -M sdb1]备份标签以及设备标签
备份完成:
删除data中的文件:
恢复数据:
[root@pup opt]# xfsrestore -f /opt/backup /data
日志分析
日志概述
linux系统的内核以及系统日志:由rsyslog统一管理(系统自带服务)
配置文件:/etc/rsyslog.conf(配置文件里面的内容是固定格式)
- 包含了系统需要的日志类型和级别
- 系统服务日志的核心配置文件
- 修改此配置文件可以更改系统记录日志的方式
linux系统本身产生的日志,大部分服务器自带程序的日志文件,第三方应用服务程序的控制日志都在/var/log目录下
业务日志:只会记录自身产生的业务情况的日志,不会记录在系统日志当中
日志文件介绍
/var/log/messages:内核日志,还有各种应用程序(包括第三方程序)的控制日志
/var/log/cron:定时任务的日志记录
日志消息级别
日志级别:0-7
0 EMERG:紧急
1 ALERT:警告
2 CRIT:严重
3 ERR:错误 服务或者程序运行时出现错误
4 WARNING:提醒可能会影响系统功能,需要提示用户注意,不是报错
5 NOTICE:注意 不会影响正常功能,但是需要注意,一般不做处理
6 INFO:信息 一般信息,系统运行产生的正常信息
7 DEBUG:调试 调试程序时候使用
none 没有优先级,而且不记录任何日志消息
解析日志消息
例:
*.info:所有info级别的日志,包括info级别以上的事件信息,保存到/var/log/messages
*.=info:明确指定只保存info级别的日志,其他的都不要
*.!info:除了info级别的都要
*.info;.notice:包含info和notice的日志以及以上级别的日志都要
*.info;mail.none;authpriv.none;cron.none /var/log/messages:
所有的设备info级别及以上,不需要mail、authpriv、cron保存到/var/log/messages
authpriv.* /var/log/secure:authpriv设备的所有级别日志消息保存到日志消息
user.info;kern.notice;mail.none;news.none /var/log/test
user,cron.info:多个设备之间可以用,隔开
前面的字段是设备信息
设备字段
auth:用户认证
authpriv:认证的是远程登录产生的日志信息
news:网络新闻记录的事件日志
cron:定时任务
kern:内核的事件消息
mail:邮件
user:用户进程记录的日志
uucp:进程间的通信日志
同步模式和异步模式
同步模式:程序在完成一个任务之后,必须等待处理结果返回之后才能处理下一个任务
异步模式:处理完之后不必等待返回结果就可以继续处理其他任务
local7:自定义服务,自己定义一些服务,把他的日志记录到/var/log/test下
7:范围0-7
日志格式:(记录的内容)
tail -f /var/log/messages
时间戳
test1:主机名
systemd:子系统名称(进程)
Started至最后:消息或者发生时间的具体内容
分析工具
users:展示当前系统登录的用户
w:显示目前登录系统的详细信息
last:列出截至目前登录过系统的用户信息
lastd:列出登陆失败的用户信息记录
实验
实验一:把ssh服务日志单独存放
两台虚拟机同时执行同一命令
撰写栏发送到所有xshell窗口:
[root@pup1 ~]# vim /etc/rsyslog.conf
[root@pup1 ~]# vim /etc/ssh/sshd_config
[root@pup1 ~]# systemctl restart rsyslog.service
[root@pup1 ~]# systemctl restart sshd
主机1:
实验二:配置日志服务器,收集日志
20.0.0.10 客户端 接收
20.0.0.20 服务端 发送
20主机上所有系统日志,不再记录在自己本地,而是发送给10,记录在10的服务器上(日志统一收集)
[root@pup2 ~]# vim /etc/rsyslog.conf
把原来20服务器上往/var/log/messages,通过tcp协议的514端口,发到10的/var/log/messages
[root@pup2 ~]# systemctl restart rsyslog.service
[root@pup2 ~]# netstat -antp | grep 514
查看514端口号是否正常运行
LISTEN : 等待建立连接。
[root@pup1 ~]# vim /etc/rsyslog.conf
[root@pup1 ~]# systemctl restart rsyslog.service
[root@pup1 ~]# netstat -antp | grep 514
[root@pup log]# tail -f /var/log/messages
主机2发送:
主机1: