FreeNAS是一个开源免费的NAS系统,因其是用的ZFS文件系统对于文件存储有着相当优秀的特性和安全性,受到很多个人用户和企业的喜爱和使用。但是不得不说,FreeNAS对于个人用户来说,功能是相对“简陋”的。
故事是这样的:本人有一台装了一台多盘位计算机,运行了FreeNAS系统,于是它就成了我的文件存储服务器。由于机器是用了一颗赛扬处理器,对于个人FreeNAS性能还是有点剩出的,所以我有在上面安装了Linux虚拟机来跑我的版本管理工具GitLab。出于节能和为国家减排的考虑(主要还是因为自己穷),我考虑为硬盘阵列设置休眠(暂停转动)。但是由于我的虚拟机就是安装在阵列当中,所以预计硬盘永远都不会进入休眠状态。
于是我斥巨资(39元)购买了SanDisk的小豆32GB的U盘,将系统迁移到U盘来腾出原来系统盘的SSD(128GB)用于创建一个新的存储池。准备将虚拟机迁移到SSD所创建的存储池上面,这样一来原有的硬盘阵列就不会因为虚拟机的读写影响始终无法进入睡眠状态了。
至此,正题来了,虚拟机安装所在的位置是FreeNAS的Volz(卷)当中,你可以将这个Volz理解成是虚拟机使用的虚拟磁盘。我多次查看之后,没有发现界面上什么方式可以将虚拟机的Volz移动到其他的存储池(即SSD)。我认为这就是我前面提到的“简陋”。
那么如何将Volz迁移到其他存储池呢?
通过ZFS文件系统提供的命令,首相我们打开FreeNAS的命令行,如下图
点击此处打开“ 命令行 ”
打开命令行后可以执行以下命令为存储位置创建快照或者复制其到别的存储池
#创建指定zvol的快照;[要创建快照的路径]@[快照名称]
zfs snapshot -r pool/zvol@relocate
#复制指定快照到新的存储池;"|"左边表示要复制的快照,"|"右边表示复制到哪里
#注意:此处建议复制快照,可以避免volz占用导致复制失败的问题
zfs send pool/zvol@relocate | zfs receive -v pool/zvol
这可能是全网第一个中文版关于FreeNAS下Volz跨存储池复制教程;
有疑问欢迎留言讨论