Linux—深入理解Linux文件系统
文章目录前言一、inode 与 block1. block2. inode(索引节点)3. 访问文件的流程4. inode 的内容5. inode 的大小6. inode 的特殊作用二、链接文件三、恢复误删除的文件1.编译安装 extundelete2.模拟删除并执行恢复四、分析日志文件前言在处理 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)