文件系统和日志管理

一. 文件系统

  • [1. 存储文件的方式](#1. 存储文件的方式)
    • [1.1 实际数据](#1.1 实际数据)
    • [1.2 元信息](#1.2 元信息)
      • [1.2.1 inode](#1.2.1 inode)
      • [1.2.2 查看inode号](#1.2.2 查看inode号)
      • [1.2.3 inode号和文件名分离](#1.2.3 inode号和文件名分离)
      • [1.2.4 inode号耗尽的情况](#1.2.4 inode号耗尽的情况)
    • [1.3 工作环境](#1.3 工作环境)
    • [1.4 文件的备份和恢复](#1.4 文件的备份和恢复)
      • [1.4.1 ext4](#1.4.1 ext4)
      • [1.4.2 xfs](#1.4.2 xfs)
      • [1.4.3 xfsdump的常用选项](#1.4.3 xfsdump的常用选项)
      • [1.4.4 备份](#1.4.4 备份)
      • [1.4.5 恢复](#1.4.5 恢复)
      • [1.4.6 xfs备份恢复注意点](#1.4.6 xfs备份恢复注意点)
    • [1.5 文件查看流程](#1.5 文件查看流程)
  • [二. 日志管理](#二. 日志管理)
    • [2.1 常见的系统日志文件](#2.1 常见的系统日志文件)
    • [2.2 优先级](#2.2 优先级)
    • [2.3 收集邮件的信息](#2.3 收集邮件的信息)
    • [2.4 设备的字段](#2.4 设备的字段)
    • [2.5 系统日志](#2.5 系统日志)
    • [2.6 应用日志](#2.6 应用日志)
    • [2.7 journalctl](#2.7 journalctl)
      • [2.7.1 查看指定用户的日志](#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 文件名

css 复制代码
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
  1. 访问时间:2024-11-07 11:39:09.692492375 +0800

    atime accesstime:当用户读这个文件,更新这个时间

  2. 修改时间:2024-11-07 11:36:39.377775368 +0800

    mtime modify time:更新数据大小和权限时,会修改这个时

  3. 间变更时间:2024-11-07 11:36:39.377775368 +0800

    ctime status time:只当修改权限和属性时,会发生变化。

inode号用尽了,文件无法再创建了,查看一个文件系统可用的inode号

df -i #查看挂载点inode号使用的情况

css 复制代码
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操作系统会出现以下几个现象:

  1. 文件包含特殊字符可能无法正常删除(rm -rf),只能通过inode号进行删除
  2. 剪切或者重命名文件,inode号不会发生变化
  3. 当我们对文件进行操作时,系统以inode号来识别,不以文件名
  4. 文件的数据发生变化,文件的权限发生变化,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备份恢复注意点

  1. 只有root权限才能备份和恢复
  2. 备份的目录必须是已挂载的设备
  3. 挂载的设备必须是xfs文件系统
  4. 恢复数据必须使用xfsrestore进行解析
  5. 两个设备的UUID相同不能备份

1.5 文件查看流程

  1. 获取文件的inode
  2. 找到文件在磁盘当中的位置
  3. 根据元信息查询这个用户的权限
  4. 由权限才能对文件进行指定的操作
  5. 更新数据:文件内容进行了修改inode号有可能发生变化。
  6. 如果权限发生变化,inode一定会变

二. 日志管理

日志:记录系统或者是应用运行期间"所有信息"的文档。记录了一些必要信息,关键的信息。

信息的意义:

  1. 判断系统或者程序是否正常
  2. 记录了故障的信息,告诉我们是什么原因产生的故障。

系统日志:

  • /var/log/syslog (ubuntu)
  • /var/log/messages (centos)

服务日志:

  1. 一般的应用安装完整之后,/var/log/服务的名称
  2. 自定义位置,修改应用的配置文件,可以自定义服务的日志路径
  3. 日志的位置就在应用的安装目录 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 systemd1: Failed to start A high performance web server and a reverse proxy server.

  • Nov 7 13:54:33 #日志产生的时间
  • test1 #主机名
  • systemd1: #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服务单独存放

css 复制代码
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
#只要修改了应用的配置,要想生效,必须重启该应用
css 复制代码
root@du:~# ssh root@192.168.246.7    #另一个虚拟机远程连接
css 复制代码
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
相关推荐
大树884 小时前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 小时前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush44 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5205 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz5 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工5 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩6 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_6 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化