ZFS文件系统简介
Solaris10默认的文件系统是ufs(Unix Filesystem),当然也可以选装zfs;Solaris11默认的文件系统是zfs(Zettabyte Filesystem)。
ZFS文件系统的英文名称为Zettabyte File System,也叫动态文件系统(Dynamic File System),是第一个128位文件系统。最初是由Sun公司为Solaris 10操作系统开发的文件系统。作为OpenSolaris开源计划的一部分,ZFS于2005年11月发布,被Sun称为是终极文件系统。ZFS是基于存储池,与典型的映射物理存储设备的传统文件系ZFS统不同,ZFS所有在存储池中的文件系统都可以使用存储池的资源。
ZFS 是一个组合文件系统和逻辑卷管理器。
ZFS 的功能包括防止数据损坏、高存储容量 (256 ZiB)、快照和写入时复制克隆以及连续完整性检查等。
如果您正在处理大量数据,或者为虚拟化提供后备文件系统,ZFS 是一个不错的选择。
ZFS和OpenZFS
2013年,OpenZFS成立,旨在协调开源ZFS的开发。截至2019年,OpenZFS中超过50%的原始OpenSolaris ZFS代码已经被社区贡献的代码所取代,使得“Oracle ZFS”和“OpenZFS”在体制上和技术上不兼容。
OpenZFS是一个开源存储平台。它包括传统文件系统和卷管理器的功能(此为独特之处)。它具有许多高级功能。
存储池及其分类
存储池是一种设备集合,提供 ZFS 数据集的物理存储和数据复制。存储池内的所有数据集共享同一个空间。ZFS 存储池是为数据集提供空间的设备的逻辑集合。存储池也是 ZFS 文件系统分层结构的根。
zpool 命令配置 ZFS 存储池。
Basic Storage Pool
# zpool create tank c1t0d0 c1t1d0
Mirrored Storage Pool
# zpool create tank mirror c1d0 c2d0 mirror c3d0 c4d0
RAID-Z Storage Pool
# zpool create tank raidz c1t0d0 c2t0d0 c3t0d0 c4t0d0 /dev/dsk/c5t0d0
ZFS Root Pool
根池在所有类型的存储池中,属于比较特殊的:
1、根池必须创建为镜像配置或单磁盘配置。使用zpool add命令不能增加磁盘以创建多个镜像顶级虚拟设备,但可以使用zpool attach命令扩展镜像虚拟设备。
2、根池不支持RAID-Z和striped 配置。
3、根池不能有单独的日志设备。
扩展根池
这里说是硬盘扩容,不如说是更换硬盘。案例:将15G的系统盘替换为50G的系统盘(并不能像LVM一样将两块盘都绑定到LV,然后挂载到/)。
1、查看当前的存储池,目前只有rpool,大小为15G
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 15.6G 15.0G 618M 96% 1.00x ONLINE -
# zpool status rpool
pool: rpool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
2、查看当前磁盘设备
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c2t0d0 <VMware-Virtual disk-2.0-16.00GB>
/pci@0,0/pci15ad,1976@10/sd@0,0
1. c2t1d0 <VMware-Virtual disk-2.0-50.00GB>
/pci@0,0/pci15ad,1976@10/sd@1,0
3、将new_device附加到storage pool,前面我们说过rpool不支持zpool add 只支持zpool attach。attach后会将old_device的数据同步到new_device,并且rpool也从“单磁盘”配置自动转换为“镜像”配置。
# 命令解释:
zpool attach [-f] pool device new_device
将new_device附加到现有的zpool设备。现有设备不能作为raidz配置的一部分。如果device当前不是镜像配置的一部分,则device自动转换为device和new_device的双向镜像。如果device是双向镜像的一部分,则附加new_device将创建一个三向镜像,依此类推。在任何一种情况下,new_device都立即开始恢复。
zpool add [-f] [-n [-l]] pool vdev ...
将指定的虚拟设备添加到给定的池中。
# zpool attach rpool c2t0d0 c2t1d0
Make sure to wait until resilver is done before rebooting.
# zpool status rpool
pool: rpool
state: DEGRADED
status: One or more devices are currently being resilvered. The pool will
continue to function in a degraded state.
action: Wait for the resilver to complete.
Run 'zpool status -v' to see device specific details.
scan: resilver in progress since Fri Mar 23 16:06:21 2001
284M scanned out of 15.0G at 3.11M/s, 1h20m to go
271M resilvered, 1.85% done
config:
NAME STATE READ WRITE CKSUM
rpool DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
c2t0d0 ONLINE 0 0 0
c2t1d0 DEGRADED 0 0 0 (resilvering)
# zpool status rpool
pool: rpool
state: ONLINE
scan: resilvered 14.0G in 32m36s with 0 errors on Fri Mar 23 16:38:57 2001
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
errors: No known data errors
4、将old_device从rpool中分离
命令解释:
zpool detach pool device
该命令用于从镜像存储池中分离设备或备件。如果物理更换了RAID-Z存储池中的设备,也可以将备用设备从RAID-Z存储池中分离出来。或者,如果RAID-Z存储池中已有设备被备用设备替换,则可以卸载该设备。如果没有其他有效的数据副本,则拒绝该操作。
# zpool detach rpool c2t0d0
5、设置rpool自动扩展
命令解释:
zpool set autoexpand=on | off
控制底层LUN扩容时自动扩容池。
如果设置为on,池的大小将根据扩展设备的大小进行调整。如果该设备是镜像或raidz的一部分,那么在池使用新空间之前,必须对该镜像或raidz组中的所有设备进行扩展。默认off。可以使用缩写expand来代替autoexpand。
请勿使用format命令获取新的LUN大小,并对其重新打标签。zpool会自动反映新的LUN大小。
# zpool set autoexpand=on rpool
6、检验是否成功
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 15.0G 33.8G 4.33M /rpool
rpool/ROOT 3.01G 33.8G 31K none
rpool/ROOT/solaris 3.01G 33.8G 2.64G /
rpool/ROOT/solaris/var 315M 33.8G 315M /var
rpool/VARSHARE 35.4M 33.8G 2.74M /var/share
rpool/VARSHARE/kvol 27.7M 33.8G 31K /var/share/kvol
rpool/VARSHARE/kvol/dump_summary 1.22M 33.8G 1.02M -
rpool/VARSHARE/kvol/ereports 10.2M 33.8G 10.0M -
rpool/VARSHARE/kvol/kernel_log 16.2M 33.8G 16.0M -
rpool/VARSHARE/pkg 63K 33.8G 32K /var/share/pkg
rpool/VARSHARE/pkg/repositories 31K 33.8G 31K /var/share/pkg/repositories
rpool/VARSHARE/sstore 4.75M 33.8G 4.75M /var/share/sstore/repo
rpool/VARSHARE/tmp 31K 33.8G 31K /var/tmp
rpool/VARSHARE/zones 31K 33.8G 31K /system/zones
rpool/dump 2.00G 33.8G 2.00G -
rpool/export 8.97G 33.8G 32K /export
rpool/export/home 8.97G 33.8G 32K /export/home
rpool/export/home/xiao 8.97G 33.8G 8.97G /export/home/xiao
rpool/swap 1.00G 33.8G 1.00G -
# zpool list
NAME SIZE ALLOC FREE CAP DEDUP HEALTH ALTROOT
rpool 49.6G 15.0G 34.6G 30% 1.00x ONLINE -
# zpool status rpool
pool: rpool
state: ONLINE
scan: resilvered 14.0G in 32m36s with 0 errors on Fri Mar 23 16:38:57 2001
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
c2t1d0 ONLINE 0 0 0
errors: No known data errors