跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 管理:ZFS 文件系统 Oracle Solaris 11 Information Library (简体中文) |
1. Oracle Solaris ZFS 文件系统(介绍)
3. Oracle Solaris ZFS 与传统文件系统之间的差别
7. 使用 Oracle Solaris ZFS 快照和克隆
8. 使用 ACL 和属性保护 Oracle Solaris ZFS 文件
本节概述了 ZFS 文件系统的新增功能。
Oracle Solaris 11:zfs.1m 手册页已进行修订,核心 ZFS 文件系统功能保留在 zfs.1m 页面中,但是委托管理、加密以及共享语法和示例包含在以下页面中:
Oracle Solaris 11:aclmode 属性用于在初始创建文件时修改访问控制列表 (Access Control List, ACL) 行为,或者在 chmod 操作期间随时控制如何修改 ACL。已重新引入了 aclmode 属性,它具有以下属性值:
discard-aclmode 属性为 discard 的文件系统将删除不表示文件模式的所有 ACL 项。这是缺省值。
mask-aclmode 属性为 mask 的文件系统将减少用户或组的权限。除非用户项与文件或目录的所有者具有相同的 UID,否则将减少权限,以使其不会大于组权限位。在这种情况下,减少 ACL 权限,以使其不会大于所有者权限位。如果未执行显式 ACL 集合操作,则 mask 值还会在模式更改之后保留 ACL。
passthrough-aclmode 属性为 passthrough 的文件系统指示除了生成必要的 ACL 项来表示文件或目录的新模式外,不对 ACL 进行其他更改。
有关更多信息,请参见示例 8-14。
Oracle Solaris 11:在此 Solaris 发行版中,可以使用 zpool status -l 命令来显示 /dev/chassis 目录中包含的关于池设备的物理磁盘位置信息。此目录包含您系统上的设备的机箱、插口和插卡值。
此外,可以使用 fmadm add-alias 命令来引入磁盘别名,磁盘别名可帮助您识别磁盘在您的环境中的物理位置。例如:
# fmadm add-alias SUN-Storage-J4400.0912QAJ001 SUN-Storage-J4400.rack22
例如:
% zpool status -l export pool: export state: ONLINE scan: resilvered 379G in 8h31m with 0 errors on Thu Jan 27 23:10:20 2011 config: NAME STATE READ WRITE CKSUM export ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__2/disk ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__3/disk ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__4/disk ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__5/disk ONLINE 0 0 0 mirror-2 ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__6/disk ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__7/disk ONLINE 0 0 0 mirror-3 ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__8/disk ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__9/disk ONLINE 0 0 0 mirror-4 ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__10/disk ONLINE 0 0 0 /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__11/disk ONLINE 0 0 0 spares /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__0/disk AVAIL /dev/chassis/SUN-Storage-J4400.rack22/SCSI_Device__1/disk AVAIL errors: No known data errors
zpool iostat 命令也已更新,可提供池设备的物理位置信息。例如:
# zpool iostat -lv capacity operations bandwidth pool alloc free read write read write ---------- ----- ----- ----- ----- ----- ----- export 2.39T 2.14T 13 27 42.7K 300K mirror 490G 438G 2 5 8.53K 60.3K /dev/chassis/...rack22/SCSI_Device__2/disk - - 1 0 4.47K 60.3K /dev/chassis/...rack22/SCSI_Device__3/disk - - 1 0 4.45K 60.3K mirror 490G 438G 2 5 8.62K 59.9K /dev/chassis/...rack22/SCSI_Device__4/disk - - 1 0 4.52K 59.9K /dev/chassis/...rack22/SCSI_Device__5/disk - - 1 0 4.48K 59.9K mirror 490G 438G 2 5 8.60K 60.2K /dev/chassis/...rack22/SCSI_Device__6/disk - - 1 0 4.50K 60.2K /dev/chassis/...rack22/SCSI_Device__7/disk - - 1 0 4.49K 60.2K mirror 490G 438G 2 5 8.47K 60.1K . . .
此外,croinfo、diskinfo、format 和 prtconf 命令也提供物理磁盘位置信息。有关更多信息,请参见《Oracle Solaris 管理:设备和文件系统》中的"通过物理位置标识设备"。
Oracle Solaris 11:在此发行版中,可以将数据从旧的文件系统迁移到新的文件系统,同时允许在迁移过程中访问和修改新的文件系统。
在新的 ZFS 文件系统上设置 shadow 属性将触发较旧数据的迁移。可以将 shadow 属性设置为以下值之一,以便从本地系统或远程系统迁移数据:
file:///path nfs://host:path
有关更多信息,请参见迁移 ZFS 文件系统。
Oracle Solaris 11:在此 Solaris 发行版中,ZFS 文件系统的共享是通过两个步骤的过程实现的,以便可以通过一个命令设置各个共享属性,并且在另一步骤中发布 NFS 或 SMB 共享。
通过使用 zfs set share 命令,创建 ZFS 文件系统的 NFS 或 SMB 共享并标识文件共享属性。
通过将 sharenfs 或 sharesmb 属性设置为 on,发布 NFS 或 SMB 共享。
有关更多信息,请参见共享和取消共享 ZFS 文件系统 。
Oracle Solaris 11:在此发行版中,您可以加密 ZFS 文件系统。
例如,tank/cindy 文件系统是在启用了加密属性的情况下创建的。缺省的加密策略是提示您输入口令短语,口令短语的长度必须至少为 8 个字符。
# zfs create -o encryption=on tank/cindy Enter passphrase for 'tank/cindy': xxx Enter again: xxx
加密策略是在创建 ZFS 文件系统时设置的。文件系统的加密策略由后代文件系统继承,且不可删除。
有关更多信息,请参见加密 ZFS 文件系统。
Oracle Solaris 11:在此发行版中,您可以设置在快照流中发送和接收的文件系统属性。通过这些增强功能,可以灵活地将发送流中的文件系统属性应用到接收方文件系统,或确定接收时是否应忽略本地文件系统属性(如 mountpoint 属性值)。
有关更多信息,请参见向 ZFS 快照流应用不同的属性值。
Oracle Solaris 11:在此发行版中,您可以使用 zfs diff 命令确定 ZFS 快照的差异。
例如,假定创建了以下两个快照:
$ ls /tank/cindy fileA $ zfs snapshot tank/cindy@0913 $ ls /tank/cindy fileA fileB $ zfs snapshot tank/cindy@0914
例如,要确定两个快照之间的差异,请使用类似以下的语法:
$ zfs diff tank/cindy@0913 tank/cindy@0914 M /tank/cindy/ + /tank/cindy/fileB
在输出中,M 表示该目录已经过修改。+ 表示 fileB 存在于较新的快照中。
有关更多信息,请参见确定 ZFS 快照的差异 (zfs diff)。
Oracle Solaris 11:在此发行版中,提供了以下新增的 ZFS 存储池功能:
可以使用 zpool import -m 命令导入缺少日志的池。有关更多信息,请参见导入缺少日志设备的池。
可以在只读模式下导入池。此功能主要用于池恢复。如果由于底层设备受损而无法访问受损的池,可在只读模式下导入池以恢复数据。有关更多信息,请参见在只读模式下导入池。
在此发行版中创建的和升级到池版本 29 或以上版本的 RAID-Z(raidz1、raidz2 或 raidz3)存储池会将某些对延迟敏感的元数据自动进行镜像,以提高读取 I/O 吞吐量性能。对于升级到池版本 29 或以上版本的现有 RAID-Z 池,将对所有新写入的数据的某些元数据进行镜像。
RAID-Z 池中的镜像元数据不对硬件故障提供额外的防护,这与镜像存储池类似。镜像元数据占用额外的空间,但是 RAID-Z 保护措施与先前发行版中的相同。此增强功能仅出于性能考虑。
Oracle Solaris 11:在此发行版中,您可以使用 sync 属性决定 ZFS 文件系统的同步行为。
缺省同步行为是将所有同步文件系统事务写入意图日志,并刷新所有设备以确保数据稳定。建议不要禁用缺省同步行为。依赖于同步支持的应用程序可能会受影响,并可能发生数据丢失的情况。
sync 属性可以在创建文件系统之前或之后设置。无论何种情况,属性值都将立即生效。例如:
# zfs set sync=always tank/neil
在包含 sync 属性的 Oracle Solaris 发行版中,zil_disable 参数不再可用。
有关更多信息,请参见表 6-1。
Oracle Solaris 11:在此发行版中,您可以使用 -T 选项提供时间间隔和计数值,使 zpool list 和 zpool status 命令显示更多的信息。
此外,zpool status 命令还提供更多的池清理和重新同步信息,如下所示:
重新同步进度报告。例如:
scan: resilver in progress since Thu May 26 11:26:32 2011 1.26G scanned out of 2.40G at 6.15M/s, 0h3m to go 1.26G resilvered, 56.3% done
清理进度报告。例如:
scan: scrub in progress since Fri May 27 08:24:17 2011 18.0M scanned out of 2.35G at 8.99M/s, 0h4m to go 0 repaired, 0.75% done
重新同步完成消息。例如:
scan: resilvered 2.34G in 1h2m with 0 errors on Thu May 26 11:56:40 2011
清理完成消息。例如:
scan: scrub repaired 512B in 1h2m with 0 errors on Fri May 27 08:54:50 2011
取消正在进行的清理消息。例如:
scan: scrub canceled on Wed Fri Jun 10 09:06:24 2011
清理和重新同步完成消息在系统重新引导后仍存在
以下语法使用时间间隔和计数选项显示正在进行的池重新同步的信息。您可以使用 -T d 值以标准日期格式显示信息,或使用 -T u 以内部格式显示信息。
# zpool status -T d tank 3 2 Wed Jun 22 14:35:40 GMT 2011 pool: tank state: ONLINE status: One or more devices is currently being resilvered. The pool will continue to function, possibly in a degraded state. action: Wait for the resilver to complete. scan: resilver in progress since Wed Jun 22 14:33:29 2011 3.42G scanned out of 7.75G at 28.2M/s, 0h2m to go 3.39G resilvered, 44.13% done config: NAME STATE READ WRITE CKSUM tank ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 c2t3d0 ONLINE 0 0 0 c2t4d0 ONLINE 0 0 0 mirror-1 ONLINE 0 0 0 c2t7d0 ONLINE 0 0 0 c2t8d0 ONLINE 0 0 0 (resilvering) errors: No known data errors
Oracle Solaris 11:在此发行版中,提供了以下 ACL 增强功能:
除了特殊权限,普通 ACL 不需要 deny 访问控制条目 (Access control entry, ACE)。例如,0644、0755 或 0664 模式不需要 deny ACE,但是某些模式(如 0705、0060等)需要 deny ACE。
以前的行为是普通 ACL(如 644)包含 deny ACE。例如:
# ls -v file.1 -rw-r--r-- 1 root root 206663 Jun 14 11:52 file.1 0:owner@:execute:deny 1:owner@:read_data/write_data/append_data/write_xattr/write_attributes /write_acl/write_owner:allow 2:group@:write_data/append_data/execute:deny 3:group@:read_data:allow 4:everyone@:write_data/append_data/write_xattr/execute/write_attributes /write_acl/write_owner:deny 5:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
新的行为是普通 ACL(如 644)不包含 deny ACE。例如:
# ls -v file.1 -rw-r--r-- 1 root root 206663 Jun 22 14:30 file.1 0:owner@:read_data/write_data/append_data/read_xattr/write_xattr /read_attributes/write_attributes/read_acl/write_acl/write_owner /synchronize:allow 1:group@:read_data/read_xattr/read_attributes/read_acl/synchronize:allow 2:everyone@:read_data/read_xattr/read_attributes/read_acl/synchronize :allow
在继承过程中,ACL 不再被拆分成多个 ACE 以尝试保留未经修改的原始权限。而是根据需要修改权限以强制进入文件创建模式。
aclinherit 属性行为包括当属性设置为 restricted 时减少权限,这意味着继承过程中不再将 ACL 拆分成多个 ACE。
缺省情况下,会在 chmod(2) 操作过程中放弃现有的 ACL。这种变化意味着 ZFS aclmode 属性不再可用。
一种新的权限模式计算规则,即,如果 ACL 的 user ACE 同时也是文件所有者,则这些权限将包括在权限模式计算中。如果 group ACE 是文件的组所有者,将适用同样的规则。
有关更多信息,请参见第 8 章。
Oracle Solaris 11:在此发行版中,您可以使用 zpool split 命令拆分镜像存储池,从原镜像池中分离一个或多个磁盘,以创建另一个完全相同的池。
有关更多信息,请参见通过分割镜像 ZFS 存储池创建新池。
Oracle Solaris 11:在此发行版中,使用通用多协议 SCSI 目标 (Common Multiprotocol SCSI Target, COMSTAR) 目标守护进程替换了 iSCSI 目标守护进程。此更改还意味着,shareiscsi 属性不再可用(过去用于将 ZFS 卷作为 iSCSI LUN 共享)。可以使用 stmfadm 命令对 ZFS 卷进行配置并将其共享为 iSCSI LUN。
有关更多信息,请参见将 ZFS 卷用作 iSCSI LUN。
Oracle Solaris 11:在此发行版中,每个 ZFS 存储池都有一个关联的进程 zpool-poolname。此进程中的线程是用来处理与池相关的 I/O 任务(如压缩和校验和验证)的池 I/O 处理线程。此进程的作用是使各存储池的 CPU 利用情况具有可见性。
使用 ps 和 prstat 命令可以查看有关这些运行进程的信息。这些进程仅在全局区域中可用。有关更多信息,请参见SDC(7)。
Oracle Solaris 11:在此发行版中,可以使用重复数据删除 (dedup) 属性从 ZFS 文件系统中删除冗余数据。如果文件系统启用了 dedup 属性,则会以同步方式删除重复的数据块。结果是仅存储唯一的数据,在文件之间共享通用组件。
可以按如下方式启用此属性:
# zfs set dedup=on tank/home
虽然重复数据删除是作为文件系统属性设置的,但是它在池范围内起作用。例如,您可以按如下方式确定重复数据删除比:
# zpool list tank NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT tank 136G 55.2G 80.8G 40% 2.30x ONLINE -
为支持重复数据删除属性,zpool list 输出已更新。
有关设置重复数据删除属性的更多信息,请参见 dedup 属性。
在检查以下注意事项之前,不要在驻留于生产系统上的文件系统上启用 dedup 属性:
确定数据是否将受益于重复数据删除产生的空间节省
确定系统是否具有足够的物理内存来支持重复数据删除
对系统性能的潜在影响
有关这些注意事项的更多信息,请参见 dedup 属性。