这篇文章给大家分享的是有关如何在linux中安装和使用ZFS的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

ZFS文件系统的英文名称为Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个128位文件系统。

ZFS优势

ZFS是一种先进的、高度可扩展的文件系统,最初是由Sun Microsystems开发的,现在OpenZFS是项目的一部分。有这么多文件系统可用在Linux上,那自然要问ZFS有什么特别之处。不同于其它文件系统,它不仅是一个文件系统逻辑卷管理器。ZFS使其受欢迎的特性是:

\1. 数据完整性——数据一致性和完整性通过即写即拷和校验技术保证。 \2. 存储空间池——可用存储驱动器一起放入称为zpool的单个池。 \3. 软件RAID ——像发出一个命令一样,建立一个raidz数组。 \4. 内置的卷管理器——ZFS充当卷管理器。 \5. Snapshots、克隆、压缩——这些都是一些ZFS提供的高级功能。

在本指南中,我们将学习在CentOS 7服务器上如何安装、设置和使用一些重要的ZFS命令。

术语

在我们继续之前,让我们了解一些ZFS的常用的术语。 Pool:存储驱动器的逻辑分组,它是ZFS的基本构建块,从这里将存储空间分配给数据集。 Datasets:ZFS文件系统的组件即文件系统、克隆、快照和卷被称为数据集。 Mirror:一个虚拟设备存储相同的两个或两个以上的磁盘上的数据副本,在一个磁盘失败的情况下,相同的数据是可以用其他磁盘上的镜子。 Resilvering:在恢复设备时将数据从一个磁盘复制到另一个磁盘的过程。 Scrub:擦除用于一致性检验在ZFS像在其他文件系统如何使用fsck。

安装ZFS

为了对CentOS安装ZFS,我们需要先安装支持包EPEL仓库,然后在ZFS存储库上安装所需的ZFS包。

yumlocalinstall--nogpgcheckhttp://epel.mirror.net.in/epel/7/x86_64/e/epel-release-7-5.noarch.rpmyumlocalinstall--nogpgcheckhttp://archive.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm

现在安装内核开发和zfs包,内核开发的软件包是需要ZFS建立模块和插入到内核中。

yuminstallkernel-develzfs

验证zfs模块插入到内核使用的lsmod命令,如果没有,使用‘modprobe命令手动插入它。

[root@li1467-130~]#lsmod|grepzfs[root@li1467-130~]#modprobezfs[root@li1467-130~]#lsmod|grepzfszfs27902710zunicode3311701zfszavl152361zfszcommon554111zfsznvpair890862zfs,zcommonspl920293zfs,zcommon,znvpair

让我们检查是否我们可以使用zfs的命令:

[root@li1467-130~]#zfslistnodatasetsavailable管理

ZFS主要有两个工具,zpool和ZFS。zpool处理使用磁盘实用程序创建和维护ZFS池负责数据的创建和维护。

zpool utility

创建和销毁池 首先验证可用的磁盘创建一个存储池。

[root@li1467-130~]#ls-l/dev/sd*brw-rw----1rootdisk8,0Mar1608:12/dev/sdabrw-rw----1rootdisk8,16Mar1608:12/dev/sdbbrw-rw----1rootdisk8,32Mar1608:12/dev/sdcbrw-rw----1rootdisk8,48Mar1608:12/dev/sddbrw-rw----1rootdisk8,64Mar1608:12/dev/sdebrw-rw----1rootdisk8,80Mar1608:12/dev/sdf

创建一个池的驱动器。

zpoolcreate#zpoolcreate-fzfspoolsdcsddsdesdf

zpool状态的命令显示可用池的状态。

[root@li1467-130~]#zpoolstatuspool:zfspoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMzfspoolONLINE000sdcONLINE000sddONLINE000sdeONLINE000sdfONLINE000errors:Noknowndataerrors

验证如果池创建成功。

[root@li1467-130~]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/sda19G1.4G17G8%/devtmpfs488M0488M0%/devtmpfs497M0497M0%/dev/shmtmpfs497M50M447M11%/runtmpfs497M0497M0%/sys/fs/cgrouptmpfs100M0100M0%/run/user/0zfspool3.7G03.7G0%/zfspoolv

如你所见,使用zpool创造了一个池的名字zfspool大小3.7 GB的空间,同时挂载在/ zfspool。 用命令 ‘zpool destroy’ 销毁一个地址池:

zpooldestroy[root@li1467-130~]#zpooldestroyzfspool[root@li1467-130~]#zpoolstatusnopoolsavailable

现在让我们尝试创建一个简单的镜像池。

zpoolcreatemirror...

通过重复关键字的驱动器我们可以创建多个镜像。

[root@li1467-130~]#zpoolcreate-fmpoolmirrorsdcsddmirrorsdesdf[root@li1467-130~]#zpoolstatuspool:mpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMmpoolONLINE000mirror-0ONLINE000sdcONLINE000sddONLINE000mirror-1ONLINE000sdeONLINE000sdfONLINE000errors:Noknowndataerrors

在上面的例子中,我们创建了每两个磁盘镜像池。 同样的,我们可以创建一个raidz池。

[root@li1467-130~]#zpoolcreate-frpoolraidzsdcsddsdesdf[root@li1467-130~]#zpoolstatuspool:rpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMrpoolONLINE000raidz1-0ONLINE000sdcONLINE000sddONLINE000sdeONLINE000sdfONLINE000errors:Noknowndataerrors在ZFS池管理设备

一旦创建一个池,从池中可以添加或删除热备件和缓存设备,从镜像池和替换设备中连接或者分离。但是冗余和raidz设备不能从池中删除。我们将看到如何在这一节中执行这些操作。 我首先创建一个池称为“testpool”组成的两个设备,sdc和sdd。另一个设备sde将被添加到这里。

[root@li1467-130~]#zpoolcreate-ftestpoolsdcsdd[root@li1467-130~]#zpooladdtestpoolsde[root@li1467-130~]#zpoolstatuspool:testpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMtestpoolONLINE000sdcONLINE000sddONLINE000sdeONLINE000errors:Noknowndataerrors

正如前面提到的,我不能删除这个新添加的设备,因为它不是一个冗余或raidz池。

[root@li1467-130~]#zpoolremovetestpoolsdecannotremovesde:onlyinactivehotspares,cache,top-level,orlogdevicescanberemoved

但我可以在这个池添加一个空闲磁盘和删除它。

[root@li1467-130~]#zpooladdtestpoolsparesdf[root@li1467-130~]#zpoolstatuspool:testpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMtestpoolONLINE000sdcONLINE000sddONLINE000sdeONLINE000sparessdfAVAILerrors:Noknowndataerrors[root@li1467-130~]#zpoolremovetestpoolsdf[root@li1467-130~]#zpoolstatuspool:testpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMtestpoolONLINE000sdcONLINE000sddONLINE000sdeONLINE000errors:Noknowndataerrors

同样的,我们可以使用attach命令附加磁盘镜像或非镜像的池和detach命令从镜像磁盘池来分离。

zpoolattachzpooldetach

当设备发生故障或损坏,我们可以使用replace命令替换它。

zpoolreplace

在镜像配置当中我们将爆力的测试一个设备。

[root@li1467-130~]#zpoolcreate-ftestpoolmirrorsddsde

这将创建一个镜像磁盘池组成的SDD和SDE。现在,让我们故意损坏SDD写零到磁盘中。

[root@li1467-130~]#ddif=/dev/zeroof=/dev/sdddd:writingto‘/dev/sdd’:Nospaceleftondevice2048001+0recordsin2048000+0recordsout1048576000bytes(1.0GB)copied,22.4804s,46.6MB/s

我们将使用“scrub”命令来检测这种损坏。

[root@li1467-130~]#zpoolscrubtestpool[root@li1467-130~]#zpoolstatuspool:testpoolstate:ONLINEstatus:Oneormoredevicescouldnotbeusedbecausethelabelismissingorinvalid.Sufficientreplicasexistforthepooltocontinuefunctioninginadegradedstate.action:Replacethedeviceusing'zpoolreplace'.see:http://zfsonlinux.org/msg/ZFS-8000-4Jscan:scrubrepaired0in0h0mwith0errorsonFriMar1809:59:402016config:NAMESTATEREADWRITECKSUMtestpoolONLINE000mirror-0ONLINE000sddUNAVAIL000corrupteddatasdeONLINE000errors:Noknowndataerrors

现在我们用SDC替换SDD。

[root@li1467-130~]#zpoolreplacetestpoolsddsdc;zpoolstatuspool:testpoolstate:ONLINEscan:resilvered83.5Kin0h0mwith0errorsonFriMar1810:05:172016config:NAMESTATEREADWRITECKSUMtestpoolONLINE000mirror-0ONLINE000replacing-0UNAVAIL000sddUNAVAIL000corrupteddatasdcONLINE000sdeONLINE000errors:Noknowndataerrors[root@li1467-130~]#zpoolstatuspool:testpoolstate:ONLINEscan:resilvered74.5Kin0h0mwith0errorsonFriMar1810:00:362016config:NAMESTATEREADWRITECKSUMtestpoolONLINE000mirror-0ONLINE000sdcONLINE000sdeONLINE000errors:Noknowndataerrors池的迁移

我们可以使用导出和导入命令在不同的主机之间迁移存储池。对于这个,在池中使用的磁盘应该从两个系统中可用。

[root@li1467-130~]#zpoolexporttestpool[root@li1467-130~]#zpoolstatusnopoolsavailable

zpool import命令列出所有可以利用的池。执行这个系统命令,你想要导入的池。

[root@li1467-131~]#zpoolimportpool:testpoolid:3823664125009563520state:ONLINEaction:Thepoolcanbeimportedusingitsnameornumericidentifier.config:testpoolONLINEsdcONLINEsddONLINEsdeONLINE

现在导入要求的池。

[root@li1467-131~]#zpoolimporttestpool[root@li1467-131~]#zpoolstatuspool:testpoolstate:ONLINEscan:nonerequestedconfig:NAMESTATEREADWRITECKSUMtestpoolONLINE000sdcONLINE000sddONLINE000sdeONLINE000errors:Noknowndataerrors

iostat

Iostat命令可以验证池设备IO统计。

[root@li1467-130~]#zpooliostat-vtestpoolcapacityoperationsbandwidthpoolallocfreereadwritereadwrite----------------------------------------testpool1.80M2.86G2227470K417Ksdc598K975M89200K139Ksdd636K975M79135K139Ksde610K975M69135K139K----------------------------------------zfs utility

我们现在会移动到ZFS utility。在这里,我们将看看如何创建、销毁数据集、文件系统压缩、配额和快照。

创建和销毁文件系统

ZFS文件系统可以使用ZFS创建命令创建

zfscreate[root@li1467-130~]#zfscreatetestpool/students[root@li1467-130~]#zfscreatetestpool/professors[root@li1467-130~]#df-hFilesystemSizeUsedAvailUse%Mountedon/dev/sda19G1.4G17G8%/devtmpfs488M0488M0%/devtmpfs497M0497M0%/dev/shmtmpfs497M50M447M11%/runtmpfs497M0497M0%/sys/fs/cgrouptestpool2.8G02.8G0%/testpooltmpfs100M0100M0%/run/user/0testpool/students2.8G02.8G0%/testpool/studentstestpool/professors2.8G02.8G0%/testpool/professors

从上面的输出注意到,在文件系统创建时尽管没有挂载点,挂载点创建时使用相同的路径关系池。 ZFS创建允许使用-o选项可以指定使用像挂载点,压缩、定额、执行等。 你可以列出可用的文件系统使用ZFS的列表:

[root@li1467-130~]#zfslistNAMEUSEDAVAILREFERMOUNTPOINTtestpool100M2.67G19K/testpooltestpool/professors31K1024M20.5K/testpool/professorstestpool/students1.57M98.4M1.57M/testpool/students

我们用销毁选项销毁文件系统。 zfs destroy

压缩

现在我们将了解在ZFS怎样压缩,在我们开始使用压缩之前,我们需要使它使用“设置压缩”。

zfsset

一旦这样做,压缩和解压缩将以透明模式发生在文件系统上面。 在我们的示例中,我将使学生目录使用lz4压缩算法压缩。

[root@li1467-130~]#zfssetcompression=lz4testpool/students

我现在要复制一个文件到该文件系统大小15m,并检查它的大小。

[root@li1467-130/]#cd/var/log[root@li1467-130log]#du-hsecure15Msecure[root@li1467-130~]#cp/var/log/secure/testpool/students/[root@li1467-130students]#df-h.FilesystemSizeUsedAvailUse%Mountedontestpool/students100M1.7M99M2%/testpool/students

注意,使用文件系统的大小仅为1.7m,文件大小为15m,我们可以检查压缩比。

[root@li1467-130~]#zfsgetcompressratiotestpoolNAMEPROPERTYVALUESOURCEtestpoolcompressratio9.03x

配额和预订

让我用一个真实的例子来解释配额。假设我们有一个要求,在一所大学,以限制磁盘空间使用的文件系统为教授和学生。让我们假设我们需要分配给教授和学生分为1GB和100MB。我们可以利用“配额”在ZFS来满足这一要求。配额确保文件系统使用的磁盘空间的数量不超过规定的限度。保留有助于在实际分配和保证所需的磁盘空间的数量是可用的文件系统。

zfssetquota=zfssetreservation=[root@li1467-130~]#zfssetquota=100Mtestpool/students[root@li1467-130~]#zfssetreservation=100Mtestpool/students[root@li1467-130~]#zfslistNAMEUSEDAVAILREFERMOUNTPOINTtestpool100M2.67G19K/testpooltestpool/professors19K2.67G19K/testpool/professorstestpool/students1.57M98.4M1.57M/testpool/students[root@li1467-130~]#zfssetquota=1Gtestpool/professors[root@li1467-130~]#zfslistNAMEUSEDAVAILREFERMOUNTPOINTtestpool100M2.67G19K/testpooltestpool/professors19K1024M19K/testpool/professorstestpool/students1.57M98.4M1.57M/testpool/students

在上面的例子中,我们已经给教授和学生为1GB与100MB。观察ZFS列表结果,最初,他们有2.67gb每个的大小和设置配额,价值也随之发生了相应的变化。

快照

快照是在某个时间点的ZFS文件系统的只读副本。他们不在ZFS池消耗任何额外的空间。我们可以回滚到相同的状态,在稍后的阶段,按用户要求或仅提取一个单一的或一组文件。 我现在就从我们前面的例子,然后在在testpool/professors把这个文件系统快照创建一些目录和文件。

[root@li1467-130~]#cd/testpool/professors/[root@li1467-130professors]#mkdirmathsphysicschemistry[root@li1467-130professors]#cat>qpaper.txtQuestionpaperfortheyear2016-17[root@li1467-130professors]#ls-latotal4drwxr-xr-x5rootroot6Mar1910:34.drwxr-xr-x4rootroot4Mar1909:59..drwxr-xr-x2rootroot2Mar1910:33chemistrydrwxr-xr-x2rootroot2Mar1910:32mathsdrwxr-xr-x2rootroot2Mar1910:32physics-rw-r--r--1rootroot36Mar1910:35qpaper.txt

快照,可以使用下面的语法:

zfssnapshot[root@li1467-130professors]#zfssnapshottestpool/professors@03-2016[root@li1467-130professors]#zfslist-tsnapshotNAMEUSEDAVAILREFERMOUNTPOINTtestpool/professors@03-20160-20.5K

我现在将删除创建的文件和提取的快照。

[root@li1467-130professors]#rm-rfqpaper.txt[root@li1467-130professors]#lschemistrymathsphysics[root@li1467-130professors]#cd.zfs[root@li1467-130.zfs]#cdsnapshot/03-2016/[root@li1467-13003-2016]#lschemistrymathsphysicsqpaper.txt[root@li1467-13003-2016]#cp-aqpaper.txt/testpool/professors/[root@li1467-13003-2016]#cd/testpool/professors/[root@li1467-130professors]#lschemistrymathsphysicsqpaper.txt

已删除的文件返回其位置。 我们可以列出所有可用的快照使用ZFS的列表:

[root@li1467-130~]#zfslist-tsnapshotNAMEUSEDAVAILREFERMOUNTPOINTtestpool/professors@03-201610.5K-20.5K-

最后,让我们使用zfs摧毁命令销毁快照:

zfsdestroy[root@li1467-130~]#zfsdestroytestpool/professors@03-2016[root@li1467-130~]#zfslist-tsnapshotnodatasetsavailable

感谢各位的阅读!关于“如何在linux中安装和使用ZFS”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!