折腾FreeBSD就是为了使用ZFS的RAIDZ,想着以后用FreeBSD替换现有NAS系统使用的Debian 11。那么就有了这次实验,为以后真实环境出现问题后留下点知识遗产。操作系统版本:13.2。
简单说一下实验环境,实验是在虚拟机环境中进行的,虚机安装了6块磁盘,每块磁盘10G,其中第一块磁盘上构建了zroot存储池,用于安装操作系统。剩余5块磁盘构建RAIDZ1模式的storage存储池,用于模拟生产环境中的数据存储池。
操作系统的安装就不说了,不知道的看前几期的死在坑里系列内容。
先查看一下磁盘信息,查看结果如下图:
lsblk是需要执行pkg install -y lsblk安装的,基础安装的操作系统中没有这个软件包。这里我将使用da1~5的五块盘进行RAIDZ1存储池构建。
执行构建命令:
zpool create pool_name raidz_mode [disk_list]
pool_name是需要构建的存储池的名称,raidz_mode是RAIDZ模式类型,disk_list是磁盘列表。至于RAIDZ有哪几种模式,都有啥特点,请自查资料,这里不做赘述。执行构建命令后在执行状态查询命令,查看存储池状态信息。
存储池状态查看命令:
zpool status
构建命令及状态查看命令执行结果如下图:
从存储池状态信息中可以看见,我新建了一个名为:storage,模式为RAIDZ1的存储池,池中包含da1~5磁盘。
执行df -h查看一下挂载信息,发现操作系统已经自动将storage存储池挂载到了/storage下。
进入/storage目录,新建一个testfile的测试文件,然后在文件中写入一些随机字符串,用于验证存储池降级以后的数据完整性。网上已经有人做过降级后的IO性能测试、降级后大文件写入测试,这里我就不搞了。
关闭虚机,将最后一块磁盘删除,然后新挂另一个新磁盘后开机。开机后执行df -h查看一些挂载状态。
发现storage还存在,且空间没有发生变化。再查看存储池状态信息。
发现存储池storage已经降级,提示/dev/da5的磁盘已经处于不可用状态。进入/storage查看一下testfile内容,发现内容完整。
我已经为虚机挂载了一块新盘,所以现在直接开始恢复操作。
执行恢复命令
zpool replace pool_name raw_disk_id /dev/daX
pool_name表示存储池名称,raw_disk_id表示原磁盘ID,就是刚刚在存储池状态中,看见的那个失效磁盘前的那串字符。/dev/daX表示需要替换上去的新盘的路径。再次查看存储池状态信息。
可以看见存储池开始重构,至于重构什么时候完成,取决于数据量、计算机性能、磁盘IO性能。我的环境中重构很快。之后再次查看存储池状态信息,可以看见存储池已经完成了重构。
查看测试文件内容依旧正常。至此此次实验完成。