Linux----深入理解Linux文件系统和日志分析_weixin_Wangnan的博客-程序员秘密

技术标签: Linux系统  linux  

一、inode和block

1.1:inode和block概述

  • 文件数据包括原信息与实际数据
  • 文件是存储在硬盘上的,硬盘最小存储叫做扇区,每个扇区512字节
  • 操作系统读取硬盘信息,不会一个一个扇区读取。实际情况一下连续读取
  • 多个扇区,一次性读取多个扇区,叫做块(Block),这种多个扇区组成的“块”是文件存取的最小单位,最常见的4K,就是8个扇区组成的一个Block块
  • block(块):是文件存取的最小单位,连续的八个扇区组成一个block
  • inode(索引节点):也叫i节点。用于存储文件元信息
  • 文件的数据包括二部分:1、元信息(inode) 2、实际数据(block)

1.2:inode内容

1.2.1:inode包含文件的元信息

  • 文件的字节数
  • 文件拥有者UserID
  • 文件的GroupID
  • 文件的rwx权限(读、写、执行)
  • 文件时间戳

1.2.2:查看inode信息

  • 使用stat命令可以查看文件inode信息
示例:stat 1.txt
  • Linux系统文件的三个主要的时间属性
    ctime(change time) :是最后一次改变文件或目录(属性)的时间,例如执行 chmod, chown 等命令;
    atime(access time):是最后一次访问文件或目录的时间;
    mtime(modify time):是最后一次修改文件或目录(内容)的时间

inode中并不包括文件名,其实文件名是放在目录中的,linux系统中一切皆文件,因此目录也是文件。
文件名1-------inode号码1
文件名2-------inode号码2
每个inode都有一个号码,操作系统用inode号码来识别不同的文件
对于用户,文件名只是inode号码便于识别的别称

1.3:inode号码

  • 用户通过文件名打开文件时,系统内部过程
    1、系统找到文件名的inode号码
    2、通过inode号码,获取inode信息
    3、根据inode信息,找到文件所在的block,并读取数据
  • 查看inode号码的方法
    li -i命令:直接查看当前目录文件名的所对应的inode信息
    ls-ai命令:直接查看当面目录的文件及隐藏文件的所对应的inode信息
    stat命令:通过查看文件inode信息而查看到inode号码
  • 当用户在linux系统中视图访问一个文件时候,系统会根据文件名去查找对应的inode,看该用户是否具有访问这个文件的权限,如果有,就指向对应的数据block,如果没有,就返回 permission deied
    而一块硬盘分区后的结构则如下:
    文件-------目录项--------目录块
    元信息-----inode-------inode表区块
    数据------block-------block数据块

1.4:inode大小

  • inode也会消耗硬盘空间,所以格式化的时候,操作系统自动将硬盘分区成二个区域,一个数据区、存储文件数据,一个是inode区,存放所有的inode信息。每个inode大小
  • 一般为128字节或者256字节,通常情况下不需要关注单个inode的大小,而是需要重点关注inode总数,inode的总数在格式化就给定了
  • 执行df -i 命令就可以查看。
    每个分区的对应inode总数和已经使用的inode数量。

1.5:inode特殊作用

  • 当文件名包含特殊字符,可能无法正常删除。这时直接删除 inode,能够起到删除文 件的作用
  • 移动文件或重命名文件,只是改变文件名,不影响 inode 号码;
  • 打开一个文件以后,系统就以 inode 号码来识别这个文件,不再考虑文件名。

1.6:文件存储

在这里插入图片描述

1.7:4k对齐

1.7.1:为什么说要固态盘要4k对齐

绝大多数机械硬盘默认为512字节扇区,SSD扇区为4K。
为了确保与操作系统的兼容性,硬盘制造商还将扇区模拟为512字节扇区。
存在4K扇区和4K簇未对齐的情况。因此,有必要通过4K对齐将硬盘模拟扇区对准到4k扇区。
4K对齐的作用是将硬盘扇区与8的整数模拟扇区对齐,即512Bit×8 = 4096Bit,4096字节是4K。
严格来说,只要它是8的倍数,就可以实现4K对齐。

二、硬链接与软链接

  • 在linux系统下的软件文件有2种,一种类似Windows的快捷方式功能的文件,可以快速连接到文件或者目录,称之为软连接
  • 另外一种是通过inode连接产生新的文件名,二部是产生新的文件,称之为硬连接

2.1:硬连接

  • 一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名。但是linux系统允许多个文件名指向同一个inode号码,这意味着,可以不同的文件名访问同样的内容
  • ln命令可以创建硬连接
    命令格式为:ln 源文件 目标文件
  • 建立硬链接后,源文件与目标文件的inode号码相同,都是指向同一个inode,inode信息中的连接数这时就会增加1

2.2:软链接

  • 软连接就是创建一个独立的文件,而这个文件会让数据的读取指向它连接的那个文件名称
    列如,文件A和B的inode号码虽然不一样,但是文件A的内容是文件B的路径,读取文件A时系统会自动访问者导向文件B,这时,文件A就称为文件B的‘软连接’或者符号连接

三、恢复误删除的文件

3.1:EXT 类型文件恢复( extundelete 工具)

  • 删除一个文件,实际上并不清除 inode 节点和 block 的数据,只是在这个文件的父目录 里面的 block 中,删除这个文件的名字。
  • Linux 是通过 Link 的数量来控制文件删除的,只有 当一个文件不存在任何 Link 的时候,这个文件才会被删除。
  • 当使用“rm -rf”来删除数据时。针对 Linux 下的 EXT 文件系统,可用的恢复工具有 debugfs、ext3grep、extundelete 等。 其中extundelete 是一个开源的 Linux 数据 恢复工具,支持 ext3、ext4 文件系统。
  • 在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的 数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原 因很简单,因为将文件删除后,仅仅是将文件的 inode 节点中的扇区指针清零,实际文件还 存储在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也回 天无力。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数 据成功的比例。

3.1.1:编译安装 extundelete

  • 编译安装 extundelete 之前需要先安装两个依赖包 e2fsprogs-libs 和 e2fsprogs-devel, 这两个包在系统安装光盘的/Package 目录下就有,使用 rpm 或 yum 命令将其安装。 e2fsprogs-devel 安装依赖于 libcom_err-devel 包。 安装完依赖包之后,即可将提前上传的 extundelete 软件包解压、配置、编译、安装
[[email protected] opt]# yum -y install e2fsprogs-devel e2fsprogs-libs
[[email protected] ~]# yum -y install wget
[[email protected] opt]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[[email protected] opt]# yum -y install bzip2
[[email protected] opt]# tar xvf extundelete-0.2.4.tar.bz2 
[[email protected] opt]#  cd extundelete-0.2.4/
[[email protected] extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete && make && make install
[[email protected] extundelete-0.2.4]# cd /usr/local/extundelete/bin
[[email protected] bin]# ln -s /usr/local/extundelete/bin/* /usr/sbin/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.2:安装make(没有的话,要安装)

  • 安装:
    yum -y install gcc automake autoconf libtool make
  • 2、安装g++:
    yum install gcc gcc-c++

在这里插入图片描述
在这里插入图片描述

3.1.3:模拟删除并执行恢复操作

虚拟机添加新硬盘,使用 fdisk 命令创建新分区,将其挂载到/data目录下,往该目录下新建一些文件或目录
在这里插入图片描述
在这里插入图片描述
使用“extundelete /dev/sdb1 --inode 2”查看文件系统/dev/sdb1 下存在哪些文件, 具体的使用情况。其中–inode 2 代表从 i 节点为 2 的文件开始查看,一般文件系统格式化挂 载之后,i 节点是从 2 开始的,2 代表该文件系统最开始的目录。
在这里插入图片描述
使用"rm -rf a b"命令删除/tmp/下的 a 文件和 b 文件,当出现误操作时,立刻卸载该文 件系统,然后使用“extundelete /dev/sdb1 --restore-all"恢复/dev/sdb1 文件系统下的所有内容。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2:xfs文件恢复

1.创建一块磁盘并进行挂载做实验
在这里插入图片描述
2、放文件和目录进去
在这里插入图片描述
3、备份,删除,恢复
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、分析日志文件

4.1:日志的功能

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

4.2:日志文件的分类

  • 内核及系统日志:由系统服务 rsyslog 统一管理,这些程序使 用的日志记录具有相似的格式
  • 用户日志:用于记录 Linux 操作系统用户登录及退出系统的相关信息, 包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
  • 程序日志:有些应用程序会选择由自己独立管理一份日志文件(而不是交给 rsyslog 服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管 理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异。

4.2:主要日志文件的介绍

  • 日志文件都默认放在目录/var/log/下

  • 计划任务日志/var/log/cron:记录 crond 计划任务产生的事件信息

  • 系统引导日志/var/log/dmesg:记录 Linux 操作系统在引导过程中的各种事件信息

  • 邮件系统日志/var/log/maillog:记录进入或发出系统的电子邮件活动。

  • 用户登录日志
    /var/log/lastlog:记录每个用户最近的登录事件。
    /var/log/secure:记录用户认证相关的安全事件信息
    /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件
    /var/log/btmp:记录失败的、错误的登录尝试及验证事件

4.3:日志文件分析

  • 目的在于通过浏览日志查找关键信息、对系统服务进行调试,以及判断发生故障的原因 等
  • 对于大多数文本格式的日志文件(如内核及系统日志、大多数的程序日志),只要使用 tail、more、less、cat 等文本处理工具就可以查看日志内容。而对于一些二进制格式的日志 文件(如用户日志),则需要使用特定的查询命令

4.3.1:内核及系统日志分析

  • 内核及系统日志功能主要由默认安装的 rsyslog-7.4.7-16.el7.x86_64.rpm 软件包提供。
  • rsyslog 服务所使用的配置文件为/etc/rsyslog.conf。通过查看/etc/rsyslog.conf 文件中的内 容,可以了解到系统默认的日志设置
  • 在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)
    0 EMERG(紧急):会导致主机系统不可用的情况。
    1 ALERT(警告):必须马上采取措施解决的问题。
    2 CRIT(严重):比较严重的情况。
    3 ERR(错误):运行出现错误
    4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件
    5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。
    6 INFO(信息):一般信息。
    7 DEBUG(调试):程序或系统调试信息等。

4.3.2:用户日志分析

  • 保存了用户登录,退出系统的等相关信息
    /var/log/lastlog:最近的登录事件。
    /var/log/wtmp:用户登录注销及系统开关机事件
    /var/log/utmp:当前登录的每个用户的详细信息
    /var/log/secure:与用户验证相关的安全性事件
  • 分析工具:who、w、users、last 和 lastb
    1.查询当前登录的用户情况——users、who、w 命令
    users 命令:简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。
    who 命令:用于报告当前登录到系统中的每个用户的信息。默认输出包括用 户名、终端类型、登录日期及远程主机
    2.查询用户登录的历史记录——last、lastb 命令

4.3.3:程序日志分析

  • 由相应的应用程序独立进行管理
    1,Web服务:/var/log/httpd/
    access_log , error_log
    2,代理服务:/var/log/squid/
    access.log , cache.log
    3,FTP服务:/var/log/xferlog
  • 分析工具
    文本查看,grep过滤检索,webmin管理套件查看
    awk,sed文本过滤,格式化编辑工具
    专用日志分析工具
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47152389/article/details/106962709

智能推荐

【无线篇】(6.0) ❀ 09. 无线速度对比测试 ❀ FortiAP 无线AP_飞塔老梅子的博客-程序员秘密

【简介】有的时候会有人反应,为什么装了AP后无线速度很慢,甚至比普通无线路由器都不如?这里给你解答。

让你的手机变身电脑--我所知道的几种方式_zd200572的博客-程序员秘密

最近热衷于当一个伪极客,把手机变为电脑,理想的情况是直接接上一台显示器,有线或者无线的方式,就实现电脑的操作。于是用搜索引擎和github上找啊找,终于找到几个实现方式,有的是大部分设备均可用的,有的只能局限于几台设备,都放在这,只是个爱好,记录一下。1.Ubuntu Touch在官方已经放弃的情况下,ubports一个社区支撑起了开发ubuntu touch的大旗,已经升级到了ubunt...

Cent OS 8解决开机网卡未启动_真是适合睡觉的天气的博客-程序员秘密_centos8网卡无法启动

问题Cent OS8开机启动后网卡未正常启动,未显示网络连接,无网络连接选项排查[[email protected] ~]$ ifconfig发现没有ens33网卡[[email protected] ~]$ ifconfigdocker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 02:42:da:73:b2:35 txqueuelen 0 (Ethernet) RX ..

mysql 判断为空默认值_MySQL ifnull函数判断字段值为null时使用默认值_邹振东的博客-程序员秘密

在使用left join等联表查询时,常遇到某些字段为null,一般都在后台语言使用if a==null 判断做处理,其实MySQL本身也有一个ifnull函数可以处理。假设有两张表name表:mysql> select * from name;+------+-----------+| id | user |+------+-----------+| 1 | xiaoq...

区域地址搜索 - 地理信息系统(5)_weixin_30888413的博客-程序员秘密

(2017-07-23 银河统计)区域地址搜索是指某一地址或某些地址是否在指定的区域范围内。区域范围一般有圆形、矩形和多边形,利用百度地图API提供的数据接口,可以提取中国,各省、市、区,甚至是小区或商圈的边界经纬度坐标(多边形)。这样,就可以根据判断任意经纬度所在区域,在地址分类以及和地址相关指标的分类和插值算法中有广泛用途。本文判别计算需要引入百度地图API类库:<script t...

linux普通用户使用docker_Sigod的博客-程序员秘密_docker普通用户启动

用户无法使用docker在生产环境会遇到一种情况远程服务器给你普通用户账号,不会给你root账号这个时候使用docker,会报权限不够一般处理办法#将当前登录用户加入到docker用户组中sudo gpasswd -a $USER docker#更新用户组newgrp docker#测试docker命令普通用户是否可以正常使用docker ps使用docke...

随便推点

PHPStudy 安装 Imagick 报错:无法定位程序输入点 于动态链接库上_weixin_34130269的博客-程序员秘密

这个比比较坑了。。。这个是因为你即使把相关的DLL复制到 ext | PHP 目录也不行,你需要把CORERL*_.dll 都复制到Apache\bin 目录下,因为apache运行需要这些dll转载于:https://blog.51cto.com/13590888/2066696...

HDU 4325 - Flowers(线段树区间更新+离散化)_weixin_30256505的博客-程序员秘密

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4325【题意】有 nnn 朵花,已经给出每朵花的开花时间 [si,ei][s_i, e_i][si​,ei​],现在有 mmm 次查询,对查询值 xxx,输出在时间点 xxx 开花的个数(n,m<=105,si,ei<=10...

angular 中实现路由复用—简单实例_大脑经常闹风暴@小猿的博客-程序员秘密_angular路由复用

angular 中实现路由复用—简单实例感谢这位大神的文章,得以实现了路由复用网址网上查阅了很多资料,终于运行出了一个实例,并做了精简,主要实现,路由跳转后,原来页面内容不变。一、新建angular项目1、进入cmd窗口,将当前路径设置为需要添加angular项目的路径2、新建一个带有路由的项目,项目名为:routerDemo使用VScode 打开新创建的项目。二、实现简单的路由跳转页面1、新建两个组件page1,page2ng g component components/page1

kali Linux开启ssh服务_Bear :)的博客-程序员秘密_kalilinux开启ssh服务

目的:本地xshell连接Kali Linux。步骤:1.修改kali Linux的配置文件。vim /etc/ssh/sshd_config #进入配置文件去掉PasswordAuthentication 前的#号,且后面跟yes。去掉PermitRootLogin 前的#号,且后面跟yes。2.开启ssh服务。service ssh start service ssh stop #关闭服务查看状态:service ssh status3.xshel

java编写接口发送POST请求_誰言的博客-程序员秘密_java post接口

java编写接口发送post请求public static String send(String url, Map<String,String> map) throws ParseException, IOException{String body = “”;//创建httpclient对象CloseableHttpClient client = HttpClients.cr...

安装IE8不能调试VS2005的解决办法_weixin_34357436的博客-程序员秘密

直接修改注册表的方法:注册表HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main下,新建一名为TabProcGrowth的dword值, value 为0

推荐文章

热门文章

相关标签