Zfs

ZFS 在更改數據集屬性時發送/接收

  • October 2, 2020

摘要:ZFS 發送/接收是否始終接收發送數據集的精確複製 - 包括匹配的數據集屬性 - 或者是否可以接收到具有不同屬性(記錄大小、壓縮等)的新創建的數據集,接收數據(之後校驗和驗證等)然後可以寫入。

例如,如果我收到一個(非增量)數據集,其對象最初是用 a 寫入的recordsize=128K,並接收到一個新創建的數據集,zfs receive但該數據集指定選項-o recordsize=1M或繼承自目前值為 的父數據集recordsize=1M,這些對象將在我的新數據集中,記錄大小為1M,還是必須將對象寫為接收數據集的精確“副本”?

zfs get recordsize tank/files   # returns: 128K

# Set parent of receiving dataset to 1M
zfs set recordsize=1M freezer   

# Also set at receive time    
zfs send tank/files@transfer | zfs receive -o recordsize=1M freezer/files     

我的問題本質上是:

# Query recordsize of objects as written in freezer
???

我知道檢查新數據集的記錄大小本身並不是一個答案,因為這只會報告數據集屬性目前設置的內容,它本身並沒有說明任何先前寫入的記錄大小。我試圖用類似的東西直接檢查對象

zdb -dd freezer

但我的 zfs 版本(在 FreeBSD 9 上)似乎不接受這一點。

man zfs建議只有“設置一次”屬性必須匹配(區分大小寫、規範化、utf8only),但我不清楚在一般情況下對像是如何編寫的。我還檢查了 docs/google,但如果不研究 zfs 內部結構,似乎無法得到關於這種行為的明確答案。

簡而言之 - 不。記錄大小不能通過發送/接收操作更改。其他一些選項可以,但不能記錄大小。

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