文件系统
文件系统提供了一个接口,用户可以来访问硬件接口(硬盘)。
文件存储在硬盘上,硬盘最小的存储单位是512字节(扇区)。
文件在硬盘上的最小存储单位:块(biock),一块的大小是4K,一个块就是连续的8个扇区。
文件存储的形式
一个文件存储分为实际数据和元信息存储
- 实际数据:文件内部的数据保存在硬盘上。
- 元信息:文件的所有者,所在组,最后一次修改时间,文件的大小,文件的权限等。
存储元信息的标识:inode号
inode:不包含文件名,每个文件/目录创建都会分配一个全局(当前设备)唯一的识别码。
识别码就是inode号,当一个文件被删除之后,inode号会被回收,供下一个文件使用。
一个文件必须有一个inode号,至少占用一个块。
inode号的机制
们可以使用 ls -i 或者 stat 命令查看inode号:
- 访问时间:atime,当用户读这个文件,更新这个时间
- 修改时间:mtime,更新数据大小和权限时,会修改这个时间
- 变更时间:ctime,只当修改权限和属性时,会发送变化
inode号用尽了,文件无法再创建,怎么查看一个文件系统可使用的inode号:
df -i ——查看挂载点inode号使用情况
inode号:硬盘的空间越大,可用的inode号越多。
inode号和文件名分离,使得Linux操作系统会出现以下几个现象:
- 文件名包含特殊字符可能无法正常删除(rm -rf),只能通过inode号进行删除。
- 剪切或者重命名文件,inode号不会发生变化。
- 当我们对文件操作时,系统以inode号来识别,不以文件名。
- 文件的数据发生变化,文件的权限发生变化,inode号可能也会发生变化。
inode号耗尽的情况:
- ext4:用完了inode号,不能再创建文件
- xfs:inode号用尽,还可以创建文件,但是数量是有限制的。
工作涉及的环境
dev:开发环境
sit:测试环境
pre:预生产环境,sit和pre与生产环境是同步的
prd:生产环境,对外提供访问的环境
系统文件的备份和恢复
ext4文件系统失败率太高不推荐,最好使用xfs文件系统。
xfs实现备份和恢复
xfsdump——备份
xfsrestore——恢复
xfsdump恢备份有两个级别: 0 1-9
0:完全备份(默认级别)
1-9:增量备份(不用)
xfs备份——xfsdump
xfsdump的常用选项:
- -f——指定备份的文件目录
- -L——指定文件标签
- -M——指定设备标签
- -s——备份单个文件(一般不使用)
首先我们可以创建一个硬盘分区sdb1,挂载到 /data1,然后在/data1里面写东西,再进行备份,操
作如下:
命令:xfsdump -f /opt/backup /dev/sdb1 [-L backup -M sdb1]
- /opt/backup:必须是一个空文件,否则备份会失败,而且不能是目录
- /dev/sdb2:备份的设备
- -L:备份文件标签
- -M:备份设备标签
这时候我们已经成功把/data1中的内容都备份到 /opt/backup文件中,可见 backup 只是个文件并不
是目录,并且里面都是二进制代码。
总结:把 /dev/sdb2 里面的所有文件备份到 /opt/backup 的文件当中。/opt/backup备份文件中全是
二进制代码,通过代码恢复inode号。
xfs恢复——xfsrestore
xfsrestore的常用选项:
- -f——指定从哪个备份文件进行恢复到那个目录
最好我们使用xfsrestore命令完成恢复,将 /opt/backup文件内容通过二进制恢复到 /data1目录下,
变成原因文件和数据。
命令:xfsrestore -f /opt/backup /data1
xfs备份恢复注意点
- 只有root权限才能备份和恢复
- 备份的目录必须是已挂载的设备
- 挂载的设备必须是xfs文件系统
- 恢复数据必须使用xfsrestore进行解析恢复
- 两个设备的UUID相同不能备份
日志系统
日志基础知识
日志:记录了系统或者应用运行期间“所有信息的”文档,记录了一些必要的信息,关键的信息。
信息的意义:
- 判断系统或者程序是否正常运行
- 记录了故障的信息,告诉我们是什么原因产生的故障
系统日志位置:
/var/log/syslog ubuntu
/var/log/messages centos
服务日志位置:
- 一般的应用安装完成之后: /var/log/服务的名称/
- 自定义位置:修改应用的配置文件,可以自定义服务的日志路径
- 就在应用当前的安装目录,logs目录
都是以 .log结尾的文件
常见的系统日志文件种类
/var/log/syslog:记录了Linux系统的内核消息以及各种公共应用日志消息(系统控制产生的消息),包括启动、IO错误、网络错误、程序的故障等等。
服务日志:记录的就是使用这个过程中产生的信息,不会记录到系统日志中。
系统日志:基本操作的系统控制,产生的日志信息
/var/log/cron:记录定时时任务产生的信息
/var/log/secure:用户登录系统认证的相关信息
/var/log/maillog:记录的时电子邮件的信息
日志的级别0-7
数字越小,优先级越高,消息越重要。
- 0——emerg,紧急,系统或者应用不可用,系统、服务崩溃等重要报错信息。
- 1——alert,警告必须马上采取措施的信息,磁盘快满了,数据库被破坏等。
- 2——crit,严重,程序的功能丧失,程序无法正常访问。
- 3——error,错误,运行出现了错误,需要尽快修复(看情况)。
- 4——warnng,提醒,可能会影响系统功能,但是不重要,只是提醒用户,不属于报错范围。
- 5——notice,注意,不影响系统功能,但是需要注意的事件,无需处理。
- 6——info,信息,一般信息,正常运行的信息。
- 7——debug,调试,开发人员调试程序产生的信息。
排错的话,注意的是0-4
none——没有优先级,不记录任何消息日志。
以上的优先级,可以用户自定义日志的级别,已获取我们想要的内容。
日志收集
表达形式——*.*
- 左边:应用设备名称
- 右边:0-7的日志级别
如:Mail.info:收集邮件的信息,包含info以及info以上级别的信息。
Mail.info /var/log/mail.log :收集邮件的信息,包含info以及info以上级别的信息。
Mail.=info /var/log/mail.log :收集邮件的信息,只收集info级别的信息。
Mail.! info /var/log/mail.log :除了info级别的信息,其他都要收集。
*.info /var/log/sysog :* 所有的程序,info以及info以上级别的,记录在 /var/log/sysog 中。
mail.*:所有级别的日志都收集。
*.info;mail.nome;nginx.=error /var/log/sysog
所有程序的一般及以上和邮件的日志不计和nginx只记录error的日志,保存到 /var/log/sysog
设备的名称
auth:用户认证的日志
systemd:系统管理程序的日志
cron:定时任务的信息
user:用户进程的信息
mail:邮件的信息
kern:系统内核的信息
local:自定义服务,我们可以自己定义我们需要保存的日志(0-7)都可以使用;对于的程序设置的local等级要一致。
系统日志和应用日志分析
系统日志:
Nov 7 13:32:37——日志产生的时间
zw2——主机名
systemd[1]——systemd:设备字段;[1]:运行的pid号。(systemd是系统当中的第一个进程,systemd是所有进程的父进程)。
Started Run anacron jobs——日志的内容
应用日志:
192.168.233.1——谁访问了这个服务
[07/...........0800]——访问这个服务的时间
“GET /123......1.1“——GET:访问服务的方式;/123:访问的内容;HTTP/1.1:访问使用的协议
404:当对方请求之后,这个服务给客户端相应码,告诉用户访问的结果是成功还是失败。
”Mozilla........537.36“——记录客户端访问这个服务的方式
针对系统日志的管理工具——journalctl
查看指定应用的日志
journaltcl -u 应用名称——只查看这个应用的日志
journaltcl_PID=14400——只查看这个pid号的日志
如我们查看关于ssh的系统日志
查看指定用户的日志
journalctl_UID=0 --since today——查看今天指定用户(root)的日志
journalctl_UID=0 --since yesterday——查看昨天指定用户(root)的日志
journalctl -xe——查看系统中systemd的错误日志
实验——ssh服务日志单独存放
rsyslog——Linux系统管理系统日志的工具
我们进入管理端的rsyslog.conf文件的编辑模式,在记录日志行后面加入local6.* /var/log/ssh.log,表示我们自定义设备local6,把所有级别的日志加入到 /var/log/ssh.log文件中。
接下来我们进入应用端也就是ssh端的管理文件, /etc/ssh/sshd_config编辑中,加入SyslogFacility LOACL6,表示我们在ssh端定义LOACL6的名字。
最后我们重启这两个文件配置,因为修改完配置文件后如果要配置生效一定要重启服务。
这时候在/var/log/ 中就会有 ssh.log 文件
如果没有 ssh.log 文件,需要我们再开个虚拟机,在他的xshell远程端,输入命令ssh root@192.168.254.12#第一台机的IP地址,登进去再看就会有了。
这时候我们试试监控ssh日志,会发现监控日志成功