我真的很困惑。为了用 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?这是怎么回事?只是围观?但是为什么它无法安装在另一台机器上?
如果您正在寻找目录的总大小,您应该使用
-s
.看看
du -sh files
给你什么?另外,您究竟是如何创建文件的,它们真的有内容吗?报告大小之间的差异可能意味着文件稀疏。