管理ZFS文件系统(part 1)

ZFS文件系统可以动态创建和销毁,无需分配或格式化任何底层磁盘空间。
  1. 创建ZFS文件系统
  2. 销毁或重命名ZFS文件系统
  3. 介绍ZFS属性

创建ZFS文件系统

zfs create命令可以创建文件系统,如果创建成功,则自动挂载新创建的文件系统。
默认情况下,文件系统被挂载到/dataset,dataset来自create子命令。
如果需要对文件系统进行加密,必须在创建它时指定加密选项。

例29 创建简单的ZFS文件系统
此例中,在tank/home文件系统中创建sueb文件系统:
$zfs create tank/home/sueb

例30 使用文件系统属性创建一个ZFS文件系统
$ zfs create -o mountpoint=/export/zfs tank/home
此例中,创建文件系统tank/home并将其挂载点设置为/export/zfs
top

销毁或重命名ZFS文件系统

如何销毁ZFS文件系统
使用命令zfs destroy可以销毁一个ZFS文件系统。默认情况下,所有相关的快照都会被销毁,同时会卸载并取消共享。
销毁ZFS文件系统的命令格式如下:
$ zfs destroy [-rRsf] filesystem
使用destroy子命令本身或带有选项时不会出现确认提示,所以要格外小心,尤其是使用-f-r选项时。这些选项可能会破坏池的大部分内容,从而导致正在使用的已安装文件系统出现意外行为。

例31:同步销毁活动ZFS文件系统
如果文件系统正在使用中且无法卸载,则zfs destroy命令会失败。使用-f选项可以强制卸载,但要谨慎使用,以免误销毁。
$ zfs destroy -fs tank/home/matt

例32:销毁带有后代的ZFS文件系统
如果一个ZFS带有后代文件系统,要使用-r销毁它需要递归销毁文件系统和其后代。
(跟rm -r命令递归删除整个目录类似)
$ zfs destroy tank/ws
cannot destroy 'tank/ws': filesystem has children
use '-r' to destroy the following datasets:
tank/ws/sueb
tank/ws/bhall
tank/ws/mork
$ zfs destroy -r tank/ws

如何重命名ZFS文件系统
使用命令zfs rename可以重命名文件系统,也可以完成以下操作: 重命名操作会尝试对文件系统进行卸载/重新挂载文件系统本身和任何它的子文件系统。有时需要强制卸载文件系统
以下操作重命名文件系统:
$ zfs rename tank/home/soloh tank/home/mindy_old
以下操作将文件系统变更到另一个父文件系统中:
$ zfs rename tank/home/mork tank/ws/mork
top

介绍ZFS属性

属性是用于控制文件系统、卷、快照、克隆的行为的主要机制。
属性分为两种: 大多数可设置的属性也是可继承的。可继承属性是在父文件系统上设置时向下传播到其后代的属性。
属性的来源可以具有以下值: 下表标识了只读和可设置的本机ZFS文件系统属性。只读本机属性是这样标识的。
属性名称 类型 默认值 只读 FreeBSD 说明
aclinherit String secure 默认值是restricted 控制创建文件和目录时如何继承ACL条目。
值可以是discard|noallow|secure|passthrough
FreeBSD中,值可以是discard|noallow|restricted|passthrough|passthrough-x
  • discard
  • 不继承任何ACEs
  • noallow
  • 仅继承指定了"deny"权限的可继承ACEs
  • restricted
  • 继承ACE时,删除write_acl和write_owner权限
  • passthrough
  • 不做任何修改的继承所有可继承的ACEs
  • passthrough-x
  • 与passthrough含义相同,只是只有在文件创建模式也请求执行位时,owner@、group@和everyone@ ACEs才会继承执行权限
aclmode String groupmask 默认值是discard 控制在chmod操作期间按如何修改ACL条目。
值可以是discard|groupmask|passthrough
FreeBSD中,值可以是discard|groupmask|passthrough|restricted
  • discard
  • 除了已chmod(2)请求的文件或目录模式之外的所有ACEs都会被删除
  • groupmask
  • 减少在ACL中找到的所有ALLOW条目中授予的权限,使其不大于chmod(2)指定的组权限
  • passthrough
  • 指示除创建或更新必要的ACL条目以表示文件或目录的新模式外,不会对ACL进行任何更改
  • restricted
  • 原文如下,没看明白:
    will cause the chmod(2) operation to return an error when used on any file or directory which has a nontrivial ACL whose entries can not be represented by a mode. chmod(2) is required to change the set user ID, set group ID, or sticky bits on a file or directory, as they do not have equivalent ACL entries. In order to use chmod(2) on a file or directory with a nontrivial ACL when aclmode is set to restricted, you must first remove all ACL entries which do not represent the current mode.
atime Boolean on 控制在读取文件时是否更新文件的访问时间。
关闭此属性可能避免在读取文件时产生写入流量,并可显著提高性能,但它可能会混淆邮件程序和类似实用程序。
available Number N/A 只读属性,用于标识文件系统及其所有子系统可用的磁盘空间量,假设池中没有其他活动。
由于磁盘空间在池内共享,可用空间可能会收到各种因素限制,包括物理池大小、配合、预留、池内其他数据集。
此属性的缩写是avail
canmount Boolean on 控制文件系统是否能被zfs mount命令挂载。
此属性可以被设置在任何文件系统上,并且这个属性不可继承。但是,当此属性设置为off时,挂载点可以继承到子文件系统,但永远不会挂载文件系统本身。
当设置了noauto选项,文件系统只能显式的挂载和显显式的卸载。文件系统在创建或导入时不会自动挂载,也不会由zfs mount -a命令挂载或由zfs unmount -a命令卸载。
casesensitivity String mixed 此属性指示文件系统使用的文件名匹配算法是否区分大小写,其值为casesensitive|caseinsesitive|mixed
传统上,UNIX和POSIX文件系统区分文件名的大小写。
若此属性的值为mixed,表示文件系统可以支持区分和不区分大小写的匹配行为的请求。目前支持混合行为的文件系统上不区分大小写的匹配行为仅限于OracleSolaris SMB服务器产品。
无论casesensitivity属性如何设置,文件系统都会保留指定名称的大小写以创建文件。
创建文件系统之后,此属性无法更改。
checksum String on 控制用于验证数据完整性的校验和。默认值为on,它会自动选择适当的算法,当前是fletcher4
可用值为on|off|fletcher2|fletcher4|sha256|sha3-256|sha256+mac
FreeBSD中值为on|off|fletcher2|fletcher4|sha256|noparity|sha512|skein|edonr
noparity不仅禁用完整性校验,还禁用维护用户数据的奇偶校验。此设置由驻留在RAID-Z池上的转储设备在内部使用,不应由任何其他数据集使用。
sha512|skein|edonr校验和算法需要在池上启用适当功能。FreeBSD不支持edonr算法。
off禁用对用户数据的完整性检查,不建议使用off值
compression String off 默认值为lzjb
如果启用了lz4_compress功能,则默认值为lz4
是否对数据集启用压缩。
可用值为on|off|lzjb|lz4|gzip|gzip-N
FreeBSD可用值为on|off|gzip|gzip-N|lz4|lzjb|zle|zstd|zstd-N|zstd-fast|zstd-fast-N
目前,将此属性设置为lzjb、gzip或gzip-N,与将此属性设置为on具有相同的效果。
对已经有数据的文件系统启用压缩,只会压缩新数据,原有数据将保持未压缩状态。
此属性缩写是compress
compressratio Number N/A 标识数据集实现的压缩率。
该值是根据所有文件的逻辑大小和占用的物理数量计算得出的。包括通过使用压缩属性显式节省。
copies Number 1 设置每个文件系统的用户数据副本数。可用值为1|2|3
这些副本是对池级冗余的补充。用户数据的多个副本使用的磁盘空间计入相应的文件和数据集,并计入配额和预留。
当启用多个副本是,used属性会更新。
更改此属性只会影响新写入的数据。
creation String N/A 记录数据集创建的日期和时间。
dedup String off 控制在ZFS文件系统中删除重复数据的能力。
可用值为on|off|verify|sha256[,verify]。默认去重校验和为sha256。
FreeBSD中可用值为off|on|verify|sha256[,verify]|sha512[,verify]|skein[,verify]|edonr,verify
defaultgroupquota String None 无此属性,但有groupquota@group=size|nonegroupobjquota@group=size|none 设置默认的组配额。该值适用于未显式指定组配额的所有组。
defaultuserquota String None 无此属性,但有userquota@user=size|noneuserobjquota@user=size|none 设置默认的用户配额。该值适用于未显式指定用户配额的所有用户。
devices Boolean on 控制是否可以打开文件系统中的设备文件。
encryption Boolean off 控制文件系统是否加密。加密文件系统意味着数据经过编码,文件系统所有者需要密钥才能访问数据。
FreeBSD可选值为off|on|aes-128-ccm|aes-192-ccm|aes-256-ccm|aes-128-gcm|aes-192-gcm|aes-256-gcm
exec Boolean on 控制是否允许执行文件系统中的程序。此外,当设置为off时,不允许使用PROT_EXEC调用mmap(2)
keychangedate String none 无此属性 只读属性,用于标识指定文件系统的zfs key -c操作的最后一次包装密钥更改的日期。
如果没有发生密钥更改操作,则此属性的值与文件系统的常见日期相同。
keysource String none 无此属性 标识包装文件系统密钥的密钥格式和位置。
有效值为raw|hex|passphrase|prompt|file
使用命令zfs key -l命令创建、挂载或加载文件系统时,密钥必须存在。
如果为新文件系统启用加密,则默认密钥源为passphrase|prompt
keystatus String none 只读属性,标识文件系统的加密密钥状态。
对于加密的文件系统,有效值为available|unavailable。对于未加密的文件系统,显示none
logbias String latency 控制ZFS如何优化此文件系统的同步请求。
  • latency
  • 延迟,ZFS使用池的独立日志设备(如果有),以处理低延迟的要求。
  • throughput
  • 吞吐量,ZFS不使用池的单独日志设备。相反,ZFS优化同步操作以实现全局池吞吐量和资源的有效利用。
默认值为latency
mlslabel String None 无此属性 提供确定文件系统是否可以安装在区域中的敏感度标签。如果标签文件系统与标签区域匹配,则可以从标签区域挂载和访问文件系统。
默认值为none,此属性只能使用适当的权限进行修改。
此属性的行为会根据是否启用Trusted Extensions或是否设置了多级属性而变化。
mounted Boolean N/A 只读值,指示当前是否挂载了文件系统、克隆或快照。此属性不适用于卷。
mountpoint String N/A 控制用于此文件系统的挂载点。文件系统的此属性发生变化时,文件系统和继承该挂载点的任何子系统将会被卸载。
如果新值时legacy,则它们保持未安装状态。否则,如果属性以前时legacynone,或者如果它们在属性更改之前安装,它们将自动重新安装在新位置。
此外,任何共享文件系统都不会共享并在新位置共享。
multilevel Boolean off 无此属性 此属性用于在ZFS文件系统中的对象上启用标签。
多级文件系统中的对象使用自动生成的显式敏感度标签属性单独标记。通过使用setlabelsetflabel命令更改此标签属性,可以就地重新标记对象。
根文件系统、Oracle Solaris Zone文件系统或包含打包的Oracle Solaris代码的文件系统不应是多级的。
nbmand Boolean off 控制是否应使用nbmand(Non-blockinig mandaroty,非阻塞强制)锁挂载文件系统。此属性仅适用于SMB客户端。
对此属性的更改仅在卸载并重新安装文件系统时生效。
normalization String None 此属性指示每当比较两个文件名时,文件系统是否应执行文件名的unicode规范化,以及使用哪种规范化算法。
文件名始终不加修改地存储,名称作为任何比较过程地一部分进行规范化。
如果该属性设置为none以外地合法值,且utf8only属性未指定值,则utf8only属性被自动设置为on
创建文件系统后,此属性无法更改。
FreeBSD中可用值为none|formC|formD|formKC|formKD
origin String N/A 只读值,用于标识船舰克隆的快照。只要存在克隆,就不能破坏源(即使使用-r或-f选项)。
非克隆文件系统的来源为none
primarycache String all 控制主缓存中的内容。可能值为all|none|metadata
· 如果设置为all,则缓存用户数据和元数据。
· 如果设置为none,则不会缓存用户数据和元数据。
· 如果设置为metadata,则仅缓存元数据。
在现有的文件系统上设置这些属性时,只有新的I/O会根据这些属性的值进行缓存。
某些数据库环境可能会受益于不缓存用户数据,必须确定设置缓存属性是否适合实际环境。
quota Number
(or none)
none 限制文件系统及其子系统可以消耗的磁盘空间量。
此属性对使用的磁盘空间量实施硬限制,包含子系统使用的所有空间,例如文件系统和快照。
在已有配额的文件系统的后代上设置配额不会覆盖祖先的配额,而是施加额外的限制。
不能在卷上设置配额,因为volsize属性充当隐式配额。
readonly Boolean off 控制是否可以修改数据集。当设置为on时,不能进行任何修改。
缩写为rdonly
recordsize Number 128K 为文件系统中的文件指定建议的块大小。
缩写为recsize
referenced Number N/A 只读属性,标识数据集可访问的数据量,该数据集可能与池中的其他数据集共享,也可能不共享。
创建快照或克隆时,它最初引用的磁盘空间量与创建它的文件系统或快照相同,因为其内容相同。
缩写为refer
refquota Number
(or none)
none 设置数据集可以消耗的磁盘空间量。此属性对使用的空间量实施硬限制。此硬限制不包括后代使用的磁盘空间,比如快照和克隆。
refreservation Number
(or none)
none 设置保证数据集的最小磁盘空间量,不包括后代,例如快照和克隆。
当使用的磁盘空间量低于此值时,数据集被视为占用了refreservation指定的空间量。refreservation保留在父数据集使用的磁盘空间中记账,并根据父数据集的配额保留计数。
如果设置了refreservation,则仅当此保留之外有足够的可用池空间来容纳数据集中当前引用的字节数时,才允许快照。
缩写为refreserv
rekeydate String N/A 无此属性 只读值,指示此文件系统上zfs key -kzfs clone -k操作最后一次更改数据加密密钥的日期。
如果未执行任何重设密钥操作,则此属性的值为creation日期。
reservation Number
(or none)
none 设置文件系统及其子系统保证的最小磁盘空间量。当使用的磁盘空间量低于此值时,文件系统将被视为使用其保留指定的空间量。
保留在父文件系统的医用磁盘空间中记账,并根据父文件系统的配额和保留进行计数。
缩写为reserv
rstchown Boolean on 无此属性 指示文件系统所有者是否可以授予文件所有权更改。
默认设置是限制chown操作。当rstchown设置为off时,用户拥有chownPRIV_FILE_CHOWN_SELF权限。
secondarycache String all 控制在辅助缓存(L2ARC)中缓存的内容。可能的值包括all|none|metadata
· 如果设置为all,则缓存用户数据和元数据。
· 如果设置为none,则不会缓存用户数据和元数据。
· 如果设置为metadata,则仅缓存元数据。
setuid Boolean on 控制文件系统中是否使用setuid位。
shadow String None 无此属性 将ZFS文件系统标识位URI描述的文件系统的影子
数据从URI标识的文件系统迁移到具有此属性集的卷影文件系统。要完成迁移,要迁移的文件系统必须是只读的。
share.nfs String off sharenfs=on|off|opts 控制是否创建和发布ZFS文件系统的NFS共享以及使用哪种选项。
还可以使用zfs sharezfs unshare命令发布和取消发布NFS共享。
使用zfs share命令发布NFS共享需要同时设置NFS共享属性。
share.smb String off sharesmb=on|off|opts 控制是否创建和发布SMB文件系统的NFS共享以及使用哪种选项。
还可以使用zfs sharezfs unshare命令发布和取消发布NFS共享。
使用zfs share命令发布SMB共享需要同时设置SMB共享属性。
snapdir String hidden 控制.zfs目录在文件系统的根目录中是隐藏的还是可见的。
可用值为hidden|visible
sync String standard 确定文件系统事务的同步行为。可能的值为:
  • standard
  • 默认值,标识同步文件系统事务(如fsync、O_DSYNC、O_SYNC等)被写入意图日志。
  • always
  • 确保通过返回系统调用将每个文件系统事务写入并刷新到稳定存储。
    此值会导致严重的性能损失。
  • disabled
  • 表示禁止同步请求。文件系统事务仅在下一个事务组提交时提交到稳定存储中,者可能在几秒钟以后。
    此值提供了最佳性能,没有损坏池的风险。
    注意,disabled非常危险,因为ZFS忽略了应用程序(如数据库或NFS操作)的同步事务需求。在当前活动的根或/var文件系统上设置此值可能会导致意外行为、应用程序数据丢失或增加重播攻击的漏洞。只有在充分了解所有相关风险的情况下才可以使用此值。
type String N/A 只读值,标识数据集的类型。比如filesystem(文件系统或克隆)、volumesnapshotbookmark
used Number N/A 只读值,标识数据集及其所有子数据集占用的磁盘空间量。
usedbychildren Number off 只读值,标识此数据集的子级使用的磁盘空间量,如果数据集的所有子级都已销毁,则释放这些磁盘空间。
缩写为usedchild
usedbydataset Number off 只读值,标识数据集本身使用的磁盘空间量,在首次销毁任何快照并删除任何refreservation保留后,如果数据集被销毁,将释放该磁盘空间量。
缩写为useadds
usedbyrefreservation Number off 只读值,标识数据集上的refreservation集使用的磁盘空间量,如果删除refreservation,将释放该磁盘空间量。
缩写为usedrefreserv
usedbysnapshots Number off 只读值,标识数据集快照所消耗的磁盘空间量。
特别是如果此数据集的所有快照都被销毁,将释放多少磁盘空间。
注意,此值不仅仅时快照已用数据的总和,因为多个快照可以共享空间。 缩写为usedsnap
utf8only Boolean off 指示文件系统是否应拒绝包含UTF-8字符集代码中不存的字符的文件名。如果此值显式设置为off,则不能显式设置normalization(规范化)属性或将其设置为none
默认值为off,且创建文件系统后无法更改此属性。
version Number N/A 标识独立于池版本的文件系统的磁盘版本。此属性只能设置为支持的软件版本中提供的更高版本。
volblocksize Number 8KB 对于卷,指定卷的块大小。写入卷后无法更改块大小,因此应在卷创建时设置块大小。
卷的默认块大小是8KB,从512字节到128KB的任何2次幂都是有效的。
缩写为volblock
volsize Number N/A 指定卷的逻辑大小。
vscan Boolean off 控制在打开和关闭文件时是否应对常规文件进行病毒扫描。
除了启用此属性外,如果安装了第三方扫描病毒软件,还必须启用病毒扫描服务才能进行病毒扫描。
xattr Boolean on 指示此文件系统的扩展属性时启用(on)还是禁用(off)。
zoned Boolean N/A 指示是否已将文件系统添加到非全局区域。如果设置了此属性,则在全局区域中不支持挂载点,并且ZFS无法在请求时挂载此类文件系统。
首次安装区域时,将为任何添加的文件系统设置此属性。
上表对照zfsprops(7)
下表是FreeBSD属性:
属性 可更改 继承 可用值
availableNONO《size》
clones NO NO 《dataset》[,...]
compressratio NO NO 《1.00x or higher if compressed》
createtxg NO NO 《uint64》
creation NO NO 《date》
defer_destroy NO NO yes | no
encryptionroot NO NO 《filesystem | volume》
filesystem_count NO NO 《count》
guid NO NO 《uint64》
keystatus NO NO none | unavailable | available
logicalreferenced NO NO 《size》
logicalused NO NO 《size》
mounted NO NO yes | no
objsetid NO NO 《uint64》
origin NO NO 《snapshot》
receive_resume_token NO NO 《string token》
redact_snaps NO NO 《snapshot》[,...]
refcompressratio NO NO 《1.00x or higher if compressed》
referenced NO NO 《size》
snapshot_count NO NO 《count》
type NO NO filesystem | volume | snapshot | bookmark
used NO NO 《size》
usedbychildren NO NO 《size》
usedbydataset NO NO 《size》
usedbyrefreservation NO NO 《size》
usedbysnapshots NO NO 《size》
userrefs NO NO 《count》
written NO NO 《size》
aclinherit YES YES discard | noallow | restricted | passthrough | passthrough-x
aclmode YES YES discard | groupmask | passthrough | restricted
acltype YES YES off | nfsv4 | posix
atime YES YES on | off
canmount YES NO on | off | noauto
casesensitivity NO YES sensitive | insensitive | mixed
checksum YES YES on | off | fletcher2 | fletcher4 | sha256 | sha512 | skein
compression YES YES on | off | lzjb | gzip | gzip-[1-9] | zle | lz4 | zstd | zstd-[1-19] | zstd-fast-[1-10,20,30,40,50,60,70,80,90,100,500,1000]
context YES NO 《selinux context》
copies YES YES 1 | 2 | 3
dedup YES YES on | off | verify | sha256[,verify] | sha512[,verify] | skein[,verify]
defcontext YES NO 《selinux defcontext》
devices YES YES on | off
dnodesize YES YES legacy | auto | 1k | 2k | 4k | 8k | 16k
encryption NO YES on | off | aes-128-ccm | aes-192-ccm | aes-256-ccm | aes-128-gcm | aes-192-gcm | aes-256-gcm
exec YES YES on | off
filesystem_limit YES NO 《count》 | none
fscontext YES NO 《selinux fscontext》
jailed YES YES on | off
keyformat NO NO none | raw | hex | passphrase
keylocation YES NO prompt | 《file URI》
logbias YES YES latency | throughput
mlslabel YES YES 《sensitivity label》
mountpoint YES YES 《path》 | legacy | none
nbmand YES YES on | off
normalization NO YES none | formC | formD | formKC | formKD
overlay YES YES on | off
pbkdf2iters NO NO 《iters》
primarycache YES YES all | none | metadata
quota YES NO 《size》 | none
readonly YES YES on | off
recordsize YES YES 512 to 1M, power of 2
redundant_metadata YES YES all | most
refquota YES NO 《size》 | none
refreservation YES NO 《size》 | none
relatime YES YES on | off
reservation YES NO 《size》 | none
rootcontext YES NO 《selinux rootcontext》
secondarycache YES YES all | none | metadata
setuid YES YES on | off
sharenfs YES YES on | off | NFS share options
sharesmb YES YES on | off | SMB share options
snapdev YES YES hidden | visible
snapdir YES YES hidden | visible
snapshot_limit YES NO 《count》 | none
special_small_blocks YES YES zero or 512 to 1M, power of 2
sync YES YES standard | always | disabled
utf8only NO YES on | off
version YES NO 1 | 2 | 3 | 4 | 5 | current
volblocksize NO YES 512 to 128k, power of 2
volmode YES YES default | full | geom | dev | none
volsize YES NO 《size》
vscan YES YES on | off
xattr YES YES on | off | dir | sa
userused@... NO NO 《size》
groupused@... NO NO 《size》
projectused@... NO NO 《size》
userobjused@... NO NO 《size》
groupobjused@... NO NO 《size》
projectobjused@... NO NO 《size》
userquota@... YES NO 《size》 | none
groupquota@... YES NO 《size》 | none
projectquota@... YES NO 《size》 | none
userobjquota@... YES NO 《size》 | none
groupobjquota@... YES NO 《size》 | none
projectobjquota@... YES NO 《size》 | none
written@《snap》 NO NO 《size》
written#《bookmark》 NO NO 《size》

ZFS只读本机属性
只读属性只能检索,不能设置。
只读属性不会被继承。
ZFS可设置本机属性
可设置的属性可以被检索和设置其值。通过zfs set命令更改设置,或在使用zfs create创建时设置。
除了配额和保留之外,可设置的本机属性是可以被继承的。
如果没有特别提及,属性将应用于所有数据集类型:文件系统、卷、克隆和快照。
canmount属性
如果设置off,意味着无法使用zfs mountzfs mount -a命令挂载文件系统。
效果类似于将mountpoint属性设置为none,只是文件系统仍然具有可以继承的普通mountpoint属性。
下面例子创建userpool,将它的canmount属性设置为off。子文件系统会设置为一个公共挂载点/export/home。在父文件系统上设置的属性由子文件系统继承,但父文件系统不挂载。
$ zpool create userpool mirror c0t5d0 c1t6d0
$ zfs set canmount=off userpool
$ zfs set mountpoint=/export/home userpool
$ zfs set compression=on userpool
$ zfs create userpool/user1
$ zfs create userpool/user2
$ zfs mount
userpool/user1                  /export/home/user1
userpool/user2                  /export/home/user2		
		
如果将canmount属性色湖之为noauto则表示只能手动挂载。
casesensitivity属性
这一段比较绕,总之,按大小写敏感处理。
copies属性
作为一项可靠性功能,如果可能,ZFS文件系统元数据会自动跨不同磁盘存储多次(可设置的值为1、2、3,默认为1)。此功能称为ditto blocks。 示例:
$ zfs set copies=2 users/home
$ zfs get copies users/home
NAME        PROPERTY  VALUE       SOURCE
users/home  copies    2           local		
		
存储ZFS用户数据的多个副本的好处如下: 注意:对于只有单个磁盘的存储池,完整的磁盘故障可能会导致ditto块不可用。

dedup属性
在查看以下注意事项之前,不要在生产机上启用去重属性:
  1. 确定是否能从去重节省的空间中获益
  2. 可以运行zdb -S命令来模拟在池中启用去重可能节省的空间。此命令只能在安静池上运行。
    如果数据不能进行去重,那么启用去重就没有意义。例如:
    $ zdb -S tank
    Simulated DDT histogram:
    bucket              allocated                       referenced
    ______   ______________________________   ______________________________
    refcnt   blocks   LSIZE   PSIZE   DSIZE   blocks   LSIZE   PSIZE   DSIZE
    ------   ------   -----   -----   -----   ------   -----   -----   -----
    1         2.27M    239G    188G    194G    2.27M    239G    188G    194G
    2          327K   34.3G   27.8G   28.1G     698K   73.3G   59.2G   59.9G
    4         30.1K   2.91G   2.10G   2.11G     152K   14.9G   10.6G   10.6G
    8         7.73K    691M    529M    529M    74.5K   6.25G   4.79G   4.80G
    16          673   43.7M   25.8M   25.9M    13.1K    822M    492M    494M
    32          197   12.3M   7.02M   7.03M    7.66K    480M    269M    270M
    64           47   1.27M    626K    626K    3.86K    103M   51.2M   51.2M
    128          22    908K    250K    251K    3.71K    150M   40.3M   40.3M
    256           7    302K     48K   53.7K    2.27K   88.6M   17.3M   19.5M
    512           4    131K   7.50K   7.75K    2.74K    102M   5.62M   5.79M
    2K            1      2K      2K      2K    3.23K   6.47M   6.47M   6.47M
    8K            1    128K      5K      5K    13.9K   1.74G   69.5M   69.5M
    Total     2.63M    277G    218G    225G    3.22M    337G    263G    270G
    
    dedup = 1.20, compress = 1.28, copies = 1.03, dedup * compress / copies = 1.50			
    			
    如果估计的去重比率大于2,则可能会节省空间。上述示例比率小于2,不建议启用去重。
  3. 确认系统由足够的内存支撑去重
  4. 当去重表放入内存时,去重性能最佳
  5. 如果必须将去重表写入磁盘,则性能下降。例如,如果系统不满足上述内存要求,则删除启用去重的大型文件系统将严重降低系统性能。
  6. 不能在带有加密的数据集上使用去重
  7. 例如,文件系统和卷时两个不同的数据集,去重无法将二者匹配在一起。
启用dedup后,dedup校验和算法将覆盖checksum属性。设置verify的属性值相当于指定sha256,verify。如果属性设置为verify,并且两个块具有相同的签名,则ZFS将与现有块逐字节进行比较,以确保内容相同。
可以为每个文件系统启用此属性,例如:
$ zfs set dedup=on tank/home
可以使用zfs get命令查看dedup属性是否被设置。
尽管去重被设置为文件系统属性,但其范围是池范围。例如:
$ zpool list tank
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
rpool   136G  55.2G  80.8G    40%  2.30x  ONLINE  -		
DEDUP列指示去重的比率,1.00x表示该文件系统上未启用去重,或仅启用但还没有进行去重。 使用以下命令可以查看比率:
$ zpool get dedupratio export
NAME   PROPERTY    VALUE  SOURCE
rpool  dedupratio  3.00x  -		

encryption属性
用于加密ZFS文件系统。
mlslabel属性
mlslabel属性的行为会发生变化,具体取决于是否启用了受信任的扩展或是否设置了multilevel(多级)属性。
这一节不知道在说什么
multilevel属性
用于在ZFS文件系统中的对象上启用标签。多级文件系统中的对象分别使用自动生成的显式敏感度标签属性进行标记。
通过使用setlabelsetflabel命令更改此标签属性,可以就地重新标记对象。
根文件系统、Oracle Solaris区域文件系统或包含打包的Oracle Solaris代码的文件系统不应是多级的。
recordsize属性
为文件系统中的文件指定建议的块大小。
强烈建议不要将此属性用于通用文件系统,否则可能会对性能产生不利影响。
share.smb属性
此属性允许与Oracle Solaris SMB服务共享ZFS文件系统,并标识要使用的选项。
当属性从“关闭”更改为“打开”时,继承该属性的所有共享将与其当前选项重新共享。当属性设置为“关闭”时,继承该属性的共享将取消共享。
volsize 属性
用于指定卷的逻辑大小。默认情况下,创建卷会为相同的数量建立预定。
卷在使用中,若要缩小卷,可能会导致数据损坏或未定义的行为。调整大小时要格外小心。
ZFS User属性
除了本机属性外,ZFS还支持任意用户属性。
用户属性对ZFS行为没有影响,但可以使用它们对数据集添加一些有意义的信息。
用户属性名称必须符合以下约定: 预期的约定时属性名称范围以下两个组件,但ZFS不强制此命名空间:
module:property
在以编程方式使用用户属性时,应为属性名称的模块组件使用反向DNS域名,以减少两个独立开发的软件包出于不同目的使用相同属性名称的可能性。com.oracle.被Oracle公司保留。
用户属性的值必须符号以下约定: 例如:
$ zfs set dept:users=finance userpool/user1
$ zfs set dept:users=general userpool/user2
$ zfs set dept:users=itops userpool/user3		
		
所有对属性进行操作的命令,如zfs listzfs getzfs set等,都可以用来操作本机属性和用户属性。例如:
zfs get -r dept:users userpool
NAME            PROPERTY    VALUE           SOURCE
userpool        dept:users  all             local
userpool/user1  dept:users  finance         local
userpool/user2  dept:users  general         local
userpool/user3  dept:users  itops           local		
		
使用zfs inherit命令清除用户属性,例如:
$ zfs inherit -r dept:users userpool
如果属性未在任何父数据集定义,则将其完全删除。
top

2021/12/17 & 20