dm-zero¶
Device-Mapper 的“zero”目標提供了一個塊裝置,該裝置在讀取時始終返回零填充資料,並在寫入時靜默丟棄資料。這與 /dev/zero 的行為類似,但它是一個塊裝置而非字元裝置。
Dm-zero 沒有目標特定引數。
dm-zero 的一個非常有趣的用途是結合 dm-snapshot 建立“稀疏”裝置。稀疏裝置報告的裝置大小大於該裝置可用的實際儲存空間量。使用者可以在稀疏裝置內的任何位置寫入資料,並像普通裝置一樣讀取。對先前未寫入區域的讀取將返回零填充緩衝區。當寫入足夠的資料以填滿實際儲存空間時,稀疏裝置將被停用。這對於測試裝置和檔案系統限制非常有用。
要建立稀疏裝置,首先建立一個 dm-zero 裝置,其大小為稀疏裝置的所需大小。在此示例中,我們假設一個 10TB 的稀疏裝置。
TEN_TERABYTES=`expr 10 \* 1024 \* 1024 \* 1024 \* 2` # 10 TB in sectors
echo "0 $TEN_TERABYTES zero" | dmsetup create zero1
然後,使用任何可用的塊裝置作為 COW 裝置,建立該零裝置的快照。COW 裝置的大小將決定稀疏裝置可用的實際空間量。在此示例中,我們假設 /dev/sdb1 是一個可用的 10GB 分割槽。
echo "0 $TEN_TERABYTES snapshot /dev/mapper/zero1 /dev/sdb1 p 128" | \
dmsetup create sparse1
這將建立一個名為 /dev/mapper/sparse1 的 10TB 稀疏裝置,其擁有 10GB 的實際儲存空間。如果寫入此裝置的資料超過 10GB,它將開始返回 I/O 錯誤。