文件系统与日志

一、Inode与block

1、概述

磁盘被分区并格式化为ext4文件系统后,会生成一定数量的inode和block

Inode 索引节点

作用:存放文件的属性信息以及作为文件的索引(指向文件的实体block)

Block存放的是文件的实际数据

inode存放文件的属性信息以及指向文件实体的指针(block的位置),文件名不在inode里一般在上级目录的block里

系统内部打开文件的步骤

访问文件的过程,通过文件名(上一级目录的block)——>inode ——>blocks

(1)系统找到这个文件名对应的inode号码

(2)通过inode号码,获取inode信息

(3)根据inode信息,找到文件数据所在的block,读出数据

Inode是磁盘的一块存储空间,centos6版本中默认大小256字节

inode的表现形式是一串数字,不同的文件对用的iNode在文件系统里是唯一的

inode节点号相同的文件,互为硬链接文件,可认为是一个文件的不同入口

Ext4文件系统下,一个文件至少要占用一个iNode和一个block(在文件size比较大的情况),多个文件可以占用同一个iNode(硬链接),相同文件;正常情况下,一个文件只能占用一个iNode

Block是用来存储实际数据的,每个block的大小一般只有1k,2k,4k,其中引导分区等为1k,其他普通法分区多为4k

如果一个文件很大,需要占用多个block,如果文件很小,知道占一个block,并且这个block的剩余空间浪费,即无法再存储其他数据

通过df -i 查看inode的数量及使用情况, dumpe2fs /dev/sda3查看 inode及 block的大小及数量

可以再格式化的时候改变iNode及block的大小

ll  -i  可以看文件的inode号

查看inode时,三个时间显示,分别是Atime、Mtime、Ctime

Atime:访问时间 查看命令# ls -lu

Mtime:修改内容时间 查看命令# ls -l

Ctime:改变时间(修改文件名、权限等等) 查看命令# ls -lc

2、Inode的大小

Centos 6.x系列:256k

Centos 5 默认是128k

3、看版本号:cat /etc/redhat-release

看具体的内核版本:uname -r

看inode号大小:

dumpe2fs /dev/sda3 | grep -i “inode size”

4、df-i  看inode号

# ls -i 文件名

# stat 文件名

5、df -h看block的容量

6、删除指定的inode号对应的文件

# find ./ -inum  inode号  -exec rm -i {} \;

7、查看文件系统的inode与block的信息

# df -i 设备名(在已挂载状态下查询,查询inode总数与已用数量)

# dumpe2fs -h 设备名 (无需挂载)

# tune2fs -l 设备名 (无需挂载)

二、工作中的应用

1、格式化时指定文件系统的inode个数与block大小

# mkfs.ext4 -N inode 数 -b 块大小(单位字节)设备名

2、解决inode耗尽导致的磁盘故障

(1)删除不使用文件

(2)将文件备份,重新格式化此文件系统,指定较多的inode个数

3、查看inode及block的使用量

# df -l

三、Block概述

磁盘读取数据是按block为单位读取的

一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O;如果要提升磁盘I/O性能,九要尽可能一次性读取多的数据

Block是用来存储实际数据的,每个block的大小一般只有1k,2k,4k,其中引导分区等为1k,其他普通法分区多为4k

如果一个文件很大,需要占用多个block,如果文件很小,知道占一个block,并且这个block的剩余空间就浪费了,即无法再存储其他数据

企业里文件都会比较大(一般会大于4k),block设置大一些会提高磁盘访问效率(一般选

择4k)

四、面试题

一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少个?

1K虽然小,但block一般默认4K,即使1K的数据也会占用4K大小,存储数据小号block和inode,inode默认256K,每个文件指导占用一个block的同时还会占用一个inode;1M的数据刚好被4整除,不会浪费空间,大约100个左右,inode充足。

如果向磁盘写入数据提示如下错误:No space left on device, 通过df -h查看磁盘空间,发现没满,请问可能原因是什么?企业场景什么情况下会导致这个问题发生?

最可能原因是inode被耗尽;企业工作中右键临时队列/var/spool/postfix/maildrop这里很容易被大量的恶小文件占满导致No space left on device的错误。

五、Linux下扩展名的作用

1.tar,tar.gz,tgz,zip,tar.bz表示压缩文件,创建命令一般为tar,gzip,unzip等

2. .sh表示shell脚本文件,通过shell语言开发的程序

3. .pl表示perl语言文件,通过perl语言开发的程序

4. .py表示python语言文件,通过python语言开发的程序

5. .html,.htm,.php,.jsp,.do表示网页语言的文件

6. .conf表示系统的配置文件

7. .rpm表示rpm安装包文件

Linux文件系统如何选择(扩展)

1. 大量小文件(LOSF,Lost of small files)I/O应用(如小图片)

Reiserfs(首选),Ext4文件系统适合这类负载特征,IO调度算法选择deadline,block size=4096,ext4关闭日志功能;

reiserfs mount参数:-o

defaults,async,noatime,nodiratime,notail,data=writeback;

ext4 mount参数:-o

defaults,async,noatime,nodiratime,data=writeback,barrier=0;

关闭ext4日志:tune2fs -O^has_joumal /dev/sdXX

2.大文件I/O应用(如视频下载,流媒体)

EXT4文件系统适合此类负载特征,IO调度算法选择anticipatory,block size=4096,关闭日志功能,启用extent(default);

mount参数:-o

Defaults,async,noatime,nodiratime,data=writeback,barrier=0;

关闭ext4日志:tune2fs -O^has_joumal /dev/sdXX

3.SSD文件系统选择

EXT4/Reiserfs可以作为SSD文件系统,但未对SSD做优化,不能充分发挥SSD性能,并影响SSD使用时间;

Btrfs对SSD作了优化,mount通过参数启用。但Btrfs扔处于试验阶段,生产环境谨慎使用;

JFFS2/Nilfs2/YAFFS是常用的flash file system,在嵌入式环境广泛应用

六、文件属性软硬连接:

1、概述

链接有两种,一种为硬链接(Hard Link),另一种为软链接或符号链接(Symbolic Link或Soft Link)。

建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。

在硬链接的情况下,参数中的“目标”被链接至[链接名]。如果[链接名]是一个目录名,系统将在该目录之下建立一个或多个与“目标”同名的链接文件,链接文件和被链接文件的内容完全相同。

如果给ln命令加上- s选项,则建立符号链接。如果[链接名]已经存在但不是目录,将不做链接。[链接名]可以是任何一个文件名(可包含路径),也可以是一个目录,并且允许它与“目标”不在同一个文件系统中。如果[链接名]是一个已经存在的目录,系统将在该目录下建立一个或多个与“目标”同名的文件,此新建的文件实际上是指向原“目标”的符号链接文件。

1硬链接(hard link) :

在Linux文件系统中,多个文件名指向同一个索引节点(inode)。这种情况文件就称为硬链接。硬链接文件就相当于文件的另外的一个入口。

具有相同inode节点号的多个文件是互为硬链接文件

删除硬链接文件或者删除源文件任意之一,文件实体block并未被删除;只有删除了源文件及所有对应的硬链接文件,文件实体block才会被删除;当所有的硬链接文件及源文件被删除后,再存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收。可以通过给文件设置硬链接文件,来防止重要文件被误删

2软链接(symbolic link):

软连接又叫做符号链接,它几乎可以等价于windows下的快捷方式;

软连接的创建

软连接:ln -s 源文件 目标文件(目标文件不能已经存在)

软连接知识

软连接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体

删除源文件(可以用rm命令删除),软连接文件依然存在,但是无法访问指向的源文件路径内容了

失效的时候一般是白字红底闪烁提示

执行命令“ln -s 源文件 软连接文件”,即可完成创建软连接(目标不能存在)

软连接和源文件是不同类型的文件,也是不同的文件,inode号也不相同

2、创建软硬链接命令

创建硬链接:# ln 源文件 目标文件

软连接:# ln -s 源文件 目标文件(目标文件不能已经存在,文件类型为l)

文件彻底删除

硬链接文件是普通文件,所以可以用rm命令删除

对应静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link),文件就被删除了。

i_link的查看方法

# ls -lhi 第三列的数字就是

硬链接的限制

我们在使用硬链接的同时也需要对硬链接的限制有所了解;

1. 不能跨文件系统

2. 不能链接到目录

3、有关文件的整体总结:

(1)删除软连接,对源文件和硬链接文件都没有影响

(2)删除硬链接,对源文件和软连接文件都没有影响

(3)删除源文件,对硬链接没有影响,但是会导致软连接文件失效,白底红字闪烁

(4)同时删除源文件和硬链接文件,整个文件才会真正的被删除

(5)源文件和硬链接文件具有相同的索引节点号,可以认为是同一个文件或一个文件多个入口

(6)源文件和软连接文件的索引节点号不相同,是不同的文件,软连接文件相当于源文件的快捷方式,含有源文件的位置指向

4、有关目录的总结:

对于目录,不可以创建硬链接,但可以创建软连接

目录的硬链接不能跨越文件系统

每个目录下面都有一个硬链接“.”号,和对应上级目录的硬链接“..”

在父目录里面创建一个子目录,父目录的链接数会增加1(每个子目录里都有“..”指向父目录),但在父目录中创建文件,父目录的链接数不会增加

硬链接数的查看

硬链接,增加链接数,删除源文件,连接仍旧有效

软链接,不增加链接数,但删除源文件,软链接失效

在配置apache时,执行了./configure --prefix=/application/apache2.2.17来编译apache,在make install 完成后,希望用户的访问路径更简单,需要给/application/apache2.2.17目录做一个软链接/application/apache,使得内部开发或管理人员通过/application/apache就可以访问到apache的安装目录/application/apache2.2.17下的内容,请你给出实现的命令。(提示:apache为一个httpd web服务)

思路:

软件的安装位置   /application/apache2.2.17

给开发人员使用的位置   /application/apache2.2.17

升级软件,新的软件的安装位置   /application/apache2.4.17

思考:如何给别人使用的始终是一个路径,即使更新了软件;所以,我们要做软链接,这样不论软件如何更新,通过修改软链接的指向就可以,然后软链接的路径始终不变。

1、创建软链接

# mkdir -p /application/apache2.2.17

# ll -ld /application/apache2.2.17

# ln -s /application/apache2.2.17 /application/apache

# ls -l /application/

2、软件更新了,重新创建软链接

#  mkdir -p /application/apache2.4.17

# rm -f application/apache

# ln -s /application/apache2.4.17

# ll /application/

# ln -s /application/apache2.4.17 /application/apache

# ll /application/

3、如图软链接的地址始终不变,不会影响开发人员的使用,这就是实际工作中软链接的意义

为什么目录不能创建硬链接,软链接可以正常创建

硬链接的本质其实就是有多个入口,都可以看到目标文件的内容。这些入口就是门,也就

是硬链接。硬链接其实也就相当于做备份--超市A ---超市A.bak。

软链接就相当于windows的快捷方式,这就如同超市并没有多开新的门,仍旧用的旧门,

只不过告诉你通过多条路都可以来到这个门而已。

因此,对linux来说,硬链接需要系统将目标文件做备份,删除其中的任何一个,文件内容

都不会消失,只不过是删除了其中的一份备份而已;而软链接并没有做备份,他只是多增

加了一条来到门前的通路而已。因此,假如linux允许给目录做硬链接的话,他就同时需要给目录下的所有文件在做一个硬链接,这样会导致系统不断的进行遍历,拖慢系统的运行速度。

描述linux下软链接和硬链接的区别

1,默认不带参数情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软链接

2,硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同。

3,ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到。

4,删除软链接文件,对源文件及硬链接文件无任何影响

5,删除文件的硬链接文件,对源文件及软链接文件无任何影响

6,删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效

7,同时删除源文件及硬链接文件,整个文件才会被真正的删除

8,软链接可以跨文件系统,硬链接不可以跨文件系统

七、Linux文件删除原理

Linux通过link数量控制文件删除,只有当一个文件i_count和i_nlink都为零文件才会被删除,rm删除文件改变的是i_nlink数

正在使用当中的文件,即便你删除了i_nlink(硬链接数),文件实际上也并没有被删除,因为,文件还正在处于读写状态。只有i_count的数也为零时,文件才会被彻底删除。

i_count当前文件被调用的数量(内存引用计数器,被进程调用时增加)

i_nlink截止连接数量(磁盘引用计数器,创建硬链接时增加)

再生产环境中,有时会遇到apache等类似服务,磁盘满了的情况,会要求你去删掉些日

志,如果此时你去删除了,你会发现磁盘空间占用没有改变,还是满的,而且查询不

到。

这是因为,后台进程仍旧在占用着被删掉了的日志文件,因此linux并没有将内容删

除(block),你的删除只是清除了inode和文件名而已。解决这个问题就需要重新启动

apache

较好的处理方案,清空日志而不删除日志>/app/logs/access_log

lsof查看哪个进程在占用,将其kill,就可以rm -f了 ,删除成功

八、恢复误删除的文件(扩展)

针对Linux下的ext文件系统,可用的恢复工具: debugfs,extundelete

extundelete的使用

(1)安装依赖包

e2fsprogs-libs-1.41.12-18.el6.x86_64.rpm

e2fsprogs-devel-1.41.12-18.el6.x86_64.rpm

(2)编译安装

# ls

# tar xf extundelet-0.2.4.tar.bz2 -C /usr/src/

# cd /usr/src/extundelete-0.2.4/

# ls

# ./configure --prefix=/usr/src/extundelete \ > && make && make install

# cp /usr/local/extundelete/bin/extundelete \ > /usr/bin/

(3)执行恢复操作

常用选项

--inode        指定从inode号为多少开始显示

--restore-file    恢复误删除的某个文件

--restore-all     恢复全部已删除的文件

--after dtime    在某个时间点之后删除的文件

--before dtime   在某个时间点之前删除的文件

date -d “日期及时间” +%s   算出某个时间点距离1970年1月1日过去了多少秒

在数据被误删后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,第一时间要做的就是卸载被删除数据做在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区已只读模式挂载。  原因:将文件删除后,仅是将文件的iNode节点中的扇区指针清零,世纪文件还储存在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库背心的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。

恢复/test/passwd/文件

(模拟误删除)

# df -hT

# rm -f /test/passwd

# umount /dev/sdb1

# extundelete /dev/sdb1 --inode 2

(恢复)

# extundelete --restore-file passwd /dev/sdb1

# ls RECOVERED_FILES/

# mount /dev/sdb1 /test/

# mv RECOVERED_FILES/passwd /test/

# ls /test/

九、日志文件

日志文件的分类

(1)内核及系统日志

由系统服务rsyslog管理,根据去主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置。

/etc/rsyslog.conf配置文件中,常见的配置格式:

“.” 你后面等级要高(包含该等级)的都记录 eg:“*.info”

“.=” 只记录该等级 eg:“.=debug”

“!” 除了该等级都记录 eg:“!info”

“-” 当有记录信息需要记录时,现存到缓存中,到一定大小时一次性写入,以减少对磁盘读写性能的占用。 eg:“-/var/log/maillog”

(2)用户日志

用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登陆的终端、登录时间、来源主机、正在使用的进程操作等

(3)程序日志

用于记录本程序运行过程中的各种事件信息。

查看方式

日志消息的级别

数字等级越小,优先级越高,消息越重要

日志文件分析

(1)内核及大多数系统消息

存放位置:/var/log/message

内容解释:

时间标签:消息发出的日期及时间

主机名:生成消息的应用程序的名称

子系统名称:发出消息的应用程序的名称

消息:消息的具体内容

(2)用户日志

存放位置:/var/log/wtmp,/var/log/btmp,/var/log/lastlog

查询命令:users、who、w、last、lastlog、lastb

/var/log/wtmp,一个用户每次登录进入和退出时间的永久记录

/var/log/btmp,记录失败的记录

/var/run/utmp,记录当前登录的每个用户

users命令: 简单输出当前用户的用户名,每一个显示的用户名对应一个会话

who命令:报告当前登录到系统中的每个用户的信息。默认输出包括用户名、终端类型、登录日期及远程主机

w命令:显示当前操作系统中的每个用户及其远程运行的进程信息

last 命令:用于查询成功登录到系统的用户记录,最近的登录情况在最前面

  -a  把从何处登入系统的主机名称或IP地址,显示在最后一行。

  -d  将IP地址转换成主机名称。

  -f   指定记录文件。

  -n 或-  设置列出名单的显示列数。

  -R  不显示登入系统的主机名称或IP地址。

  -x  显示系统关机,重新开机,以及执行等级的改变等信息

lastlog命令:用于显示系统中所有用最近一次登录信息

lastb命令:用于显示用户错误的登录列表,此指令可以发现系统的登录异常

程序日志

存放位置:不固定,一般在/var/log下的子目录中

日志文件分析注意事项:

用户在非常规的时间登录,或者用户登录系统的IP地址和以往不一样的;

用户登录失败的日志记录,尤其是那些一再连续尝试进入失败的日志记录;

非法使用或不正当使用超级用户权限;

无故或者非法启动各项网络服务的记录;

不正常的日志记录,如日志残缺不全,或者是诸如wtmp这样的日志文件无故缺少了中间的记录文件。

日志文件的保护

# chattr +a  增加权限

# chattr +a -R  递归式增加a权限

原文地址:https://www.cnblogs.com/kakajiang/p/9871953.html

时间: 2024-11-10 06:45:24

文件系统与日志的相关文章

EXT4文件系统禁用日志功能

ext4提供有很多特性,当然有一些是前一代文件系统ext3本身就具有的,比如日志功能,但有时候我们却并不需要这些特性,则我们可以禁用它们.ext4文件系统的日志功能就是在牺牲一定性能的情况下增强稳定性的一种手段,但在一些情况,比如Web Server上存在的大量小文件所在的文件系统就是一个典型示例,此时可以禁用ext4的日志功能. 关闭EXT4日志功能: [[email protected] ext4]# tune2fs -O ^has_journal /dev/sdd1 tune2fs 1.4

CentOS 7 Linux基本命令(11)深入理解Linux文件系统与日志

深入理解Linux文件系统与日志 一.inode和block概述 文件数据包括元信息与实际数据 元信息:文件的属性信息实际数据:文件内容 文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区存储512字节 block(块) 连续的8个扇区组成一个block(4k)是文件存取的最小单位 inode(索引节点) 也叫i节点用于存储文件元信息 1.indoe的内容 inode包含文件的元信息 (1)文件的字节数(2)文件拥有者的User ID(3)文件的Group ID(4)文件的读.写.

关闭ext4文件系统的日志功能

最近在帮一个研究生弄一个虚拟化环境下的基于Innodb的日志文件的读写优化的实验,实验的具体详细内容就不说了,其中有一个步骤需要将MySQL的日志文件放置在一块单独的硬盘里面,这块硬盘要么是ext2,要么是ext4,ext4的性能据说比前面的ext系列的要高,所以选择了ext4.但是ext4具备有日志的功能,如果开启了这个日志功能的话,到时又会有多个虚拟机同时跑,那么这个ext4的日志功能会对我们的实验数据产生一定的影响,并且我们在实验中并不需要到这个日志功能,所以需要将这个日志功能关闭.具体如

Linux文件系统与日志

lsof查看系统里所有进程的文件打开数 ulimts -n [[email protected] ~]# ls -lhi total 28K inode号 文件及文件夹权限 硬链接数 属主:属组 文件大小 时间戳 265490    drwxr-xr-x     2     root root    4.0K   Oct 26 22:01 aa 265485    -rw-------.      1     root root    1.2K   Oct  1 23:51 anaconda-k

Linux系统管理12——Linux文件系统与日志

1.indoe与block indoe用于指向block块的指针(代表着原信息) block 块用来存储实际数据,每块block块大小为4KB(代表块信息) 创建一个文件后,会同时创建一个inode和一个block,inode存放的是文件的属性信息,但是不包括文件名,并存放所对应数据所在的block块的地址的指针. block存放文件的数据,每个block最多存放一个文件,而当一个block存放不下的情况下,会占用下一个block. 一般情况下,每个inode占用1024 byte,即128字节

Linux系统管理12-Linux文件系统与日志

一深入理解Linx文件系统-inode与block 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector).每个扇区储存512字节(相当于0.5KB). 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block).这种由多个扇区组成的"块",是文件存取的最小单位."块"的大小,最常见的是4KB,即连续八个 sector组成一个 block. 文件数据都

理论+实操:深入理解Linux文件系统与日志分析

前言: inode(文件节点)与block(数据块) 硬链接与软连接 恢复误删除的文件 (即rm-rf 的操作,可以先进行备份的操作,然后可以进行恢复ext4和xfs文件系统皆可) 日志文件的分类 用户日志与程序日志 一 :inode和block概述 1.1 概述 文件数据包括元信息与实际数据 文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区储存512字节 block(块) 连续的八个扇区组成一个block,一个block单位是4k 是文件存取的最小单位 inode(索引节点)

Linux/Centos7系统管理之深入理解Linux文件系统与日志分析

前言: inode(文件节点)与block(数据块) 硬链接与软连接 恢复误删除的文件 (即rm-rf 的操作,可以先进行备份的操作,然后可以进行恢复ext4和xfs文件系统皆可) 日志文件的分类 用户日志与程序日志 一 :inode和block概述 1.1 概述 文件数据包括元信息与实际数据 文件存储在硬盘上,硬盘最小存储单位是"扇区",每个扇区储存512字节 block(块) 连续的八个扇区组成一个block,一个block单位是4k 是文件存取的最小单位 inode(索引节点)

深入浅出文件系统中的日志系统功能

1.日志系统出现的背景 日志系统出现在20世纪末.最早的日志文件系统出现在1990年IBM的JFS(journal file system)上.1994年,为了更好地支持高性能,SilliconGraphics引进了XFS.从20011年开始,linux系统中就开始支持ext3fs.到了今天,ext4fs.Reiser4.ceph等文件系统都支持了日志系统. 2.日志系统的功能 日志文件系统的功能主要是为了提高文件系统的一致性和性能. 2.1一致性 通过日志系统记录写操作,避免异常关机.掉电等造