10GB 的 VirutalBox 文件系统如何存储 11GB 的数据?

10GB 的 VirutalBox 文件系统如何存储 11GB 的数据?

我对此感到很困惑。为了对 GlusterFS 进行一些实验,我用 VirtualBox 创建了两个虚拟机,运行 Ubuntu 12.04,每个虚拟机都有 10GB 的存储空间。我编写了一个脚本,在很多文件夹中创建了很多小文件。每个文件都是由以下程序生成的 100k 随机数据:

dd if=/dev/zero of=#{name} bs=1 count=0 seek=100K

当将文件从一台机器复制到另一台机器时,接收方空间不足。这应该是不可能的,因为它们大小相同,而且我没有在其中存储任何东西。试图找出问题所在时,我发现了一个非常令人困惑的情况。这一切都发生在源机器上。

根据 df,我只使用了 26% 的空间:

root@revisionist:~# df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/revisionist-root  9.2G  2.3G  6.5G  26% /
udev                          237M  4.0K  237M   1% /dev
tmpfs                          50M  292K   49M   1% /run
none                          5.0M     0  5.0M   0% /run/lock
none                          246M     0  246M   0% /run/shm
/dev/sda1                     228M   48M  169M  22% /boot

根据du,我创建的整个文件结构占用772M:

root@revisionist:~# du -h files/
...
4.0K    files/3x/ey/hs
8.0K    files/3x/ey
508K    files/3x
772M    files/

这显然是错误的,因为该文件夹仅包含一个 100K 的文件:

root@revisionist:~# ls -lh files/3x/ey/hs
total 0
-rw-r--r-- 1 root root 100K May 19 11:30 3xeyhst4lnkzg5abzeasiw.txt

如果我使用 du 定位该目录和文件,数据显然是错误的:

root@revisionist:~# du -h files/3x/ey/hs/
4.0K    files/3x/ey/hs/
root@revisionist:~# du -h files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
0   files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt

这让我找到了选项--apparent-size,其记录如下:

--表观尺寸

打印表观大小,而不是磁盘使用情况;虽然表观大小通常较小,但由于(“稀疏”)文件中的漏洞、内部碎片、间接块等,它可能会更大

确实这样看起来更好:

root@revisionist:~# du -h --apparent-size files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
100K    files/3x/ey/hs/3xeyhst4lnkzg5abzeasiw.txt
root@revisionist:~# du -h --apparent-size files/3x/ey/hs
104K    files/3x/ey/hs

但是当我对整个结构运行它时,我得到了一个令人惊讶的结果:

root@revisionist:~# du -h --apparent-size files
...
104K    files/3x/ey/hs
108K    files/3x/ey
6.8M    files/3x
11G files

怎么会是 11G?怎么回事?四舍五入就好了?但为什么它无法装在另一台机器上?

答案1

如果您要查找目录的总大小,则应使用-s

看看du -sh files你得到了什么?

另外,您究竟是如何创建这些文件的?这些文件真的有内容吗?报告的大小之间的差异可能意味着这些文件很稀疏。

相关内容