Filesystems

刪除 domU 掛載映像中的數據不會減小映像大小

  • May 31, 2022

我很難理解以下情況:

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

當我將數據寫入/u01/app/oracle/product/19.12.0.0/dbhome_1DomU 和 Dom0 上的磁碟使用量時,會相應增加:

[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

不是 XEN 方面的專家,但是:

不需要告訴domUxm block-attachdiscard的 s 可以傳遞到文件系統層嗎?否則,domU 中的“刪除文件”不是圖像文件“理解”的操作:它所看到的只是幾個位置的一些變化,即變化的目錄和擴展表條目。“刪除文件”不是塊設備的概念!

但是:隨著 SSD 的出現discard,文件系統(在這種情況下,domU 的文件系統驅動程序)可以告訴底層儲存設備不再需要某個數據塊。在這種情況下,SSD 或此處的管理程序可以使用該資訊從文件中實際刪除該數據(並再次使其稀疏)。因此,您需要以下方面的支持:

  1. dom0 中的圖像文件格式和圖像塊設備驅動程序
  2. 管理程序(能夠將丟棄物傳遞給圖像驅動程序)
  3. domU 文件系統及其掛載選項(在數據刪除時實際發出丟棄)

特別是 3. 預設情況下通常不啟用:丟棄操作通常是捆綁/延遲的。嘗試fstrim在 domU 文件系統上執行!

但是,出於性能原因,立即在圖像驅動程序上進行“稀疏化”是不明智的,因此也可能存在延遲/手動清理。

引用自:https://unix.stackexchange.com/questions/704467