Linux 文件系统与日志分析(补充)
1、linux文件系统
硬盘的最小存储单位为扇区,每个扇区大小为512字节。而操作系统在读取硬盘数据的时候,一次性最小读取一个块(block),默认一个block大小为4k,即8个扇区。
1.1 文件的存储
- 文件数据信息存储在block
- 文件的属性等信息存储在inode(索引节点),存储block的指针信息,inide存放文件的属性信息。
- 系统或程序通过inode 号寻找正确的文件数据块
- 每个文件至少对应一个inode和一个block,如果此文件超过4k,则会对应1个inode和多个block
-
使用 stat /ls -l 文件名/df -i 命令即可查看某个文件的 inode 信息
1.2 inode和block的关系:
-
系统找到这个文件名对应的 inode 号码;
-
通过 inode 号码,获取 inode 信息;
-
根据 inode 信息,找到文件数据所在的 block,并读出数据。
-
inode 也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分成两个区域:一个是数据区,存放文件数据;另一个是 inode 区,存放 inode 所包含的信息。
-
每个 inode 的大小,一般是 128 字节或 256 字节。
-
xargs 的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
-
通过inode删除文件是处理特殊文件名问题的有效方法,但应谨慎使用。
- 磁盘读取数据时按照block为单位读取,每读一次消耗一次磁盘I/0
2、备份和恢复文件
2.1 误删文件恢复(可能恢复也可能不恢复)
在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。
extundelete 数据恢复工具
-
apt install extundelete(安装)
-
某块磁盘分区的文件误删,解挂载
-
extundelete /dev/sdb1 --restore-all 立刻卸载该文件系统,然后使用
-
再恢复挂载,文件恢复可能成功可能失败
2.2 备份与恢复
xfsdump 按照inode顺序备份一个 xfs 文件系统。xfsdump 的备份级别有两种:0:完全备份;1-9 :增量备份。pxfsdump 的备份级别默认为 0。
常用的备份参数包括以下几种:
- Ø -f:指定备份文件目录;
- Ø -L:指定标签 session label;
- Ø -M:指定设备标签 media label;
- Ø -s:备份单个文件,-s 后面不能直接跟路径。
xfsdump 与 xfsrestore 备份恢复步骤:
- 准备测试分区 ,vm虚拟机添加一块盘,格式化、分区
- 创建文件系统,挂载
- 在挂载目录内创建文件和目录等
- 开始备份数据,使用 xfsdump 命令备份整个分区,xfsdump -f 备份存放位置 要备份路径或设备文件
- 删除挂载目录的内容
- 使用xfsrestore 命令恢复文件,xfsrestore -f 恢复文件的位置 存放恢复后文件的路径
3、日志文件分析
日志文件是用于记录 Linux 操作系统中各种运行消息的文件,相当于Linux 主机的“日记”。不同的日志文件记载了不同类型的信息,如 Linux 内核消息、用户登录事件、程序错误等。
Linux 操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下。
3.1 日志数据主要包括以下三种类型
- 内核及系统日志:这种日志数据由系统服务 rsyslog 统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。系统中有相当一部分程序会把自己的日志文件交由 rsyslog 管理,因而这些程序使用的日志记录也具有相似的格式。
- dmesg命令:显示内核环形缓冲区的内容,这对于查看启动过程中的信息特别有用
- kern.log:在Ubuntu系统中,/var/log/kern.log访问,或者通过dmesg命令或/var/log/syslog访问。
- syslog:这是Ubuntu中最主要的系统日志文件,位于/var/log/syslog。大多数系统事件和消息都会记录在这里。
- auth.log:位于/var/log/auth.log,专门记录认证相关的信息,如登录尝试、sudo使用情况等
- dpkg.log:位于/var/log/dpkg.log,记录了dpkg软件包管理器的操作,如安装、升级和移除软件包。
- apt:与软件包管理相关的日志,在/var/log/apt/目录下
- 用户日志:这种日志数据用于记录 Linux 操作系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
- user.log 或 utmp 和 wtmp:这些文件记录了用户的登录和登出活动。utmp记录当前登录的用户,而wtmp记录所有登录和登出活动。/var/run/utmp和/var/log/wtmp。
- lastlog:位于/var/log/lastlog,记录了系统中每个用户的最后登录信息。
- 程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给 rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异。
- 在 wtmp、btmp、lastlog 等日志文件中,保存了系 统用户登录、退出等相关的事件消息。
3.2 日志优先级别
- 数字等级越小,优先级越高,消息越重要
- Ø 0 EMERG(紧急):会导致主机系统不可用的情况。
- Ø 1 ALERT(警告):必须马上采取措施解决的问题。
- Ø 2 CRIT(严重):比较严重的情况。
- Ø 3 ERR(错误):运行出现错误。
- Ø 4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。
- Ø 5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
- Ø 6 INFO(信息):一般信息。
- Ø 7 DEBUG(调试):程序或系统调试信息等。
3.3 dmesg命令
dmesg命令用于显示Ubuntu系统内核环缓冲区的信息,包括系统启动时的各种消息和错误信息。
- Ø-c:清除内核环缓冲区的内容。
- Ø-H:使用可读格式输出信息。
- Ø-L:显示本地时间。
- Ø-l:显示指定级别的信息,如-l err只显示错误消息。
- Ø-n:设置显示的信息级别,如-n 3表示只显示警告级别以上的信息。
3.4 Journal
Journal是Systemd的一部分,主要负责收集和存储日 志数据。
- 分页输出journalctl
- 不分页输出 journalctl --no-pager
- 按时间倒序查看所有日志: journalctl -r
- 查看最新的10条日志: journalctl -n 10
- 实时查看新添加的日志条目:journalctl -f
3.5 用户日志查看
需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息
注意:
- 用户在非常规的时间登录,或者用户登录系统的 IP 地址和以往的不一样。
- 用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录。
- 非法使用或不正当使用超级用户权限。
- 无故或者非法重新启动各项网络服务的记录。
- 不正常的日志记录,如日志残缺不全,或者是诸如 wtmp 这样的日志文件无故缺少了中间的记录文件。