标签: zfsonlinux

btrfs 完整性和压力测试

DevOps 同事建议我们开始将生产环境转换为使用 btrfs。我们主要使用 ext4 文件系统,尽管一些使用率较低的服务器使用 ZFS(在 Linux 上)。作为决策者之一,作为对我们整体环境负责的人,我对网络上生产中有关 btrfs 的评论和文章数量犹豫不决。为了反驳这种说法,Oracle 发布了支持 btrfs 的企业 Linux,SLES 12 ( https://www.suse.com/releasenotes/x86_64/SUSE-SLES/12/ ) 也表明它将使用 btrfs,并且有证据像 Facebook 这样的公司也在受控的生产环境中使用它。

关于为什么朝这个方向前进(采用 btrfs)会是一件好事,有很多争论,我总体上同意它们,但是,我想谨慎行事,做尽职调查,并获得更多的操作熟悉度和在更广泛的范围内前进之前,在“小生产”或暂存环境中记录了数小时。是否有任何工具可以帮助我构建案例 - 例如在压力测试之后进行数据完整性检查或类似的东西?除了没有看到这样的陈述:“问。btrfs 稳定吗?简短的回答:不,它仍然被认为是实验性的。” 在 btrfs wiki 上,我还能做些什么来获得更温暖的模糊感?

linux storage filesystems btrfs zfsonlinux

5
推荐指数
1
解决办法
2744
查看次数

Centos 上的 ZFS - “没有这样的池或数据集”和“设备当前不可用”

我正在尝试在 CentOS 7 (3.10.0-327.10.1) 上创建 zpool,而 zpool 命令似乎讨厌“wwn-0x”ID。

“zpool status”是明确的 - 机器上当前没有配置 zpool。我有驱动器:

lrwxrwxrwx. 1 root root    9 Mar 11 14:30 wwn-0x5000cca2440ba0a0 -> ../../sds
lrwxrwxrwx. 1 root root    9 Mar 11 14:30 wwn-0x5000cca2440ba1dc -> ../../sdu
lrwxrwxrwx. 1 root root    9 Mar 11 14:30 wwn-0x5000cca2440992cc -> ../../sdl
Run Code Online (Sandbox Code Playgroud)

如果我输入:

zpool create -f asdf /dev/sds /dev/sdu /dev/sdl
Run Code Online (Sandbox Code Playgroud)

它工作得很好。

但是,如果我使用 WWN ID,则会收到错误消息,具体取决于我发送的内容:

zpool create -f asdf wwn-0x5000cca2440ba0a0 wwn-0x5000cca2440ba1dc wwn-0x5000cca2440992cc
Run Code Online (Sandbox Code Playgroud)

产量:

cannot create 'asdf': no such pool or dataset
Run Code Online (Sandbox Code Playgroud)

并输入(添加关键字“镜像”):

zpool create -f asdf mirror …
Run Code Online (Sandbox Code Playgroud)

zfs centos zfsonlinux centos7

5
推荐指数
1
解决办法
1499
查看次数

镜像池的 ZFS L2ARC

我正在为我的 ZFS 阅读 L2ARC。我目前有两个池,一个用于数据,另一个用于 Linux 容器和虚拟机。我想要一些有关 L2ARC 的帮助,我知道如何添加它,但想知道它是否对我有益。

我正在运行带有 6-8 个 LXC 容器的 Ubuntu 16.04,有时在 headless-virtualbox 中运行一两个虚拟机,我想知道添加 L2ARC 是否有助于提高我的虚拟机和 LXC 容器的性能。

当前设置

pool: black
state: ONLINE
scan: scrub repaired 0 in 3h57m with 0 errors on Mon Jul 11 04:12:35 2016
config:

    NAME                                          STATE     READ WRITE CKSUM
    black                                         ONLINE       0     0     0
      mirror-0                                    ONLINE       0     0     0
        ata-WDC_WD10JFCX-68N6GN0_WD-WX91A65P0T3Z  ONLINE       0     0     0
        ata-WDC_WD10JFCX-68N6GN0_WD-WXA1EA4CSNJF  ONLINE       0     0     0

errors: No known data errors

pool: raid
state: ONLINE
scan: scrub repaired 0 …
Run Code Online (Sandbox Code Playgroud)

ubuntu zfs storage ssd zfsonlinux

5
推荐指数
1
解决办法
950
查看次数

ZFS:读取好但写入速度差

我负责下载和处理大量财务数据。每个交易日,我们必须添加大约 100GB。

为了处理如此大量的数据,我们从我们大学的数据中心租用了一台虚拟服务器(3 个内核,12 GB 内存)和一个 30 TB 的块设备。

在虚拟机上,我在 Linux 上安装了 Ubuntu 16.04 和 ZFS。然后,我在 30TB 块设备上创建了一个 ZFS 池。使用 ZFS 的主要原因是压缩功能,因为数据可以很好地压缩 (~10%)。请不要对我太苛刻,因为我没有遵循 ZFS 希望看到裸机的黄金法则,我被迫按原样使用基础设施。

发帖的原因是我面临写入速度差的问题。服务器能够以大约 50 MB/s 的速度从块设备读取数据,但写入数据的速度非常慢,大约为 2-4 MB/s。

以下是有关池和数据集的一些信息:

zdb

tank:
version: 5000
name: 'tank'
state: 0
txg: 872307
pool_guid: 8319810251081423408
errata: 0
hostname: 'TAQ-Server'
vdev_children: 1
vdev_tree:
    type: 'root'
    id: 0
    guid: 8319810251081423408
    children[0]:
        type: 'disk'
        id: 0
        guid: 13934768780705769781
        path: '/dev/disk/by-id/scsi-3600140519581e55ec004cbb80c32784d-part1'
        phys_path: '/iscsi/disk@0000iqn.2015-02.de.uni-konstanz.bigdisk%3Asn.606f4c46fd740001,0:a'
        whole_disk: 1
        metaslab_array: 30
        metaslab_shift: 38
        ashift: 9
        asize: 34909494181888
        is_log: 0 …
Run Code Online (Sandbox Code Playgroud)

zfs zfsonlinux

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

在 Ubuntu 16.04 上重新设置 sharenfs 属性之前,不会导出 ZFS 共享

我正在 Ubuntu Server 16.04LTS 上设置 ZFS 和 NFS,但有一个奇怪的问题让我发疯。我已经使用 ZFS 共享设置了 ZFS 和 NFS,如https://pthree.org/2012/12/31/zfs-administration-part-xv-iscsi-nfs-and-samba/ 中所述。正如您在下面的日志中看到的那样,尽管我已将 zfs-share 设置为zfs share -a在引导期间运行,但仍然没有导出共享。更奇怪的是, zfs share -a当我手动运行它时仍然没有。如果我重置sharenfs其中一个共享的属性然后重新运行,我只能让 zfs 共享工作zfs share -a。见下文

$ showmount -e
Export list for apu:
/mnt localhost
$ sudo zfs share -a
$ showmount -e
Export list for apu:
/mnt localhost
$ sudo zfs share pool1
cannot share 'pool1': filesystem already shared
$ sudo zfs get sharenfs pool1
NAME   PROPERTY  VALUE     SOURCE
pool1  sharenfs …
Run Code Online (Sandbox Code Playgroud)

ubuntu zfs nfs zfsonlinux

5
推荐指数
1
解决办法
3317
查看次数

在 Hetzner 专用服务器上的 ZFS 根目录上获取 Ubuntu 16.04

到目前为止,很可能让 Ubuntu 16.04 在 ZFS root-fs 上运行。Ubuntu的16.04已在默认的包管理ZFS,并与像导游这样,它并不难上手。

但是,我见过的所有指南都要求能够从 Ubuntu 安装映像启动。对于 Hetzner 专用服务器,这是一个不常见的安装过程,因为它需要工程师访问服务器并插入远程 KVM。

默认情况下,专用服务器启动进入救援系统,该系统允许通过其“installiamge”脚本安装各种 Linux 发行版。但是,此脚本尚不支持 ZFS。

如何让 Hetzner 专用服务器在 ZFS 根目录上运行?

zfsonlinux hetzner ubuntu-16.04

5
推荐指数
1
解决办法
3604
查看次数

ZFS 池在重新启动时降级

我有一个 Ubuntu 服务器,它设置了一个 14 磁盘的 ZFS raidz2 池。

大约 80% 的时间,在重新启动时,我最终会得到一个降级的池,其中两个磁盘标记为故障。出现故障的驱动器并不总是相同的,但总是恰好是两个驱动器。例如:

$ sudo zpool status
  pool: tank
 state: DEGRADED
status: One or more devices could not be used because the label is missing or
        invalid.  Sufficient replicas exist for the pool to continue
        functioning in a degraded state.
action: Replace the device using 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
  scan: resilvered 4K in 0h0m with 0 errors on Sun Sep 30 23:08:51 2018
config:

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

zfs zpool zfsonlinux ubuntu-18.04

5
推荐指数
1
解决办法
1087
查看次数

Linux 上的 ZFS:每个脚本手动挂载时哪个挂载点选项?

我想在 Debian Buster 上的 Linux (7.13) 上使用 ZFS 创建一个 zpool。问题是池将基于 LUKS 加密驱动器(不是 root,只有外部)创建。这些驱动器在引导期间由我创建的脚本解密和加载,因为它们从外部源提取密钥文件。

为了避免在驱动器被解密和加载之前系统想要挂载 zpool 的时间问题,我想手动挂载池作为脚本的一部分。

现在我问自己在创建池时应该为挂载点选择哪个选项:nonelegacy

手册页并没有真正帮助真正的区别是什么:

如果文件系统的挂载点设置为旧版 ZFS,则不会尝试管理文件系统,管理员负责挂载和卸载文件系统。由于必须先导入池,然后才能成功进行传统挂载,因此管理员应确保仅在 zpool 导入过程在引导时完成后才尝试进行传统挂载。例如,在使用 systemd 的机器上,挂载选项

有人知道真正的区别以及如何以最佳方式稍后通过脚本实现手动安装吗?

debian mount zfsonlinux

5
推荐指数
1
解决办法
921
查看次数

zfs:刷新缓存而不导出

为了进行测试,我需要 zfs 的缓存处于冷状态。

我可以通过删除缓存磁盘、导出和导入池来刷新池中的缓存。这给出了我想要的效果。但真的不想导出池。

有没有更简单的方法来达到同样的效果?

我正在寻找的是相当于:

echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

这满足了我对 ext4 的需求。

背景

我可以用不同的方式运行我的算法。我不关心最好情况下的性能。我确实关心最坏情况下的性能。最坏的情况是冷数据(很久以前接触过的数据,不再存在于 ARC/L2ARC 中)。

为了选择运行算法的最佳方式,我需要能够在相同的测试集上运行。而且这个测试集必须是冷的。这完全违背了 ZFS 的缓存策略:如果我一次又一次地在同一个测试集上运行,它会将数据放入 ARC 中 - 这在正常情况下是完全有意义的,但在这里不是。

我可以在我的开发计算机上导出/导入,但无法在生产中执行此操作。然而,刷新缓存在生产中可以接受的。

我更喜欢 ARC 仍然有效,因此冷数据在读取后会被缓存(再次类似于 ext4),但我可以在测试期间完全禁用 ARC。

zfs-l2arc zfsonlinux

5
推荐指数
1
解决办法
3699
查看次数

升级到 Ubuntu 22 后,ZFS 发送/接收可以帮助我从部分池丢失中恢复吗?

我在 Ubuntu 下有一个长期运行的 ZFS 池,它已经经历了多次升级。从 Ubuntu 20 升级到 22 后,加密的文件系统拒绝挂载,但其余的似乎都正常。 在加密文件系统的根部zpool status -v报告永久错误ZFS-8000-8A 。我注意到 zfsutils-linux 的软件包版本从 0.8.3 到 2.1.5 有一个很大的跳跃。

该池仍然可以导入到 Ubuntu 20 系统,并且加密的文件系统仍然可以安装在那里。看起来还不错。更重要的是,我可以zfs send在 Ubuntu 20 和zfs receiveUbuntu 22 上进行操作,并取得了明显的成功。

如果我将zfs send整个池(或部分操作)从 Ubuntu 20 (ZFS 0.8.3) 升级到 Ubuntu 22 (ZFS 2.1.5) 并且操作成功,我是否会创建一个没有升级问题的池?也就是说,接收操作是否会构建一个与 ZFS 完全同步的池?或者链接是否会出现兼容性问题?

我对 zfs 发送/接收操作的级别了解不够,无法确保在 Ubuntu 22 下不会出现进一步的损坏。

如果有必要,我很乐意重新加密加密的文件系统,而不是发送原始文件。一切都将在本地发生。在本例中,Ubuntu 20 在连接了磁盘设备的 LXD VM 中运行,并且发送/接收管道不跨越任何网络。

请注意,我知道废弃整个池并从备份中恢复它的建议。我正在尝试恢复而不必诉诸于此,因为我似乎能够读取池。

所有磁盘都通过了长时间的 SMART 测试,并且在 Ubuntu 20 下清理池没有显示任何错误。

我很高兴被告知(带有引用)该错误仅限于加密文件系统,我可以替换它们并继续,而无需重建整个池,但我对 ZFS 内部结构了解不够,无法确定那。我很想知道如何找到答案。

zfs data-recovery zfsonlinux ubuntu-22.04

5
推荐指数
1
解决办法
187
查看次数