文件VDEVS
根据前文所述,我们也可以将一个文件创建为一个存储池,当然,这样做其实没有任何意义,仅仅只能用做测试目的,而不能用于存储生产数据。使用文件的最好方式就是在沙箱中运行,在那里你可以测试那么没有实际实施的生产数据获得压缩比,以及重复删除数据表的大小,或者其他的东西。当创建一个文件VDEVS时,你不可以使用相对路径,只能使用绝对路径,而且文件必须是预先分配好了的,不能是稀疏文件或精简置备(我还没搞懂啥是置备)。看看他是怎么运行的吧。
# for i in {1..4}; do dd if=/dev/zero of=/tmp/file$i bs=1G count=4 &> /dev/null; done
# zpool create tank /tmp/file1 /tmp/file2 /tmp/file3 /tmp/file4
# zpool status tank
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
/tmp/file1 ONLINE 0 0 0
/tmp/file2 ONLINE 0 0 0
/tmp/file3 ONLINE 0 0 0
/tmp/file4 ONLINE 0 0 0
errors: No known data errors
在这里我们创建了一个RAID-0,通过dd命令创建了4个4G的文件,所以我们的zpool可以有16G的使用空间,在第一个例子中我们可以将磁盘驱动器创建存储池,现在我们也可以使用文件来创建zpool了,同样可以将他们创建为镜像存储池,或者嵌入VDEVS,RAID-10,RAIDZ-1等。删了他
# zpool destroy tank
混合池
这儿最后的一个例子就是创建一个混合池,通过复杂的手段,不同的VDEV,来组合成这一个混合池。使用前面例子的文件VDEVS以及实际的物理驱动器,我们将创建一个具有cache的,具有日志的混合存储池,具体如下
# zpool create tank mirror /tmp/file1 /tmp/file2 mirror /tmp/file3 /tmp/file4 log mirror sde sdf cache sdg sdh
# zpool status tank
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
/tmp/file1 ONLINE 0 0 0
/tmp/file2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
/tmp/file3 ONLINE 0 0 0
/tmp/file4 ONLINE 0 0 0
logs
mirror-2 ONLINE 0 0 0
sde ONLINE 0 0 0
sdf ONLINE 0 0 0
cache
sdg ONLINE 0 0 0
sdh ONLINE 0 0 0
errors: No known data errors
很多东西在这儿,让我们来分析一下,首先我们通过4个已经预先创建好的文件搭建RAID-10,我们观察一下VDEVS,mirror-1和mirror-0使用来管理,第三个mirror-2没有用来存储数据,被使用做ZIL,也就是日志,我们将在下一个章节仔细的来将ZIL,剩下了两个驱动器被当作了cache使用,这儿我们已经列出了上面7个中的6个,唯一缺少的就是space(备用)。 仔细观察会帮助你理解zpool是怎样管理VDEVS的,”tank”将mirror-0和mirror-1当作永久存储,而mirror-2被当作了ZIL日志,只读cache管理sdg和sdh两个磁盘驱动器,log和cache他们都不是永久性存储。创建混合存储完毕,删了吧。
# zpool destroy tank