ubuntu - 获取空文件目录的大小

ubuntu - 获取空文件目录的大小

我正在测试一个平面设计来代替 sql db,它使用带有文件的嵌套目录结构。首先,我考虑将数据存储在文件内部,但每个文件不超过 40 个符号,所以既然可以从名称中读取所有内容,为什么还要打开文件呢?但现在我无法找出与 sql 表相比存储空间的实际差异。我尝试了 du 和 find,它总是只显示目录大小和 0B 文件。

有没有办法获取文件的实际大小?或者至少手动计算,或者猜测?

不确定我的云使用什么文件系统,我猜是 ext4。操作系统是 ubuntu 14.04

编辑:

从我的回复中我了解到,唯一会占用磁盘空间的就是目录本身。最小为 4Kb。每个目录应该有大约 300 个空文件。如果一个 inode 至少消耗 256B,则目录应该会膨胀到 76.8Kb,但目录仍然只有 4Kb。

我还想弄清楚 SQL 表和这种平面设置之间的区别。当我执行

SELECT pg_size_pretty(pg_total_relation_size('table_name'));

在包含 300 条记录的表上(名称不是一个字符串,而是 5 个字段 - 6 个带 pk:1x ForeignKey、1xCharfield 最大 20 长度、2x FloatField、1x IntegerField),响应显示大小为 16Kb。这是 postgresql 9.3 和 django 1.8.6。将这些数据存储在 SQL 表中和空文件名称中真的会有 60Kb 的差异吗?或者目录根本不会因 inode 而变得臃肿,而我节省了 12Kb?

如果您想知道我为什么对几 kb 考虑这么多,那么设置稍后应该可以容纳多达 100K 个用户,其中包含 100x300 个空文件或数据库记录...所以这实际上是一个 GB 数据的问题... :-)

答案1

如果仅将文件作为其名称,将其留空,则唯一具有实际大小的就是目录本身。

要理解的关键点是目录是一种比较特殊的文件——它可以被执行(cd /dirname)、读取(ls /dirname)和写入/修改(touch /dirname/filenamerm /dirname/filename)。

一般来说,在目录中添加文件会增加其使用的空间,而删除文件则会减少其使用的空间。但是,由于目录是一种“特殊”的文件,因此文件系统通常会对其施加特定的行为威胁。

欲了解更多信息,您可以阅读这里这里

答案2

您可以cd进入目录并运行ls -lha,调用的.是您的本地目录。请记住,您采用的这种方法将消耗大量的索引节点

编辑1:

您将看到文件大小为 0B,但您将能够看到本地文件夹的大小实际上随着您添加文件而增加,请检查目录.,即您所在的文件夹。

Macbook-Pro:/tmp/test$ ls -lha total 0 drwxr-xr-x 6 DiegoVelez wheel 204B Oct 26 20:07 . drwxrwxrwt 43 root wheel 1.4K Oct 27 09:33 .. -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:06 file -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:06 file2 -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:06 file3 -rw-r--r-- 1 DiegoVelez wheel 0B Oct 26 20:07 file4

相关内容