Linux仮想マシンが空のディスクブロックにデータを書き込むのを防ぐ方法は?

Linux仮想マシンが空のディスクブロックにデータを書き込むのを防ぐ方法は?

qcow2ディスクファイルとは異なるqcow2ディスクファイルをバックアップストレージとして使用するqemuで実行されているUbuntu 20仮想マシンがあります。この仮想マシンは、最新のCanonicical分散クラウドイメージとcloud-initに基づいて構築されています。

起動するとすぐに、ディスクファイルは5分ごとに約1GBの速度でますます大きくなり始めました。

スワップが構成されていないext4ファイルシステム。シンプロビジョニングされたディスクイメージは1TBで構成されていますが、実際には4.2GBのみが使用されます。ディスクイメージ自体は4.4GBです。仮想マシンが行うことは、起動してGUIを起動するだけです。

「iotop」は、「ext4lazyinit」が実行中であることを示すため、inodeテーブルを初期化していると仮定します。

私はそれを終了し、debugfsの "dump_unused"を使用してディスクイメージを調べたとき、未使用のディスクブロックにすべての種類のランダムデータが表示されました。

私が理解していないのは、ディスクがゼロのときになぜこのようなことをするのか、そしてなぜこのすべてのランダム混乱を記録するのかです。

ext4の空のinodeテーブルはすべて0ですか?ディスクブロックの小さな部分がinodeテーブルとして書き込まれ、残りのディスクブロックがすべてゼロになるのではなく、ガベージで埋められることは可能ですか?ゴミの代わりにゼロを書く方法はありますか?

ベストアンサー1

これは e2fsprogs コミット v1.46.4-25-gbd2e72c5c552lazy_itable_initmke2fsパッチ(mke2fs: プロビジョニングされたゼロストレージデバイスの拡張オプションを追加-E assume_storage_prezeroed)デバイスが0に設定され、inodeテーブルブロックが明示的に上書きされていないことを確認するためにこのオプションを追加します。これにより、ディスクイメージのサイズが大きくなるのを防ぎ、初期インストール中に外部ディスクIOが発生するのを防ぎます。

たとえ現れるコミットは1.46.5バージョンにあり、四半期のみにあるように見え、ソースからe2fsprogsをビルドしない限り(ブランチまたはチェリーからこのパッチを選択する)master1.47ベースのバージョンでのみパッケージ化されます。mastermaint

おすすめ記事