我在笔记本电脑的 500GB 磁盘上安装了 Ubuntu 14.04 和 LVM。我想设置/试用 zfs/zpool。在不丢失数据的情况下,最好的方法是什么
答案1
假设你只是想“玩一下”ZFS,最简单的选择可能是文件支持池。另一种方法是在 LVM 中创建一个或多个逻辑卷并使用它们。
ZFS 的优点之一是,您可以为它提供几乎任何能够以随机 I/O 形式存储数据的东西,它都会“正常工作”。在生产环境中,你通常希望给 ZFS 一个完整的磁盘(或几个整个磁盘)并让它处理分区等,但为了尝试并了解 ZFS 的工作原理,文件支持池几乎总是完全足够的。
事实上,我有时建议准备一个类似于完整存储布局的文件支持池,因为它允许您在提交之前安全地测试各种更改并观察结果。更改 ZFS 池时的错误可能会造成高昂的代价。
要创建文件支持池,首先要创建一组适当大小的文件。我将创建一个四设备 raidz1 池,其中每个设备(文件)为 2 GB,因此:
sudo mkdir /.zfs
sudo dd if=/dev/zero of=/.zfs/disk1 bs=1M count=2048
sudo dd if=/dev/zero of=/.zfs/disk2 bs=1M count=2048
sudo dd if=/dev/zero of=/.zfs/disk3 bs=1M count=2048
sudo dd if=/dev/zero of=/.zfs/disk4 bs=1M count=2048
sudo chmod 0700 /.zfs
这会在 /.zfs 中产生四个文件,分别命名为 disk1 到 disk4。每个文件大小为 2 GiB,考虑到 raidz1 开销,可用的存储容量略低于 6 GiB(在 raidz1 中,其中一个设备用于奇偶校验数据,因此不可用)。
然后创建池(tank
是 ZFS 池的常用示例名称):
sudo zpool create tank raidz /.zfs/disk1 /.zfs/disk2 /.zfs/disk3 /.zfs/disk4
这表示tank
使用 defaults 创建一个名为的池,并使用我们刚刚创建的四个文件在该池中设置一个 vdev。创建后将自动导入池,其根文件系统将挂载在/tank
。您可以使用 观察结果sudo zpool status
,它应该会打印非常类似于以下内容的内容:
pool: tank
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
/.zfs/disk1 ONLINE 0 0 0
/.zfs/disk2 ONLINE 0 0 0
/.zfs/disk3 ONLINE 0 0 0
/.zfs/disk4 ONLINE 0 0 0
errors: No known data errors
我们可以使用以下命令确认池的原始大小sudo zpool list
:
NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
tank 7,94G 120K 7,94G - 0% 0% 1.00x ONLINE -
并使用以下方法获取已使用和可用的存储容量sudo zfs list
:
NAME USED AVAIL REFER MOUNTPOINT
tank 74,8K 5,84G 25,4K /tank
这两个命令都有许多选项来控制打印什么以及如何打印;请分别参阅zpool
和的手册页zfs
。
现在,您可以将文件保存到 /tank 中,并开始使用 ZFS。要导出池(建议在关机前执行此操作),sudo zpool export tank
(或sudo zpool export -a
导出所有当前导入的池)。要再次导入池,sudo zpool import -d /.zfs -a
(或将 替换-a
为池的名称tank
),-d /.zfs
可能需要 ,因为 ZFS 通常不会在该目录中查找设备。如果需要,您可以将这些命令添加到系统启动/关机脚本中。
玩得开心!