Linux—深入理解Linux文件系统


前言

在处理 Linux 系统出现的各种故障时,故障的症状是容易被发现的,但是导致故障的原因才是排除故障的关键。只有熟悉了解 Linux 系统的日志文件,才能对症下药,及时的解决掉各种系统问题。


一、inode 与 block

1. block

  • 文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。
  • 操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。

2. inode(索引节点)

  • 文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做 inode。
  • 一个文件必须占用一个inode,并且至少占用一个block。inode 不包含文件名。文件名是存放在目录当中的。
  • Linux 系统中一切皆文件,因此目录也是一种文件。
  • 每个inode都有一个号码,操作系统用 inode 号码来识别不同的文件。Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。对于系统来说,文件名只是 inode 号码便于识别的别称,文件名和 inode 号码是一一对应关系,每个 inode 号码对应一个文件名。

3. 访问文件的流程

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

4. inode 的内容

inode 包含很多文件元信息,但不包含文件名,例如

  • 文件的字节数
  • 文件拥有者的 UserID
  • 文件的 GroupID
  • 文件的权限
  • 文件的时间戳

使用 stat 命令可以查看文件的 inode 信息,使用 ls 命令可以查看文件的 inode 号,他们的区别在于 stat 命令是通过查看文件的 inode 信息而查看到 inode 号码。

[root@localhost /home]#stat test.txt 
  文件:"test.txt"
  大小:0         	块:0          IO 块:4096   普通空文件
设备:fd00h/64768d	Inode:102008108   硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2021-08-22 00:05:30.122124011 +0800
最近更改:2021-08-22 00:05:30.122124011 +0800
最近改动:2021-08-22 00:05:30.122124011 +0800
[root@localhost /home]#ls -i test.txt 
102008108 test.txt

Linux 系统文件有三个主要的时间属性,如下所示

格式说明
ctime最后一次改变文件或目录(属性)的时间
atine最后一次访问文件或目录的时间
mtime最后一次修改文件或目录(内容)的时间

5. inode 的大小

  • inode 也会消耗硬盘空间,每个 inode 大小一般是128字节或256字节,inode 的总数在格式化时就给定。

  • 使用“df -i”可以查看每个硬盘分区的 inode 总数和已经使用的数量

[root@localhost /home]#df -iTh                #iTh能更友好的显示结果
文件系统                类型     Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root xfs        28M    145K     28M       1% /
devtmpfs                devtmpfs  468K     411    468K       1% /dev
tmpfs                   tmpfs     472K       1    472K       1% /dev/shm
tmpfs                   tmpfs     472K     582    472K       1% /run
tmpfs                   tmpfs     472K      16    472K       1% /sys/fs/cgroup
/dev/sda1               xfs       250K     328    250K       1% /boot
tmpfs                   tmpfs     472K       9    472K       1% /run/user/42
tmpfs                   tmpfs     472K       1    472K       1% /run/user/0

6. inode 的特殊作用

由于inode号码与文件名分离,导致一些 Unix/Linux 系统具有以下的现象

  • 当文件名包含特殊字符,可能无法正常删除文件,直接删除 inode,就可以删除文件。
  • 移动或重命名文件时,只改变文件名,不影响 inode 号码。
  • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名。
  • 文件数据被修改保存后,会生成一个新的 inode 号码。

通过 inode 号删除文件,命令如下

[root@localhost /home]# find ./ -inum 52305140 -exec rm -i {} \;
[root@localhost /home]# find ./ -inum 50464299 -delete

二、链接文件

  • 为文件或目录建立链接文件
  • 链接文件分类
分类删除原文件使用范围保存位置
软链接失效文件或目录与原始文件可以位于不同的文件系统
硬链接仍然可用只可用于文件必须与原始文件在同一个文件系统
  • ln 命令可以创建硬链接,命令的基本格式如下
ln [源文件] [目标]
  • ln -s 命令可以创建软链接,基本格式如下
ln -s [源文件或目录] [目标文件或目录]

三、恢复误删除的文件

  • 在 Linux 系统运维工作中,经常会遇到因操作不慎,操作错误等导致文件数据丢失的情况。
  • 针对 Linux 下的 EXT 文件系统,可用的恢复工具有很多,其中 extundelete 是一个开源的 Linux 数据恢复工具,支持ext3、ext4文件系统。
  • 在数据被误删除后第一时间要做的就是卸载被删除数据所在的分区如果是根分区的数据被误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。
  • 因为将文件删除后,仅仅是将文件的 inode 节点中的扇区指针清零,实际文件还存储在磁盘上,如果磁盘继续挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,如果数据库被新的数据覆盖,那么误删的数据就可能真的丢失了,这时候即使恢复工具也没有办法了,所以以只读模式挂载磁盘就可以降低数据库的数据被覆盖的风险,提高数据恢复的成功几率。

具体操作步骤如下

1.编译安装 extundelete

[root@localhost /home]#ls
extundelete-0.2.4.tar.bz2                                     #查看安装的依赖包
[root@localhost /home]#tar jxvf extundelete-0.2.4.tar.bz2     #解包
[root@localhost /home]#ls                                     #查看是否解压成功
extundelete-0.2.4  extundelete-0.2.4.tar.bz2                  
[root@localhost /home]#cd extundelete-0.2.4/                  #设置安装路径并且编译安装
[root@localhost /home/extundelete-0.2.4]#./configure --prefix=/usr/local/extundelete && make && make install
Configuring extundelete 0.2.4
Writing generated files to disk
make -s all-recursive
Making all in src
Making install in src
  /usr/bin/install -c extundelete '/usr/local/extundelete/bin'

2.模拟删除并执行恢复

[root@localhost /home/extundelete-0.2.4]#ln -s /usr/local/extundelete/bin/* /usr/bin/
                                                                #设置软链接来调用extundelete这个命令
[root@localhost /home/extundelete-0.2.4]#cd /test/
[root@localhost /test]#echo a>a                                 #创建多个文件
[root@localhost /test]#echo a>b
[root@localhost /test]#echo a>c
[root@localhost /test]#echo a>d

[root@localhost /test]#extundelete /dev/sdb1 --inode 2         #查看查看文件系统/dev/sdb1下存在哪些文件

[root@localhost /test]#rm -rf *                                #把里面所有文件删除
[root@localhost /test]#ls
[root@localhost /]#extundelete /dev/sdb1 --inode 2             #可以看到文件已经被删除
File name                                       | Inode number | Deleted status
.                                                 2
..                                                2
lost+found                                        11             Deleted
a                                                 12             Deleted
b                                                 13             Deleted
c                                                 14             Deleted
d                                                 15             Deleted

数据被删后第一件事就是要取消挂载,防止有数据进入。

[root@localhost /]#umount /test/                              #取消挂载
[root@localhost /]#df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   56G  8.9G   47G   17% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G  9.0M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                497M  172M  326M   35% /boot
tmpfs                    378M   12K  378M    1% /run/user/42
tmpfs                    378M     0  378M    0% /run/user/0

接下来进行数据的恢复,恢复后在当前目录下会出现一个RECOVERED_FILES/目录,里面保存了已经恢复的文件

[root@localhost /]#extundelete /dev/sdb1 --restore-all        #恢复/dev/sdb1文件系统下的所有内容
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 160 groups loaded.
Loading journal descriptors ... 29 descriptors loaded.
Searching for recoverable inodes in directory / ... 
5 recoverable inodes found.
Looking through the directory structure for deleted files ... 
0 recoverable inodes still lost.
[root@localhost /]#ls                                         #恢复后出现了RECOVERED_FILES/目录
bin   dev  home  lib64  mnt  proc             root  sbin  sys   tmp  var
boot  etc  lib   media  opt  RECOVERED_FILES  run   srv   test  usr
[root@localhost /]#cd RECOVERED_FILES/
[root@localhost /RECOVERED_FILES]#cat a
a
[root@localhost /RECOVERED_FILES]#cat b                       #删掉的数据被成功恢复
a
[root@localhost /RECOVERED_FILES]#cat c
a

四、分析日志文件

日志文件是用于记录 Linux 系统中各种运行消息的文件,相当于 Linux主机的“日记”。

1.日志的功能

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

2.日志文件的分类

在 Linux 系统中,日志数据主要包括以下三种类型

  • 内核及系统日志:由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf 中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中相当一部分程序会把自己的日志文件交由rsyslog日志管理,因此这些格式基本一致。
  • 用户日志:记录 Linux 系统用户登录及退出系统的相关信息。
  • 程序日志:用于记录本程序运行过程中的各种时间信息,由各种应用程序独立管理的日志文件,因此记录格式不统一。

3.常见的日志文件

Linux 系统本身和大部分服务器程序的日志文件默认都放在目录 /var/log/ 下

日志文件说明
/var/log/messages内核及公共消息日志:记录 Linux 内核消息及各种应用程序的公共日志信息
/var/log/cron计划任务日志:记录crond计划任务产生的事件信息
/var/log/dmesg系统引导日志:记录Linux 系统在引导过程中的各种事件信息
/var/ log/maillog邮件系统日志:记录进入或发出系统的电子邮件活动
/var/log/secure用户登录日志:记录用户认证相关的安全事件信息
/var/log/lastlog记录每个用户最近的登录事件
/var/log/wtmp记录每个用户登录、注销及系统启动和停机事件
/var/run/btmp记录失败的、错误的登录尝试及验证事件

4.日志的级别

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

总结

对于日志的管理,总结以下几点:

  • 及时做好备份和归档很重要
  • 控制日志的访问权限
  • 集中管理日志
  • 可以延迟日志保存期限,避免不必要的麻烦
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

头发莫的了呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值