JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11.1 管理:ZFS 文件系统     Oracle Solaris 11.1 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris ZFS 文件系统(介绍)

2.  Oracle Solaris ZFS 入门

3.  管理 Oracle Solaris ZFS 存储池

4.  管理 ZFS 根池组件

5.  管理 Oracle Solaris ZFS 文件系统

6.  使用 Oracle Solaris ZFS 快照和克隆

ZFS 快照概述

创建和销毁 ZFS 快照

保持 ZFS 快照

重命名 ZFS 快照

显示和访问 ZFS 快照

ZFS 快照的磁盘空间记帐

回滚 ZFS 快照

确定 ZFS 快照的差异 (zfs diff)

ZFS 克隆概述

创建 ZFS 克隆

销毁 ZFS 克隆

使用 ZFS 克隆替换 ZFS 文件系统

发送和接收 ZFS 数据

使用其他备份产品保存 ZFS 数据

识别 ZFS 快照流

发送 ZFS 快照

接收 ZFS 快照

向 ZFS 快照流应用不同的属性值

发送和接收复杂的 ZFS 快照流

远程复制 ZFS 数据

7.  使用 ACL 和属性保护 Oracle Solaris ZFS 文件

8.  Oracle Solaris ZFS 委托管理

9.  Oracle Solaris ZFS 高级主题

10.  Oracle Solaris ZFS 故障排除和池恢复

11.  归档快照和根池恢复

12.  建议的 Oracle Solaris ZFS 做法

A.  Oracle Solaris ZFS 版本说明

索引

ZFS 快照概述

快照是文件系统或卷的只读副本。快照几乎可以即时创建,而且最初不占用池中的其他磁盘空间。但是,活动数据集中的数据更改时,快照仍将继续引用旧数据,这会占用磁盘空间,从而阻止释放磁盘空间。

ZFS 快照具有以下特征:

无法直接访问卷的快照,但是可以对它们执行克隆、备份、回滚等操作。有关备份 ZFS 快照的信息,请参见发送和接收 ZFS 数据

创建和销毁 ZFS 快照

快照是使用 zfs snapshotzfs snap 命令创建的,该命令采用要创建的快照的名称作为其唯一参数。快照名称按如下方式指定:

filesystem@snapname
volume@snapname

快照名称必须满足ZFS 组件命名要求中所述的命名要求。

在以下示例中,将创建一个 tank/home/cindy 的快照,其名称为 friday

# zfs snapshot tank/home/cindy@friday

通过使用 -r 选项可为所有后代文件系统创建快照。例如:

# zfs snapshot -r tank/home@snap1
# zfs list -t snapshot -r tank/home
NAME                   USED  AVAIL  REFER  MOUNTPOINT
tank/home@snap1           0      -  2.11G  -
tank/home/cindy@snap1     0      -   115M  -
tank/home/lori@snap1      0      -  2.00G  -
tank/home/mark@snap1      0      -  2.00G  -
tank/home/tim@snap1       0      -  57.3M  -

快照没有可修改的属性。也不能将数据集属性应用于快照。例如:

# zfs set compression=on tank/home/cindy@friday
cannot set property for 'tank/home/cindy@friday': 
this property can not be modified for snapshots

使用 zfs destroy 命令可以销毁快照。例如:

# zfs destroy tank/home/cindy@friday

如果数据集存在快照,则不能销毁该数据集。例如:

# zfs destroy tank/home/cindy
cannot destroy 'tank/home/cindy': filesystem has children
use '-r' to destroy the following datasets:
tank/home/cindy@tuesday
tank/home/cindy@wednesday
tank/home/cindy@thursday

此外,如果已从快照创建克隆,则必须先销毁克隆,才能销毁快照。

有关 destroy 子命令的更多信息,请参见销毁 ZFS 文件系统

保持 ZFS 快照

如果存在不同的原子快照策略,导致旧的快照由于不再存在于发送侧而被 zfs receive 不小心销毁,则可能需要考虑使用本 Solaris 发行版中的快照保持功能。

保持快照可以防止它被销毁。此外,当一个带有克隆的快照等待删除最后一个克隆时,该功能允许使用 zfs destroy - d 命令删除该快照。每个快照都有一个关联的用户引用计数,其初始值为 0。在一个快照上设置一个保持标志时,此计数递增 1;释放一个保持标志时,此计数递减 1。

在先前的 Oracle Solaris 发行版中,只有在快照无克隆时,才能使用 zfs destroy 命令销毁快照。在此 Oracle Solaris 发行版中,快照的用户引用计数也必须为零。

可以保持一个快照或一组快照。例如,以下语法在 tank/home/cindy/snap@1 上设置一个保持标志 keep

# zfs hold keep tank/home/cindy@snap1

可以使用 -r 选项递归保持所有后代文件系统的快照。例如:

# zfs snapshot -r tank/home@now
# zfs hold -r keep tank/home@now

此语法向给定的快照或快照集添加一个引用 keep。每个快照都有其自己的标志名称空间,保持标志在该空间内必须是唯一的。如果一个快照上存在一个保持,尝试使用 zfs destroy 命令销毁受保持的快照将失败。例如:

# zfs destroy tank/home/cindy@snap1
cannot destroy 'tank/home/cindy@snap1': dataset is busy

要销毁保持的快照,须使用 -d 选项。例如:

# zfs destroy -d tank/home/cindy@snap1

使用 zfs holds 命令显示受保持的快照列表。例如:

# zfs holds tank/home@now
NAME           TAG   TIMESTAMP                 
tank/home@now  keep  Fri Aug  3 15:15:53 2012  
# zfs holds -r tank/home@now
NAME                 TAG   TIMESTAMP                 
tank/home/cindy@now  keep  Fri Aug  3 15:15:53 2012  
tank/home/lori@now   keep  Fri Aug  3 15:15:53 2012  
tank/home/mark@now   keep  Fri Aug  3 15:15:53 2012  
tank/home/tim@now    keep  Fri Aug  3 15:15:53 2012  
tank/home@now        keep  Fri Aug  3 15:15:53 2012  

可以使用 zfs release 命令释放对一个快照或一组快照的保持。例如:

# zfs release -r keep tank/home@now

释放快照后,可以使用 zfs destroy 命令销毁快照。例如:

# zfs destroy -r tank/home@now

有两个新属性用来表示快照保持信息:

重命名 ZFS 快照

可以重命名快照,但是必须在从中创建它们的池和数据集中对它们进行重命名。例如:

# zfs rename tank/home/cindy@snap1 tank/home/cindy@today

此外,以下快捷方式语法等效于以上的语法:

# zfs rename tank/home/cindy@snap1 today

不支持以下快照 rename 操作,因为目标池和文件系统名称与从中创建快照的池和文件系统不同:

# zfs rename tank/home/cindy@today pool/home/cindy@saturday
cannot rename to 'pool/home/cindy@today': snapshots must be part of same 
dataset

可以使用 zfs rename -r 命令以递归方式重命名快照。例如:

# zfs list -t snapshot -r users/home
NAME                        USED  AVAIL  REFER  MOUNTPOINT
users/home@now             23.5K      -  35.5K  -
users/home@yesterday           0      -    38K  -
users/home/lori@yesterday      0      -  2.00G  -
users/home/mark@yesterday      0      -  1.00G  -
users/home/neil@yesterday      0      -  2.00G  -
# zfs rename -r users/home@yesterday @2daysago
# zfs list -t snapshot -r users/home
NAME                       USED  AVAIL  REFER  MOUNTPOINT
users/home@now            23.5K      -  35.5K  -
users/home@2daysago           0      -    38K  -
users/home/lori@2daysago      0      -  2.00G  -
users/home/mark@2daysago      0      -  1.00G  -
users/home/neil@2daysago      0      -  2.00G  -

显示和访问 ZFS 快照

缺省情况下,zfs list 输出中不再显示快照。您必须使用 zfs list -t snapshot 命令显示快照信息。或者,启用 listsnapshots 池属性。例如:

# zpool get listsnapshots tank
NAME  PROPERTY       VALUE      SOURCE
tank  listsnapshots  off        default
# zpool set listsnapshots=on tank
# zpool get listsnapshots tank
NAME  PROPERTY       VALUE      SOURCE
tank  listsnapshots  on         local

在文件系统的根的 .zfs/snapshot 目录中,可以访问文件系统的快照。例如,如果在 /home/cindy 处挂载了 tank/home/cindy,则可以在 /home/cindy/.zfs/snapshot/thursday 目录中访问 tank/home/cindy@thursday 快照数据。

# ls /tank/home/cindy/.zfs/snapshot
thursday   tuesday    wednesday

可以列出快照,如下所示:

# zfs list -t snapshot -r tank/home
NAME                       USED  AVAIL  REFER  MOUNTPOINT
tank/home/cindy@tuesday     45K      -  2.11G  -
tank/home/cindy@wednesday   45K      -  2.11G  -
tank/home/cindy@thursday      0      -  2.17G  -

可以列出为特定文件系统创建的快照,如下所示:

# zfs list -r -t snapshot -o name,creation tank/home
NAME                       CREATION
tank/home/cindy@tuesday    Fri Aug  3 15:18 2012
tank/home/cindy@wednesday  Fri Aug  3 15:19 2012
tank/home/cindy@thursday   Fri Aug  3 15:19 2012
tank/home/lori@today       Fri Aug  3 15:24 2012
tank/home/mark@today       Fri Aug  3 15:24 2012

ZFS 快照的磁盘空间记帐

创建快照时,最初在快照和文件系统之间共享其磁盘空间,还可能与以前的快照共享其空间。在文件系统发生更改时,以前共享的磁盘空间将变为该快照专用的空间,因此会将该空间算入快照的 used 属性。此外,删除快照可增加其他快照专用(使用)的磁盘空间量。

创建快照时,快照的 referenced 空间属性值与文件系统的相同。

可以找到有关 used 属性值如何被占用的附加信息。新的只读文件系统属性说明克隆、文件系统和卷的磁盘空间使用情况。例如:

$ zfs list -o space -r rpool
NAME                      AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
rpool                      124G  9.57G         0    302K              0      9.57G
rpool/ROOT                 124G  3.38G         0     31K              0      3.38G
rpool/ROOT/solaris         124G  20.5K         0       0              0      20.5K
rpool/ROOT/solaris/var     124G  20.5K         0   20.5K              0          0
rpool/ROOT/solaris-1       124G  3.38G     66.3M   3.14G              0       184M
rpool/ROOT/solaris-1/var   124G   184M     49.9M    134M              0          0
rpool/VARSHARE             124G  39.5K         0   39.5K              0          0
rpool/dump                 124G  4.12G         0   4.00G           129M          0
rpool/export               124G    63K         0     32K              0        31K
rpool/export/home          124G    31K         0     31K              0          0
rpool/swap                 124G  2.06G         0   2.00G          64.7M          0

有关这些属性的说明,请参见表 5-1

回滚 ZFS 快照

可以使用 zfs rollback 命令放弃自特定快照创建以来对文件系统所做的全部更改。文件系统恢复到创建快照时的状态。缺省情况下,该命令无法回滚到除最新快照以外的快照。

要回滚到早期快照,必须销毁所有的中间快照。可以通过指定 -r 选项销毁早期的快照。

如果存在任何中间快照的克隆,则还必须指定 -R 选项以销毁克隆。


注 - 如果要回滚的文件系统当前为挂载状态,则会取消挂载并重新挂载。如果无法取消挂载该文件系统,则回滚将失败。-f 选项可强制取消挂载文件系统(如有必要)。


在以下示例中,会将 tank/home/cindy 文件系统回滚到 tuesday 快照:

# zfs rollback tank/home/cindy@tuesday
cannot rollback to 'tank/home/cindy@tuesday': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
tank/home/cindy@wednesday
tank/home/cindy@thursday
# zfs rollback -r tank/home/cindy@tuesday

在本示例中,因为已回滚到以前的 tuesday 快照,所以销毁了 wednesdaythursday 快照。

# zfs list -r -t snapshot -o name,creation tank/home/cindy
NAME                     CREATION
tank/home/cindy@tuesday  Fri Aug  3 15:18 2012

确定 ZFS 快照的差异 (zfs diff)

可以使用 zfs diff 命令确定 ZFS 快照的差异。

例如,假定创建了以下两个快照:

$ ls /tank/home/tim
fileA
$ zfs snapshot tank/home/tim@snap1
$ ls /tank/home/tim
fileA  fileB
$ zfs snapshot tank/home/tim@snap2

例如,要确定两个快照之间的差异,请使用类似以下的语法:

$ zfs diff tank/home/tim@snap1 tank/home/tim@snap2
M       /tank/home/tim/
+       /tank/home/tim/fileB

在输出中,M 表示该目录已经过修改。+ 表示 fileB 存在于较新的快照中。

以下输出中的 R 表示快照中的某个文件已经重命名。

$ mv /tank/cindy/fileB /tank/cindy/fileC
$ zfs snapshot tank/cindy@snap2
$ zfs diff tank/cindy@snap1 tank/cindy@snap2
M       /tank/cindy/
R       /tank/cindy/fileB -> /tank/cindy/fileC

下表概括了 zfs diff 命令确定的文件或目录更改。

文件或目录更改
标识符
文件或目录已被修改,或文件或目录链接已更改
M
文件或目录出现在较旧的快照中,但未出现在较新的快照中
文件或目录出现在较新的快照中,但未出现在较旧的快照中
+
文件或目录已重命名
R

有关更多信息,请参见 zfs(1M)