深入剖析Linux文件系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入剖析Linux文件系统相关的知识,希望对你有一定的参考价值。

本次博客将带领各位深入剖析Linux文件系统、熟悉Linux系统中常见的日志文件、了解一般故障的分析与解决办法。

文章目录:

  • inode与block详解
  • 硬链接与软链接
  • 恢复误删文件——最重要
  • 日志文件

一、inode与block详解

一个完整的文件通常都是由元信息和实际数据组成,其中元信息包含了文件权限以及许多文件属性(属组、属主。。。。。。),而实际数据就是我们日常写入的信息。系统会把这两个分别存放在inode和block中。
技术图片

查询某个文件的inode信息——stat命令

[root@localhost ~]# stat install.log

这里的“install.log”可替换为任意文件。
技术图片
通过上面的示意图,可以看出一个对于一个文件来说相当重要的一点,那就是三个时间属性:

最近访问ctime(change time):最后一次改变文件或属性的时间(例如执行了chmod等命令)
最近更改atime(access time):最后一次访问文件或者目录的时间
最近改动mtime(modify time):最后一次修改文件或目录内容的时间

查看某个文件的类型——file命令

[root@localhost ~]# file /etc/profile

这里的“/etc/profile”可替换为任意文件。
技术图片

inode的内容

一般来说,无论是微软还是Linux系统我们都是通过文件名来查找文件,但在系统内部却是使用inode码来识别不同的文件,对于系统来说文件名只是indode号码便于识别的别称。
表面上,用户通过文件名来打开文件,实际上,在系统内部中这个过程分为三步:
技术图片

查看文件对应的inode号码

ls -i命令

[root@localhost ~]# ls -i install.log

技术图片
stat命令

[root@localhost ~]# stat install.log

技术图片

某个磁盘中inode的容量

使用df -i命令来查看每个硬盘inode总数和已使用数量

[root@localhost ~]# df -i /dev/sda1

技术图片

inode号码的特殊作用

由于inode号与文件名分离,所以会出现一些在Linux系统特有的现象:

文件名中包含特殊字符,无法通过“rm”命令删除。这时候就可以通过直接删除inode号码来达到直接删除的文件的作用。

直接删除文件相关inode号可以使用:

[root@localhost ~]# find ./* -inum 50331717 -delete

其中“50331717”为文件的inode号码。
技术图片

二、硬链接与软链接

硬链接与软链接这两者都是Linux系统中的链接方式,不过两者有所不同:

硬链接:通过Linux文件系统的inode链接来生成新的文件名
软链接:类似微软系统的快捷方式,能够进行快速的链接

1、硬链接

使用ln命令创建,具体格式:

ln 源文件 目标名

执行该命令时,会在当前目录下生成一个同inode号但文件名不同的文件:

[root@localhost mnt]# ln aaa.txt test.txt

因为硬链接只能在同一目录下创建,所以这里可以使用相对路径。执行结束后可以看见硬链接与源文件名称不同,但inode号码完全一样。这时候即使删除源文件,后建立的硬链接依旧能够打开文件。
技术图片

2、软链接

使用“ln -s”命令创建,具体格式为:

ln -s 源文件名 目标名称

执行该命令时,会生成一个独立文件,指向源文件(inode不同):

[root@localhost mnt]# ln -s aaa.txt test.txt

因为软链接可以在不同一目录下创建,所以这里如果要跨目录创建需用绝对路径。执行结束后可以看见软链接就类似于快捷方式,相当于一个全新的文件,源文件被删除,软链接随即不可用。
技术图片

三、恢复误删文件(重要!!)

在日常工作中,经常会因为种种原因而导致文件数据丢失(就是误删~~)。不要担心,这里就教给各位在XFS格式中误删恢复的方法。

1、检查恢复用的工具

所谓工欲善其事必先利其器,没有以下的两个工具,数据恢复只不过是空谈

xfsdump软件包
xfsrestore软件包

使用rpm命令在已经安装的rpm包中对其进行筛选。如果没有则需要通过yum库进行安装。

[root@localhost ~]# rpm -qa | grep xfsdump
[root@localhost ~]# rpm -ql xfsdump | grep xfsrestore

技术图片

2、对磁盘文件系统进行备份

将目标磁盘使用xfsdump工具进行备份,格式:

xfsdump -f 备份存放位置 要备份的文件或设备

这里我们将目标磁盘sdb1里的所有文件备份到/opt/data_dump中;

[root@localhost data]# xfsdump -f /opt/data_dump /dev/sdb1

回车进行交互界面后,先后输入备份地址以及备份文件或设备名称。
技术图片
技术图片

3、模拟误删环境

新手将磁盘内文件全部删除

[root@localhost ~]# rm -rf /data/*

技术图片

4、开始恢复作业

在保证不会有新的文件写入的情况下(重要!!!)

使用xfsrestore命令,将备份的磁盘数据进行恢复

[root@localhost data]# xfsrestore -f /opt/data_dump /data/

其中,“/opt/data”为备份文件的位置,“/data”为存放恢复后文件的位置。
技术图片
技术图片
但是,使用xfsdump工具进行备份也有很大的限制:

  1. 只能备份已挂载的文件系统
  2. 必须使用root的权限才能操作
  3. 只能备份XFS文件系统
  4. 备份后的数据只能让xfsrestore解析
  5. 不能备份两个具有相同UUID的文件系统

四、日志文件

日志文件概述

功能:

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

分类:

内核及系统日志(系统装好自带):
由系统服务syslog统一管理,格式基本相同
用户日志:
记录系统用户登录及退出系统的相关信息
程序日志
由各种应用独立管理,记录格式不统一

常用日志文件存放位置

默认路径:

/var/log目录下

其它主要日志文件的存放地点:
技术图片

日志消息级别

日志消息从低到高,从轻微到严重分为0~7,总共8个级别

0 EMERG (紧急):会导致主机系统不可用的情况
1 ALERT ?(警告):必须马上采取措施解决的问题
2 CRIT ???(严重):比较严重的情况
3 ERR ????(错误):运行出现错误
4 WARNING(提醒):可能会影响系统功能的事件
5 NOTICE ?(注意):不会影响系统但值得注意
6 INFO ???(信息):一般信息
7 DEBUG ??(调试):程序或系统调试信息等

其中,
0~3为严重,必须采取措施否则会导致出现严重业务问题;
4~7为轻微,不处理也不会出现大的业务问题。

日志记录格式

技术图片

用户日志与程序日志

1、用户日志
保存了用户登录、退出系统等相关操作

/var/log/lastlog:最近的用户登录事件,
/var/log/wtmp:用户登录、注销及系统开、关机事件
/var/run/utmp:当前登录的每个用户的详细信息
/var/log/secure:与用户验证相关的安全性事件

2、程序日志
由相应服务的应用程序独立管理

Web服务:/var/log/httpd/access_log(error_log)
代理服务:/var/log/squid/access.log(cache.log)
FTP服务:/var/log/xferlog

以上是关于深入剖析Linux文件系统的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Linux文件系统之ext2路径名查找

剖析epoll机制

深入剖析Linux——进程信号

Linux(内核剖析):13---系统调用的实现与解析

深入理解linux系统下proc文件系统内容

面试常问点:深入剖析JVM的那些事