ext4 Ubuntu 18.04 文件系统错误“结构需要清理”

ext4 Ubuntu 18.04 文件系统错误“结构需要清理”

我想要准备一个 24TB 的磁盘,以便能够在一个目录中包含大量的目录和文件(请不要告诉我改变这个策略,它是一个软件使用的结构,对我们来说是一个黑匣子所以我们无法改变这种方法)。据我充分研究,ext4 文件系统有能力在一个目录中存储数十亿个文件,但应该使用一些特殊的标志和参数来准备。这是我根据我的研究使用的:

sudo mke2fs -T news /dev/sdb1
sudo tune2fs -O dir_index /dev/sdb1
sudo tune2fs -O large_dir /dev/sdb1
sudo tune2fs -O dir_nlink /dev/sdb1


sudo mkdir /hdd
sudo gedit /etc/fstab

- add following to the end of the file:
/dev/sdb1    /hdd    ext4    defaults,noatime    0    0

sudo mount /hdd

为了测试结构,我准备了 bash 脚本,在单个目录中创建目录和文件。像这样的东西:

for ((i = 1000000; i <= 200000000; i++))
do
  sudo mkdir "/hdd/largedir/$i" -p
  sudo cp "sample-file.jpg" "/hdd/largedir/$i"
  if (( $i % 1000 == 0 ));
  then
    echo "$i created";
  fi;
done

经过几个小时的工作后,当我检查系统时,它打印出以下错误:

Structure needs cleaning

在我的测试中,它不是为所有文件和目录打印此错误。例如,我可以创建名为“10000”的目录,但无法创建名为“1000”的目录。我还使用以下命令更改了哈希算法:

sudo tune2fs -E "hash_alg=tea" /dev/sdb1

并重新启动并重新安装系统,但问题仍然存在。有谁知道问题是什么以及为什么文件系统上会出现这种情况? ext4 文件系统是否不够强大,无法拥有如此大的结构?我在一些页面上读到过有关使用 xfs 而不是 ext4 来处理大量文件的内容。这是真的吗?

可以看到,在文件操作过程中,系统没有出现断电、死机的情况。当一切正常的时候我没想到会有这样的行为。

-- 已编辑以获取更多信息:--

磁盘的inode信息如下:

Filesystem        Inodes     IUsed     IFree IUse% Mounted on
/dev/sdb1      421216256 183643803 237572453   44% /hdd

空间信息如下:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1        26T  3.1T   21T  13% /hdd

我检查了文件系统,它是 ext4(如各种工具所示)。例如,gparted 将分区文件系统显示为 ext4。关于功能,我的 ubuntu 18.04 LTS 上默认未启用上述功能。我在以前的测试中遇到了几个错误,最后达到了这个目的。

答案1

使用该命令,sudo mke2fs -T news /dev/sdb1您不一定要创建 ext4 文件系统,而是创建一个外部2文件系统。

假设您的 Ubuntu 18.04 具有/etc/mke2fs.conf与我的 Debian 10 基本相同的文件,那么dir_index已经启用作为使用现代mke2fs.并且dir_nlink默认启用外部4文件系统类型。

手册mke2fs.conf(5)页说:“如果用户和mke2fs.conf文件都没有指定默认文件系统类型,mke2fs则将使用默认文件系统类型外部3如果通过命令行选项请求日志,或者外部2如果不。”

根据该/etc/mke2fs.conf文件,该-T news选项只指定了inode_ratio = 4096选项,没有其他任何内容。因此,除非您使用mkfs.ext4表单而不是普通表单mke2fs,否则您可能会得到一个外部2专为平均大小为 4 kB 或更小的文件而定制的文件系统。

Debian 没有fs_type =[defaults]部分中指定mke2fs.conf,并且您没有包含命令-j的选项mke2fs,因此如果 Ubuntu 的选项mke2fs.conf与 Debian 的相同(通常如此),您的命令可能会为您提供 24 TB外部2文件系统,这可能还没有经过任何人的特别测试。

手册ext4(5)页说64bit文件系统功能将根据需要自动设置,这可能解释了为什么这些工具没有报告任何错误。它还表示dir_indexext2 文件系统会忽略该功能。

根据过去使用多 TBext3文件系统的经验,我预计文件系统的创建和检查时间会很大。对于您的用例,该功能的存在或不存在dir_index可能会影响或破坏您的应用程序性能。

您能否将实际tune2fs -l /dev/sdb1输出编辑为您原来的问题,以便我们无需猜测可能发生或可能未发生的情况?

“结构需要清理”似乎是与EUCLEAN内核错误代码相对应的默认文本,这表明文件系统已损坏,需要进行文件系统检查。在这种大小的文件系统上,这将需要相当多的时间和 RAM。当然,在检查文件系统时需要将其卸载。

答案2

实际上,经过大量测试后,我发现 ext4 似乎没有能力做这样的事情(在一个目录中保存数十亿个文件)。根据我对如何在 Linux 中执行此操作的研究,结果(实际上也是我的实际测试)表明,对于这种情况,我应该使用 XFS 而不是 ext4,因为 ext4 确实是为了完成此任务而构建的。

相关内容