Linux文件系统和日志分析

一、inode和block概述

文件数据包括元信息与实际数据。

文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。

block(块)

  • 连续的八个扇区组成一个block
  • 是文件存取的最小单位

inode(索引节点)

  • 用于存储文件元信息

注意:一个文件必须占用一个inode ,至少占用一个block

二、inode详解

2.1 inode包含的元信息

  • 文件字节数
  • 文件拥有者User ID
  • 文件Group ID
  • 文件读,写,执行的权限
  • 文件的时间戳

……

2.2 查看inode的方法

ls -i 文件名
stat 文件名(详细)

2.3 Linux系统文件三个主要的时间属性

  • atime:最后一次访问的时间,当使用这个文件的时候就会更新这个时间
  • mtime:最后一次修改的时间,当修改文件的内容数据的时候,就会更新这个时间
  • ctime:最后一次改变文件或目录属性的时间,当修改文件的权限或者属性的时候,就会更新这个时间

注意:当一个空文件,添加内容并保存退出后,inode号改变,因为数据占用的空间发生了变化,inode变,ctime也变

面试题

找到7天内所有大于10G的文件并删除,使用一条命令

find / -mtime 7 -size +10G -type f -exec rm -rf {} \;

2.4 用户通过文件名打开文件时,系统的内部过程

  1. 找到文件名对应的inode号
  2. 通过inode号,获取inode信息
  3. 根据inode信息,找到文件数据所在的block,读出数据

三、模拟ext4文件系统inode号用尽的情况

3.1 创建分区,格式化,挂载

[root@localhost ~]# fdisk /dev/sdb				
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x5c900c16 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+4M
分区 1 已设置为 Linux 类型,大小设为 4 MiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   60G  0 disk 
├─sda1            8:1    0  953M  0 part /boot
└─sda2            8:2    0 51.2G  0 part 
  ├─centos-root 253:0    0 46.6G  0 lvm  /
  └─centos-swap 253:1    0  4.7G  0 lvm  [SWAP]
sdb               8:16   0   30G  0 disk 
└─sdb1            8:17   0    4M  0 part 					//分区成功
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sdf               8:80   0   20G  0 disk 
sdg               8:96   0   20G  0 disk 
sr0              11:0    1 1024M  0 rom  
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
1024 inodes, 4096 blocks
204 blocks (4.98%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=4194304
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (1024 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@localhost /]# mkdir test
[root@localhost /]# mount /dev/sdb1 /test/
[root@localhost /]# df -i
文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 24414208  145190 24269018       1% /
devtmpfs                  247834     445   247389       1% /dev
tmpfs                     251813       1   251812       1% /dev/shm
tmpfs                     251813     676   251137       1% /run
tmpfs                     251813      16   251797       1% /sys/fs/cgroup
/dev/sda1                 487936     328   487608       1% /boot
tmpfs                     251813       6   251807       1% /run/user/42
tmpfs                     251813      22   251791       1% /run/user/0
/dev/sdb1                   1024      11     1013       2% /test			//挂载成功,现有1013个可用inode号

3.2 模拟inode用尽

[root@localhost /]# for ((i=1;i<1015;i++));do touch /test/xc$i;done
touch: 无法创建"/test/xc1014": 设备上没有空间					//说明ext4文件系统inode用尽后不能再创建文件
[root@localhost /]# df -i
文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 24414208  145190 24269018       1% /
devtmpfs                  247834     445   247389       1% /dev
tmpfs                     251813       1   251812       1% /dev/shm
tmpfs                     251813     676   251137       1% /run
tmpfs                     251813      16   251797       1% /sys/fs/cgroup
/dev/sda1                 487936     328   487608       1% /boot
tmpfs                     251813       6   251807       1% /run/user/42
tmpfs                     251813      22   251791       1% /run/user/0
/dev/sdb1                   1024    1024        0     100% /test

四、xfs系统文件备份和恢复

CentOS 7 系统默认采用 xfs类型的文件,xfs 类型的文件可使用 xfsdump 与 xfsrestore 工具进行备份恢复

xfsdump 的备份级别有两种:0 表示完全备份;1-9 表示增量备份。xfsdump 的备份级别默认为 0

命令格式为:

xfsdump -f  备份存放位置  要备份的路径或设备文件
		-L:指定标签 
		-M:指定设备标签
		-s:备份单个文件,-s 后面不能直接跟路径

实验:

4.1 分区,格式化,挂载;在test2中添加

[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x71350885 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n    
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):
起始 扇区 (2048-62914559,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-62914559,默认为 62914559):+5G         
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=327680 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1310720, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkdir /test2
[root@localhost ~]# mount /dev/sdb1 /test2/
[root@localhost ~]# cd /test2/
[root@localhost test2]# echo 1 > aa
[root@localhost test2]# echo 2 > bb
[root@localhost test2]# echo 3 > cc
[root@localhost test2]# cat aa
1
[root@localhost test2]# cat bb
2
[root@localhost test2]# cat cc
3
[root@localhost test2]# ls -i
67 aa  68 bb  69 cc

4.2 模拟删除,恢复

[root@localhost test2]# xfsdump -f /opt/backup /dev/sdb1 [-L backup -M sdb1]
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> 
session label entered: ""

 --------------------------------- end dialog ---------------------------------

xfsdump: WARNING: no session label specified
xfsdump: level 0 dump of localhost.localdomain:/test2
xfsdump: dump date: Thu May 18 02:23:28 2023
xfsdump: session id: dba4aa0a-5cca-44de-b55a-09c416c382ab
xfsdump: session label: ""
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 34048 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 24592 bytes
xfsdump: dump size (non-dir files) : 1632 bytes
xfsdump: dump complete: 1 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /opt/backup OK (success)
xfsdump: Dump Status: SUCCESS								//备份成功
[root@localhost test2]# ls
aa  bb  cc	
[root@localhost test2]# rm -rf *							//删除test2中的东西
[root@localhost test2]# ls
[root@localhost test2]# xfsrestore -f /opt/backup /test2/	//恢复
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.4 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /test2
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Thu May 18 02:23:28 2023
xfsrestore: level: 0
xfsrestore: session label: ""
xfsrestore: media label: "sdb1]"
xfsrestore: file system id: 408cb5f0-ca78-4260-9cb9-80113d509e0a
xfsrestore: session id: dba4aa0a-5cca-44de-b55a-09c416c382ab
xfsrestore: media id: 56bffe97-1946-4bda-8025-3421d92a7b0f
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 3 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /opt/backup OK (success)
xfsrestore: Restore Status: SUCCESS
[root@localhost test2]# ls
aa  bb  cc
[root@localhost test2]# cat aa
1
[root@localhost test2]# cat bb
2
[root@localhost test2]# cat cc
3

五、日志文件介绍与分析

5.1 日志功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

5.2 日志分类

内核及服务日志

  • 日志数据由系统服务rsyslog统一管理,日志格式基本相似
  • 配置文件/etc/rsyslog.conf

用户日志

  • 记录用户登录及退出系统的相关信息

程序日志

  • 由各种应用程序独立管理的日志文件,记录格式不统一

**日志保存位置:**默认位于:/var/log 目录下

5.3 主要日志文件介绍

日志位置
内核及公共消息日志/var/log/messages
计划任务日志/var/log/cron
系统引导日志/var/log/dmesg
邮件系统日志/var/log/maillog
用户登录日志/var/log/lastlog
/var/log/secure
/var/log/wtmp
/var/tun/ulmp

5.4 日志级别

Linux系统内核日志消息的优先级别(数字等级越小,优先级越高,消息越重要)

级别说明
0EMERG(紧急):会导致主机系统不可用的情况。如系统崩溃
1ALERT(警告):必须马上采取措施解决的问题。如数据库被破坏
2CRIT(严重):比较严重的情况。如硬盘错误,可能会阻碍程序的部分功能
3ERR(错误):运行出现错误。不是非常紧急,尽快修复的
4WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件,不是错误;如磁盘用了85%等
5NOTICE(注意):不会影响正常功能,但是需要注意的事件。无需处理
6INFO(信息):一般信息。正常的系统信息
7DEBUG(调试):程序或系统调试信息等。包含详细开发的信息,调试程序时使用
none:没有优先级,不记录任何日志消息。

这个优先级由开发者自行定义,也就是你想要那部分的信息内容,可以自行添加修改

5.5 分析工具

users	显示当前登录系统的所有用户的用户列表
w 		显示目前登入系统的用户信息
last  	列出截止目前登录过系统的用户信息
lastb	查询登录失败的用户记录

5.6 日志管理策略

  1. 及时做好备份和归档
  2. 延长日志的保存期限
  3. 控制日志访问权限:日志中可能会包含各类敏感信息,
  4. 集中管理日志
  • 将服务器的日志文件发到统一的日志文件服务器
  • 便于日志信息的统一收集、整理和分析
  • 杜绝日志信息的意外丢失、恶意篡改或删除

程序的日志一般保留1~2天

数据日志,数据库最少保留半年

用户信息日志永久保存

企业根据业务需要,自定义保留时间

六、ssh服务日志单独存放

[root@localhost /]# vim /etc/rsyslog.conf 

在这里插入图片描述

[root@localhost /]# vim /etc/ssh/sshd_config 

在这里插入图片描述

[root@localhost /]# setenforce 0
[root@localhost /]# systemctl stop firewalld.service 
[root@localhost /]# systemctl restart sshd
[root@localhost /]# systemctl restart rsyslog.service 

验证:

在另一台虚拟机上

[root@localhost ~]# ssh root@192.168.147.100
root@192.168.147.100's password: 
Last login: Thu May 18 02:17:09 2023 from 192.168.147.1

回到原来的虚拟机

[root@localhost /]# tail -f /var/log/ssh.log 
May 18 03:11:34 localhost sshd[59621]: Accepted password for root from 192.168.147.101 port 41258 ssh2
May 18 03:13:53 localhost sshd[59621]: Received disconnect from 192.168.147.101 port 41258:11: disconnected by user
May 18 03:13:53 localhost sshd[59621]: Disconnected from 192.168.147.101 port 41258
May 18 03:13:58 localhost sshd[59697]: Accepted password for root from 192.168.147.101 port 41260 ssh2

七、日志统一收集

发送方:192.168.147.101

接收方:192.168.147.100

7.1 关闭安全机制和防火墙

[root@localhost /]# setenforce 0
[root@localhost /]# systemctl stop firewalld.service 

7.2 发送方

[root@localhost ~]# vim /etc/rsyslog.conf 

在这里插入图片描述

在这里插入图片描述

*.info 表示所有等级为 info 及以上的日志都会被发送,其中 * 代表所有设施 (facility),如 auth、daemon、syslog、kern 等。

mail.none 表示邮件相关的日志不会被发送,其中 none 代表不包含指定的设施。

authpriv.none 表示安全和权限相关的日志不会被发送,其中 authpriv 代表包括 auth 和 priv 两个设施。

cron.none 表示计划任务相关的日志不会被发送,其中 cron 代表计划任务的设施。

@@192.168.147.101 表示将符合条件的日志通过TCP协议发送到远程主机 192.168.147.101 上的 rsyslog 服务。
其中,@@ 表示强制使用tcp协议,单个 @ 表示使用udp协议。

[root@localhost ~]# systemctl restart rsyslog.service 
[root@localhost ~]# netstat -natp | grep 514
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      12927/rsyslogd      
tcp        0      0 192.168.147.101:52942   192.168.147.101:514     ESTABLISHED 12927/rsyslogd      
tcp      514      0 192.168.147.101:514     192.168.147.101:52942   ESTABLISHED 12927/rsyslogd      
tcp6       0      0 :::514                  :::*                    LISTEN      12927/rsyslogd      

7.3 接受方

[root@localhost /]# vim /etc/rsyslog.conf 

在这里插入图片描述

[root@localhost /]# systemctl restart rsyslog.service 
[root@localhost /]# netstat -natp | grep 514
tcp        0      0 0.0.0.0:514             0.0.0.0:*               LISTEN      59961/rsyslogd      
tcp6       0      0 :::514                  :::*                    LISTEN      59961/rsyslogd      

八、日志管理工具 journalctl

是centos7上专有的日志管理工具,该工具专门针对messages

日志的配置文件是/etc/systemd/journald.conf

journalctl 				查看所有日志
			-r			倒序查看所有日志
			-k			查看内核日志
			-b  [-0]  #默认就是0		 查看本次系统的日志
			    [-1]					查看上一次启动的日志,如上次系统崩溃,需要查看日志时
			-n  数字		显示尾部指定行数的日志
			-u  服务名		查看某个服务的日志
			_PID= 	     	查看指定进程的日志 
			_UID=	--since today			查看指定用户今天的日志
			_UID=	--since yesterday		查看指定用户昨天的日志
			-xe				查看systemd journal中的所有错误信息,包括启动过程中的错误和系统运行期间的错误
           LISTEN      59961/rsyslogd      

# 八、日志管理工具 journalctl

是centos7上专有的日志管理工具,该工具专门针对messages

日志的配置文件是/etc/systemd/journald.conf

```bash
journalctl 				查看所有日志
			-r			倒序查看所有日志
			-k			查看内核日志
			-b  [-0]  #默认就是0		 查看本次系统的日志
			    [-1]					查看上一次启动的日志,如上次系统崩溃,需要查看日志时
			-n  数字		显示尾部指定行数的日志
			-u  服务名		查看某个服务的日志
			_PID= 	     	查看指定进程的日志 
			_UID=	--since today			查看指定用户今天的日志
			_UID=	--since yesterday		查看指定用户昨天的日志
			-xe				查看systemd journal中的所有错误信息,包括启动过程中的错误和系统运行期间的错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值