注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

ZFS 文件系统  

2013-08-31 20:23:22|  分类: linux存储技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


ZFS 是 SUN Solaris操作系统支持的文件系统,现在已经开放,FREEBSD 和 苹果机的操作系统都表示提供支持。 ZFS即Zettabyte File System,也叫动态文件系统Dynamic File System, 是第一个128位文件系统,无限容量、自优化、永远数据一致、管理简单无限容量,比32/64位文件系统大16 billion billion倍对于应用来说,ZFS像一个标准的POSIX文件系统,无需移植对于系统管理员来说,ZFS提供存储池的模型,彻底消除了卷管理的概念。

什么是( Oracle Solaris )ZFS?

Oracle Solaris ZFS 文件系统是一种从根本上改变文件系统管理方式的文件系统,并具有目前市面上的其他文件系统所没有的功能和优点。ZFS 强健、可伸缩,且易于管理。

ZFS 文件系统 - lzdzhy-itoedr - itoedr的it学苑
 

ZFS 池存储

ZFS 使用存储池的概念来管理物理存储。以前,文件系统是在单个物理设备的基础上构造的。为了利用多个设备和提供数据冗余性,引入了卷管理器的概念来提供单个设备的表示,以便无需修改文件系统即可利用多个设备。此设计增加了更多复杂性,并最终阻碍了特定文件系统的继续发展,因为这类文件系统无法控制数据在虚拟卷上的物理放置。

ZFS 可完全避免使用卷管理。ZFS 将设备聚集到存储池中,而不是强制要求创建虚拟卷。存储池描述了存储的物理特征(设备布局、数据冗余等),并充当可以从其创建文件系统的任意数据存储库。 文件系统不再受限于单个设备,允许它们与池中的所有文件系统共享磁盘空间。您不再需要预先确定文件系统的大小,因为文件系统会在分配给存储池的磁盘空间内 自动增长。添加新存储器后,无需执行其他操作,池中的所有文件系统即可立即使用所增加的磁盘空间。在许多方面,存储池与虚拟内存系统相似:将一个内存 DIMM 加入系统时,操作系统并不强迫您运行命令来配置内存并将其指定给个别进程。系统中的所有进程都会自动使用所增加的内存。

事务性语义

ZFS 是事务性文件系统,这意味着文件系统状态在磁盘上始终是一致的。传统文件系统可就地覆盖数据,这意味着如果系统断电(例如,在分配数据块到将其链接到目录中的时间段内断电),则会使文件系统处于不一致状态。以前,此问题是通过使用 fsck 命令解决的。此命令负责检查并验证文件系统状态,并尝试在操作过程中修复任何不一致性。这种文件系统不一致问题曾给管理员造成巨大困扰,fsck 命令并不保证能够解决所有可能的问题。最近,文件系统引入了日志记录的概念。日志记录过程在单独的日志中记录操作,在系统发生崩溃时,可以安全地重放该日志。由于数据需要写入两次,因此该过程会引入不必要的开销,而且通常会导致一组新问题,例如在无法正确地重放日志时。

对于事务性文件系统,数据是使用写复制语义管理的。数据永远不会被覆盖,并且任何操作序列会全部被提交或全部被忽略。因此,文件系统绝对不会因意外断电或系统崩溃而被损坏。尽管最近写入的数据片段可能丢失,但是文件系统本身将始终是一致的。此外,只有在写入同步数据(使用 O_DSYNC 标志写入)后才返回,因此同步数据决不会丢失。

校验和与自我修复数据

对于 ZFS,所有数据和元数据都通过用户可选择的校验和算法进行验证。提供校验和验证的传统文件系统出于卷管理层和传统文件系统设计的必要,会逐块执行此操 作。在传统设计中,某些故障可能导致数据不正确但没有校验和错误,如向错误位置写入完整的块等。ZFS 校验和的存储方式可确保检测到这些故障并可以正常地从其中进行恢复。所有校验和验证与数据恢复都是在文件系统层执行的,并且对应用程序是透明的。

此外,ZFS 还会提供自我修复数据。ZFS 支持存储池具有各种级别的数据冗余性。检测到坏的数据块时,ZFS 会从另一个冗余副本中提取正确的数据,而且会用正确的数据替换错误的数据。

独一无二的可伸缩性

ZFS 文件系统的一个关键设计要素是可伸缩性。该文件系统本身是 128 位的,所允许的存储空间是 256 quadrillion zettabyte (256x1015 ZB)。所有元数据都是动态分配的,因此在首次创建时无需预先分配 inode,否则就会限制文件系统的可伸缩性。所有算法在编写时都考虑到了可伸缩性。目录最多可以包含 248(256 万亿)项,并且对于文件系统数或文件系统中可以包含的文件数不存在限制。

ZFS 快照

快照是文件系统或卷的只读副本。可以快速而轻松地创建快照。最初,快照不会占用池中的任何附加磁盘空间。

活动数据集中的数据更改时,快照通过继续引用旧数据来占用磁盘空间。因此,快照可防止将数据释放回池中。

简化的管理

最重要的是,ZFS 提供了一种极度简化的管理模型。通过使用分层次的文件系统布局、属性继承以及自动管理挂载点和 NFS 共享语义,ZFS 可轻松创建和管理文件系统,而无需使用多个命令或编辑配置文件。可以轻松设置配额或预留空间,启用或禁用压缩,或者通过单个命令管理许多文件系统的挂载 点。您就可以检查或替换设备,而无需学习另外的一套卷管理命令。您可以发送和接收文件系统快照流

ZFS 通过分层结构管理文件系统,该分层结构允许对属性(如配额、预留空间、压缩和挂载点)进行这一简化管理。在此模型中,文件系统是中央控制点。文件系统本身 的开销非常小(相当于创建一个新目录),因此鼓励您为每个用户、项目、工作区等创建一个文件系统。通过此设计,可定义细分的管理点。

ZFS 文件系统粒度

        过去,文件系统局限于单个设备,因而其大小以设备的大小为限。由于存在大小限制,因此创建和重新创建传统文件系统很耗时,有时候还很难。传统的卷管理产品可帮助管理此过程。

       由于 ZFS 文件系统不局限于特定设备,因此可以轻松、快捷地创建,其创建方法与目录的创建方法相似。ZFS 文件系统会在分配给其所驻留的存储池的磁盘空间中自动增大。

       要管理许多用户子目录,可以为每个用户创建一个文件系统,而不是只创建一个文件系统(如 /export/home)。通过应用可被分层结构中包含的后代文件系统继承的属性,可以轻松设置和管理许多文件系统。


ZFS 磁盘空间记帐

ZFS 建立在池存储概念的基础上。与典型文件系统映射到物理存储器不同,池中的所有 ZFS 文件系统都共享该池中的可用存储器。因此,即使文件系统处于非活动状态,实用程序(例如 df)报告的可用磁盘空间也会发生变化,因为池中的其他文件系统会使用或释放磁盘空间。

注意,使用配额可以限制最大文件系统大小。可以利用预留空间保证一个文件系统拥有指定大小的磁盘空间。此模型与从同一文件系统(例如 /home)挂载多个目录的 NFS 模型非常相似。

ZFS 中的所有元数据都是动态分配的。其他大部分文件系统都会预分配其大量元数据。因此,创建文件系统时,此元数据需要直接占用空间。此行为还意味着文件系统支 持的文件总数是预先确定的。由于 ZFS 根据需要分配其元数据,因此不需要初始空间成本,并且文件数只受可用磁盘空间的限制。对于 ZFS 文件系统,对 df -g 命令输出的解释必须和其他文件系统不同。报告的 total files 只是根据池中可用的存储量得出的估计值。

ZFS 是事务性文件系统。大部分文件系统修改都捆绑到事务组中,并异步提交至磁盘。这些修改在被提交到磁盘之前称为暂挂更改。已用磁盘空间量、可用磁盘空间量以及文件或文件系统引用的磁盘空间量并不考虑暂挂更改。通常,暂挂更改仅占用几秒钟的时间。即使使用 fsync(3c)O_SYNC 提交对磁盘的更改,也不一定能保证有关磁盘空间使用情况的信息会立即更新。

在 UFS 文件系统上,du 命令报告文件中数据块的大小。在 ZFS 文件系统上,du 报告在磁盘上存储的文件的实际大小。该大小包括元数据以及压缩。此报告确实有助于解答“删除此文件可获得多少多余空间?”这一问题。因此,即使压缩已关闭,您仍会在 ZFS 和 UFS 之间看到不同的结果。

df 命令与 zfs list 命令报告的空间占用进行比较时,请注意,df 报告的是池大小而不仅仅是文件系统大小。此外,df 不了解后代文件系统或快照是否存在。如果在文件系统上设置了任何 ZFS 属性(如压缩和配额),则协调由 df 报告的空间占用可能很难。

请考虑也可能影响所报告的空间占用的以下情况:

  • 对于大于 recordsize 的文件,文件的最后一个数据块通常只填充大约 1/2。当缺省 recordsize 设置为 128 KB 时,每个文件浪费大约 64 KB,这可能影响很大。集成 RFE 6812608 可解决此情况。通过启用压缩可解决此问题。即使数据已压缩,最后一个数据块的未使用部分也将以零填充,且压缩非常好。

  • 在 RAIDZ-2 池上,每个数据块至少要占用 2 个扇区(512 字节块)来存储奇偶校验信息。奇偶校验信息所占用的空间不会被报告,但是因为它可能是变化的,且在小数据块中所占的百分比更大,因此对空间报告可能有显著影响。对于设置为 512 字节的 recordsize,影响更为明显,其中每个 512 字节的逻辑数据块都占用 1.5 KB(该空间的 3 倍)。不管存储什么数据,如果您最关注的是空间效率,则应该将 recordsize 保留为缺省值 (128 KB),并启用压缩(至 lzjb 的缺省值)。

  • df 命令不会识别已由重复数据删除操作剔除的文件数据。

空间不足行为

文件系统的快照开销很小,并且很容易在 ZFS 中创建。在大多数 ZFS 环境中,快照是常见现象。

尝试释放磁盘空间时,快照的存在会引起某种意外行为。通常,获取适当的权限后,可从整个文件系统中删除一个文件,此操作会使文件系统有更多的可用磁盘空间。但是,如果要删除的文件存在于文件系统的快照中,则删除该文件不会获得任何磁盘空间。快照将继续引用该文件使用的块。

由于需要创建新版本的目录来反映名称空间的新状态,因此删除文件会占用更多的磁盘空间。此行为意味着,尝试删除文件时可能收到意外的 ENOSPCEDQUOT 错误。

如何创建 ZFS 文件系统

  1. 成为超级用户或承担具有适当 ZFS 权限配置文件的等效角色。
  2. 创建所需的分层结构。

    在本示例中,创建了一个可充当各文件系统的容器的文件系统。

    # zfs create tank/home
  3. 设置继承的属性。

    建立文件系统分层结构之后,设置需在所有用户之间共享的任何属性:

    # zfs set mountpoint=/export/zfs tank/home
    # zfs set share=name=home,path=/export/zfs,prot=nfs tank/home
    name=home,path=/export/zfs,prot=nfs
    # zfs set sharenfs=on tank/home
    # zfs set compression=on tank/home
    # zfs get compression tank/home
    NAME             PROPERTY       VALUE                      SOURCE
    tank/home        compression    on                         local

    可在创建文件系统时设置文件系统属性。例如:

    # zfs create -o mountpoint=/export/zfs -o sharenfs=on -o compression=on tank/home

    然后,在池 tank 中的 home 文件系统下对各文件系统进行分组。

  4. 创建各文件系统。

    文件系统可能已创建,并可能已在 home 级别更改了属性。所有属性均可在使用文件系统的过程中动态进行更改。

    # zfs create tank/home/jeff
    # zfs create tank/home/bill

    这些文件系统从其父级继承属性值,因此会自动挂载在 /export/zfs/user 中并且通过 NFS 共享。您无需编辑 /etc/vfstab/etc/dfs/dfstab 文件。

  5. 设置文件系统特定的属性。

    在本示例中,为用户 jeff 指定了 10 GB 的配额。此属性可对该用户可以使用的空间量施加限制,而无需考虑池中的可用空间大小。

    # zfs set quota=10G tank/home/jeff
  6. 查看结果。

    使用 zfs list 命令查看可用的文件系统信息:

    # zfs list
    NAME                   USED  AVAIL  REFER  MOUNTPOINT
    tank                  92.0K  67.0G   9.5K  /tank
    tank/home             24.0K  67.0G     8K  /export/zfs
    tank/home/bill           8K  67.0G     8K  /export/zfs/bill
    tank/home/jeff           8K  10.0G     8K  /export/zfs/jeff

    请注意,用户 jeff 仅有 10 GB 的可用空间,而用户 bill 则可使用整个池 (67 GB)。

更多内容>>>#zfs文件系统#

http://docs.oracle.com/cd/E26926_01/html/E25826/toc.html

  评论这张
 
阅读(186)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017