inode和block概述一:
1、文件数据包括源信息与实际数据
文件存储在硬盘上,硬盘最小存储单位是“扇区。每个扇区存储512字节”
block (块):
连续的八个扇区组成一个block(4k)
!是文件存取的最小单位,扇区是最小的存储单位
2、inode:
(索引节点,也叫i节点)
用于存储文件元信息备注:一个文件必须占用一个inode,但是至少占用一个block(就是说只能同时拥有一个inode号,可以拥有多个block)
3、目录文件的结构:
目录也是一种文件,此外目录文件的结构如下图所示
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、以上两图是一份英文语言一份是中文语言对照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、硬盘分区后的结构
注意:元信息和数据为文件数据的组成2、linux系统中系统访问文件的过程当用户在Linux系统中试图访问一个文件时,系统会先根据文件名去查找它对应的inode号码;通过inode号码,获取inode信息;根据inode信息,看该用户是否具有访问这个文件的权限;如果有,就指向相对应的数据block,并读取数据。**
链接文件
为文件或者目录建立链接文件链接文件的分类(下图所示)链接文件的命令: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实验操作:注备:实验结束后,如果不是虚拟机的话,直接rm -rf /test/*全部删除就行
实验:EXT类型文件恢复
extundelete是一个开源的linux数据恢复工具,支持ext3、ext4文件系统。(备注:ext4只能运行在centos6版本恢复)步骤:1、使用fdisk创建分区/dev/sdc1,格式化成ext3系统文件fdisk /dev/sdcpartprobe /dev/sdc ;此项命令是可以不重启系统,直接添加磁盘mkfs -t ext3 /dev/sdc1mkdir /testmount /dev/sdc1 /testdf -h
2、安装依赖包yum install -y e2fsprogs-devel e2fsprogs-libs接着编译安装extundelete(网上先自己下压缩包)3、进行模拟删除并恢复的操作cd /testecho a>aecho a>becho a>cecho a>dls extundelete /dev/sdc1 --inode 2 ;查看文件系统/dev/sdc1下存放在哪些文件,此外i节点从2开始的,2代表该文件系统最开始的目录rm -rf a bextundelete /dev/sdc1 --inode 2 cd ~umount /testextundelete /dev/sdc1 --restore-all ;恢复/dev/sdc1文件系统下的所有内容#最后:在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件ls RECOVERED_FILES/ ;查看里面的目录操作:如上图步骤所示 (注意:自己先网上下载好extundelete-0.2.4.tar.bz2后再进行试验)
实验:恢复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 /datacp /etc/passwd ./mkdir testtouch abc.txt /test2、使用xfsdump备份整个分区rpm -qa | grep xfsdumpyum install -y xfsdumpxfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1]3、模拟数据丢失并使用xfsrestorecd /data/rm -rf /data/*ls ;此时发现数据全部消失xfsrestore -f /opt_sdb1 /data/ ;对data目录进行数据恢复
日志文件
日志的功能:
用于记录系统、程序运行中发生的各种事件
通过阅读日志,有助于诊断和解决系统故障
日志文件的分类
内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
主配置文件/etc/rsyslog.conf
用户日志
记录系统用户登录与退出系统的相关信息
程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
如何去书写日志
日志保存的位置
默认位于:/var/log ;系统或者用户日志
主要日志内容介绍
补充:系统服务rsyslog的安装包与主程序常见的一些日志
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配置文件之后开打后如下图所示{设备.级别 动作}设备字段的说明: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 没有优先级,不记录任何消息日志的一般格式公共日志 /var/log/messages文件的记录格式事件标签:消息发出的日期和时间主机名:生成消息的计算机名称子系统名称:发出消息的应用程序消息:消息的具体内容此外:程序自己维护日志记录,httpd网站服务程序使用两个日志文件:access_log ;记录客户访问时间erro_log ;记录错误事件
用户日志分析
保存了用户登录、退出系统等相关信息/var/log/lastlog;最近的用户登录事件/var/log/wtmp;用户登录、注销与开关机的事件/var/run/utmp:当前挡路的每一个用户的详细信息/var/log/secure;与用户验证相关的安全事件分析工具users 、who、w、last、lastblast命令用于查询成功登录系统的用户记录lastb命令用于查询登录失败的用户记录由相应的应用程序独立进行管理awk、sed、vim 是三大主要使用的工具日志管理策略及时做好备份与归档a、命令/脚本+crontabb、rsyslogc、ELK/EFK延长日志保存期限控制日志访问权限:各类敏感信息如账户、口令等集中管理日志:1、将服务器的日志统一发送到日志文件服务器2、便于日志信息的统一收集、整理和分析3、杜绝日志信息的意外丢失、恶意篡改与删除
实验:配置日志服务器
rsyslog是一个C/S架构,可以通过套接字来进行监听记录工作。可以基于TCP和UDP工作。默认的监听端口时514,只需要在MODULES打开即可发送服务器:客户端 192.168.206.20收集服务器:192.168.206.30
步骤:1、先关闭服务端和客户端防火墙、selinuxsetenforce 0systemctl stop firewalldsystemctl disable firewalld
2、修改客户端配置文件,并启动服务vim /etc/rsyslog.conf进入文本后将下面四行的注释取消掉
接着添加以下内容
$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传输br/>#%msg%:日志内容#接收方IP前面一个@表示TCP传输,两个@表示UDP传输
修改服务端配置文件,并启动服务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 -k2、查看系统本次启动的日志journalctl -b [-0] ;"0"指上上次启动的日志3、查看上一次启动的日志journalctl -b -14、显示尾部指定行数的日志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表示倒叙