1、inode与block详解
inode 和block 概述
inode:i节点 xfs文件系统512字节,ext4文件系统256字节
block:块 xfs文件系统:4096 磁盘IO:1024 扇区IO:512
inode包含很多的文件元信息,但不包含文件名,例如:
文件的字节数,文件拥有者的UserID,文件的GroupID,文件的读、写、执行权限,文件的时间戳等。
使用stat命令可查看某个文件的inode信息。例如:
Linux系统文件有三个主要的时间属性,分别是ctime(change time),atime(access time),mtime(modify time)
ctime(change time):是最后一次改变文件或目录(属性)的时间,例如执行:chmod,chown等命令。
atime(access time):是最后一次访问文件或目录的时间
mtime(modify time):是最后一次修改文件或目录(内容的)时间。
inode号码:
用户在访问文件时,表面上是用户通过文件名来打开文件,而实际系统内部的过程分成以下三步:
系统找到这个文件名对应的 inode 号码;
通过 inode 号码,获取 inode 信息;
根据 inode 信息,找到文件数据所在的 block,并读出数据。
常见的查看 inode 号码的方式有两种:
Is-i命令:直接查看文件名所对应的inode 号码:
stat 命令:通过査看文件inode 信息而査看到 inode 号码。
例如:
inode的大小
inode也会消耗磁盘空间,每个Inode的大小一般是128字节或256字节。通常情况下不需要关注单个inode的大小,而是重点关注inode的总数。
执行“df -i”命令即可查看每个分区对应的inode总数和已经使用的inode数量。
如何查看和更改inode和block大小
首先为主机添加一块硬盘,并分区进行格式化和挂载(格式化为ext4和xfs类型):
接着使用“dumpe2fs -h /dev/sdb1”去查看分区信息,例如:
处于挂载状态的话,先取消挂载,然后再进行更改:
"mkfs -t ext4 -b 2048 /dev/sdb1" "mkfs -t ext4 -I 512 /dev/sdb1"可以修改块大小和inode大小。同样使用”dumpe2fs -h /dev/sdb1“来查看。
接着格式化/dev/sdb2为xfs:
使用“mkfs -t xfs -f /dev/sdb2 -b size=2048 -i size=1024“可以更改block和inode的大小。例如:
接着进行挂载并查看挂载信息:
还可以通过”xfs_growfs -m 30 /dev/sdb2“设置inode在该分区所占比例,例如设置为占比30%:
硬链接和软连接
硬链接
一般情况下,文件名和 inode 号码是一一对应关系,每个inode 号码对应一个文件名。但是 Linux 系统允许多个文件名指向同一个inode 号码。这意味着,可以用不同的文件名访问同样的内容。In 命令可以创建硬链接,命令的基本格式为:
ln 源文件 目标
运行该命令以后,源文件与目标文件的inode 号码相同,都指向同一个inode。inode信息中的“链接数”这时就会增加1。
硬链接通过索引节点来连接,相当于文件的”复制“,不支持跨分区链接,且链接源文件与目标文件共用一个inode值。
连接文件的时候都要用绝对路径
软链接
软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名。例如,文件A和文件 B的inode 号码虽然不一样,但是文件A的,内容是文件B的路径。读取文件A时,系统会自动将访问者导向文件 B。这时,文件A就称为文件B的“软链接”(soft link)或者“符号链接(symbolic link)。
软连接的创建命令的基本格式为:
ln -s 源文件或目录 目标文件或目录
软连接通过路径来连接,类似于“快捷方式”,支持跨分区链接,且软链接文件与目标文件inode不相同。此外如果源文件丢失,硬链接目标文件内容不会丢失,而软链接的目标文件内容会丢失。
EXT类型文件恢复
1、编译安装extundelete
首先需要安装依赖包e2fsprogs-devel,e2fsprogs-libs,gcc,使用yum命令进行安装,
安装完成后即可将提前上传的extundelete软件包解压,配置,编译,安装。
创建软连接:
将/devsdb1格式化成ext3类型,然后进行挂载
2、模拟删除并执行恢复操
创建测试用的文件
3、查看统计信息
4、模拟误操作并恢复
恢复的文件会放在当前目录下的RECOVERED_FILES目录下。
xfs 类型文件备份和恢复
1:安装xfsdump工具
[root@localhost ~]# yum install -y xfsdump
2:将分区格式化为xfs
[root@localhost ~]# mkfs.xfs -f /dev/sdb1
[root@localhost ~]# mount /dev/sdb1 /data
[root@localhost ~]# cd /data
3:创建测试文件
[root@localhost data]# echo a>a
[root@localhost data]# echo b>b
[root@localhost data]# echo c>c
[root@localhost data]# echo d>d
[root@localhost data]# ls
a b c d
4:备份数据(将/data目录中的文件备份到/opt/dump_sdb1文件中)
[root@localhost ~]# xfsdump -f /opt/dump_sdb1 /data
5:模拟删除动作
[root@localhost ~]# rm -rf /data/*
6:恢复数据
[root@localhost ~]# xfsrestore -f /opt/dump_sdb1 /data/
2、分析日志文件
主要日志文件:
内核及系统日志:这种日志数据由系统服务rsyslog 统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中有相当一部分程序会把自己的日志文件交由rsyslog 管理,因而这些程序使用的日志记录也具有相似的格式。
用户日志:这种日志数据用于记录 Linux 操作系统用户登录及退出系统的相关信息包括用户名、登录的终端、录时间、来源主机、正在使用的进程操作等。
程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异。
Ivar/log/messages:记录 Linux 内核消息及各种应用程序的公共日志信息,包括启动、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
/var/log/cron:记录 crond 计划任务产生的事件信息。
/var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息。
/var/log/mailog:记录进入或发出系统的电子邮件活动。
/var/log/lastlog:记录每个用户最近的登录事件。
/var/log/secure:记录用户认证相关的安全事件信息。
/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
/var/log/btmp:记录失败的、错误的登录尝试及验证事件。
一、日志服务器实验步骤
打开三台主机
系统 | 主机名 | IP地址 | 软件 |
Centos7.9 | master | 192.168.10.101 | rsyslog |
Centos7.9 | mode1 | 192.168.10.102 | rsyslog |
Centos7.9 | node2 | 192.168.10.103 | rsyslog |
1、检查软件包
[root@localhost ~]# systemctl stop firewalld 关闭防火墙
[root@localhost ~]# setenforce 0 关闭内核安全机制
[root@localhost ~]# rsyslogd -version 查看当前系统服务
rsyslogd 8.24.0-55.el7, compiled with:
PLATFORM: x86_64-redhat-linux-gnu
PLATFORM (lsb_release -d):
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
memory allocator: system default
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64
为三台主机编辑/etc/hosts文件;
2、master端设置
[root@server ~]# vim /etc/rsyslog.conf
找到如下一行,不用动他,保证有这一行(默认就有)
$IncludeConfig /etc/rsyslog.d/*.conf
[root@localhost ~]# cd /etc/rsyslog.d
[root@localhost rsyslog.d]# vim mylog.conf
插入以下内容:
$ModLoad immark 支持日志标记
$ModLoad imudp imupd是模块名,支持udp协议
$UDPServerRun 514 允许514端口接收使用UDP协议转发过来的日志
$ModLoad imtcp 支持udp协议
$InputTCPServerRun 514 允许514端口接收使用TCP协议转发过来的日志
$AllowedSender tcp, 192.168.10.0/24 允许指定主机以tcp协议来传输
$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
定义模板,接受日志文件路径,区分了不同主机的日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote 过滤server 本机的日志,排除本机,记录远程
*.info;mail.none;authpriv.none;cron.none /data/log/messages
保存并退出。
[root@server ~]# mkdir -p /data/log 创建目录
[root@server ~]# systemctl restart rsyslog 重启该服务
3、两台node节点的设置
[root@server ~]# vim /etc/rsyslog.conf
找到如下一行,不用动他,保证有这一行(默认就有)
$IncludeConfig /etc/rsyslog.d/*.conf
[root@localhost ~]# cd /etc/rsyslog.d
[root@localhost rsyslog.d]# vim mylog.conf
插入以下内容:
$template myFormat,"%timestamp% %fromhost-ip% %msg%"
*.info;mail.none;authpriv.none;cron.none @@192.168.10.101
保存并退出。
[root@node1 ~]# systemctl restart rsyslog node1重启该服务
[root@node2 ~]# systemctl restart rsyslog node2重启该服务
4、测试
在两个node节点生成一个日志,观察master端的日志数据
日志放在master主机的 /data/log/目录下 cd到/data/log下查看
二、自定义日志
1、自定义ssh服务的日志
(1)修改rsyslog配置文件
[root@localhost ~]# vim /etc/rsyslog.conf
# Save boot messages also to boot.log
local7.* 日志设备 /var/log/boot.log
local0.* /opt/sshd.log 添加的内容
(2)定义ssh服务的日志级别
[root@localhost ~]# vim /etc/ssh/sshd_config修改如下内容:
#SyslogFacility AUTH 修改为 SyslogFacility 0 将注释符去掉,然后“AUTH”改为“0”
(3)启动rsyslog和sshd服务
rystemctl restart rsyslog
systemctl restart sshd
三、日志切割
为了防止日志文件过大或占用过多的存储空间,通常需要对日志文件进行定期地归档和压缩,以防止日志内容将包含/var/log的文件系统填满。即日志切割(又叫日志轮转)。在Linux系统中,logrotate是一个常用的日志轮转工具。通过配置logrotate,可以指定要轮转的日志文件、轮转的时间间隔和保留的轮转文件数量等参数。
以/opt下的sshd.log为例。
[root@localhost ~]# cd /etc/cron.daily/ 以天为单位
[root@localhost cron.daily]# ls
logrotate man-db.cron
logrotate的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate
[root@localhost cron.daily]# vim /etc/logrotate.conf
在末尾添加:
/opt/sshd.log { 指定要切割的日志文件
missingok 如果文件丢失不报错
monthly 每月轮换一次
create 0664 root utmp 设置sshd.log这个文件的属主和属组
minsize 10M 文件超过10M进行回滚
rotate 2 日志进行分割后,保留两份历史数据
}
保存并退出。
注意:/var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
/var/log/btmp:记录失败的、错误的登录尝试及验证事件。
[root@localhost ~]# systemctl restart rsyslog 重启该服务
手动强制分割的命令:
[root@localhost ~]# logrotate -vf /etc/logrotate.conf “f”选项为指定配置文件