我对此感到很困惑。为了对 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
你得到了什么?
另外,您究竟是如何创建这些文件的?这些文件真的有内容吗?报告的大小之间的差异可能意味着这些文件很稀疏。