目录
在Linux系统中,文件和日志是管理和维护系统运行所不可或缺的。理解它们的工作原理和如何有效地管理和分析是每个系统管理员和开发人员的必备技能。
1. Linux 文件系统
1.1 inode号
文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”,每个扇区存储512字节。一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。
我们平时所创建的文件还有系统自己的配置文件等都是放在这些扇区中。那么,系统中如此多的文件,有些时候明明看文件内容是空的,但是却占用了一定的磁盘空间,这是为何呢?还有些文件名特别长,而且杂乱无章,那么该如何快速的找到这个文件呢?其实,每个文件都有它自己的属性,我们称之为文件的元信息,存储文件元信息的地方就叫做inode,每个文件都有自己的独一无二的inode(之前说过软连接硬链接,硬连接的inode号和源文件一样),并且,至少占用一块block,每个inode的大小,一般是128字节或256字节,这就是为什么,明明有些文件内容是空的,却占用了一定的空间。Linux系统中,我们可以用
stat 文件名
或者
ls -i 文件名
来查看文件的inode号,注意,目录是不可以查看的,就像每个人都有身份证,他们的家庭有家庭证吗?那肯定没有,目录有其他表示它的东西。
我们也可以用
df-i
命令查看每个硬盘分区对应的的inode总数和已经使用的inode数量。
前面也说到每个inode号都会占据128字节的空间,我们可以df -Th 看一下硬盘已用空间
假如我们有一块5GB的硬盘,5GB = 5 × 1024MB = 5120MB,每个inode大小 = 128字节 = 0.125KB
5GB的硬盘总大小 = 5120MB = 5120 × 1024KB,每1KB设置一个inode,所以有5120 × 1024个inode
那么每个inode大小为0.125KB,所以inode table的总大小 = 5120 × 1024 × 0.125KB = 655360KB = 640MB
所以可以得出 inode table的大小占硬盘比例 = (640MB / 5120MB) × 100% ≈ 12.5%
所以说了这么多,我们只知道它代表一个文件,node号有啥用呢?
当一个文件文件名包含特殊字符或者这个文件名非常非常长,可能无法正常删除。这时候我们直接删除它的inode号,也能够起到删除文件的作用。其他作用暂时也不需要了解,只要知道,移动文件或重命名文件,只是改变文件名,不影响inode 号码,文件数据被修改保存后,会生成一个新的inode 号码,我们也可以通过inode号来查找文件 用 find -inum 命令
1.2 EXT类型文件恢复
前面说到我们可以根据文件的inode号删除文件,但要知道,inode号虽说不是很长,但也有六七位,七八位,难免有的时候会输错,毕竟,有些人连六位数验证码都要看两遍。那么,文件不小心删错了该怎么办呢?
首先,如果是EXT类型的文件,我们需要用到 extundelete 这是一个开源的数据恢复工具,支持ext3、 ext4文件系统。
首先创建一个磁盘分区,步骤在我前面的博客中有些,这里就快速操作跳过了。
partprobe /dev/sdb 重新读取分区表
mkfs.ext3 /dev/sdb1 格式化
mkdir /test
mount /dev/sdb1 /test 将sdb1挂载到test目录
yum -y install e2fsprogs-devel e2fsprogs-libs gcc gcc-c++ 安装依赖包
cd /test
wgethttp://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
我是有这个压缩包,直接拖进去的
tar jxvf extundelete-0.2.4.tar.bz2 解压缩
cd extundelete-0.2.4/
./configure && make && make install
ln -s /usr/local/extundelete/bin/* /usr/bin/
cd /test
echo a>a
echo b>b
echo c>c
echo d>d 创建1234四个文件夹,分别写入1234
extundelete /dev/sdc1 --inode 2 查看文件系统/dev/sdc1下存在哪些文件,i节点是从2开始的,2代表该文件系统最开始的目录。
rm -rf a b 删除
umount /test
extundelete /dev/sdc1 --restore-all 恢复/dev/sdc1 文件系统下的所有内容
然后我们就会在目录下发现一个RECOVERED_FILES/目录,里面就存放着我们刚才删除的文件
1.3 xfs类型文件备份和恢复
CentOs 7系统默认采用xfs类型的文件,xfs类型文件如果被误删了呢?xfs 类型的文件可使用xfsdump 与xfsrestore 工具进行备份恢复。
xfsdump 命令格式为
xfsdump | -f 备份存放位置 要备份的路径或设备文件
但是有几点,只能备份已挂载的文件系统,而且必须使用root的权限才能操作。
下面来实机演示一下
首先还是先创建磁盘分区
fdisk /dev/sdb
然后格式化 mkfs
mkdir /data
mount /dev/sdb1 /data/
cd /data
cp /etc/passwd ./
mkdir test
touch test/a
rpm -qa | grep xfsdump
yum install -y xfsdump
xfsdump -f /opt/dump_sdb1 /dev/sdb1 [-L dump_sdb1 -M sdb1]
xfsdump -f /opt/dump_sdb /dev/sdb1 -L dump_sdb -M sdb1
---模拟数据丢失并使用xfsrestore 命令恢复文件
cd /data/
rm -rf ./*
ls
xfsrestore -f /opt/dump_sdb1 /data/
可以看到,删除的两个文件恢复了
2. 日志分析
2.1 日志类型
日志文件记录了系统和应用程序的运行状态、事件和错误信息。它是存储数据的容器,提供了访问和管理文件的方法。对日志文件进行分析可以帮助管理员诊断问题、监控系统性能并执行安全审计。目录通常都存放在 /var/log/目录下,由/etc/rsyslog.conf 配置文件管理。常见的日志文件有以下几种
系统日志(/var/log/messages):记录系统级事件和错误信息,如启动、关机、服务启动和停止等。
计划任务日志(/var/1og/cron ): 记录crond计划任务产生的事件信息。
安全日志(/var/log/secure):记录用户登录、权限更改和安全相关事件,对于安全审计非常重要。
应用程序日志:各种应用程序会生成自己的日志文件,记录其运行状态和错误信息。例如,Web 服务器日志是 /var/log/httpd/access_log ,记录 HTTP 请求和响应信息。
邮件系统日志:(/var/log/maillog): 记录进入或发出系统的电子邮件活动。
2.2日志配置文件
我们查看一下 /etc/rsyslog.conf 文件
set nu 设置以下行号,在54行有这样一段代码
*.info --表示info等级及以上的所有等级的信息都写到对应的日志文件里
等级从高到底依次是
0 EMERG(紧急):会导致主机系统不可用的情况
1 ALERT(警告):必须马上采取措施解决的问题
2 CRIT(严重):比较严重的情况
3 ERR (错误) :运行出现错误
4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件
5 NOTICE (注意) :不会影响正常功能,但是需要注意的事件
6 INFO(信息):一般信息
7 DEBUG(调试):程序或系统调试信息等。
mail.none --这部分表示排除所有与邮件相关的日志消息,即不捕获 mail 的任何日志消息。
后面的 authpriv.none 和 cron.none 也是同样的意思
再后面那一块被水印挡住了,那个可以根据上面给出的日志类型,看出是系统日志
我们来进入系统日志看一下 /var/log/messages
可以看到,红黄蓝绿的,眼花缭乱
我们一种颜色一种颜色把它拆解开来
分别是 时间 主机名 子系统名称 具体信息
具体信息那一栏我们看到红色 就说明是报错信息,比如这里就有一段报错信息,根据报错信息,我们就能知道哪里出了问题,从而去解决问题。
2.3 日志分析的重要性
有效的日志分析可以帮助管理员实时监控系统健康状态、及时发现和解决问题,提升系统的稳定性和安全性。定期审查和分析日志还可以帮助预测和规划系统的未来需求,优化系统资源的使用。
总结来说,Linux 文件系统和日志分析是系统管理中不可或缺的一部分,通过深入了解和适当的工具使用,管理员可以更好地管理和优化Linux系统的运行。