Ubuntu

如何阻止我的 Linux 虛擬機將數據寫入空磁碟塊?

  • April 25, 2022

我有一個在 qemu 中執行的 Ubuntu 20 虛擬機,它使用一個 qcow2 磁碟文件和另一個 qcow2 磁碟文件作為備份儲存。該 VM 是使用 cloud-init 從最近的 Canonical 分佈式雲映像建構的。

我一啟動它,它的磁碟文件就開始以每五分鐘大約 1 GB 的速度變得越來越大。

這是一個 ext4 文件系統,沒有配置交換。精簡配置磁碟映像配置為 1 TB,實際使用的只有 4.2 GB;磁碟映像本身為 4.4 GB。虛擬機所做的只是引導和啟動它的 GUI。

“iotop”顯示“ext4lazyinit”正在執行,所以我認為它正在初始化 inode 表。

當我關閉它並使用 debugfs 的“dump_unused”檢查它的磁碟映像時,它會在其未使用的磁碟塊中顯示各種隨機數據。

我不明白的是,如果磁碟被清零,它為什麼會這樣做,以及為什麼它會寫出所有這些隨機混亂。

ext4 上的空 inode 表是否全為零?它是否可能將磁碟塊的一小部分寫為 inode 表,然後磁碟塊的其餘部分被垃圾填充而不是全為零?有什麼辦法讓它寫零而不是垃圾?

這是在掛載後將 inode 表清零的 ext4lazy_itable_init執行緒,而不是作為mke2fs. 在 e2fsprogs commit v1.46.4-25-gbd2e72c5c552 中,有一個更新檔(mke2fs: Add extended option for prezeroed storage devices)添加-E assume_storage_prezeroed選項,以便您可以告訴它設備已經歸零並且不做顯式覆蓋 inode表塊。這應該避免增加磁碟映像的大小,並避免在初始掛載時出現無關的磁碟 IO。

雖然這個送出似乎在 1.46.5 版本中,但它看起來只在master分支上,並且很可能只打包在基於 1.47 的版本中,除非您從原始碼(master分支或cherry-)建構 e2fsprogs選擇這個更新檔maint)。

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