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

全部博文(554)

文章存档

2012年(1)

2011年(1)

2009年(8)

2008年(544)

分类:

2008-04-14 11:30:16


ZFS 中的新增功能
第1 章• Solaris ZFS 文件系统(介绍) 15
什么是ZFS?
Solaris ZFS 文件系统是一种革新性的新文件系统,可从根本上改变文件系统的管理方式,并
具有现今可用的其他任何文件系统所没有的功能和优点。根据设计,ZFS 具有稳定、可伸缩
性和便于管理等优点。
ZFS 池存储
ZFS 使用存储池的概念来管理物理存储。以前,文件系统是在单个物理设备的基础上构造
的。为了利用多个设备和提供数据冗余性,引入了卷管理器的概念来提供单个设备的映
像,以便无需修改文件系统即可利用多个设备。此设计增加了更多复杂性,并最终阻碍了
特定文件系统的继续发展,因为这类文件系统无法控制数据在虚拟卷上的物理放置。
ZFS 可完全避免使用卷管理。ZFS 将设备聚集到存储池中,而不是强制要求创建虚拟卷。存
储池说明了存储的物理特征(设备布局、数据冗余等),并充当可以从其创建文件系统的
任意数据存储库。文件系统不再仅限于单个设备,从而可与池中的所有文件系统共享空
间。您不再需要预先确定文件系统的大小,因为文件系统会在分配给存储池的空间内自动
增长。添加新存储器后,无需执行其他操作,池中的所有文件系统即可立即使用所增加的
空间。在许多方面,存储池都类似于虚拟内存系统。内存DIMM 添加到系统后,操作系统
并不强制您调用某些命令来配置该内存并将其指定给单个进程。系统中的所有进程都会自
动使用所增加的内存。
事务性语义
ZFS 是事务性文件系统,这意味着文件系统状态在磁盘上始终是一致的。传统文件系统可就
地覆写数据,这意味着如果计算机断电(例如,在分配数据块到将其链接到目录中的时间
段内断电),则会使文件系统处于不一致状态。以前,此问题是通过使用fsck 命令解决
的。此命令负责检查和验证文件系统状态,尝试修复该过程中的任何不一致性问题。此问
题使管理员非常苦恼,并且从来无法保证解决所有可能的问题。最近,文件系统引入了日
志记录的概念。日志记录过程在单独的日志中记录操作,然后在出现系统崩溃时可以安全
地重放该日志。由于数据需要写入两次,因此此过程会引入不必要的开销,并通常导致一
组新问题,如无法正确地重放日志时。
对于事务性文件系统,数据是使用写复制语义管理的。数据永远不会被覆写,并且任何操
作序列会全部被提交或全部被忽略。此机制意味着文件系统绝对不会因意外断电或系统崩
溃而被损坏。因此,无需存在fsck 等效项。尽管最近写入的数据片段可能丢失,但是文件
系统本身将始终是一致的。此外,只有在写入同步数据(使用O_DSYNC 标志写入)后才返
回,因此同步数据决不会丢失。
校验和与自我修复数据
对于ZFS,所有数据和元数据都通过使用用户可选择的算法来执行校验和操作。提供校验和
操作的传统文件系统出于卷管理层和传统文件系统设计的必要,会逐块执行此操作。传统
什么是ZFS?
16 Solaris ZFS 管理指南• 2006 年10 月
设计意味着某些故障模式(如将完整块写入不正确的位置)可能会生成校验和正确的数
据,而该数据实际上并不正确。ZFS 校验和的存储方式可确保检测到这些故障模式并可以正
常地从其中进行恢复。所有校验和操作与数据恢复都是在文件系统层执行的,并且对应用
程序是透明的。
此外,ZFS 还会提供自我修复数据。ZFS 支持具有不同数据冗余级别的存储池,包括镜像和
RAID-5 变化形式。检测到坏的数据块时,ZFS 从另一个复制的副本中提取正确数据,并将
错误数据替换为正确副本以对其进行修复。
独一无二的可伸缩性
ZFS 经过了全新设计,是目前为止可伸缩性最高的文件系统。该文件系统本身是128 位的,
所允许的存储空间是256 quadrillion zettabyte (256x1015 ZB) 的存储。所有元数据都是动态分
配的,因此在首次创建时无需预先分配inode,否则就会限制文件系统的可伸缩性。所有算
法在编写时都考虑到了可伸缩性。目录最多可以包含248(256 万亿)项,并且对于文件系
统数或文件系统中可以包含的文件数不存在限制。
ZFS 快照
快照是文件系统或卷的只读副本。可以快速而轻松地创建快照。最初,快照不会占用池中
的任何附加空间。
活动数据集中的数据更改时,快照通过继续引用旧数据来占用空间。因此,快照可防止将
数据释放回池中。
简化的管理
最重要的是,ZFS 提供了一种极度简化的管理模型。通过使用分层文件系统布局、属性继承
以及自动管理挂载点和NFS 共享语义,ZFS 可轻松创建和管理文件系统,而无需使用多个
命令或编辑配置文件。可以轻松设置配额或预留空间,启用或禁用压缩,或者通过单个命
令管理许多文件系统的挂载点。可以检查或修复设备,而不必了解一组单独的卷管理器命
令。可以捕获文件系统的无数即时快照。可以备份和恢复单个文件系统。
ZFS 通过分层结构管理文件系统,该分层结构允许对属性(如配额、预留空间、压缩和挂载
点)进行这一简化管理。在此模型中,文件系统会成为中央控制点。文件系统本身的开销
非常小(相当于新目录),因此鼓励您为每个用户、项目、工作区等创建一个文件系统。
通过此设计,可定义细分的管理点。
什么是ZFS?
第1 章• Solaris ZFS 文件系统(介绍) 17
ZFS 术语
本节介绍了在本书中使用的基本术语:
checksum(校验和) 文件系统块中数据的256 位散列。校验和功能的范围可以从
简单快速的fletcher2(缺省值)到强加密散列(如
SHA256)。
clone(克隆) 其初始内容与快照内容相同的文件系统。
有关克隆的信息,请参见第95 页中的“ZFS 克隆”。
dataset(数据集) 以下ZFS 实体的通用名称:克隆、文件系统、快照或卷。
每个数据集由ZFS 名称空间中的唯一名称标识。数据集使用
以下格式进行标识:
pool/path[@snapshot]
pool 标识包含数据集的存储池的名称
path 数据集对象的斜杠分隔路径名
snapshot 用于标识数据集快照的可选组件
有关数据集的更多信息,请参见第5 章。
file system(文件系统) 包含标准POSIX 文件系统的数据集。
有关文件系统的更多信息,请参见第5 章。
mirror(镜像) 在两个或更多磁盘上存储相同数据副本的虚拟设备。如果镜
像中的任一磁盘出现故障,则该镜像中的其他任何磁盘都可
以提供相同的数据。
pool(沲) 设备的逻辑组,用于说明可用存储的布局和物理特征。数据
集的空间是从池中分配的。
有关存储池的更多信息,请参见第4 章。
RAID-Z 在多个磁盘上存储数据和奇偶校验的虚拟设备,与RAID-5
类似。有关RAID-Z 的更多信息,请参见第34 页中的
“RAID-Z 存储池配置”。
resilvering(重新同步) 将数据从一个设备传输到另一个设备的过程称为重新同步。
例如,如果替换了镜像组件或使其脱机,则最新镜像组件中
的数据会复制到刚恢复的镜像组件。此过程在传统的卷管理
产品中称为镜像重新同步。
有关ZFS 重新同步的更多信息,请参见第152 页中的“查看
重新同步状态”。
ZFS 术语
18 Solaris ZFS 管理指南• 2006 年10 月
snapshot(快照) 文件系统或卷在指定时间点的只读映像。
有关快照的更多信息,请参见第91 页中的“ZFS 快照”。
virtual device(虚拟设备) 池中的逻辑设备,可以是物理设备、文件或设备集合。
有关虚拟设备的更多信息,请参见第33 页中的“存储池中
的虚拟设备”。
volume(卷) 用于模仿物理设备以便支持传统文件系统的数据集。
有关仿真卷的更多信息,请参见第131 页中的“仿真卷”。
ZFS 组件命名要求
每个ZFS 组件必须根据以下规则进行命名:
 不允许空组件。
 每个组件只能包含字母数字字符以及以下四个特殊字符:
 下划线(_)
 连字符(-)
 冒号(:)
 句点(.)
 池名称必须以字母开头,但不允许使用起始序列c[0-9]。此外,不允许使用以mirror、
raidz 或spare 开头的池名称,因为这些名称是保留的。
 数据集名称必须以字母数字字符开头。
ZFS 组件命名要求
第1 章• Solaris ZFS 文件系统(介绍) 19
20
ZFS 入门
本章提供了有关设置简单ZFS 配置的逐步说明。学完本章之后,您应基本了解ZFS 命令的
工作原理,并可以创建简单的池和文件系统。本章是综合概述,有关更多详细信息,请参
阅后续章节。
本章包含以下各节:
 第21 页中的“ZFS 硬件和软件要求及建议”
 第21 页中的“创建基本ZFS 文件系统”
 第22 页中的“创建ZFS 存储池”
 第24 页中的“创建ZFS 文件系统分层结构”
ZFS 硬件和软件要求及建议
尝试使用ZFS 软件之前,请确保查看了以下硬件和软件要求及建议:
 SPARCTM 或x86 系统运行的是Solaris 10 6/06 发行版。
 最小磁盘空间为128MB。用于存储池所需的最小磁盘空间量约为64MB。
 目前,建议用于安装Solaris 系统的最小内存量为512MB。但为了获得更好的ZFS 性能,
建议至少使用1GB或更多内存。
 如果创建镜像磁盘配置,建议使用多个控制器。
创建基本ZFS 文件系统
ZFS 管理在设计过程中考虑了简单性。ZFS 设计的目标之一是减少创建可用文件系统所需的
命令数。创建新池的同时会创建一个新ZFS 文件系统,并自动将其挂载。
以下示例说明如何通过一个命令同时创建名为tank 的存储池和名为tank 的ZFS 文件系统。
假定整个磁盘/dev/dsk/c1t0d0 可供使用。
# zpool create tank c1t0d0
2第2 章
21
新ZFS 文件系统tank 可根据需要使用c1t0d0 中任意大小的磁盘空间,并会自动挂载在
/tank 中。
# mkfile 100m /tank/foo
# df -h /tank
Filesystem size used avail capacity Mounted on
tank 80G 100M 80G 1% /tank
在池内,可能需要创建其他文件系统。文件系统可提供管理点,用于管理同一池中不同的
数据集。
以下示例说明如何在存储池tank 中创建名为fs 的文件系统。假定整个磁盘
/dev/dsk/c1t0d0 可供使用。
# zpool create tank c1t0d0
# zfs create tank/fs
新ZFS 文件系统tank/fs 可根据需要使用c1t0d0 中任意大小的磁盘空间,并会自动挂载在
/tank/fs 中。
# mkfile 100m /tank/fs/foo
# df -h /tank/fs
Filesystem size used avail capacity Mounted on
tank/fs 80G 100M 80G 1% /tank/fs
在大多数情况下,您可能要创建并组织与您公司的需要相符的文件系统分层结构。有关创
建ZFS 文件系统的分层结构的更多信息,请参见第24 页中的“创建ZFS 文件系统分层结
构”。
创建ZFS 存储池
上一示例说明了ZFS 的简单性。本章的其余部分将说明一个更复杂的示例,与您的环境中
所遇到的情况相似。第一个任务是确定存储要求并创建存储池。该池描述了存储的物理特
征,并且必须在创建任何文件系统之前创建。
创建ZFS 存储池
22 Solaris ZFS 管理指南• 2006 年10 月
 确定存储要求
确定可用设备。
创建存储池之前,必须先确定用于存储数据的设备。这些设备必须是大小至少为128MB的
磁盘,并且不能由操作系统的其他部分使用。设备可以是预先格式化的磁盘上的单个片,
也可以是ZFS 格式化为单个大片的整个磁盘。
对于第23 页中的“创建ZFS 存储池”中使用的存储示例,假定磁盘/dev/dsk/c1t0d0 和
/dev/dsk/c1t1d0 全部都可供使用。
有关磁盘及其使用和标记方法的更多信息,请参见第31 页中的“使用ZFS 存储池中的磁
盘”。
选择数据复制。
ZFS 支持多种类型的数据复制,这确定了池可以经受的硬件故障的类型。ZFS 支持非冗余
(条带化)配置以及镜像和RAID-Z(RAID-5 的变化形式)。
第23 页中的“创建ZFS 存储池”中使用的存储示例使用了两个可用磁盘的基本镜像。
有关ZFS 复制功能的更多信息,请参见第33 页中的“ZFS 存储池的复制功能”。
 创建ZFS 存储池
成为超级用户或承担具有适当ZFS 权限配置文件的等效角色。
有关ZFS 权限配置文件的更多信息,请参见第138 页中的“ZFS 权限配置文件”。
选择池名称。
池名称用于在使用zpool 或zfs 命令时标识存储池。大多数系统都只需一个池,因此只要满
足第19 页中的“ZFS 组件命名要求”中所述的命名要求,即可选择您喜欢的任何名称。
创建池。
例如,创建名为tank 的镜像池。
# zpool create tank mirror c1t0d0 c1t1d0
如果一个或多个设备包含其他文件系统或正在使用中,则该命令不能创建池。
有关创建存储池的更多信息,请参见第35 页中的“创建ZFS 存储池”。
有关如何确定设备使用情况的更多信息,请参见第36 页中的“检测使用中的设备”。
查看结果。
使用zpool list 命令可以确定是否已成功创建池。
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
 
 
以上文章转自于 : http://developers.sun.com.cn/
阅读(535) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~