删除 domU 安装映像中的数据不会减小映像大小

删除 domU 安装映像中的数据不会减小映像大小

我很难理解以下情况:

Dom0 图像:

[root@Dom0]# du -h 19.12.0.0_dbhome_1.img
980M    19.12.0.0_dbhome_1.img

安装在DomU上:

[root@DomU]# df -h /u01/app/oracle/product/19.12.0.0/dbhome_1
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvde        50G   62M   47G   1% /u01/app/oracle/product/19.12.0.0/dbhome_1

当我向 DomU 和 Dom0 上写入数据时,/u01/app/oracle/product/19.12.0.0/dbhome_1磁盘使用率相应增加:

[root@DomU dbhome_1]# dd if=/dev/zero of=./test.img bs=4k iflag=fullblock,count_bytes > /dev/null
[root@DomU dbhome_1]# df -h /u01/app/oracle/product/19.12.0.0/dbhome_1
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvde        50G   21G   27G  44% /u01/app/oracle/product/19.12.0.0/dbhome_1
[root@Dom0]# du -h 19.12.0.0_dbhome_1.img
21G     19.12.0.0_dbhome_1.img

当我删除数据时,DomU 的磁盘使用量会减少,但 Dom0 保持不变:

[root@DomU dbhome_1]# rm test.img
[root@DomU dbhome_1]# df -h /u01/app/oracle/product/19.12.0.0/dbhome_1
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvde        50G   62M   47G   1% /u01/app/oracle/product/19.12.0.0/dbhome_1
[root@Dom0]# du -h 19.12.0.0_dbhome_1.img
21G     19.12.0.0_dbhome_1.img

差异是如何产生的?

我执行了以下过程来创建和安装映像:
[root@Dom0]# qemu-img create 19.12.0.0_dbhome_1.img.img 50G &>/dev/null
[root@Dom0]# xm block-attach domU file:19.12.0.0_dbhome_1.img /dev/xvde w >/dev/null 2>&1
[root@Dom0]# ln -s 19.12.0.0_dbhome_1.img.img /path/to/link/19.12.0.0_dbhome_1.img
[root@Dom0]# vi vm.cfg (added link to disks[] parameter)
[root@DomU]# parted /dev/xvde mklabel gpt &>/dev/null
[root@DomU]# parted -s /dev/xvde mkpart primary 0 100% &>/dev/null
[root@DomU]# parted -s /dev/xvde set 1 lvm on &>/dev/null
[root@DomU]# echo "/dev/xvde /u01/app/oracle/product/19.12.0.0/dbhome_1 ext4 defaults 1 1\" >> /etc/fstab
[root@DomU]# mkfs.ext4 /dev/xvde &>/dev/null
[root@DomU]# mount -a &>/dev/null

答案1

不是 XEN 专家,但是:

难道不需要告诉xm block-attachdomUdiscard中的 s 可以传递到文件系统层吗?否则,domU中的“删除文件”并不是镜像文件“理解”的操作:它看到的只是几个位置的一些变化,即变化的目录和扩展表条目。 “删除文件”不是块设备的概念!

但是:随着 SSD 的出现discard,文件系统(在本例中为 domU 的文件系统驱动程序)可以告诉底层存储设备不再需要数据块。在这种情况下,SSD(或者此处的虚拟机管理程序)可以使用该信息实际从文件中删除该数据(并使其再次稀疏)。因此,您需要以下方面的支持:

  1. dom0 中的图像文件格式和图像块设备驱动程序
  2. 虚拟机管理程序(能够将丢弃信息传递给映像驱动程序)
  3. domU 文件系统及其挂载选项(在数据删除时实际发出丢弃)

特别是 3. 通常默认情况下不启用:丢弃操作通常被捆绑/延迟。尝试fstrim在 domU 文件系统上运行!

然而,出于性能原因,立即对图像驱动程序进行“稀疏化”很少是明智的,因此也可能存在延迟/手动清理。

相关内容