我在 Ubuntu 14.04 上创建了一个 ZFS 池,没有指定 RAID 或冗余选项,向其中写入了一些数据,重新启动了机器,池不再可用(UNAVAIL)。我没有确切的错误信息,但它提到没有足够的可用复制。我在池中创建了两个数据存储,由 2 个 3TB 磁盘组成。有人向我推荐 ZFS,因为它具有重复数据删除功能,目前我并不关心冗余。
我实际上只想要 RAID0,所以短期内不需要镜像或冗余。有没有办法用 ZFS 来实现这一点,或者我最好使用 LVM?
zpool status -v:
sudo zpool status -v
pool: cryptoporticus
state: UNAVAIL
status: One or more devices could not be used because the label is missing
or invalid. There are insufficient replicas for the pool to continue
functioning.
action: Destroy and re-create the pool from
a backup source.
see: http://zfsonlinux.org/msg/ZFS-8000-5E
scan: none requested
config:
NAME STATE READ WRITE CKSUM
cryptoporticus UNAVAIL 0 0 0 insufficient replicas
sda ONLINE 0 0 0
sdc UNAVAIL 0 0 0
更新
zpool export cyrptoporticus,
然后zpool import cryptoporticus
暂时解决了这个问题。重启后这种情况可能再次发生吗?
答案1
您可能会看到至少有一个使用的磁盘不可用的情况。这可能是间歇性的,可以解决,两种 Linux 实现(Linux 上的 ZFS 以及 zfs-fuse)似乎都会偶尔出现故障,这些故障可以通过zpool clear
或zpool export
/zpool import
循环轻松解决。
至于您的问题,是的,ZFS 完全能够通过发出类似的命令来创建和维护一个没有任何冗余的池zpool create mypool sdb sdc sdd
。
但就我个人而言,我不会使用 ZFS只是因为它的重复数据删除功能。由于其架构,ZFS 重复数据删除需要大量 RAM 和大量磁盘 I/O 来进行写入操作。您可能会发现它不适合像您这样大的池,因为写入速度会变得非常慢。如果您需要重复数据删除,您可能需要查看具有较小内存和 I/O 占用空间的离线重复数据删除实现,例如btrfs
使用的文件级批量重复数据删除bedup
或使用块级重复数据删除dupremove
:https://btrfs.wiki.kernel.org/index.php/Deduplication
答案2
这是以下内容的重复:为什么重新启动会导致我的 ZFS 镜像的一侧变为 UNAVAIL?
在您的情况下,系统上的 /dev/disk-by-* 目录中的设备名称或符号链接不存在或已被重命名。
最好使用/dev/disk-by-id
设备作为 zpool 而不是by-path
,因为路径名可能会发生变化。(grrrr……Ubuntu udev)
在/dev
...
by-id/ by-path/ by-uuid/
所以我的线轴看起来如下(请注意,设备不是sda
、sdb
等等。):
[root@BigHomie ~]# zpool status -v
pool: vol0
state: ONLINE
scan: scrub repaired 0 in 0h1m with 0 errors on Sat May 24 17:14:09 2014
config:
NAME STATE READ WRITE CKSUM
vol0 ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
scsi-SATA_OWC_Mercury_AccOW140403AS1321905 ONLINE 0 0 0
scsi-SATA_OWC_Mercury_AccOW140403AS1321932 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
scsi-SATA_OWC_Mercury_AccOW140403AS1321926 ONLINE 0 0 0
scsi-SATA_OWC_Mercury_AccOW140403AS1321922 ONLINE 0 0 0