ZFS 快照名稱可以包含換行符嗎?如果是,如何解析 zfs list -t snapshot 的輸出?
以下問題與Linux (ZoL) / OpenZFS 上的 ZFS相關,因為它在例如 Debian Buster 和 Debian Bullseye 中提供。
正如標題所說,我想知道 ZFS 快照名稱理論上是否可以包含換行符(就像普通文件名一樣),如果可以,我如何通過腳本中的快照名稱列表安全地工作。
我曾嘗試使用此類名稱創建快照,但 zfs(幸運的是)拒絕這樣做。但是,我想確定,因此,我在這裡問。
一點背景知識:在這個站點和其他地方,經常存在這樣一個問題:我們如何解析輸出
ls
以逐個名稱地處理文件名列表。答案大多是:不要這樣做,因為可能會產生意想不到的副作用,例如文件名包含換行符;相反,使用 bash 的萬用字元。我明白這一點(事實上,我一直都是這樣做的)。但是,對於 ZFS 快照名稱,沒有萬用字元。例如,在我的盒子上,當我發出類似的東西時
zfs list -H -r -o name -t snapshot rpool/vm-garak
,我會得到一個快照名稱列表,其中的條目由換行符分隔:root@cerberus ~/scripts # zfs list -H -r -o name -t snapshot rpool/vm-garak rpool/vm-garak@Q-2021-10-03-12-09-01 rpool/vm-garak@T-2021-10-03-12-14-01 rpool/vm-garak@T-2021-10-03-12-19-01 rpool/vm-garak@Q-2021-10-03-12-24-01 rpool/vm-garak@T-2021-10-03-12-29-01 rpool/vm-garak@T-2021-10-03-12-34-01 rpool/vm-garak@Q-2021-10-03-12-39-01 rpool/vm-garak@T-2021-10-03-12-44-01 rpool/vm-garak@T-2021-10-03-12-49-01 rpool/vm-garak@H-2021-10-03-12-54-01
我有一些腳本可以按名稱通過此列表名稱工作;也就是說,逐行,依賴於換行符可靠地指示新快照名稱的事實。
只要我可以控制快照創建,這是安全的,因為我可以避免不合理的快照名稱。但是快照是由其他人創建的,那麼如果名稱中有換行符怎麼辦?如上所述,我沒有成功創建這樣的快照名稱,但我肯定不知道所有可以產生它們的奇怪方法。
最後一點:我知道,只要它涉及普通數據集(文件系統)快照,我最終可以擺脫通配,因為 ZFS 將它們放入隱藏目錄並使其可以作為普通目錄/文件訪問。但是,在我的例子中,快照是來自 ZVOL 的快照,ZFS 無法通過這種方式訪問這些快照。
根據此文件,您無法在 ZFS 快照的名稱中添加新行。所以恕我直言,逐行解析它。
Each component can only contain alphanumeric characters in addition to the following four special characters: Underscore (_) Hyphen (-) Colon (:) Period (.) Pool names must begin with a letter, except for the following restrictions: The beginning sequence c[0-9] is not allowed. The name log is reserved. A name that begins with mirror, raidz, raidz1, raidz2, raidz3, or spare is not allowed because these names are reserved. Pool names must not contain a percent sign (%). Dataset names must begin with an alphanumeric character. Dataset names must not contain a percent sign (%).
我在 Openindiana 找到了命名約定,但不幸的是該站點正在維護中