是否存在Linux文件系统,也许是保险丝,它将目录大小作为其内容及其子目录的大小?

时间:2012-09-18 07:32:35

标签: linux filesystems fuse

如果没有,那么写一个是否可行?一个文件系统,每个目录以递归方式保持其内容的大小,并且不会通过重新计算文件系统上每次更改的大小来保持更新,但是例如在文件被删除或增长时更新目录大小。

2 个答案:

答案 0 :(得分:2)

我不知道这样的文件系统。从文件系统的角度来看,目录是一个文件。

您可以使用:

du -s -h <dir>

显示目录中所有文件的总大小。

答案 1 :(得分:1)

从文件系统的角度来看,目录的大小是有关其存在的信息的大小,需要在物理上保存在介质上。请注意,包含总共10GB文件的目录的“大小”实际上与空目录的“大小”相同,因为标记其存在所需的信息将占用相同的存储空间。这就是为什么文件的大小(套接字,链接和其他内容)实际上与“目录大小”不同。子目录可以从各种位置安装,包括远程和递归安装。有些目录大小只是人类的愿景,因为真实文件不是物理上的“内部”目录 - 目录只是容器的标记,与特殊文件(例如设备文件)被标记为特殊文件的方式完全相同。重新计算和更新总目录大小更多地取决于其中的项目数量,而不是它们的大小总和,现代文件系统可以将数十万个文件(如果不是更多)保存在一个目录中,即使没有子目录,所以计算它们的大小与获得此信息可能带来的利润相比,这可能是一项相当繁重的任务。简而言之,当你执行例如“du”(磁盘使用情况)命令,或者当您在Windows中计算目录大小时,实际上由内核使用文件系统驱动程序执行它将不会更快 - 计数正在计数。

有一些配额系统,用于保存和更新特定用户或组所拥有的文件总大小的信息,但它们仅限于监视分区,因为可以启用或不启用特定分区配额。此外,正如您所说,当文件增长或被删除时,配额使用会更新,这就是为什么信息可能不准确的原因 - 因此,配额会不时重建,例如,使用cron作业,通过“从头开始”扫描所有目录中的所有文件,在启用它的分区上。

另请注意,IO操作速度的瓶颈(包括读取文件信息)通常是介质本身的速度,然后是通信总线,然后是CPU,而您正在考虑将每个文件系统作为RAM FS快速运行。 RAM FS可能是最简单的文件系统,几乎保存在RAM中,这使得IO操作变得非常快。您可以在模块中构建它并尝试添加您描述的功能,您将学到许多有趣的东西:)

FUSE代表“用户空间中的文件系统”,用保险丝实现的FS通常很慢。当特定情况下的功能比速度更重要时,它们是有意义的,例如,您可以根据您通过USB连接到计算机的新购买的电子温度计创建一个基于温度读数的伪文件系统,但是它们不是速度守护进程,您知道:)