跳过导航链接 | |
退出打印视图 | |
Oracle Solaris ZFS 管理指南 Oracle Solaris 10 1/13 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
4. 安装和引导 Oracle Solaris ZFS 根文件系统
6. 使用 Oracle Solaris ZFS 快照和克隆
7. 使用 ACL 和属性保护 Oracle Solaris ZFS 文件
属性是用来对文件系统、卷、快照和克隆的行为进行控制的主要机制。除非另有说明,否则本节中阐述的属性适用于所有数据集类型。
属性分为两种类型:本机属性和用户定义的属性。本机属性用于提供内部统计信息或控制 ZFS 文件系统行为。此外,本机属性是可设置的或只读的。用户属性对 ZFS 文件系统行为没有影响,但可通过用户环境中有意义的方式来注释数据集。有关用户属性的更多信息,请参见ZFS 用户属性。
大多数可设置的属性也是可继承的。可继承属性是这样的属性:如果为父文件系统设置了该属性,则该属性会向下传播给其所有后代。
所有可继承属性都有一个关联源,表明属性是如何获得的。属性的源可具有以下值:
表示属性是使用 zfs set 命令对数据集进行显式设置的,如设置 ZFS 属性中所述。
表示属性是从指定的祖先继承而来。
表示属性值不是继承而来或在本地设置。如果没有祖先具有属性源 local,则会使用此源。
下表介绍了只读的和可设置的本机 ZFS 文件系统属性。只读本机属性在表中注明为“只读属性”。此表中列出的所有其他本机属性均为可设置的属性。有关用户属性的信息,请参见ZFS 用户属性。
表 5-1 ZFS 本机属性说明
|
可以检索但无法设置只读本机属性。只读本机属性不可继承。有些本机属性特定于特殊类型的数据集。在这种情况下,表 5-1 的说明部分会注明数据集类型。
下面列出了只读本机属性,表 5-1 对其进行了描述。
available
compressratio
creation
mounted
origin
referenced
type
used
有关详细信息,请参见used 属性。
usedbychildren
usedbydataset
usedbyrefreservation
usedbysnapshots
有关磁盘空间记帐(包括 used、referenced 和 available 属性)的更多信息,请参见ZFS 磁盘空间记帐。
used 属性是一个只读属性,表明此数据集及其所有后代占用的磁盘空间量。可根据此数据集的配额和预留空间来检查该值。使用的磁盘空间不包括数据集的预留空间,但会考虑任何后代数据集的预留空间。数据集占用其父级的磁盘空间量以及以递归方式销毁该数据集时所释放的磁盘空间量应为其使用空间和预留空间的较大者。
创建快照时,其磁盘空间最初在快照与文件系统之间进行共享,还可能是与以前的快照进行共享。随着文件系统的变化,以前共享的磁盘空间将供快照专用,并会计算在快照的使用空间内。快照使用的磁盘空间会将其专用数据所占空间计算在内。此外,删除快照可增加其他快照专用(和使用)的磁盘空间量。有关快照和空间问题的更多信息,请参见空间不足行为。
已用磁盘空间量、可用磁盘空间量以及引用磁盘空间量并不包括暂挂更改。通常,暂挂更改仅占用几秒钟的时间。使用 fsync(3c) 或 O_SYNC 功能提交对磁盘的更改,不一定可以保证磁盘空间使用情况信息会立即更新。
使用 zfs list -o space 命令,可以显示 usedbychildren、usedbydataset、usedbyrefreservation 和 usedbysnapshots 属性信息。这些属性将 used 属性细分为后代占用的磁盘空间。有关更多信息,请参见表 5-1。
可设置的本机属性是其值可同时进行检索和设置的属性。可设置的本机属性可以使用 zfs set 命令或 zfs create 命令进行设置,请分别参见设置 ZFS 属性和创建 ZFS 文件系统中的描述。除了配额和预留空间外,可设置的本机属性均可继承。有关配额和预留空间的更多信息,请参见设置 ZFS 配额和预留空间。
有些可设置的本机属性特定于特殊类型的数据集。在这种情况下,表 5-1 的说明部分会注明数据集类型。如果未明确注明,则表明属性适用于所有数据集类型: 文件系统、卷、克隆和快照。
下面列出了可设置的属性,表 5-1 对其进行了描述。
aclinherit
有关详细说明,请参见ACL 属性。
aclmode
有关详细说明,请参见ACL 属性。
atime
canmount
checksum
compression
copies
devices
exec
mountpoint
primarycache
quota
readonly
recordsize
有关详细说明,请参见recordsize 属性。
refquota
refreservation
reservation
secondarycache
shareiscsi
setuid
snapdir
version
volsize
有关详细说明,请参见volsize 属性。
volblocksize
zoned
xattr
如果 canmount 属性设置为 off,则不能使用 zfs mount 或 zfs mount -a 命令挂载文件系统。将此属性设置为 off 与将 mountpoint 属性设置为 none 的效果相似,区别在于文件系统仍有一个可以继承的普通 mountpoint 属性。例如,可将该属性设置为 off,为后代文件系统建立可继承属性,但父文件系统本身永远不会挂载,也无法供用户访问。在这种情况下,父文件系统将充当一个容器,这样便可以在容器中设置属性,但容器本身永远不可访问。
在以下示例中,创建了 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
recordsize 属性为文件系统中的文件指定建议的块大小。
该属性专门设计用于对大小固定的记录中的文件进行访问的数据库工作负荷。ZFS 会根据为典型的访问模式优化的内部算法来自动调整块大小。对于创建很大的文件但访问较小的随机块中的文件的数据库而言,这些算法可能不是最优的。将 recordsize 值指定为大于或等于数据库的记录大小的值可以显著提高性能。强烈建议不要将该属性用于一般用途的文件系统,否则可能会对性能产生不利影响。指定的大小必须是 2 的若干次幂,并且必须大于或等于 512 字节同时小于或等于 128 KB。更改文件系统的 recordsize 值仅影响之后创建的文件。现有文件不会受到影响。
此属性的缩写为 recsize。
volsize 属性指定卷的逻辑大小。缺省情况下,创建卷会产生相同大小的预留空间。对 volsize 的任何更改都会反映为对预留空间的等效更改。这些检查用来防止用户产生的意外行为。如果卷包含的空间比其声明可用的空间少,则会导致未定义的行为或数据损坏,具体取决于卷的使用方法。如果在卷的使用过程中更改卷大小,特别是在收缩大小时,也会出现上述影响。调整卷大小时,应该格外小心。
尽管并不建议,但可以通过为 -zfs create -V 指定 s 标志或在创建卷后更改预留空间来创建稀疏卷。稀疏卷指预留空间与卷大小不相等的卷。对于稀疏卷,预留空间中不会反映对 volsize 的更改。
有关使用卷的更多信息,请参见ZFS 卷。
除了本机属性外,ZFS 还支持任意用户属性。用户属性对 ZFS 行为没有影响,但可通过用户环境中有意义的信息来注释数据集。
必须包含冒号字符 (':'),以与本机属性相区分。
必须包含小写字母、数字或以下标点符号:':'、'+'、'.'、'_'。
用户属性名称的最大长度为 256 个字符。
预期约定是属性名分为以下两个部分,但 ZFS 不强制使用此名称空间:
module:property
在程序中使用用户属性时,请对属性名的 module 部分使用反向 DNS 域名,以尽量避免两个独立开发的软件包将同一属性名用于不同用途。以 com.oracle. 开头的属性名保留供 Oracle Corporation 使用。
用户属性的值必须符合以下约定:
必须由始终继承且从不验证的任意字符串组成。
用户属性值的最大长度为 1024 个字符。
例如:
# zfs set dept:users=finance userpool/user1 # zfs set dept:users=general userpool/user2 # zfs set dept:users=itops userpool/user3
对属性执行操作的所有命令(如 zfs list、zfs get、zfs 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
如果任意父数据集中均未定义该属性,则会将其完全删除。