Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1315230
  • 博文数量: 554
  • 博客积分: 10425
  • 博客等级: 上将
  • 技术积分: 7555
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-09 09:49
文章分类

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-14 11:40:25


ZFS 快照
第6 章• 使用ZFS 快照和克隆93
快照空间记帐
创建快照时,最初在快照和文件系统之间共享其空间,还可能与以前的快照共享其空间。
在文件系统发生更改时,以前共享的空间将变为该快照专用的空间,因此会将该空间算入
快照的used 属性。此外,删除快照可增加其他快照专用(使用)的空间量。
创建快照时,快照的空间referenced 属性与文件系统的相同。
回滚到ZFS 快照
可以使用zfs rollback 命令废弃自创建特定快照之后所做的所有更改。文件系统恢复到创
建快照时的状态。缺省情况下,该命令无法回滚到除最新快照以外的快照。
要回滚到早期快照,必须销毁所有的中间快照。可以通过指定-r 选项销毁早期的快照。
如果存在任何中间快照的克隆,则还必须指定-R 选项以销毁克隆。
注– 如果要回滚的文件系统当前为挂载状态,则必须取消挂载再重新挂载。如果无法取消挂
载该文件系统,则回滚将失败。-f 选项可强制取消挂载文件系统(如有必要)。
在以下示例中,会将tank/home/ahrens 文件系统回滚到tuesday 快照:
# zfs rollback
cannot rollback to : more recent snapshots exist
use ’-r’ to force deletion of the following snapshots:


# zfs rollback -r
在上面的示例中,因为已回滚到以前的tuesday 快照,所以删除了wednesday 和thursday 快
照。
# zfs list -r -t snapshot -o name,creation tank/home/ahrens
NAME CREATION
Mar 13 11:05 2006
ZFS 快照
94 Solaris ZFS 管理指南• 2006 年10 月
ZFS 克隆
克隆是可写入的卷或文件系统,其初始内容与从中创建它的数据集的内容相同。与快照一
样,创建克隆几乎是即时的,而且最初不占用其他磁盘空间。
克隆只能从快照创建。克隆快照时,会在克隆和快照之间建立隐式相关性。即使克隆是在
数据集分层结构中的某个其他位置创建的,但只要克隆存在,就无法销毁原始快照。
origin 属性显示此相关性,而zfs destroy 命令会列出任何此类相关性(如果存在)。
克隆不继承从其中创建它的数据集的属性。相反,克隆基于在池分层结构中创建它们的位
置继承其属性。使用zfs get 和zfs set 命令,可以查看和更改克隆数据集的属性。有关设
置ZFS 数据集属性的更多信息,请参见第76 页中的“设置ZFS 属性”。
由于克隆最初与原始快照共享其所有磁盘空间,因此其used 属性最初为零。随着不断对克
隆进行更改,它使用的空间将越来越多。原始快照的used 属性不考虑克隆所占用的磁盘空
间。
创建ZFS 克隆
要创建克隆,请使用zfs clone 命令,指定从中创建克隆的快照以及新文件系统或卷的名
称。新文件系统或卷可以位于ZFS 分层结构中的任意位置。新数据集的类型(例如,文件
系统或卷)与从中创建克隆的快照的类型相同。不能在原始文件系统快照所在池以外的池
中创建该文件系统的克隆。
在以下示例中,将创建一个名为tank/home/ahrens/bug123 的新克隆,其初始内容与快照
的内容相同。
# zfs snapshot
# zfs clone tank/home/ahrens/bug123
在以下示例中,将从 快照为临时用户创建克隆工作区
projects/teamA/tempuser。然后,在克隆工作区上设置属性。
# zfs snapshot
# zfs clone projects/teamA/tempuser
# zfs set sharenfs=on projects/teamA/tempuser
# zfs set quota=5G projects/teamA/tempuser
ZFS 克隆
第6 章• 使用ZFS 快照和克隆95
销毁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 命令。例如,如果要从文件系
统的早期版本恢复一个或多个文件,则可以使用此解决方案。
有关创建快照和回滚到快照的更多信息,请参见第91 页中的“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 数据
96 Solaris ZFS 管理指南• 2006 年10 月
保存ZFS 快照
zfs send 命令的最简单形式是保存快照的副本。例如:
# zfs send > /dev/rmt/0
使用zfs send -i 选项可以保存增量数据。例如:
# zfs send -i > /dev/rmt/0
请注意,第一个参数是较早的快照,第二个参数是较晚的快照。
如果需要存储许多副本,可以考虑使用gzip 命令压缩ZFS 快照流表示。例如:
# zfs send | gzip > backupfile.gz
恢复ZFS 快照
恢复文件系统快照时,也将恢复文件系统。恢复文件系统时,将同时取消挂载该文件系
统,因此将无法访问它。此外,恢复原始文件系统时,不能同时存在该原始文件系统。如
果文件系统名称存在冲突,可以使用zfs rename 重命名文件系统。例如:
# zfs send > /dev/rmt/0
.
.
.
# zfs receive < /dev/rmt/0
# zfs rename tank/gozer tank/gozer.old
# zfs rename tank/gozer2 tank/gozer
可以将zfs recv 用作zfs receive 命令的别名。
恢复增量文件系统快照时,必须首先回滚最新的快照。此外,目标文件系统必须存在。在
以下示例中,将恢复tank/dana 的早期增量保存的副本。
# zfs rollback
cannot rollback to : more recent snapshots exist
保存和恢复ZFS 数据
第6 章• 使用ZFS 快照和克隆97
use ’-r’ to force deletion of the following snapshots:

# zfs rollback -r
# zfs recv tank/dana < /dev/rmt/0
在增量恢复过程中,将取消挂载文件系统,因此将无法访问它。
远程复制ZFS 数据
可以使用zfs send 和zfs recv 命令,将快照流表示从一个系统远程复制到另一个系统。例
如:
# zfs send | ssh newsys zfs recv
此命令保存 快照数据并将它恢复到sandbox/restfs 文件系统,还在
newsys 系统上创建 快照。在本示例中,已将用户配置为在远程系统上使用
ssh。
保存和恢复ZFS 数据
98 Solaris ZFS 管理指南• 2006 年10 月
使用ACL保护ZFS 文件
本章介绍有关使用访问控制列表(access control list, ACL) 通过提供比标准UNIX 权限更详尽
的权限来保护ZFS 文件的信息。
本章包含以下各节:
 第99 页中的“新SolarisACL模型”
 第104 页中的“设置ZFS 文件的ACL”
 第107 页中的“以详细格式设置和显示ZFS 文件的ACL”
 第127 页中的“以缩写格式设置和显示ZFS 文件的ACL”
新SolarisACL模型
Solaris 的最近几种旧版本支持主要基于POSIX 式ACL规范的ACL实现。基于POSIX 样式的
ACL用来保护UFS 文件,并通过NFSv4 之前的NFS 版本进行转换。
引入NFSv4 后,新ACL模型完全支持NFSv4 在UNIX 和非UNIX 客户机之间提供的互操作
性。如NFSv4 规范中所定义,这一新的ACL实现提供了更丰富的基于NT 样式ACL的语
义。
与旧模型相比,新ACL模型的主要变化如下:
 基于NFSv4 规范并与NT 样式的ACL相似。
 提供了更详尽的访问权限集。有关更多信息,请参见表7–2。
 分别使用chmod 和ls 命令(而非setfacl 和getfacl 命令)进行设置和显示。
 提供了更丰富的继承语义,用于指定如何将访问权限从目录应用到子目录等。有关更多
信息,请参见第103 页中的“ACL继承”。
两种ACL模型均可比标准文件权限提供更精细的访问控制。与POSIX 式ACL非常相似,新
ACL也由多个访问控制项(Access Control Entry, ACE) 构成。
POSIX 样式的ACL使用单个项来定义允许和拒绝的权限。而新ACL模型包含两种类型的
ACE,用于进行访问检查:ALLOW 和DENY。因此,不能根据任何定义一组权限的单个ACE
来推断是否允许或拒绝该ACE 中未定义的权限。
7第7 章
99
NFSv4 样式的ACL与POSIX 式ACL之间的转换如下:
 如果使用任何可识别ACL的实用程序(如cp、mv、tar、cpio 或rcp 命令)将具有ACL
的UFS 文件传送到ZFS 文件系统,则POSIX 式ACL会转换为等效的NFSv4 样式的
ACL。
 一些NFSv4 样式的ACL会转换为POSIX 式ACL。如果NFSv4 样式的ACL未转换为
POSIX 式ACL,则会显示以下类似消息:
# cp -p filea /var/tmp
cp: failed to set acl entries on /var/tmp/filea
 如果在运行当前Solaris 发行版的系统上使用保留的ACL选项(tar -p 或cpio -P)创建
UFS tar 或cpio 归档文件,则在运行以前的Solaris 发行版的系统中提取该归档文件时将
丢失ACL。
所有文件都以正确的文件模式提取,但会忽略ACL项。
 可以使用ufsrestore 命令将数据恢复到ZFS 文件系统中,但ACL将丢失。
 如果尝试对UFS 文件设置NFSv4 样式的ACL,则会显示以下类似消息:
chmod: ERROR: ACL type’s are different
 如果尝试对ZFS 文件设置POSIX 样式的ACL,则会显示以下类似信息:
# getfacl filea
File system doesn’t support aclent_t style ACL’s.
See acl(5) for more information on Solaris ACL support.
有关对ACL和备份产品的其他限制信息,请参见第96 页中的“使用其他备份产品保存ZFS
数据”。
ACL设置语法的说明
提供以下两种基本的ACL格式:
用于设置普通ACL的语法
chmod [options] A[index]{+|=}owner@, group@,
| allow file
chmod [options] A-owner@, group@, |
allow file ...
chmod [options] A[index]- file
用于设置显式ACL的语法
新SolarisACL模型
100 Solaris ZFS 管理指南• 2006 年10 月
chmod [options] A[index]{+|=}user|group:access-permissions/...[:inheritance-flags]:deny|
allow file
chmod [options] A-user|group:access-permissions/...[:inheritance-flags]:deny| allow file ...
chmod [options] A[index]- file
owner@, group@, everyone@ 标识用于普通ACL语法的ACL 项类型。有关ACL
项类型的说明,请参见表7–1。
用户或组:ACL 项ID=用户名或组名标识用于显式ACL语法的ACL 项类型。用户和组
的ACL 项类型还必须包含ACL 项ID、用户名或组
名。有关ACL 项类型的说明,请参见表7–1。
access-permissions/.../ 标识授予或拒绝的访问权限。有关ACL访问权限
的说明,请参见表7–2。
inheritance-flags 标识一组可选的ACL继承标志。有关ACL继承标
志的说明,请参见表7–3。
deny | allow 标识授予还是拒绝访问权限。
在以下示例中,ACL 项ID 值无意义。
group@:write_data/append_data/execute:deny
由于ACL中包括特定用户(ACL 项类型),因此以下示例中包括ACL 项ID。
0:user:gozer:list_directory/read_data/execute:allow
显示的ACL项与以下内容类似:
2:group@:write_data/append_data/execute:deny
本示例中指定的2 或索引ID 用于标识较大ACL中的ACL项,较大的ACL中可能包含对应于
属主、特定UID、组和各用户的多个项。可以使用chmod 命令指定索引ID,以标识ACL要
修改的部分。例如,可将索引ID 3 标识为chmod 命令中的A3,与以下内容类似:
chmod A3=user:venkman:read_acl:allow filename
下表介绍了ACL项的类型,即属主、组和其他对象的ACL表示形式。
表7–1ACL项类型
ACL 项类型说明
owner@ 指定授予对象属主的访问权限。
group@ 指定授予对象所属组的访问权限。
 
 
以上文章转自于 : http://developers.sun.com.cn/
阅读(711) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~