我希望ext4文件系统中的所有文件不会因为原因而被分割。可悲的是,e4defrag
(这里建议:如何分解ext4 4文件系统)未能整理几个文件。我有什么选择?
文件系统已经包含了所有的文件(它们不会被以任何方式改变),而且它几乎已经满了。有几个自由块(根据df -h
:434M可用的85G和80G可用),可用作缓冲区。我不需要在碎片整理时挂载文件系统。此外,我还有其他文件系统,有足够的空间作为缓冲区使用。
我的一个想法是将文件移动到其他文件系统,然后以某种方式将它们复制回来,告诉文件系统连续地存储它们。
我刚刚发现我不能依赖e4defrag
输出。它将具有多个区段的文件计数为碎片,同时它知道区段是连续的:
$ sudo filefrag file.file
file.file: 1 extent found
$ sudo e4defrag -vc file.file
e4defrag 1.45.5 (07-Jan-2020)
[ext 1]: start 22388736: logical 0: len 32768
[ext 2]: start 22421504: logical 32768: len 32768
[ext 3]: start 22454272: logical 65536: len 32768
[ext 4]: start 22487040: logical 98304: len 27962
Total/best extents 4/1
Average size per extent 126266 KB
Fragmentation score 0
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This file (file.file) does not need defragmentation.
Done.
发布于 2022-11-13 20:46:11
<#>If您的一些文件很大,从技术上讲,如果不修改文件系统,就不可能对它们进行碎片整理。
任何ext4 4文件系统都是由一系列块组组成的。默认情况下,每个块组的长度为128个MiB。
每个块组从一组文件系统元数据(超级块、组描述符、分配位图和inode表)开始,然后是属于该块组的文件使用的实际数据块。这意味着文件系统元数据主要分散在整个设备上。
但是,由于可选的flex_bg
特性,可以将多个块组聚合到一个更大的组中。自2008ISH以来,mke2fs
一直在默认情况下创建文件系统,并将16个块组打包在一起。假设您在使用-G
选项将文件系统设置为mkfs时没有更改这一点,那么您的文件系统很可能被分成2-GIBFlex组。
除非您的所有文件都明显小于2 GiB,否则您将不可避免地遇到这样一种情况,即要存储的下一个文件必须在两个或多个块组中进行分段。当然,如果您的任何文件大于(flex)块组中的可用数据块,则肯定会发生这种情况。
因此,为了达到目标,您可能必须用比默认的16更高的-G
选项设置文件系统的格式,以便使文件系统使用真正大的flex块组。
发布于 2022-11-13 12:57:53
我希望我的所有文件都在一个ext4文件系统中,而不是因为原因而被分割。
虽然有合理的理由来删除,但没有任何一个文件要求每个文件被删除和连续。任何人可能希望每个文件都被删除的主要原因是OCPD相关的,这完全是浪费时间,因为在安装rw后不久,文件系统将再次变得“支离破碎”。
文件系统..。快满了..。
在这种情况下,您可能无法整理每个文件,因为Linux碎片整理程序倾向于在文件级别工作,而且您不一定有足够的连续空闲空间来整理每个文件。
我的一个想法是把文件移到其他文件系统,然后复制回来.
这是你最可行的选择。但是,特定的文件分配由文件系统驱动程序决定。
要重新排序块,只需有一个空闲块作为缓冲区就足够了。
Linux文件系统开发人员没有给予defrag与Windows相同的优先级。所以问题不在于技术上是不可能的,而是没有人费心去写任何程序来做到这一点。
在碎片整理之后,fs可以设置为ro。
然后使用为ro设计的文件系统,比如squashfs。所有文件将被删除,连续,甚至压缩。
发布于 2022-11-13 15:22:01
回到DOS 6之前,整理胖分区的通常建议是:
我从未尝试过这一点,因为MS 6在碎片整理成为我的一个问题之前(它包含了碎片整理实用程序)出来了。
https://askubuntu.com/questions/1440500
复制相似问题