Linux文件系统inode数量翻倍,提升文件存储效率 (linux inode 增加一倍)

最近,Linux文件系统的inode数量翻倍,这被许多人视为是一个重要的变革。这个变化将有助于提高文件存储效率,并且使得Linux系统更加适应高性能计算等领域的需求。这篇文章将介绍inode数量翻倍的背景和原因,并讨论这个变化带来的好处和挑战。

inode是什么?

在了解inode数量翻倍之前,我们需要先理解inode是什么。在Linux文件系统中,每个文件或目录都有一个与之相关的inode。inode存储了文件或目录的属性信息,如文件大小、权限、创建时间、修改时间等等。当我们访问一个文件或目录时,系统会根据对应的inode信息来进行操作。

因为inode保存了文件或目录的属性信息,而不是实际数据,所以一个inode可以对应多个数据块。这意味着,每个文件或目录的实际数据都可以被拆分成多个数据块,并且可以分散存储在磁盘上的不同位置。

inode数量翻倍的背景和原因

Linux文件系统的inode数量翻倍,是因为我们现在处理的数据量越来越大,而原先的inode数量已经无法满足需求。为了提高文件存储效率,Linux开发人员决定将inode数量翻倍。

具体来说,每个Linux文件系统都有一个预定义的inode数量,这个数量是在格式化文件系统时设置的。在过去,这个数量通常设置得比较小,如每1GB空间只有25600个inode。而在新的inode数量翻倍的变化中,这个数量会翻倍到每1GB空间有51200个inode。

这个变化的主要原因是,当一个文件系统的inode不足时,就会导致无法创建新的文件或目录。因此,为了更好地处理巨大的数据和文件数量,Linux开发人员希望增加文件系统的inode数量,使其更加适应大规模存储和高性能计算的需求。

inode数量翻倍的好处和挑战

inode数量翻倍带来的好处是很明显的。它可以提高文件存储效率。因为inode数量增加了,每个文件或目录都可以分配更多的inode,这意味着可以分配更多的数据块,从而在磁盘上存储更多的数据。

inode数量翻倍还可以减少文件系统碎片。在过去,由于inode数量有限,当一个文件或目录需要增加或删除时,inode会被重新分配或回收,这可能会导致文件系统出现碎片。而现在,由于inode数量翻倍,这种情况将变得更加少见,从而减少了文件系统碎片的风险。

不过,inode数量翻倍也面临一些挑战。增加inode数量会占用更多的磁盘空间。因为每个inode都需要一定的空间来存储属性信息,所以增加inode数量会使得文件系统占用更多的空间。这可能会导致磁盘空间不足,从而限制了文件系统的扩展能力。

增加inode数量还会对文件系统的性能产生影响。由于inode数量增加了,系统需要更多的时间来查找每个文件或目录的inode信息。这可能会影响文件系统访问的速度,影响整个系统的性能。

结论

inode数量翻倍是一项重要的变革,可以提高文件存储效率,并且适应了现代Linux系统处理大规模数据和文件的需求。虽然它还面临着一些挑战,但我们可以通过技术创新和改进来克服这些问题,使得Linux系统能够更好地服务于我们的需求。

相关问题拓展阅读:

Linux下关于inode的操作

只有“

系统调慎轿用

函数”syscall是内核提供给用户调销老用的,iget不是系统调用,你无法调亏孝升用。

linux怎样提升磁盘读写性能

关于页面缓存的信息,可以用

cat /proc/meminfo 

看到。其中的Cached 指用于pagecache的内存大小(diskcache-SwapCache)。随着写入缓存页,Dirty 的值会增加。

一旦开始把缓存页写入硬盘,Writeback的值会增加直到写入结束。

Linux 用pdflush进程把数据从缓存页写入硬盘,查看有多少个pdflush进程

cat /proc/sys/vm/nr_pdflush_threads

pdflush的行为受/proc/sys/vm中的参数的控制

/proc/sys/vm/dirty_writeback_centisecs (default 500): 

1/100秒, 多长时间唤醒pdflush将缓存页数据写入硬盘。默认5秒唤醒2个慧链旅(更多个)线程。

如果wrteback的时间长于dirty_writeback_centisecs的时间,可能会出问题。

pdflush的之一件事是读取

/proc/sys/vm/dirty_expire_centiseconds (default 3000)

1/100秒。缓存页里数据的过期时间(旧数据),在下一个周期内被写入硬盘。默认30秒是一个很长的时间。

第二件事是判断内存是否到了要写入硬盘的限额,由参数决定:

/proc/sys/vm/dirty_background_ratio (default 10)

百分值,保留过期页缓存(脏页缓存)的更大值。是以MmeFree+Cached-Mapped的值为基准的

pdflush写入硬盘看两个参数:

1 数据在页缓存中是否超出30秒,如果是,标记为脏页缓存;

2 脏页缓存是否达到工作内存的10%;

以下参数也会影响到pdflush

/proc/sys/vm/dirty_ratio (default 40)

总内存的更大百分比,系统所能拥有的更大脏页缓存的总量。超过这个值,开启pdflush写入硬盘。如果cache增长快于pdflush,那么整个系统在40%的时候遇到I/O瓶颈,所有的I/O都要等待cache被pdflush进硬盘后才能重新开始。

对于有高度写入操作的系统

dirty_background_ratio: 主要调整参数。如果需要把缓存持续的而不是一下子大量的写入硬盘,降低这个值。

dirty_ratio:第二调整参数。

Swapping参数

/proc/sys/vm/swappiness

默认,linux倾向于从物理内存映射到硬盘缓存,保持硬盘缓存尽可能大。未用的页缓存会被放唤历进swap区。

数值为0,将会避免使用swapping

100,将会尽量使用swapping

少用swapping会增加程序的响应速度;多用swapping将会提高系统的可用性。

如果有大量的写操作,为避免I/O的长时间等待,可以设置:

$ echo 5 > /proc/sys/vm/dirty_background_ratio

$ echo 10 > /proc/sys/vm/dirty_ratio

文件系统数据缓冲需要频繁的内存分配前凳。加大保留内存的值能提升系统速度和稳定。小于8G的内存,保留内存为64M,大于8G的设置为256M

$ echo> /proc/sys/vm/min_free_kbytes

I/O 调度器

cat /sys/block//queue/scheduler

4中调度算法

noop anticipatory deadline  

deadline :  deadline 算法保证对既定的IO请求以最小的延迟时间。

anticipatory: 有个IO发生后,如果又有进程请求IO,则产生一个默认6ms猜测时间,猜测下一个进程请求IO是干什么。这对于随机读取会造成较大的延时。

对数据库应用很糟糕,而对于Web Server等则会表现不错。

cfq:    对每个进程维护一个IO队列,各个进程发来的IO请求会被cfq以轮循方式处理,对每一个IO请求都是公平。适合离散读的应用。

noop: 对所有IO请求都用FIFO队列形式处理。默认IO不会存在性能问题。

改变调度器

$ echo deadline > /sys/block/sdX/queue/scheduler

对于数据库服务器,deadline算法是推荐的。

提高调度器请求队列的

$ echo 4096 > /sys/block/sdX/queue/nr_requests

有大量的读请求,默认的请求队列应付不过来,可以提高这个值。缺点是要牺牲一定的内存。

为了增加连续读取的吞吐量,可以增加预读数据量。预读的实际值是自适应的,所以使用一个较高的值,不会降低小型随机存取的性能。

$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb

如果LINUX判断一个进程在顺序读取文件,那么它会提前读取进程所需文件的数据,放在缓存中。

服务器遇到磁盘写活动高峰,导致请求处理延迟非常大(超过3秒)。通过调整内核参数,将写活动的高峰分布成频繁的多次写,每次写入的数据比较少。这样可以把尖峰的写操作削平成多次写操作。以这种方式执行的效率比较低,因为内核不太有机会组合写操作。但对于繁忙的服务器,写操作将更一致地进行,并将极大地改进交互式性能。

/proc/sys/vm/dirty_ratio

控制文件系统的写缓冲区的大小,单位是百分比,表示占系统内存的百分比,表示当写缓冲使用到系统内存多少的时候,开始向磁盘写出数据。增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值。

/proc/sys/vm/dirty_background_ratio

控制文件系统的pdflush进程,在何时刷新磁盘。单位是百分比,表示系统内存的百分比,pdflush用于将内存中的内容和文件系统进行同步,比如说,当一个文件在内存中进行修改,pdflush负责将它写回硬盘.每当内存中的垃圾页(dirty page)超过10%的时候,pdflush就会将这些页面备份回硬盘.增大之会使用更多系统内存用于磁盘写缓冲,也可以极大提高系统的写性能。但是,当你需要持续、恒定的写入场合时,应该降低其数值:

/proc/sys/vm/dirty_writeback_centisecs

控制内核的脏数据刷新进程pdflush的运行间隔。单位是 1/100 秒。缺省数值是500,也就是 5 秒。如果你的系统是持续地写入动作,那么实际上还是降低这个数值比较好,这样可以把尖峰的写操作削平成多次写操作。

如果你的系统是短期地尖峰式的写操作,并且写入数据不大(几十M/次)且内存有比较多富裕,那么应该增大此数值。

该参数的设置应该小于dirty_expire_centisecs,但也不能太小,太小I/O太频繁,反而

使系统性能下降。具体可能需要在生产环境上测试。据说1:6 (dirty_expire_centisecs  : dirty_writeback_centisecs )的比例比较好。

/proc/sys/vm/dirty_expire_centisecs

声明Linux内核写缓冲区里面的数据多“旧”了之后,pdflush进程就开始考虑写到磁盘中去。单位是 1/100秒。缺省是 30000,也就是 30 秒的数据就算旧了,将会刷新磁盘。对于特别重载的写操作来说,这个值适当缩小也是好的,但也不能缩小太多,因为缩小太多也会导致IO提高太快。

当然,如果你的系统内存比较大,并且写入模式是间歇式的,并且每次写入的数据不大(比如几十M),那么这个值还是大些的好。

/proc/sys/vm/vfs_cache_pressure

表示内核回收用于directory和inode   cache内存的倾向;缺省值100表示内核将根据pagecache和swapcache,把directory和inode   cache保持在一个合理的百分比;降低该值低于100,将导致内核倾向于保留directory和inode   cache;增加该值超过100,将导致内核倾向于回收directory和inode   cache

/proc/sys/vm/min_free_kbytes

表示强制Linux   VM更低保留多少空闲内存(Kbytes)。

缺省设置:724(512M物理内存)

/proc/sys/vm/nr_pdflush_threads

表示当前正在运行的pdflush进程数量,在I/O负载高的情况下,内核会自动增加更多的pdflush进程。

/proc/sys/vm/overcommit_memory

指定了内核针对内存分配的策略,其值可以是0、1、2。

0,   表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1,   表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2,   表示内核允许分配超过所有物理内存和交换空间总和的内存(参照overcommit_ratio)。

缺省设置:0

/proc/sys/vm/overcommit_ratio

如果overcommit_memory=2,可以过载内存的百分比,通过以下公式来计算系统整体可用内存。系统可分配内存=交换空间+物理内存*overcommit_ratio/100

缺省设置:50(%)

/proc/sys/vm/page-cluster

表示在写一次到swap区的时候写入的页面数量,0表示1页,1表示2页,2表示4页。

缺省设置:3(2的3次方,8页)

/proc/sys/vm/swapiness

表示系统进行交换行为的程度,数值(0-100)越高,越可能发生磁盘交换。

更改:

/etc/sysctl.conf

vm.dirty_ratio = 40

sysctl -p

查看:

请问linux系统中inode和block的关系?

1. inode和block

—–

提到inode,我们不得不先介绍硬盘的整体结构。硬盘中包含多个硬盘盘片,硬盘盘片为圆形,每个硬盘盘片都有一个可以读写的磁头(Head),将这个磁

头固定,使硬盘盘片旋转一周,所走轨迹就是磁道(Track)。硬盘内所有盘片的相同磁道号的成为磁柱(Cylinder)。每一磁道被划分成许多区

域,每个区域叫一个扇区(Sector)。扇区是硬盘的最小存储物理量,一个扇区的存储容量大约是512字节(约0.5K)。

知道了硬盘的大体结构之后,再来谈谈怎么进行硬盘分区。进行硬盘分割的最小单位是磁柱,分割完之后自然就是格式化(format)。在Linux中进行格式化必须考虑Block与inode,Block还好理解,它是磁盘可以记录的最小单位,是由数个扇区组成,所以大小通常为n*512Bytes,例如4K。

那么inode是什么呢Block是记录文件内容的区域,inode则是记录该文件的属性及其放置在哪个Block之内的信息。所

以,每个文件都会占用一个inode。当Linux系统要查找某个文件时,它会先搜索雀咐inode

table找到这个文件的属性及数据存放地点,然后再查找数据存放的Block进而将数据取出。inode数量在一开始已被设定好,其设定方式通常是”硬

盘大小/一个容量”,这个容顷哗纯量比Block大一些较佳,例如刚才将Block设为4K,那么这个容量可以设为8K左右。所以,一块1GB的硬盘如果以8K

大小划分它的inode数,则会有131072个inode。一个inode的大小为128Byte,这样,我们就可以清楚地知道,一个分区被格式化为一个文件系统之后,基本上它一定会有inode table与数据区域两大块,一个用来记录文件的属性信息与该文件存放的Block块,一个用来记录文件的内容。

2. 硬链接

—–

刚才说过,当系统要读取某个文件时,它会先读inode

table,然后根据inode的信息到数据区域将数据取出备用。硬链接就是再建立一个inode链接到文件放置的Block块。也就是说,进行硬链接

时,实际上您的文件内容不会改变,只是原来的inode与后来添加的inode均可指定到该文件存放的地点,因此,读取两个inode的结果都是读取同一

个文件的内容。不过,这样一来就有个问题,因为inode会链接到Block块,而”目录”本身仅消耗inode,这样,硬链接就不能链接目录。所以,硬芦纯

链接有两个更大的限制:

(1) 不能跨文件系统,因为不同的文件系统有不同的inode table;

(2) 不能链接目录。

3. 软链接(符号链接)

—–

相对于硬链接,符号链接比较好理解,基本上,它是再建立一个独立文件,而这个文件会让数据读取操作指向它链接的那个文件。由于只是利用文件作为指向的动作,所以,当源文件被删除,符号链接的文件就打不开了,屏幕会显式”无法开启某文件”。

因此,硬链接比较安全,因为即某一个inode被删除,只要还有一个inode,该文件就能被找到。

4. 分区和文件系统

—–

磁盘分割的重点了: 也就是记录每一个分割区(Partition)的起始与结束磁柱。好了,那么这个分割区的起始与结束磁柱的信息放在哪里呢? 存放在Master Boot Recorder(MBR)

告知系统分割区所在的起始与结束磁柱之后,接着需要将分割区格式化为操作系统认识的文件系统(Filesystem)。因为每个操作系统认识的文件系统并不相同,所以要针对操作系统来格式化分割区 。

一个分割区就是一个文件系统。硬盘的最小储存单位是扇区(Sector),不过数据储存的最小单位并不是扇区,因为用

扇区来存储数据效率低下。因为一个扇区只有512Bytes,而磁头是一个扇区一个扇区地读取数据,如果文件有10MBytes,那么为了读这个文件,磁

头必须要进行20230次读取(I/O)操作。

为了克服这个效率上的困扰,引入了逻辑区块(Block)。逻辑区块是在对分割区进行格式化时,所指定的数据最小储存单位,这个最小储存单位是建立在扇区

的大小之上的(因为扇区是硬盘的最小物理储存单位),所以,逻辑区块的大小为扇区

的2的次方倍数。此时,磁头一次可以读取一个逻辑区块(若干个连续的扇区),如果在格式化时,指定逻辑区块为4KBytes(亦8个连续的扇区构成一个逻

辑区块),那么同样一个10MBytes的文件,磁头要读取的次数则为2560次,可以大幅提高文件的读取效率。

不过,逻辑区块单位的规划并不是越大越好。因为一个逻辑区块最多仅能容纳一个文件。假如逻辑区块规划为4KBytes,而一个文件大小为

0.1KBytes,这个小文件将占用一个逻辑区块的空间,该逻辑区块虽然可以容纳4Kbytes的容量,然而由于文件只占用了0.1Kbytes,所

以,实际上剩下的3.9KBytes是不能再被使用了。在考虑逻辑区块的规划时,需要同时考虑到:

* 文件读取的效率

* 文件大小可能造成的硬盘空间浪费

因此,在规划磁盘时,需要根据主机的用途来进行规划较佳。例如BBS主机由于文章较短, 逻辑区块小一点的好;而如果主机主要用在储存大容量的文件,那么考虑到效率,逻辑区块规划的大一点会比较妥当。

因为inode的差旁数量决定了文件的数量,所以是不能新建文件了。

另外,这握迹样的设置也同时限制了文件的大虚皮橡小?

推嫌巧核荐宽伍资芹掘料:

inode和block分别指什么?

关于linux inode 增加一倍的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux文件系统inode数量翻倍,提升文件存储效率 (linux inode 增加一倍)