Solaris 10 10/09 和 Oracle Solaris 10 9/10:在这些发行版中添加了以下 ZFS 文件系统增强功能。
ZFS 快照流属性增强–可以设置一个接收属性,它不同于其本地属性设置。例如,假设您接收一个压缩属性被禁用的流,但您想在接收文件系统中启用压缩。这意味着,接收的流的接收压缩属性值为 off,而本地压缩属性值为 on。由于本地值会覆盖接收的值,因此无需担心发送侧的设置会替换接收侧的值。zfs get 命令在 VALUE 栏下显示压缩属性的有效值。
支持发送和本地属性值的新 ZFS 命令选项和属性如下:
使用 zfs inherit -S 将本地属性值恢复为接收值(如有)。如果属性没有接收值,则 zfs inherit - S 命令的行为与不带 -S 选项的 zfs inherit 命令相同。如果属性有接收值,则 zfs inherit 命令会用继承的值覆盖接收的值,直到发出 zfs inherit -S 命令将其恢复为接收的值。
可以使用 zfs get -o 以包括新的非缺省栏 RECEIVED。或者,可以使用 zfs get -o all 命令以包括所有栏,其中包括 RECEIVED。
您可以使用 zfs send -p 选项以包括发送流中的属性,而无需使用 -R 选项。
此外,可以使用 zfs send -e 选项以利用发送快照名的最后一个元素确定新的快照名。以下示例将 poola/bee/cee@1 快照发送给 poold/eee 文件系统,并仅利用快照名的最后一个元素 (cee@1) 创建接收的文件系统和快照。
# zfs list -rt all poola NAME USED AVAIL REFER MOUNTPOINT poola 134K 134G 23K /poola poola/bee 44K 134G 23K /poola/bee poola/bee/cee 21K 134G 21K /poola/bee/cee poola/bee/cee@1 0 - 21K - # zfs send -R poola/bee/cee@1 | zfs receive -e poold/eee # zfs list -rt all poold NAME USED AVAIL REFER MOUNTPOINT poold 134K 134G 23K /poold poold/eee 44K 134G 23K /poold/eee poold/eee/cee 21K 134G 21K /poold/eee/cee poold/eee/cee@1 0 - 21K - |
在创建池时设置 ZFS 文件系统属性-您可以在创建存储池时设置 ZFS 文件系统属性。在以下示例中,在创建池时创建的 ZFS 文件系统上启用了压缩:
# zpool create -O compression=on pool mirror c0t1d0 c0t2d0 |
在 ZFS 文件系统上设置高速缓存属性-ZFS 文件系统中提供了两个新属性,使您能够控制主高速缓存 (ARC) 和二级高速缓存 (L2ARC) 中要缓存的内容。高速缓存属性设置如下所示:
primarycache-用于控制在 ARC 中高速缓存的内容。
secondarycache-控制在 L2ARC 中要缓存的内容。
这两个属性的可能值包括 all、none 和 metadata。如果设置为 all,则用户数据和元数据都会被缓存。如果设置为 none,则用户数据和元数据都不会被缓存。如果设置为 metadata,则只有元数据被缓存。缺省值为 all。
您可以在现有文件系统上或在创建文件系统时设置这些属性。例如:
# zfs set primarycache=metadata tank/datab # zfs create -o primarycache=metadata tank/newdatab |
如果在现有文件系统上设置这些属性,则根据这些属性的值仅缓存新 I/O。
对某些数据集环境而言,不高速缓存用户数据可能会带来一些好处。您必须确定您的环境是否适合设置高速缓存属性。
查看磁盘空间记帐属性-新的只读文件系统属性有助于您确定克隆、文件系统和卷的磁盘空间使用情况以及快照。这些属性如下所示:
usedbychildren-标识此数据集的子项占用的磁盘空间量;如果所有数据集子项都被销毁,将释放该空间。此属性的缩写为 usedchild。
usedbydataset-用于确定此数据集本身使用的磁盘空间量,如果在销毁所有快照并删除所有 refreservation 后销毁数据集,将释放此空间。此属性的缩写为 usedds。
usedbyrefreservation-用于确定此数据集上的 refreservation 集使用的磁盘空间量,如果删除 refreservation,将释放此空间。此属性的缩写为 usedrefreserv。
usedbysnapshots-标识此数据集的快照占用的磁盘空间量;如果此数据集的所有快照都被销毁,将释放该空间。请注意,这不是快照 used 属性的总和,因为多个快照可以共享磁盘空间。此属性的缩写为 usedsnap。
这些新的属性将 used 属性的值分解为各种占用磁盘空间的元素。特别地,used 属性的值分解如下:
used property = usedbychildren + usedbydataset + usedbyrefreservation + usedbysnapshots |
您可以使用 zfs list -o space 命令查看这些属性。例如:
$ zfs list -o space NAME AVAIL USED USEDSNAP USEDDS USEDREFRESERV USEDCHILD rpool 25.4G 7.79G 0 64K 0 7.79G rpool/ROOT 25.4G 6.29G 0 18K 0 6.29G rpool/ROOT/snv_98 25.4G 6.29G 0 6.29G 0 0 rpool/dump 25.4G 1.00G 0 1.00G 0 0 rpool/export 25.4G 38K 0 20K 0 18K rpool/export/home 25.4G 18K 0 18K 0 0 rpool/swap 25.8G 512M 0 111M 401M 0 |
以上命令等同于 zfs list -o name,avail,used,usedsnap,usedds,usedrefreserv,usedchild -t filesystem,volume 命令。
Listing snapshots – listsnapshots 池属性控制是否通过 zfs list 命令显示快照信息。缺省值为 on ,这意味着在缺省情况下显示快照信息。
如果您的系统有许多 ZFS 快照,并且希望禁用 zfs list 命令中关于快照信息的显示,请按照如下所示禁用 listsnapshots 属性:
# zpool get listsnapshots pool NAME PROPERTY VALUE SOURCE pool listsnapshots on default # zpool set listsnaps=off pool |
如果禁用了 listsnapshots 属性,可以通过 zfs list -t snapshots 命令列出快照信息。 例如:
# zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT pool/home@today 16K - 22K - pool/home/user1@today 0 - 18K - pool/home/user2@today 0 - 18K - pool/home/user3@today 0 - 18K - |