我全新安装了 ubuntu server 12.04 作为 KVM 虚拟客户机。我使用 kickstart 文件来自动执行安装,我已包含创建客户机的命令以及 kickstart 文件的分区部分。这些数字是在全新安装后立即获取的,唯一正在运行的主要服务是 ssh 服务器。有 7GB 的磁盘使用量我无法解释。
Kickstart 分区部分
part /boot --fstype ext4 --size 200
part / --fstype ext4 --size 1 --grow
KVM 安装命令
virt-install -n bigtest -r 4096
--disk path=/var/lib/libvirt/images/bigtest.img,bus=virtio,size=500 \
-c ubuntu-12.04.1-server-amd64.iso --accelerate
--network=bridge:br0 --connect=qemu:///system \
--vnc --noautoconsole -v --os-type linux
磁盘使用情况
运行 df 和 du 报告不同的磁盘使用情况,我知道这种情况是可能发生的。不过 8G 和 512M 之间的差异约为 7G。
root@ubuntu:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda5 500G 8.0G 467G 2% /
udev 2.0G 4.0K 2.0G 1% /dev
tmpfs 792M 220K 791M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 2.0G 0 2.0G 0% /run/shm
/dev/vda1 188M 34M 146M 19% /boot
root@ubuntu:~# du -hs /
512M /
小客测试
在名为 bigtest 的客户机中,虚拟磁盘为 500GB。当我创建另一个名为 smalltest 的客户机,其虚拟磁盘大小为 10GB 时,df 和 du 的数字分别为 764M 和 512M。
KVM 主机报告
现在,如果我们查看主机文件系统上的 kvm 映像文件的大小,我们会发现另一个有趣的故事。
root@vbox1:/var/lib/libvirt/images# du -hs *
753M bigtest.img
744M smalltest.img
保留文件系统块
为了尽可能地排除其他因素,所有这些数字都是在我将保留块百分比设置为 0% 后获取的。
root@ubuntu:~# tune2fs -m 0 /dev/vda5
tune2fs 1.42 (29-Nov-2011)
Setting reserved blocks percentage to 0% (0 blocks)
问题
什么占用了这 7GB 的物理空间。如果使用了,为什么没有反映在主机文件系统磁盘使用率中。
更新 1
我发现了一些非常有趣的事情。如果我运行以下命令并重新启动,df 和 du 的新数字分别为 1.1G 和 875M!这在正常预期之内。
apt-get update
apt-get upgrade
apt-get dist-upgrade
以下是我对此的一些观察:
- 全新安装后,我尝试重启多次,但 8GB 的使用量没有改变
- 运行 apt-get update 和 upgrade 不会减少磁盘使用量,即使重新启动也是如此。
- 仅当使用 apt-get dist-upgrade 更新内核时,并且只有在系统使用新内核重新启动后,使用率才会恢复到正常水平。
更新2
我在 virtualbox 中独立测试了这个问题,也出现了同样的情况。所以这个问题与 Ubuntu Server 有关,与 KVM 或 virtualbox 没有特别关系。
更新 3
一些附加命令按照下面的答案中的建议在机器上运行。
root@ubuntu:/# du --apparent-size -sh --exclude=/proc /
963M /
使用 ncdu
ncdu 1.8 ~ Use the arrow keys to navigate, press ? for help
--- / ----------------------------------------------------------------
230.6MiB [##########] /usr
202.4MiB [######## ] /lib
193.0MiB [######## ] /var
23.7MiB [# ] /boot
8.6MiB [ ] /bin
6.7MiB [ ] /sbin
4.9MiB [ ] /etc
220.0KiB [ ] /run
28.0KiB [ ] /root
20.0KiB [ ] /opt
e 16.0KiB [ ] /lost+found
8.0KiB [ ] /media
4.0KiB [ ] /dev
4.0KiB [ ] /lib64
e 4.0KiB [ ] /tmp
e 4.0KiB [ ] /srv
e 4.0KiB [ ] /selinux
e 4.0KiB [ ] /mnt
e 4.0KiB [ ] /home
0.0 B [ ] /proc
0.0 B [ ] /sys
@ 0.0 B [ ] initrd.img
@ 0.0 B [ ] vmlinuz
Total disk usage: 670.2MiB Apparent size: 128.0TiB Items: 54464
dist-upgrade 前后的 Linux 内核版本如下:
Linux ubuntu 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012
Linux ubuntu 3.2.0-30-generic #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012