Linux文件系统深入了解
前言
- 在处理Linux系统出现的各种故障时,故障的症状是最容易发现的,而导致这一故障的原因才是最终排除故障的关键。
- 熟悉Linux系统中常见的日志文件,了解一般故障的分析与解决办法,将有助于管理员快速定位故障点,“对症下药”,及时解决各种系统问题。
一、inode 和 block 概述
-
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储 512字节
-
由多个扇区组成的"块",是文件存取的最小单位
-
"块"的大小,最常见的是 4KB,即连续八个 sector 组成一个 block
-
文件数据存储在“块”中,那么还必须找到一个地方存储文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种存储文件元信息的区域就叫做 inode
1.1 inode的内容
1.1.2 inode包含文件的元信息
-
inode包含很多的文件元信息,但不包括文件名,例如:
文件的字节数
文件拥有者的UserID
文件的GroupID
文件的读,写,执行权限
文件的时间戳
1.2 Linux系统文件三个主要的时间属性
- ctime(change time)
-
- 最后一次改变文件或目录(属性)的时间,例如执行chmod,chown等命令
-
atime(access time)
最后一次访问文件或目录的时间
-
mtime(modify time)
最后一次修改文件或目录(内容)的时间
1.3 目录文件的结构
-
inode不包括文件名,文件名是存放在目录当中的
-
Linux系统中一切皆文件,因此目录也是一种文件
-
目录文件的结构,每一行称为一个目录项
文件名1 inode号码1 文件名2 inode号码2
-
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
-
Linux系统内部不使用文件名,而使用inode号码来识别文件
-
对于用户来说,文件名指示inode号码便于识别的别称
1.4 inode的大小
-
inode也会消耗硬盘空间,每个inode的大小一般是128字节或256字节
-
格式化文件系统时确定inode的总数
-
使用df -i命令可以查看每个硬盘分区的inode总数和已经使用的数量
1 [root@localhost opt]# df -i 2 文件系统 Inode 已用(I) 可用(I) 已用(I)% 挂载点 3 /dev/sda2 10485760 117069 10368691 2% / 4 devtmpfs 229705 372 229333 1% /dev 5 tmpfs 233378 1 233377 1% /dev/shm 6 tmpfs 233378 543 232835 1% /run 7 tmpfs 233378 16 233362 1% /sys/fs/cgroup 8 /dev/sda5 5241856 141 5241715 1% /home 9 /dev/sda1 3145728 328 3145400 1% /boot 10 tmpfs 233378 16 233362 1% /run/user/0
1.5 inode的特殊作用
-
由于inode号码与文件名分离,导致一些Unix/Linux系统具有以下的现象
1,当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
2,移动或者重命名文件时,只改变文件名,不影响inode号码
3,打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名
-
这使得软件更新变得简单,可以在不关闭软件的情况下进行更新,不需要重启
因为系统通过inode号码,识别运行中的文件,不通过文件名
更新的时候,新版文件以同样的文件名,生成一个新的inode,不会影响到运行中的文件
等到下一次运行这个软件的时候,文件名就会自动指向新版文件,旧版文件的inode则被回收
二、硬链接和软链接
在Linux下面的链接文件有两种:
- 一种类似于Windows的快捷方式功能的文件,可以快速连接到目标文件或目录,这种称为软链接
- 另一种则是通过文件系统的inode链接文件来产生新的文件名,而不是产生新文件,这种称之为硬链接
2.1 硬链接
- 一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。
-
但是Linux系统允许,多个文件名指向同一个inode号码。这表示可以用不同的文件名来访问同样的内容
-
ln 命令可以创建硬链接,命令的基本格式为:ln 源文件 目标
- 运行此命令后,源文件和目标文件的inode号码相同,都指向同一个inode。inode信息中的“链接数”此时就会增加1
-
当一个文件拥有多个硬链接时,对文件内容修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名的访问。删除一个文件名,只会使得 inode 中的"链接数"减 1。需要注意的是不能对目录做硬链接。
2.2 软链接
-
软链接就是再创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件的文件名
-
例如:文件A和文件B的inode号码虽然不一样,但是文件A的内容是文件B的路径。
读取文件A时,系统会自动将访问者导向文件B
此时,文件A就称为文件B的“软链接(soft link)”或者“符号链接(symbolic link)”
-
这表示,文件A依赖于文件B而存在,如果删除了文件B ,打开文件A就会报错
这是软链接与硬链接的最大不同:文件A指向文件B的文件名,而不是文件B的inode号码,文件B的inode“链接数”不会因此产生变化。
2.3 软链接和硬链接总结
-
删除原始文件后,软链接无法找到原始文件的文件名,所以会报错。硬链接与原始文件inode相同,所以不影响访问,仍旧可用。
-
删除一个文件,实际上并不清除inode节点和block的数据,只是在这个文件的父目录里面的block中,删除这个文件的名字
Linux是通过link的数量来控制文件的删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除
三、日志文件
3.1 日志文件功能
-
用于记录系统,程序运行中发生的各种事件
日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的“日记”
不同的日志文件记载了不同类型的信息,如Linux内核消息,用户登录事件,程序错误等
-
通过阅读日志,有助于诊断和解决系统故障
在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件
当 主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹
3.2 日志文件分类
-
内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
-
用户日志
记录系统用户登录及退出系统的相关信息,包括用户名,登录的终端,登录时间,来源主机,正在使用的进程操作等。
-
程序日志
由各种应用程序独立管理的日志文件,记录格式不统一
程序安装后不会生成日志文件,只有在启动的时候才会生成日志文件,没有访问它,日志文件就是空的
3.3 日志保存位置
-
默认位于:/var/log目录下
- Linux系统本身和大部分服务器程序的日志文件都默认存放在/var/log下
- 一部分程序共用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序因日志文件较多,所以会在/var/log目录中建立相应的子目录来存放日志文件
- 有相当一部分日志文件只有root用户才有权读取,保证了相关日志信息的安全性
3.4 主要日志文件
日志类别 | 存放目录 |
---|---|
内核及公共消息日志 | /var/log/messages |
计划任务日志 | /var/log/cron |
系统引导日志 | /var/log/dmesg |
邮件系统日志 | /var/log/maillog |
用户登录日志 | /var/log/lastlog,/var/log/secure,/var/log/wtmp,/var/log/btmp |
四、日志文件分析
4.1 日志消息级别!
-
受rsyslogd服务管理的日志文件都是Linux系统中最重要的日志文件,它们记录了Linux系统中内核,用户认证,邮件,计划任务等最基本的系统消息
-
在Linux内核中,根据日志消息的重要程度不同,将其分为不同的优先级(数字等级越小,优先级越高,消息越重要)
-
级别
解释 0 EMERG(紧急) 会导致主机系统不可用的情况 1 ALERT(警告) 必须马上采取措施解决的问题 2 CRIT(严重) 比较严重的情况(某些功能不可用) 3 ERR(错误) 运行出现错误 4 WARNING(提醒) 可能会影响系统功能的事件 5 NOTICE(注意) 不会影响系统但值得注意 6 INFO(信息) 一般信息 7 DEBUG(调试) 程序或系统调试信息等(做维护的时候可能会用到)