- 论坛徽章:
- 0
|
管理ZFS
本节详细地介绍如何管理ZFS,包括对文件系统的层次的概念、特性和安装点的管理,以及文件系统的共享。
ZFS文件系统是个建设在存储池上的轻量级的POSIX文件系统。它能在还没有分配的空间上轻易地建立和删除。因为文件系统是轻量级的,同时也是ZFS管理的核心,管理员就可以创建很多文件系统。
ZFS文件系统通过zfs命令进行管理。这个zfs命令提供一些子命令来执行一些文件系统的专门操作,比如快照、卷和克隆。
创建和删除文件系统
用zfs create命令来创建文件系统,用zfs destroy命令来删除文件系统。
1.创建文件系统
zfs create加被创建的文件系统的名字,即可创建文件系统。文件系统名字是从池名开始的路径名:pool_name/[filesystem_name/]filesystem_name。池名和初始化后的文件系统名是鉴别新的文件系统被创建后的层次位置。所有的中间层次的文件系统名必须已经在池中存在了。在路径中的最后的名字,是新的被创建的文件系统的名字。这个文件系统的名字必须符合命名规范。
例13-26 在tank/home后创建一个名为bonwick的新的文件系统。
#zfs create tank/home/bonwick
当创建成功后,ZFS自动安装新的文件系统,并用默认路径名作为文件系统的名字。本例中,新的文件系统被mount到/tank/home/bonwick。
2.删除文件系统
使用zfs destroy命令删除文件系统。被删除的文件系统将自动地卸载和取消共享。
#zfs destroy tank/home/tabriz
如果文件系统忙,就不能被删除,可以使用参数-f强制删除,这时将导致强制卸载、取消共享和删除数据,可能会造成应用程序的不可预知的行为。
例13-27 强制删除文件系统。
# zfs destroy tank/home/ahrens
cannot unmount ’tank/home/ahrens’: Device busy
# zfs destroy -f tank/home/ahrens
如果文件系统有子层,则zfs destroy命令将执行失败。如果要将强制递归所有子文件系统都删除,就依靠-r参数,但这样连快照也被删除了,使用的时候需要非常小心。
例13-28 强制删除所有子文件系统。
# zfs destroy tank/ws
cannot destroy ’tank/ws’: filesystem has children
use ’-r’ to destroy the following datasets:
tank/ws/billm
tank/ws/bonwick
tank/ws/maybee
# zfs destroy -r tank/ws
如果文件系统有间接的依赖关系,则使用递归删除命令也要失败了。要想强制删除具有依赖关系的文件系统,请使用-R参数。
例13-29 强制删除具有依赖关系的文件系统。
# zfs destroy -r tank/home/schrock
cannot destroy ’tank/home/schrock’: filesystem has dependant clones
use ’-R’ to destroy the following datasets:
tank/clones/schrock-clone
# zfs destroy -R tank/home/schrock
3.文件系统的改名
文件系统可以用zfs rename命令来改变文件系统的名字或文件系统在ZFS层中的位置。
例13-30 改变文件系统的名字。
# zfs rename tank/home/kustarz tank/home/kustarz_old
例13-31 改变文件系统的位置。
# zfs rename tank/home/maybe tank/ws/maybe
当改变文件系统的位置时,新的位置必须和原来的系统都在相同的存储池,并且有用来安装文件系统的足够空间。
如果新的位置没有足够的空间,可能导致达到限额,使得改变名字的失败。
在给文件系统改名的过程中,将试图卸载文件系统,然后再重新装载文件系统和子代文件系统。如果不能完成卸载文件系统的活动,改变名字就要失败。这时将需要手工强制卸载文件系统。
文件系统的属性
属性是用来控制文件系统行为的主要机制。除非特别指出,本节所讲的属性就指卷、快照和克隆等数据集的特性。
属性分为只读的统计属性和可调整的属性。很多可调整的属性是分层次的,比如设置了父级文件系统的属性,子级的文件系统也会具有这些属性。
所有层的属性中都有来源这一项。来源是指属性是如何获得的。它可能有下列的值。
Local:本地来源是指使用zfs set命令设置的数据集属性。
inherited from dataset-name:从dataset-name中继承的属性。
default:这个属性既不是继承的也不是设置的,而是默认的。
1.只读的属性
在文件系统的属性中,只读的属性不能被设置,也不能被继承。有些属性是数据集的特殊类型。
available:数据集中可以利用的空间。因为所有文件系统共用存储池,所以数据集可能被一些因素限制,比如池的物理的大小、限额、保留和存储池中其他数据的大小等。
Creation:数据集被创建的日期和时间。
Mounted:当前文件系统是被mount上的。
Origin:只是对于clone的属性。Clone存在时,源不能被删除。
Compressratio:压缩比例。
Referenced:数据集所占有的空间大小,这个空间是不被数据池中其他数据集分享的。当快照或克隆被创建时,它们的初始大小与被创建的文件系统和快照的大小相同,并且内容相同。
Type:数据集的数据类型为文件系统、卷或快照。
Used:数据集中的数据所消耗的空间和数据集子级文件系统所消耗的空间。这个值是不包括保留的数值,但是包括它的子级文件系统保留的数值。父级文件系统所消耗的空间和取消子级文件系统后的自由空间都比现在的文件系统使用和保留的空间要大。当快照创建后,空间最初被快照和文件系统共享,当然可能还有以前的快照。
2.可变的属性
在文件系统的属性中,通过zfs set命令可以设定属性和属性值。除了限额和保留,设定的属性都是可以继承的。
有些设定的属性是数据集的专门类型。下面就写出各种专门的属性的类型,如果没有专门的提及,属性将应用到所有的数据集类型:文件系统、卷、克隆和快照。
atime:是指当进行读操作的时候控制文件被更新时的时间,关闭这个属性可以在读文件时避免产生写的通信,并且使性能获得提高,尽管这样可能导致邮件和其他类似的工具出现混乱。
checksum:用来校验数据的完整性。这个值是自动选择的算法。值为off将对用户数据关闭完全检测,这是不被推荐的。
compression:控制这个数据集的压缩算法。值是自动选择的压缩算法。目前系统只有一个压缩算法lzjb。以后可能会增加压缩算法。
devices:控制在文件系统内的设备节点是否能被打开。
exec:控制程序和文件系统是否被允许运行。
mountpoint:控制这个文件系统的安装点,当文件系统的安装点被改变后,文件系统和子层的安装点都被卸载。如果新的值为legacy,将保留卸载,否则,如果此属性的以前的值是legacy或none,系统将自动地重新安装到新的位置,或在改变属性之后被安装。另外,共享的文件系统将取消共享后,并共享到新的位置。
quota:数据集和派生所消耗的空间综合的限制。这个限制包括所有的空间消耗,包括文件系统和快照。设置的限额不能超过其祖先的限额,但可以利用额外的限度。
readonly:控制数据集是否可以被修改的开关。On表明可以被修改。
recordsize:专门是用来建议在文件系统中文件的数据块的大小的。ZFS依据内部的优化算法自动调整块的大小。如果数据库需要非常大的文件但是使用很小的块,就不合适了。所以指定recordsize要大于或等于导致数据库高性能的数据块的大小。使用这个属性对于文件系统来说是非常有用的。这个数值必须要大于等于512字节或小于等于128KB。改变文件系统的recordsize后,只对在这之后创建的文件才起作用,存在的文件系统不受影响。
reservation:保证数据集和派生的数据需要的最小空间的大小。当空间的大小低于这个数值时,数据集就占据这个空间作为保留。保留的理由是为了使用父数据集,并且依据父数据集的限额保留。
sharenfs:控制是否进行NFS共享。
setuid:设置setuid。
snapdir:控制root用户是否可以看见zfs文件。
volsize:卷的逻辑大小。默认情况下,创建卷的大小和保留的大小一致。任何改变volsize都将视同改变保留。比起数据的损坏大小来说,卷只包含很小的空间,依赖我们如何使用这个卷。当调整这个卷的时候我们需要小心行事。
尽管不推荐这样做,你也可以创建备用的卷,使用zfs create –V。备份卷和卷一样的定义,但它不等同于卷的大小。对于备份卷,改变volsize的大小不涉及保留的大小。
volblocksize:卷的块设备的大小。当卷创建后,这个值就不能被改变。默认的块大小是8KB,任何从512KB到128KB都是可用的。
zoned:指这个数据集是否被添加到非全局区域。如果是这样的话,安装点就不在全局区域。当区域第一次添加时,可以设置任何的文件系统。
查看文件系统信息
可使用zfs list命令来查看和询问数据集的信息。本节的主要内容是如何查询文件系统的信息。
1.列出文件系统的基本信息
可以使用zfs list命令查询文件系统的基本信息。它将显示所有数据集的名字及其的使用情况。
例13-32 列出文件系统的基本信息。
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 84.0K 33.5G - /pool
pool/clone 0 33.5G 8.50K /pool/clone
pool/test 8K 33.5G 8K /test
pool/home 17.5K 33.5G 9.00K /pool/home
pool/home/marks 8.50K 33.5G 8.50K /pool/home/marks
pool/home/marks@snap 0 - 8.50K /pool/home/marks@snap
zfs list能显示专门的数据集。使用-r属性能递归显示所有依赖于这个数据集的信息。
例13-33 显示某一文件系统下的所有数据集。
# zfs list -r tank/home/chua
NAME USED AVAIL REFER MOUNTPOINT
tank/home/chua 26.0K 4.81G 10.0K /tank/home/chua
tank/home/chua/projects 16K 4.81G 9.0K /tank/home/chua/projects
tank/home/chua/projects/fs1 8K 4.81G 8K /tank/home/chua/projects/fs1
tank/home/chua/projects/fs2 8K 4.81G 8K /tank/home/chua/projects/fs2
2.对文件系统进行复杂的查询
使用-o,-f,-H能进行复杂的查询。具体描述如下:
-o选项能使定制的属性显示出来,也可以使用逗号来分割这些属性;
-t选项能查询专门的数据集的属性;
数据集有以下这些类型。
文件系统:显示文件系统和克隆数据集。
卷:显示卷数据集。
快照:显示快照数据集。
-H选项是用来忽略zfs list命令的输出的头部信息。
例13-34 显示文件系统特定的属性选项。
# zfs list -o name,sharenfs,mountpoint
NAME SHARENFS MOUNTPOINT
tank rw /export
tank/archives rw /export/archives
tank/archives/zfs rw /export/archives/zfs
tank/calendar off /var/spool/calendar
tank/cores rw /cores
tank/dumps rw /export/dumps
tank/home rw /export/home
tank/home/ahl rw /export/home/ahl
tank/home/ahrens rw /export/home/ahrens
tank/home/andrei rw /export/home/andrei
tank/home/barts rw /export/home/barts
tank/home/billm rw /export/home/billm
tank/home/bjw rw /export/home/bjw
tank/home/bmc rw /export/home/bmc
tank/home/bonwick rw /export/home/bonwick
例13-35 显示特定的数据集的属性,显示这些属性时也可以用逗号来分割它们。
# zfs list -t filesystem -o name,used
NAME USED
pool 105K
pool/container 0
pool/home 26.0K
pool/home/tabriz 26.0K
pool/home/tabriz_clone 0
例13-36 使用–H选项忽略头部的输出。
# zfs list -H -o name
pool
pool/container
pool/home
pool/home/tabriz
pool/home/tabriz@now
pool/home/tabriz/container
pool/home/tabriz/container/fs1
pool/home/tabriz/container/fs2
pool/home/tabriz_clone
管理属性
本节介绍管理数据集的属性。主要使用set、inherit和get等子命令来管理这些属性。
1.设置属性
zfs set命令可以设置或修改数据集的属性。
例13-37 在/tank/home上设置atime属性为off。
# zfs set atime=off tank/home
设置数字属性的时候可以使用下面任何一种方式。
# zfs set quota=50G tank/home/marks
# zfs set quota=50g tank/home/marks
# zfs set quota=50GB tank/home/marks
# zfs set quota=50gb tank/home/marks
2.继承的属性
除了限额和保留的属性可以明确设定之外,其他属性都可以从父级继承过来。这个zfs inherit命令将清除所有自己设置的属性,并从上一级中继承属性。
例13-38 继承属性。
(1)使用zfs set命令设置compression属性:
# zfs set compression=on tank/home/bonwick
# zfs get -r compression tank
NAME PROPERTY VALUE SOURCE
tank compression off default
tank/home compression off default
tank/home/bonwick compression on local
(2)使用inherit子命令继承父级的compression属性:
# zfs inherit compression tank/home/bonwick
(3)查看各级文件系统的compression属性:
# zfs get -r compression tank
NAME PROPERTY VALUE SOURCE
tank compression off default
tank/home compression off default
tank/home/bonwick compression off default
最后,我们看到tank/home/bonwick文件系统的compression的属性已经不是所设置的on属性了,而是从父级文件系统中继承了off属性。使用zfs inherit –r命令,-r参数能使所有子级的数据集继承属性。
3.查询属性
简单的查询方法是使用zfs list命令。但zfs get命令能得到更为详细的信息。
下面使用zfs get得到一个专门的属性。
例13-39 查询tank/ws文件系统的checksum属性情况。
# zfs get checksum tank/ws
NAME PROPERTY VALUE SOURCE
tank/ws checksum on default
在上面例子的SOURCE属性中,指明了checksum属性是如何设置的。
default--这个从来没有被人为设置过,属性值是最初的默认值
inherited from dataset_name--属性是从名为dataset_name数据集中继承来的
local--属性是在本数据集中使用zfs set命令设置的
Temporary--属性是由zfs mount –o命令所设置的,它只有在mount上时才有效
-(none)--这是个只读的属性,它的值是由ZFS产生的
例13-40 在名为pool数据集中,使用all选项可以找到所有数据集的属性。
# zfs get all pool
NAME PROPERTY VALUE SOURCE
pool type filesystem -
pool creation Sat Nov 12 11:41 2005 -
pool used 32K -
pool available 33.5G -
pool referenced 8K -
pool compressratio 1.00x -
pool mounted yes -
pool quota none default
pool reservation none default
pool recordsize 128K default
pool mountpoint /pool default
pool sharenfs off default
pool checksum on default
pool compression on local
pool atime on default
pool devices on default
pool exec on default
pool setuid on default
pool readonly off default
pool zoned off default
pool snapdir visible default
pool aclmode groupmask default
pool aclinherit secure default
在数据集中,使用-s选项能显示source的值。
例13-41 在名为pool数据集中,使用-s选项显示source的值为local的属性。
# zfs get -s local all pool
NAME PROPERTY VALUE SOURCE
pool compression on local
例13-42 使用-r选项能得到专门的数据集的所有子系统的属性。
# zfs get -r -s temporary all tank
NAME PROPERTY VALUE SOURCE
tank/home atime off temporary
tank/home/bonwick atime off temporary
tank/home/marks atime off temporary
4.使用脚本查询属性
zfs get有-H和-o的选项。这些选项是通过脚本设计的。-H是指忽略任何头部的信息。-o选项上用来定制输出。
例13-43 得到compression的value值。
# zfs get -H -o value compression tank/home
on
例13-44 使用-r选项可以查询递归子代的属性。
# zfs get -H -o name,value -r used export/home
export/home 5.57G
export/home/marks 1.43G
export/home/maybee 2.15G
安装和共享文件系统
本节描述如何在ZFS中安装和共享文件系统。
1.管理安装点
在默认情况下,所有ZFS文件系统在系统启动时被服务svs://system/filesystem/local所自动安装(mount)。ZFS文件系统被安装到一个目录(比如/tank)下,这个目录默认地也是文件系统的名字。
可以使用zfs set命令来改变默认安装点的属性。ZFS可以自动创建安装点,如果需要的话,可以使用zfs mount –a 命令安装文件系统,而不能使用/etc/vfstab。
mountpoint的属性也是可以继承的。比如,如果pool/home有个安装点在/export/stuff,这个pool/nome/user就继承了/export/stuff/user作为安装点。
我们也可以将mountpoint的属性设置为none来防止文件系统被安装上。
为了防止ZFS自动安装和管理文件系统,文件系统也能通过Legacy来设置安装点属性。Legacy工具包括mont和umount命令,并且/etc/vfstab文件必须被替换。
(1)自动安装点。
如果mountpoint属性不是legacy或none,ZFS就能自动安装这个文件系统。
如果ZFS管理文件系统,但当前是在卸载状态,这个时候安装点属性被改变,文件系统将保留着卸载状态。
根的数据集的默认安装点能在创建时使用zpool create’s –m指定目录。
任何创建的安装点都不是被继承的而是通过ZFS管理的。
例13-45 pool/filesystem的自动安装点。
先创建pool/filesystem文件系统:
# zfs create pool/filesystem
得到安装点的属性值:
# zfs get mountpoint pool/filesystem
NAME PROPERTY VALUE SOURCE
pool/filesystem mountpoint /pool/filesystem default
最后,查看这个文件系统是否被自动安装上:
# zfs get mounted pool/filesystem
NAME PROPERTY VALUE SOURCE
pool/filesystem mounted yes –
当然,我们也可以通过自己的设置来设定安装点属性。
例13-46 手工改变安装点。
改变安装点:
# zfs set mountpoint=/mnt pool/filesystem
查看安装点:
# zfs get mountpoint pool/filesystem
NAME PROPERTY VALUE SOURCE
pool/filesystem mountpoint /mnt local
查看是否已经安装:
# zfs get mounted pool/filesystem
NAME PROPERTY VALUE SOURCE
pool/filesystem mounted yes –
从上面的例子可以看出,当安装点属性被更改后,文件系统能自动从旧的安装点卸载并且重新安装到新的安装点,但安装点的目录是需要被创建的。如果文件系统处于活动状态时就不能被卸载,错误的报告就会产生,并且可能需要手工卸载了。
(2)遗留的(legacy)安装点。
可以使用legacy工具来设定安装点的属性。遗留的文件系统的管理必须通过mount 和umount命令和/etc/vfstab文件来管理。当系统启动的时候,ZFS不能自动安装遗留的文件系统,并且ZFS的安装和卸载工具也不能管理数据集的这种形态。下面这个例子显示如何设置管理在遗留模式下的ZFS数据集。
例13-47 设置管理在遗留模式下的ZFS数据集。
# zfs set mountpoint=legacy tank/home/eschrock
# mount -F zfs tank/home/eschrock /mnt
在特殊的情况下,如果你要创建ZFS的/var和/usr文件系统,就需要指明遗留文件系统并且在/etc/vfstab文件中指明安装点。并且,在系统启动时,system/filesystem/local服务要进入维护模式。
要想自动安装遗留的文件系统,必须在/etc/vfstab文件中设置,下面就是个例子:
#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
#
tank/home/eschrock - /mnt zfs - yes –
注意fsck pass的属性为“-”,这说明fsck命令不能在ZFS文件系统中应用。
2.安装文件系统
一般情况下,ZFS能在创建或启动的时候自动mount文件系统。只有在改变安装属性或安装和卸载文件系统时才需要使用zfs mount命令。
zfs mount命令不加变量将显示当前被ZFS管理的文件系统的安装点,但遗留的文件系统没有被列出。
例13-48 显示存储池中文件系统的安装点。
# zfs mount
tank /tank
tank/home /tank/home
tank/home/bonwick /tank/home/bonwick
tank/ws /tank/ws
使用-a选项可以mount所有被ZFS管理的文件系统,但不能mount遗留的文件系统。
#zfs mount –a
在默认情况下,ZFS不允许在顶级非空的目录中安装文件系统。如果强制在顶级非空目录安装文件系统必须使用-O选项。
例13-49 在顶级非空目录中安装文件系统。
# zfs mount tank/home/alt
cannot mount ’/export/home/alt’: directory is not empty
use legacy mountpoint to allow this behavior, or use the -O flag
# zfs mount -O tank/home/alt
遗留的文件系统必须通过遗留的工具来管理,试图使用ZFS管理将导致错误的发生。
例13-50 安装遗留的文件系统。
# zfs mount pool/home/billm
cannot mount ’pool/home/billm’: legacy mountpoint
use mount(1M) to mount this filesystem
# mount -F zfs tank/home/billm
When a filesystem is mounted, it uses a set of mount options based on the property
values associated with the dataset. The correlation between properties and mount
options is as follows:
当文件系统被安装后,基于数据集的属性就会相应地产生安装属性
devices--devices/nodevices
exec--exec/noexec
readonly--ro/rw
setuid--setuid/nosetuid
3.临时安装属性
如果在mount时使用了-o选项,那么所关联的属性都将是临时的。当被卸载后都将恢复原状。如果临时改变了这些属性的值,改变将立即生效。
例13-51 临时设置tank/home/perrin为只读属性。
# zfs mount -o ro tank/home/perrin
例13-52 在重新安装文件系统的时候临时将atime的属性值设为off。
# zfs mount -o remount,noatime tank/home/perrin
# zfs get atime tank/home/perrin
NAME PROPERTY VALUE SOURCE
tank/home/perrin atime off temporary
4.卸载文件系统
卸载文件系统有两种方法,即使用zfs umount命令,后面接文件系统的名字,或者文件的安装点。
例13-53 通过文件系统名来卸载文件系统。
# zfs unmount tank/home/tabriz
例13-54 通过安装点来卸载文件系统。
# zfs unmount /export/home/tabriz
如果卸载失败后,可以使用-f选项来强制卸载,不过使用这个命令因可能导致应用程序不可知的后果,所以要格外小心。
# zfs unmount tank/home/eschrock
cannot unmount ’/export/home/eschrock’: Device busy
zfs unmount -f tank/home/eschrock
为了提供向后兼容,卸载文件系统的工具umount也可以卸载ZFS文件系统。
例13-55 使用umount命令卸载文件系统。
# umount /export/home/bob
5.共享ZFS文件系统
通过设定sharefs属性,ZFS能自动共享文件系统。使用这个方法,管理员不需要修改/etc/dfs/dfstab文件。
(1)控制共享。
在默认情况下,文件系统是不共享的,共享新的文件系统,使用下列命令:
# zfs set sharenfs=on tank/home./eschrock
这个共享的属性是可以继承的。
# zfs set sharenfs=on tank/home
# zfs create tank/home/bricker
# zfs create tank/home/tabriz
# zfs set sharenfs=ro tank/home/tabriz
这两个文件系统都是共享读和写的,最后一行将tank/home/tabriz改为只读。
不共享一个文件系统:
# zfs unshare tank/home/tabriz
不共享所有的文件系统:
# zfs unshare –a
共享一个文件系统:
# zfs share tank/home/tabriz
共享所有的文件系统:
# zfs share –a
(2)遗留的共享。
如果sharenfs属性是off,ZFS不试图共享文件系统。这就允许管理者通过/etc/dfs/dfstab进行文件管理。
传统的share和unshare命令仍然能在ZFS文件系统中使用。这意味着可以选择不同的方法来管理文件系统的共享。
限额和保留
ZFS支持文件系统级的限额和保留。文件系统的属性提供使用quota来限制文件系统使用的限额,并同时通过保留来保证一定的空间是可以使用的。这些属性都能应用到所有的子数据集中。
如果在tank/home数据集中设置了限额,tank/home和它的子级都不能超过这个限额。类似地,如果tank/home是保留的,tank/home和所有子级都有保留。数据集使用的空间反映使用的属性。
1.设置限额
使用空间的限额可以被zfs set和zfs get命令设置。
例13-56 在tank/home/bonwick设置10GB的限额。
# zfs set quota=10G tank/home/bonwick
# zfs get quota tank/home/bonwick
NAME PROPERTY VALUE SOURCE
tank/home/bonwick quota 10.0G local
使用zfs list查看结果:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank/home 16.5K 33.5G 8.50K /export/home
tank/home/bonwick 15.0K 10.0G 8.50K /export/home/bonwick
tank/home/bonwick/ws 6.50K 10.0G 8.50K /export/home/bonwick/ws
使用df命令查看结果:
# df -h /export/home/bonwick
Filesystem size used avail capacity Mounted on
tank/home/bonwick 10G 8K 10G 1% /export/home/bonwick
尽管tank/home有33.5GB的空间,但tank/home/bonwick被设定了10GB的限额。
在设定限额的时候,我们不能设定比当前使用空间还少的限额:
# zfs set quota=10G tank/home/bonwick
cannot set quota for ’tank/home/bonwick’: size is less than current used or
reserved space
2.设置保留空间
ZFS的保留空间是为了能从存储池中确保分配到可用的空间。因此,如果没有当前可以使用的空间,就不能设定保留空间。
ZFS保留空间可以通过zfs set和zfs get命令来完成分配。
例13-57 设定保留空间。
# zfs set reservation=5G tank/home/moore
查看保留属性:
# zfs get reservation tank/home/moore
NAME PROPERTY VALUE SOURCE
tank/home/moore reservation 5.00G local
也可以使用zfs list查看保留空间:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank/home 5.00G 33.5G 8.50K /export/home
tank/home/moore 15.0K 10.0G 8.50K /export/home/moore
从上面可以看出,尽管tank/home和子系统使用的空间可能比5GB小,但tank/home仍然显示使用了5GB,说明这是为tank/home/moore保留的。
子级文件系统的保留空间计入父级文件系统的使用空间。
例13-58 保留空间不能大于限额。
# zfs set quota=5G pool/filesystem
# zfs set reservation=10G pool/filesysetm/user1
cannot set reservation for ’pool/filesystem/user1’: size is greater than available space
上面的例子说明:保留空间不能大于限额。
例13-59 保留空间不是累计的。
# zfs set reservation=10G tank/home/moore
# zfs set reservation=5G tank/home/moore
# zfs get reservation tank/home/moore
NAME PROPERTY VALUE SOURCE
tank/home/moore reservation 5.00G local
上面的例子说明:保留空间不是累计的,是被替换的。
文件系统的备份和恢复
通过zfs backup或zfs restore命令,可以备份ZFS文件系统的快照或原始文件系统。
ZFS备份和恢复解决方案提供了以下内容:
创建ZFS快照或增量的快照。
通过移动备份后,进行数据恢复。
1.备份ZFS快照
下面的命令使用zfs backup命令备份快照。
例13-60 备份快照。
# zfs backup tank/dana@111505 > /dev/rmt/0
例13-61 增量备份。
# zfs backup -i tank/dana@111505 tank/dana@now > /dev/rmt/0
2.恢复ZFS快照
例13-62 恢复ZFS快照。
备份ZFS快照:
# zfs backup tank/gozer@111105 > /dev/rmt/0
然后,将备份恢复成另外的tank/gozer2@today名字:
# zfs restore tank/gozer2@today < /dev/rmt/0
第三,将原来的文件系统改为tank/gozer.old,再将tank/gozer2@today恢复成原来文件系统的名字:
# zfs rename tank/gozer tank/gozer.old
# zfs rename tank/gozer2 tank/gozer |
|