标签: zfs

Linux 下的 ZFS,它有效吗?

我可以让 ZFS 在 Linux 中正常工作吗?

有什么注意事项/限制吗?

linux filesystems zfs

40
推荐指数
2
解决办法
2625
查看次数

强制 zpool 在 Ubuntu Xenial 中使用 /dev/disk/by-id

我正在尝试 Ubuntu 16.04 Xenial 上的捆绑 OpenZFS。

在创建池时,我总是通过它们在/dev/disk/by-id/(或/dev/disk/gpt在 FreeBSD 上)的序列号来引用驱动器以提高弹性。/dev机器重新启动时,驱动器的顺序并不总是相同,如果机器中还有其他驱动器,池可能无法正确安装。

例如,zpool status在 14.04 机器上运行我得到这个:

NAME                                  STATE     READ WRITE CKSUM
tank                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0
Run Code Online (Sandbox Code Playgroud)

但是当我用这个(缩写)在 16.04 上创建一个新池时:

zpool create pool raidz \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]
Run Code Online (Sandbox Code Playgroud)

我得到这个zpool status

NAME        STATE     READ WRITE CKSUM …
Run Code Online (Sandbox Code Playgroud)

zfs ubuntu

25
推荐指数
2
解决办法
3万
查看次数

如何更改 ZFS 池的挂载点?

例子:

创建池时,我将其设置为挂载到 /mystorage

zpool create -m /mystorage mypool raidz /dev/ada0 dev/ada1 /dev/ada2
Run Code Online (Sandbox Code Playgroud)

但是现在我希望将池挂载到 /myspecialfolder。

任何想法如何做到?我在网上搜索并查看了 zpool 和 zfs 联机帮助页,但一无所获。

谢谢

zfs

24
推荐指数
1
解决办法
3万
查看次数

如何将文件从一个 zfs 文件系统移动到同一池中的另一个 zfs 文件系统?

我在同一个 zfs 池中有两个文件系统,/mnt/fs_a并且/mnt/fs_b. 我想约1TB的数据,从移动fs_afs_b。但是当我:

mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,它开始逐块复制文件。鉴于移动 2GB 文件所需的时间,看来此操作需要数天的大量抖动才能完成。

必须有一种更聪明、更快的方法来做到这一点,对吗?

zfs

23
推荐指数
1
解决办法
1万
查看次数

如何将整个 zfs 池单向镜像到另一个 zfs 池

我有一个 zfs 池,其中包含多个 zvol 和数据集,其中一些还嵌套。zfs-auto-snapshot 定期对所有数据集和 zvol 进行快照。所有数据集和 zvol 也有一些手动创建的快照。

我已经设置了一个远程池,由于时间不够,通过 zfs send -R 在本地高速网络上的初始复制没有完成(一些数据集丢失,一些数据集已经过时或缺少快照)。

现在池通过慢速连接在物理上是远程的,我需要定期将远程池与本地池同步,这意味着必须将本地池中存在的数据复制到远程池,必须从远程池中删除本地池中的数据,并且存在于远程池中但不在本地池中的数据必须从远程池中删除,数据表示“zvols”、“数据集”或“快照”。

如果我使用 rsync 在两个常规文件系统之间执行此操作,它将是“-axPHAX --delete”(这就是我实际为备份某些系统所做的操作)。

如何设置同步任务,以便远程池 zvol 和数据集(包括它们的快照)可以与本地 zvol、数据集和快照同步?

我想避免通过 ssh 传输,因为 ssh 的吞吐量性能较低;我更喜欢 mbuffer 或 iscsi 。

zfs replication

21
推荐指数
2
解决办法
5万
查看次数

为什么 ZFS 清理未完成?

首先让我们从我正在运行的东西开始。这是一个运行 Ubuntu 16.10 的家庭媒体服务器。我有一个大约半满的镜像 6 TB 驱动器池。我大约一个月前构建了这个系统,它运行良好。它使用 SSD 作为引导驱动器,使用上述池作为存储。我已经能够用这个游泳池做我需要的一切,一切看起来都很棒。

大约一个月前我构建系统时,这两个驱动器都是新的,我对其中一个的一些额外振动有点好奇。没什么不好,但供应商说他会免费更换它,所以我打算运行一个擦洗并将它拉出来送进来,在我等待时以降级状态运行。上面没有非备份数据,所以我并不十分担心,但显然,与杀死池并从备份中恢复相比,这样做会更容易。

我目前真正想做的就是运行擦洗并安全地从镜像中分离一个驱动器。我跑

zpool scrub tank
Run Code Online (Sandbox Code Playgroud)

然后立即运行

zpool status
Run Code Online (Sandbox Code Playgroud)

我可以看到擦洗正在发生。我可以每隔几秒钟运行一次更新,并看到它更新状态就好了。它运行了大约 30 秒,然后状态不再显示它正在运行。此外,除了从状态开始在 0 小时 0 分钟内完成的最后一次擦洗之外,我从未见过任何其他东西。对我来说,这意味着擦洗不会完成,因为擦洗不应该至少需要几个小时才能完成两个半 TB 的信息。

我错过了什么?


添加请求的信息:

  pool: Tank
 state: ONLINE
  scan: scrub repaired 0 in 0h0m with 0 errors on Sun Feb  5 00:31:42 2017
config:

        NAME        STATE     READ WRITE CKSUM
        Tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb2    ONLINE       0     0     0
            sdc2    ONLINE       0     0     0

errors: No known data errors
Run Code Online (Sandbox Code Playgroud)

我现在再次尝试擦洗,以确保问题仍然存在。这是我开始后大约 20 …

zfs ubuntu

18
推荐指数
0
解决办法
1512
查看次数

有没有办法在 ZFS 中创建文件副本?

我正在尝试制作一些文件/目录的副本,但在我所知道的几种方法中,似乎都不是最佳的。

例如,btrfs 可以与使用一起cp --reflink=auto快速生成文件副本。

我尝试过的:

  1. 符号链接:不好。重命名的文件,断开的链接。
  2. 硬链接:更好,但仍然不好。对一个文件的更改会更改另一个文件,我不一定希望更改另一个文件。
  3. 创建数据集的快照,然后克隆快照:这可以工作,但效果不佳。通常,我不是在寻找整个数据集的副本,也不是在寻找像另一个数据集一样的副本。然后是克隆/快照/原始之间的父/子关系,据我所知,如果不是不可能的话,这很难打破。
  4. 使用zfs send/receive并启用重复数据删除,将数据集复制到新数据集:这避免了使用克隆的父/子关系,但仍然不必要地创建另一个数据集,并且仍然受到必须100%读取文件所涉及的缓慢和再次引用而不是写入的块。
  5. 复制文件并让 dedup 完成它的工作:这可行,但速度很慢,因为必须 100% 读取文件,然后再次引用块而不是写入。

zfs 发送/接收和物理复制或 rsyncing 的缓慢进一步加剧,因为大多数东西都是压缩存储的,并且必须在读取期间解压缩,然后在 dedup 开始引用重复块之前进行压缩。

在我所有的研究中,我没有找到任何与 btrfs 中 --reflink 的简单性相似的东西。

那么,有没有办法在 ZFS 中创建文件副本?还是“物理”复制并让重复数据删除完成其工作是唯一真正的选择?

freebsd zfs

16
推荐指数
1
解决办法
4881
查看次数

FreeBSD 中 ZFS xattr 支持的状态

我正在尝试确定是否使用 ZFS 在 FreeBSD 中支持 xattrs,或者更确切地说,支持扩展到什么程度。我读过一些相互矛盾的信息。

  1. zfs get xattr将其列为on (default)//usr/var,但off (temporary)对所有其他数据集,包括上面提到的那些孩子们。
  2. 运行zfs set xattr=on zroot/usr/home我收到消息

    property 'xattr' not supported on FreeBSD: permission denied.

  3. 这符合zfs手册页

    xattrFreeBSD 目前不支持该属性。

  4. setextattrgetextattr而且lsextattr似乎工作得很好。
  5. 我还设法使用 保存和恢复设备文件节点rsync --fake-super,并且可以使用lsextattr和查看其数据getextattr
  6. 维基百科在xattr 讨论页中有一些讨论。显然,曾经有人声称 ZFS 从 FreeBSD 8 开始就支持 xattr,但后来参考手册页(参见 3.)将其删除。

目前,我的印象是 zfs 上的扩展属性在实践中起作用,但是xattr控制它们使用的属性不像在其他 zfs 发行版中那样起作用。但在我相信大量备份数据可以rsync --fake-super …

freebsd zfs bsd xattr

16
推荐指数
1
解决办法
1885
查看次数

如何在不破坏/改变当前或外部文件系统的情况下挂载外部 ZFS 文件系统

我正在使用 FreeBSD 10.2,在 root 上使用 ZFS 作为文件系统(zroot01)。我有一个带有来自另一个 FreeBSD 10.2 系统(zroot02)的 ZFS 文件系统的外部硬盘,我想临时挂载它,只读,以便我可以从中获取一些文件,然后断开连接。我希望外部 ZFS 系统破坏或替换我当前的文件系统,也不希望外部的数据被破坏/改变。

为了演示我想要完成的事情,如果我使用 UFS,我会做这样的事情:

mount -t ufs -o ro /dev/ada0s2 /mnt/my-fun-mountpoint
Run Code Online (Sandbox Code Playgroud)

.../dev/ada0s2我的外部驱动器上的分区在哪里,/mnt/my-fun-mountpoint/mnt我现有操作系统的目录中。

所有的搜索和手册页阅读都没有提供一种非常清晰的方法来这样做。什么回答我没有找到最终接管我当前的文件系统和破坏无法修复它-显然不是结果我要找的。我不久前尝试过这个,所以我不记得我尝试过哪些命令,不幸的是。

你能否就如何做到这一点提供一些明确的指导?预先感谢您的帮助。

zfs mount

16
推荐指数
1
解决办法
2万
查看次数

将磁盘添加到 ZFS 池

我正在计划一个存储服务器,用户将在其中存储多达 20 TB 的数据。由于我在 Linux 上使用 ZFS 有一些很好的经验,我想使用它。但是,我知道数据量每年会增长 100 GB,因此在某些时候,我需要增加池大小。既然数据量这么大,恐怕要彻底销毁zpool再重新创建,会很麻烦;所以我想知道是否可以通过添加更多磁盘并保留现有磁盘来增加池容量。池至少是 RAIDZ-1。或者确实需要一个接一个地移除磁盘并用更大的磁盘替换它?不,我无法相信。比我的更大的服务器如何处理对更多存储容量日益增长的需求?

zfs

15
推荐指数
3
解决办法
3万
查看次数

标签 统计

zfs ×10

freebsd ×2

ubuntu ×2

bsd ×1

filesystems ×1

linux ×1

mount ×1

replication ×1

xattr ×1