inode和block概述一:

1、文件数据包括源信息与实际数据

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

block (块):

连续的八个扇区组成一个block(4k)

!是文件存取的最小单位,扇区是最小的存储单位

2、inode:

(索引节点,也叫i节点)

用于存储文件元信息 inode与bloc.png 备注:一个文件必须占用一个inode,但是至少占用一个block(就是说只能同时拥有一个inode号,可以拥有多个block)

3、目录文件的结构:

目录也是一种文件,此外目录文件的结构如下图所示

inode与bloc   3.png 4、重点: 每个文件都有一个inode号码,操作系统使用inode号码来识别不同的文件 linux系统内部不使用文件名,而是使用inode号进行识别文件 对于用户,文件名只是inode号码便于识别的别称


inode和block概述二:

文件是存储在硬盘上的,硬盘的最小存储单位叫做扇区,每个扇区存储512字节

一般连续八个扇区组成一个块,一块是4k大小,是文件存取的最小单位,操作系统读取硬盘时候,是一次性连续读取多个扇区,就是一个块一个块地读取的。

文件数据包括实际数据与元信息,文件数据存储在“块中,存储文件元信息的区域叫做inode。因此,一个文件必须占用一个inode,并且至少占用一个block

inode不包含文件名,文件名是存放在目录当中的,linux系统中一切皆为文件,因此目录也是一种文件

每个inode都有一个号码,操作系统用inode号来识别不同的文件,linux系统内部不使用文件名去识别文件的(是使用inode号码去识别文件的,每一个inode号码一一对应一个文件名)。

所以,当用户在linux系统中试图访问一个文件,系统会先根据文件名去查找它对应的inode号码,通过inode号码,获取inode信息。根据inode信息,查看该用户是否具有访问该文件的权限,如果有就指向相应的数据block,并且读取数据。如果没有就拒绝


inode包含的元信息

文件的字节数

文件拥有者的USER ID

文件的GROUP ID

文件的读、写、执行权限

文件时间戳

用stat命令可以查看某个文件的inode信息

比如: stat 123.txt ;查看123.txt文件的inode号

实操:使用stat命令 1.png 2.png 备注: 1、以上两图是一份英文语言一份是中文语言对照 2、change time (ctime):最后一次改变文件或者目录属性的时间 3、access time (atime):最后一次访问文件或者目录的时间 4、modify time(mtime): 最后一次修改文件或者目录内容的时间

inode号码

用户通过文件名打开文件时,系统内部的过程 1、系统找到这个文件名对应的inode号码 2、通过inode号码,获取inode信息 3、根据inode信息,找到文件数据所在的block,并读出数据 查看inode号码的方法: 1、ls -i命令:查看文件对应的inode号码 ls -i 文件名

2、stat命令:查看文件inode信息中的inode号码 stat 文件名 inode的大小 inode也会消耗磁盘空间 每个inode的大小一般为128字节或者256字节 格式化文件系统时确定inode的总数 使用df -i命令可以查看每个硬盘分区的inode总数与已经使用的数量 补充: 1、inode也会消耗硬盘空间,所以格式化的时候,操作系统会自动将硬盘分成两个区域,一个是数据区域,存放文件数据;另一个是inode区域,存放inode包含的信息。,每个inode的大小,一般是128字节或者256个字节。 通常情况下不需要关注单个inode的大小,而是需要重点关注inode的总数,inode的总字节在格式化的时候就给定了,执行“df -i”命令即可查看每个硬盘分区对应的inode总数和已经使用的inode数量。 2、由于inode号码与文件名称分离,导致linux系统具备以下几特有的现象 a、文件名包含特殊字符,可能无法正常删除,这时候直接删除inode,能起到删除文件的作用 b、移动文件或者重命名文件,只是改变文件名字,不影响inode号 c、开打一个文件后,系统以inode号来识别这个文件,且不再考虑文件名 4、文件数据被保存修改后,会生成一个新的inode号 删除inode号的两种方式 find ./ -inum (inode号) -exec rm -i {} ; find ./ -inum (inode号) -delete

inode号的特殊作用

由于inode号码与文件名分离,导致一些linux系统具有以下的现象: 1、当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件 2、移动或者重命名文件时,只改变文件名,不影响inode号码 3、打开一个文件后,系统通过inode号码来识别文件,不再考虑文件名 4、使用vi编辑器修改文件数据保存后,会生成一个新的inode号码。但是,如果使用ehco进行“>”的追加内容。则不会变更inode号。

**#### 小结 1、硬盘分区后的结构

硬盘分区后的结构.png 注意:元信息和数据为文件数据的组成 2、linux系统中系统访问文件的过程 文件存储小结.png 当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。**

链接文件

为文件或者目录建立链接文件 链接文件的分类(下图所示) 链接文件.png 链接文件的命令: 1、硬链接 ln 源文件 目标位置; 用的很少 2、软连接! ln -s 源文件 目标位置; 实际工作环境经常使用!

实验:inode号节点耗尽故障处理

使用fdisk创建分区sdb1,大小30M即可

fdisk /dev/sdb1

mkfs -t ext4 /dev/sdb1

mkdir /test

mount /dev/sdb1 /test

df -i

模拟inode节点耗尽

for ((i=1; i<=7680; i++)); do touch /test/file$i;done

或者 touch {1..7680}.txt

df -i

df -hT

删除文件恢复

rm -rf /test/*

df -i

df -hT 实验操作: 21.png 22.png 23.png 24.png 注备:实验结束后,如果不是虚拟机的话,直接rm -rf /test/*全部删除就行

实验:EXT类型文件恢复

extundelete是一个开源的linux数据恢复工具,支持ext3、ext4文件系统。(备注:ext4只能运行在centos6版本恢复) 步骤: 1、使用fdisk创建分区/dev/sdc1,格式化成ext3系统文件 fdisk /dev/sdc partprobe /dev/sdc ;此项命令是可以不重启系统,直接添加磁盘 mkfs -t ext3 /dev/sdc1 mkdir /test mount /dev/sdc1 /test df -h

2、安装依赖包 yum install -y e2fsprogs-devel e2fsprogs-libs 接着编译安装extundelete(网上先自己下压缩包) 111.png 3、进行模拟删除并恢复的操作 cd /test echo a>a echo a>b echo a>c echo a>d ls extundelete /dev/sdc1 --inode 2 ;查看文件系统/dev/sdc1下存放在哪些文件,此外i节点从2开始的,2代表该文件系统最开始的目录 rm -rf a b extundelete /dev/sdc1 --inode 2 cd ~ umount /test extundelete /dev/sdc1 --restore-all ;恢复/dev/sdc1文件系统下的所有内容 #最后:在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件 ls RECOVERED_FILES/ ;查看里面的目录 操作:如上图步骤所示 (注意:自己先网上下载好extundelete-0.2.4.tar.bz2 后再进行试验) 31.png 32.png 33.png 34.png 35.png

实验:恢复XFS类型的文件

Centos 7系统默认采用xfs类型文件,xfs类型的文件可以使用xfsdump、xfsdump工具进行备份恢复。 1、xfsdump命令格式 xfsdump -f 备份存放位置 要备份的路径或者设备文件 xfsdump的备份等级(默认为0) 0 : 完全备份 1-9 :增量备份 xfsdump常用选项: -f:指定备份文件目录 -L:指定标签session label -M:指定设备标签 media label -s:备份单个文件,- s 后面不能直接跟路径 xfsdump的使用限制: a、只能备份已挂载的文件系统 b、必须使用root的权限才能操作 c、只能备份XFS文件系统 d、备份后的数据只能给xfsrestore解析 e、不能备份两个具有相同UUID的文件系统 2、xfsrestore命令格式 xfsrestore -f 恢复文件位置 存放恢复后文件的位置

操作: 1、使用fdisk创建分区 /dev/sdb1,并格式化成xfs文件系统。最后挂载mount /dev/sdb1 /data/ cd /data cp /etc/passwd ./ mkdir test touch abc.txt /test 2、使用xfsdump备份整个分区 rpm -qa | grep xfsdump yum install -y xfsdump xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1] 3、模拟数据丢失并使用xfsrestore cd /data/ rm -rf /data/* ls ;此时发现数据全部消失 xfsrestore -f /opt_sdb1 /data/ ;对data目录进行数据恢复

日志文件

日志的功能:

用于记录系统、程序运行中发生的各种事件

通过阅读日志,有助于诊断和解决系统故障

日志文件的分类

内核及系统日志

由系统服务rsyslog统一进行管理,日志格式基本相似

主配置文件/etc/rsyslog.conf

用户日志

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

程序日志

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

如何去书写日志

微信图片_20211124103541.png

日志保存的位置

默认位于:/var/log ;系统或者用户日志

主要日志内容介绍

1.png

补充:系统服务rsyslog的安装包与主程序 2.png 常见的一些日志

1、内核与公共消息日志**(排障用)**

/var/log/messages: 记录linux内核消息的各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或者服务,一般都可以从该日志中获得相关的日志记录信息

2、极化任务日志

/var/log/cron :记录crond极化任务产生的时间信息

3、系统引导日志

/var/log/dmesg :记录linux系统在引导过程中的各种事件信息

4、邮件登录日志

/var/log/maillog : 记录进入或者发出系统电子邮箱活动

5、用户登录日志

/var/log/secure :记录用户认证相关的安全事件信息

/var/log/lastlog :记录每个用户最近的登录事件(采用二进制,需要相关转码工具)

/var/log/wtmp :记录每个用户登录、注销与系统启动和停机事件(采用二进制,需要相关转码工具)

/var/run/btmp :记录失败的、错误的登录尝试以及验证事件、二进制格式

vim /etc/rsyslog.conf ;查看rsyslog.conf配置文件 之后开打后如下图所示{设备.级别 动作} 1.png 设备字段的说明: auth:用户认证时产生的日志 authpriv:ssh、ftp等登录信息的验证日志 daemon:一些守护进程产生的日志 ftp:FTP产生的日志 lpr:打印相关活动 mark:rsyslog内部服务的信息,事件标识 news:网络新闻传输协议(nntp)产生的消息 syslog:系统日志 uucp:两个unix之间的相关通讯 console:针对系统控制台的消息 cron:系统执行定时任务产生的日志 kern:系统内核日志 local0~local7:自定义程序使用 mail:邮件日志 user:用户进程

linxu系统内核消息的优先级别

0 EMERG(紧急) 如系统崩溃 1 ALERT(警告) 如数据库被破坏 2 CRIT (严重) 如硬盘错误 3 ERR (错误) 不是非常紧急的 4 WARNING (提醒) 需要提醒用户的主要事件 5 NOTICE (注意) 需要注意的事件,无需处理 6 INFO (信息) 一般信息 7 DEBUG (调试) 调试程序时使用 none 没有优先级,不记录任何消息 日志的一般格式 3.png 公共日志 /var/log/messages文件的记录格式 事件标签:消息发出的日期和时间 主机名:生成消息的计算机名称 子系统名称:发出消息的应用程序 消息:消息的具体内容 此外:程序自己维护日志记录,httpd网站服务程序使用两个日志文件: access_log ;记录客户访问时间 erro_log ;记录错误事件

用户日志分析

保存了用户登录、退出系统等相关信息 /var/log/lastlog;最近的用户登录事件 /var/log/wtmp;用户登录、注销与开关机的事件 /var/run/utmp:当前挡路的每一个用户的详细信息 /var/log/secure;与用户验证相关的安全事件 分析工具 users 、who、w、last、lastb last命令用于查询成功登录系统的用户记录 lastb命令用于查询登录失败的用户记录 由相应的应用程序独立进行管理 awk、sed、vim 是三大主要使用的工具 日志管理策略 及时做好备份与归档 a、命令/脚本+crontab b、rsyslog c、ELK/EFK 延长日志保存期限 控制日志访问权限:各类敏感信息如账户、口令等 集中管理日志: 1、将服务器的日志统一发送到日志文件服务器 2、便于日志信息的统一收集、整理和分析 3、杜绝日志信息的意外丢失、恶意篡改与删除

实验:配置日志服务器

rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作。可以基于TCP和UDP工作。默认的监听端口时514,只需要在MODULES打开即可 发送服务器:客户端 192.168.206.20 收集服务器:192.168.206.30

步骤: 1、先关闭服务端和客户端防火墙、selinux setenforce 0 systemctl stop firewalld systemctl disable firewalld

2、修改客户端配置文件,并启动服务 vim /etc/rsyslog.conf 进入文本后将下面四行的注释取消掉 3.png

接着添加以下内容

$template myFormat, "%timestamp% %hostname% %syslogseverity-text% %syslogtag% %msg%\n" $ActionFileDefaultTemplate myFormat *.info;mail.none;authpriv.none;cron.none @@192.168.80.30:514

#%timestamp% :时间戳 #%fromhost-ip告 : 接收的信息来自于哪个节点的IP #hostname号: 主机名 #%syslogseverity-text% : 日志等级 #%syslogtag% :服务进程 #%msg%:日志内容 #接收方IP前面一个@表示TCP传输,两个@表示UDP传输 systemcrl restart rsyslog

修改服务端配置文件,并启动服务 vim /etc/rsyslog.conf #将下面四行前的注释取消掉 $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 #添加以下内容 $AllowedSender tcp, 192.168. 80.0/24 #允许192.168.80.0网段内的主机以tcp协议来传输 $template Remote,"/data/1og/%romhost-ip%/&fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY8.1og" #定义模板,接受日志文件路径,区分了不同主机的日志 :fromhost-ip, !isequal, "127.0.0.1" ?Remote #过滤掉server 本机的日志 systemcrl restart rsyslog

//在服务端创建/data/log目录,以接受大量日志信息,配置文件中的路径应当与该路径一致 mkdir -p /data/log //验证 客户端的终端命令输入或者重启一个服务 logger "hello world" 在服务端查看日志文件 tree /data/log/ (如果是最小化安装,请使用yum本地安装tree)

Centos7 专有日志管理工具

1、查看内核日志(不显示应用日志) journalctl -k 2、查看系统本次启动的日志 journalctl -b [-0] ;"0"指上上次启动的日志 3、查看上一次启动的日志 journalctl -b -1 4、显示尾部指定行数的日志 journalctl -n 20 [-f] 备注:查看的是/var/log/messages的日志。但是格式上有所调整。如主机名格式不一样而已 5、!查看某个服务的日志 journalctl -u httpd.service [-f] 6、查看指定进程的日志 journalctl _PID=1 ;此处的是查看init进程(详情见我的开机引导那篇) 7、查看指定用户的日志 journalctl _UID=0 --since today ;查今天的root用户的日志,用户UDP=0的就是root用户 或者 journalctl -xe -x :是目录的意思,在报错的信息下会附加解决问题的网址 -e:(pager-end)从末尾开始看 8、!查看所有日志(默认情况下,只保留本次启动的日志) journalctl journalctl -r :r表示倒叙