以下问题与Linux (ZoL) / OpenZFS上的ZFS有关,因为它是在Debian和Debian中提供的。
正如标题所述,我想知道ZFS快照名称理论上是否可以包含换行符(就像普通文件名所能做的那样),如果是,我如何安全地处理脚本中的快照名称列表。
我尝试用这样的名称创建快照,但zfs (幸运的是)拒绝这样做。但是,我想确定,因此,我在这里要求。
一些背景:在这个站点和其他地方,经常存在这样一个问题:我们如何解析ls
的输出以按名称处理文件名列表。答案主要是:不要这样做,因为可能会有意想不到的副作用,例如,如果文件名包含换行符;相反,使用bash的globbing。我明白这一点(事实上,我总是那样做)。
但是,当涉及到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将它们放在一个隐藏的目录中,并将它们作为普通目录/文件进行访问。但是,在我的例子中,快照是来自ZVOLs的快照,ZFS不能这样访问。
发布于 2021-10-04 15:39:05
基于本文件,您不可能将新行插入到ZFS快照的名称中。所以IMHO逐行解析它。
除以下四个特殊字符外,每个组件只能包含字母数字字符:下划线(_)、连字符(-)、Colon (:)、句点(.)池名必须以字母开头,但以下限制除外:不允许开始序列c0-9。已保留名称日志。不允许以镜像、raidz、raidz1、raidz2、raidz3或空闲开头的名称,因为这些名称是保留的。池名不能包含百分比符号(%)。数据集名称必须以字母数字字符开头。数据集名称不能包含百分比符号(%)。
我找到了Openindiana中的命名约定,但不幸的是该网站正在维护中
https://unix.stackexchange.com/questions/671804
复制相似问题