免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1505 | 回复: 0
打印 上一主题 下一主题

第 6 章 使用 ZFS 快照和克隆 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-21 12:28 |只看该作者 |倒序浏览

第 6 章 使用 ZFS 快照和克隆
本章介绍如何创建和管理 ZFS 快照和克隆。本章还介绍有关保存快照的信息。
本章包含以下各节:

ZFS 快照
快照是文件系统或卷的只读副本。快照几乎可以即时创建,而且最初不占用池中的其他磁盘空间。但是,当活动数据集中的数据发生更改时,快照通过继续引用旧数据占用磁盘空间,从而阻止释放该空间。
ZFS 快照具有以下特征:


  • 在系统重新引导前后保持不变

  • 理论最大快照数是 264。

  • 不使用单独的后备存储。快照直接占用存储池(从中创建这些快照的文件系统所在的存储池)中的磁盘空间。

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

创建和销毁 ZFS 快照
快照是使用 zfs snapshot 命令创建的,该命令将要创建的快照的名称用作其唯一参数。快照名称按如下方式指定:
filesystem@snapname
volume@snapname
快照名称必须符合
ZFS 组件命名要求
中定义的命名约定。
在以下示例中,将创建 tank/home/ahrens 的快照,其名称为 friday。
# zfs snapshot tank/home/ahrens@friday
快照没有可修改的属性。也不能将数据集属性应用于快照。
# zfs set compression=on tank/home/ahrens@tuesday
cannot set compression property for 'tank/home/ahrens@tuesday': snapshot
properties cannot be modified
使用 zfs destroy 命令可以销毁快照。例如:
# zfs destroy tank/home/ahrens@friday
如果数据集存在快照,则不能销毁该数据集。例如:
# zfs destroy tank/home/ahrens
cannot destroy 'tank/home/ahrens': filesystem has children
use '-r' to destroy the following datasets:
tank/home/ahrens@tuesday
tank/home/ahrens@wednesday
tank/home/ahrens@thursday
此外,如果已从快照创建克隆,则必须先销毁克隆,才能销毁快照。
有关 destroy 子命令的更多信息,请参见
销毁 ZFS 文件系统

重命名 ZFS 快照
可以重命名快照,但是必须在从中创建它们的池和数据集中对它们进行重命名。例如:
# zfs rename tank/home/cindys@031306 tank/home/cindys@today
不支持以下快照重命名操作,因为目标池和文件系统名称与从中创建快照的池和文件系统不同。
# zfs rename tank/home/cindys@today pool/home/cindys@saturday
cannot rename to 'pool/home/cindys@today': snapshots must be part of same
dataset
显示和访问 ZFS 快照
在包含文件系统的根的 .zfs/snapshot 目录中,可以访问文件系统的快照。例如,如果在 /home/ahrens 上挂载了 tank/home/ahrens,则在 /home/ahrens/.zfs/snapshot/thursday 目录中可以访问 tank/home/ahrens@thursday 快照数据。
# ls /home/ahrens/.zfs/snapshot
tuesday wednesday thursday
可以列出快照,如下所示:
# zfs list -t snapshot
NAME                        USED  AVAIL  REFER  MOUNTPOINT
pool/home/anne@monday          0      -   780K  -
pool/home/bob@monday           0      -  1.01M  -
tank/home/ahrens@tuesday   8.50K      -   780K  -
tank/home/ahrens@wednesday 8.50K      -  1.01M  -
tank/home/ahrens@thursday      0      -  1.77M  -
tank/home/cindys@today     8.50K      -   524K  -
可以列出为特定文件系统创建的快照,如下所示:
# zfs list -r -t snapshot -o name,creation pool/home
NAME                   CREATION
pool/home/anne@monday  Mon Mar 13 11:46 2006
pool/home/bob@monday   Mon Mar 13 11:46 2006
快照空间记帐
创建快照时,最初在快照和文件系统之间共享其空间,还可能与以前的快照共享其空间。在文件系统发生更改时,以前共享的空间将变为该快照专用的空间,因此会将该空间算入快照的 used 属性。此外,删除快照可增加其他快照专用(使用)的空间量。
创建快照时,快照的空间 referenced 属性与文件系统的相同。
回滚到 ZFS 快照
可以使用 zfs rollback 命令废弃自创建特定快照之后所做的所有更改。文件系统恢复到创建快照时的状态。缺省情况下,该命令无法回滚到除最新快照以外的快照。
要回滚到早期快照,必须销毁所有的中间快照。可以通过指定 -r 选项销毁早期的快照。
如果存在任何中间快照的克隆,则还必须指定 -R 选项以销毁克隆。
注 –
如果要回滚的文件系统当前为挂载状态,则必须取消挂载再重新挂载。如果无法取消挂载该文件系统,则回滚将失败。-f 选项可强制取消挂载文件系统(如有必要)。
在以下示例中,会将 tank/home/ahrens 文件系统回滚到 tuesday 快照:
# zfs rollback tank/home/ahrens@tuesday
cannot rollback to 'tank/home/ahrens@tuesday': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
tank/home/ahrens@wednesday
tank/home/ahrens@thursday
# zfs rollback -r tank/home/ahrens@tuesday
在上面的示例中,因为已回滚到以前的 tuesday 快照,所以删除了 wednesday 和 thursday 快照。
# zfs list -r -t snapshot -o name,creation tank/home/ahrens
NAME                  CREATION
tank/home/ahrens@tuesday  Mon Mar 13 11:05 2006
ZFS 克隆
克隆是可写入的卷或文件系统,其初始内容与从中创建它的数据集的内容相同。 与快照一样,创建克隆几乎是即时的,而且最初不占用其他磁盘空间。
克隆只能从快照创建。克隆快照时,会在克隆和快照之间建立隐式相关性。即使克隆是在数据集分层结构中的某个其他位置创建的,但只要克隆存在,就无法销毁原始快照。origin 属性显示此相关性,而 zfs destroy 命令会列出任何此类相关性(如果存在)。
克隆不继承从其中创建它的数据集的属性。相反,克隆基于在池分层结构中创建它们的位置继承其属性。使用 zfs get 和 zfs set 命令,可以查看和更改克隆数据集的属性。有关设置 ZFS 数据集属性的更多信息,请参见
设置 ZFS 属性

由于克隆最初与原始快照共享其所有磁盘空间,因此其 used 属性最初为零。随着不断对克隆进行更改,它使用的空间将越来越多。原始快照的 used 属性不考虑克隆所占用的磁盘空间。
创建 ZFS 克隆
要创建克隆,请使用 zfs clone 命令,指定从中创建克隆的快照以及新文件系统或卷的名称。新文件系统或卷可以位于 ZFS 分层结构中的任意位置。新数据集的类型(例如,文件系统或卷)与从中创建克隆的快照的类型相同。不能在原始文件系统快照所在池以外的池中创建该文件系统的克隆。
在以下示例中,将创建一个名为 tank/home/ahrens/bug123 的新克隆,其初始内容与快照 tank/ws/gate@yesterday 的内容相同。
# zfs snapshot tank/ws/gate@yesterday
# zfs clone tank/ws/gate@yesterday tank/home/ahrens/bug123
在以下示例中,将从 projects/newproject@today 快照为临时用户创建克隆工作区 projects/teamA/tempuser。然后,在克隆工作区上设置属性。
# zfs snapshot projects/newproject@today
# zfs clone projects/newproject@today projects/teamA/tempuser
# zfs set sharenfs=on projects/teamA/tempuser
# zfs set quota=5G projects/teamA/tempuser
销毁 ZFS 克隆
使用 zfs destroy 命令可以销毁 ZFS 克隆。例如:
# zfs destroy tank/home/ahrens/bug123
必须先销毁克隆,才能销毁父快照。
保存和恢复 ZFS 数据
zfs save 命令创建写入标准输出的快照流表示。缺省情况下,生成完整的流。可以将输出重定向到文件或其他系统。zfs receive 命令创建其内容在标准输入提供的流中指定的快照。可以使用这些命令保存和恢复 ZFS 快照数据。请参见下一节中的示例。
以下是用于保存 ZFS 数据的解决方案:


  • 保存 ZFS 快照和回滚快照(如有必要)。

  • 保存 ZFS 快照的完整副本和增量副本以及恢复快照(如有必要)。

  • 通过保存和恢复 ZFS 快照及文件系统来远程复制 ZFS 文件系统。

选择用于保存 ZFS 数据的解决方案时,请考虑以下事项:


  • 文件系统快照和回滚快照-如果要轻松地创建文件系统的副本并恢复到以前的文件系统版本(如有必要),请使用 zfs snapshot 和 zfs rollback 命令。例如,如果要从文件系统的早期版本恢复一个或多个文件,则可以使用此解决方案。
    有关创建快照和回滚到快照的更多信息,请参见
    ZFS 快照


  • 保存快照-使用 zfs save 和 zfs receive 命令保存和恢复 ZFS 快照。可以保存快照之间的增量更改,但不能逐个恢复文件。必须恢复整个文件系统快照。

  • 远程复制-如果要将文件系统从一个系统复制到另一个系统,请使用 zfs save 和 zfs receive 命令。此过程与可能跨 WAN 镜像设备的传统卷管理产品有所不同。不需要特殊的配置或硬件。复制 ZFS 文件系统的优点是,可以在其他系统的存储池上重新创建文件系统,并为新创建的池指定不同的配置级别(如 RAID-Z),但是新创建的池使用相同的文件系统数据。

使用其他备份产品保存 ZFS 数据
除 zfs send 和 zfs receive 命令外,还可以使用归档实用程序(如 tar 和 cpio 命令)保存 ZFS 文件。所有这些实用程序都可以保存和恢复 ZFS 文件属性和 ACL。请选中 tar 和 cpio 命令的适当选项。
有关 ZFS 和第三方备份产品的问题的最新信息,请参见 Solaris 10 6/06 发行说明。
保存 ZFS 快照
zfs send 命令的最简单形式是保存快照的副本。例如:
# zfs send tank/dana@040706 > /dev/rmt/0
使用 zfs send -i 选项可以保存增量数据。例如:
# zfs send -i tank/dana@040706 tank/dana@040806 > /dev/rmt/0
请注意,第一个参数是较早的快照,第二个参数是较晚的快照。
如果需要存储许多副本,可以考虑使用 gzip 命令压缩 ZFS 快照流表示。例如:
# zfs send pool/fs@snap | gzip > backupfile.gz
恢复 ZFS 快照
恢复文件系统快照时,也将恢复文件系统。恢复文件系统时,将同时取消挂载该文件系统,因此将无法访问它。此外,恢复原始文件系统时,不能同时存在该原始文件系统。如果文件系统名称存在冲突,可以使用 zfs rename 重命名文件系统。例如:
# zfs send tank/gozer@040706 > /dev/rmt/0
.
.
.
# zfs receive tank/gozer2@today
# zfs rename tank/gozer tank/gozer.old
# zfs rename tank/gozer2 tank/gozer
可以将 zfs recv 用作 zfs receive 命令的别名。
恢复增量文件系统快照时,必须首先回滚最新的快照。此外,目标文件系统必须存在。在以下示例中,将恢复 tank/dana 的早期增量保存的副本。
# zfs rollback tank/dana@040706
cannot rollback to 'tank/dana@040706': more recent snapshots exist
use '-r' to force deletion of the following snapshots:
tank/dana@now
# zfs rollback -r tank/dana@040706/
# zfs recv tank/dana
在增量恢复过程中,将取消挂载文件系统,因此将无法访问它。
远程复制 ZFS 数据
可以使用 zfs send 和 zfs recv 命令,将快照流表示从一个系统远程复制到另一个系统。例如:
# zfs send tank/cindy@today | ssh newsys zfs recv sandbox/restfs@today
此命令保存 tank/cindy@today 快照数据并将它恢复到 sandbox/restfs 文件系统,还在 newsys 系统上创建 restfs@today 快照。在本示例中,已将用户配置为在远程系统上使用 ssh。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/26090/showart_325720.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP