标签: zfsonlinux

如何将 zfs 池中的驱动器引用从 /dev/sdX 更改为 /dev/disk/by-id (ata-XXXXXX)

在下面的示例中,如何更改第二个镜像中的设备,以便它们引用而/dev/disk/by-id不是/dev/sdX

user@pc:~$ sudo zpool status
  pool: storage
 state: ONLINE
  scan: scrub repaired 0 in 8h30m with 0 errors on Sun May 28 08:54:48 2017
config:

    NAME                                  STATE     READ WRITE CKSUM
    storage                               ONLINE       0     0     0
      mirror-0                            ONLINE       0     0     0
        ata-ST2000AS0002-1NA12Z_Z840MHWP  ONLINE       0     0     0
        ata-ST2000AS0002-1NA12Z_Z840MHTQ  ONLINE       0     0     0
      mirror-1                            ONLINE       0     0     0
        sdd                               ONLINE       0     0     0
        sde                               ONLINE       0     0     0
Run Code Online (Sandbox Code Playgroud)

linux zfs zfsonlinux ubuntu-16.04

9
推荐指数
2
解决办法
6243
查看次数

ZFS 中心网站现在在哪里?

Oracle在 2010 年秋季放弃了 OpenSolaris,目前还不清楚 Oracle 是否会继续公开发布 ZFS 的更新,除非他们发布下一个主要版本的 Solaris。

FreeBSD 现在有ZFS v28可供测试。

但是 v28 是从哪里来的呢?我注意到主要的 ZFS 网站没有显示可用的版本 28。这个网站被废弃了吗?如果是这样,ZFS 项目的中央网站在哪里,以便我可以浏览存储库、阅读邮件列表、阅读发行说明等。

(我意识到 OpenSolaris 已被 Oracle 抛弃,并且他们将 ZFS 版本限制在社区中)。

freebsd zfs openindiana illumos zfsonlinux

8
推荐指数
2
解决办法
1822
查看次数

升级 Ubuntu,一个 zpool 中的所有驱动器都标记为不可用

我刚刚升级了 Ubuntu 14.04,服务器上有两个 ZFS 池。我在使用 ZFS 驱动程序和内核版本时遇到了一些小问题,但现在已经解决了。一个池上线,安装良好。另一个没有。该工具之间的主要区别是一个只是磁盘池(视频/音乐存储),另一个是 raidz 集(文档等)

我已经尝试导出和重新导入池,但无济于事,尝试导入让我得到这个:

root@kyou:/home/matt# zpool import -fFX -d /dev/disk/by-id/
   pool: storage
     id: 15855792916570596778
  state: UNAVAIL
 status: One or more devices contains corrupted data.
 action: The pool cannot be imported due to damaged devices or data.
   see: http://zfsonlinux.org/msg/ZFS-8000-5E
 config:

        storage                                      UNAVAIL  insufficient replicas
          raidz1-0                                   UNAVAIL  insufficient replicas
            ata-SAMSUNG_HD103SJ_S246J90B134910       UNAVAIL
            ata-WDC_WD10EARS-00Y5B1_WD-WMAV51422523  UNAVAIL
            ata-WDC_WD10EARS-00Y5B1_WD-WMAV51535969  UNAVAIL
Run Code Online (Sandbox Code Playgroud)

那些的符号链接/dev/disk/by-id也存在:

root@kyou:/home/matt# ls -l /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910* /dev/disk/by-id/ata-WDC_WD10EARS-00Y5B1_WD-WMAV51*
lrwxrwxrwx 1 root root  9 May 27 19:31 /dev/disk/by-id/ata-SAMSUNG_HD103SJ_S246J90B134910 -> ../../sdb
lrwxrwxrwx 1 …
Run Code Online (Sandbox Code Playgroud)

ubuntu zfsonlinux

8
推荐指数
2
解决办法
2443
查看次数

为什么 ZFS 不对我的磁盘的 duff 扇区做任何事情?

我的印象是,如果在从 ZFS 池读取期间发生 I/O 错误,则会发生两件事:

  1. 故障将记录在相关设备的 READ 或 CKSUM 统计信息中,向上传播到池级别。
    • 冗余数据将用于重建请求的块,将请求的块返回给调用者,如果 duff 驱动器仍然可用,则将块重写到它,或者
    • 如果冗余数据不可用于纠正读取错误,则将返回 I/O 错误。

我的镜像设置中的一个磁盘似乎出现了坏扇区。这本身并不令人担忧;这样的事情发生了,这就是为什么我有冗余(准确地说是双向镜像)。每次我清理池或读取特定目录中的文件时(我还没有费心确定哪个文件有问题),dmesg 中会弹出以下内容,显然具有不同的时间戳:

Nov  1 09:54:26 yeono kernel: [302621.236549] ata6.00: exception Emask 0x0 SAct 0x9c10 SErr 0x0 action 0x0
Nov  1 09:54:26 yeono kernel: [302621.236557] ata6.00: irq_stat 0x40000008
Nov  1 09:54:26 yeono kernel: [302621.236566] ata6.00: failed command: READ FPDMA QUEUED
Nov  1 09:54:26 yeono kernel: [302621.236578] ata6.00: cmd 60/a8:78:18:5a:12/00:00:5c:01:00/40 tag 15 ncq 86016 in
Nov  1 09:54:26 yeono kernel: [302621.236580]          res 41/40:a8:18:5a:12/00:00:5c:01:00/00 Emask 0x409 …
Run Code Online (Sandbox Code Playgroud)

zfs debian-wheezy zfsonlinux

8
推荐指数
1
解决办法
600
查看次数

几个月后 ZFS 极度减速

我有一个通用服务器,为许多用户提供邮件、DNS、Web、数据库和一些其他服务。

它有一个 3.40 GHz 的 Xeon E3-1275,16 GB ECC RAM。运行 Linux 内核 4.2.3,带有 ZFS-on-Linux 0.6.5.3。

磁盘布局为 2 个希捷 ST32000641AS 2 TB 驱动器和 1 个三星 840 Pro 256 GB SSD

我在 RAID-1 镜像中有 2 个 HD,而 SSD 充当缓存和日志设备,所有这些都在 ZFS 中进行管理。

当我第一次设置系统时,它的速度非常快。没有真正的基准,只是......快。

现在,我注意到速度非常慢,尤其是在保存所有邮件目录的文件系统上。对于仅 46 GB 的邮件,进行每晚备份需要 90 多分钟。有时,备份会导致如此极端的负载,以致系统在长达 6 小时内几乎没有响应。

在这些减速期间,我已经运行zpool iostat zroot(我的池名为zroot),并且看到写入速度为 100-200kbytes/sec。没有明显的 IO 错误,磁盘似乎没有特别努力地工作,但读取速度几乎无法使用。

奇怪的是,我在不同的机器上有完全相同的体验,具有类似规格的硬件,虽然没有 SSD,但运行 FreeBSD。它工作了好几个月,然后以同样的方式变慢。

我的怀疑是:我使用zfs-auto-snapshot来创建每个文件系统的滚动快照。它创建 15 分钟、每小时、每天和每月的快照,并保留一定数量的快照,删除最旧的快照。这意味着随着时间的推移,在每个文件系统上创建和销毁了数千个快照。这是我能想到的唯一具有累积效应的正在进行的文件系统级操作。我尝试销毁所有快照(但保持进程运行,创建新快照),并没有发现任何变化。

不断创建和销毁快照有问题吗?我发现拥有它们是一个非常有价值的工具,并且被引导相信它们(除了磁盘空间)或多或少是零成本的。

还有其他可能导致此问题的原因吗?

编辑:命令输出

的输出zpool list

NAME    SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP …
Run Code Online (Sandbox Code Playgroud)

performance zfs hard-drive zfsonlinux

8
推荐指数
1
解决办法
3268
查看次数

Docker 服务在 ZFS 之前启动

我在 Ubuntu 16.04 上使用 Docker CE,使用 ZFS 作为 Docker 的存储。设置非常标准:

  1. 有一个 zpool 有多个磁盘
  2. 在 zpool 上,有一个带有 mountpoint 的 zfs 文件系统/var/lib/docker
  3. Docker 看到文件系统是 ZFS,并自动使用它

大部分时间一切正常。但是,有时当我的 VM 启动时,zpool 无法挂载。我相信(虽然我不是 100% 确定)这是因为 Docker 服务在 ZFS 文件系统安装之前启动,实际上我看到/var/lib/docker在根 FS 上创建了一个文件夹。

如何确保在挂载所有 ZFS 文件系统之前 Docker 服务不会启动?

ubuntu zfs zfsonlinux docker ubuntu-16.04

8
推荐指数
1
解决办法
3153
查看次数

zfs - 具有嵌套挂载点和冲突挂载顺序的两个池

我在自动挂载具有嵌套挂载点的单独池时遇到问题。我正在使用 ZfsOnLinux 0.6.2。

目前情况如下:

zpool1      ---> /var
zpool1/log  ---> /var/log
zpool1/mail ---> /var/mail
Run Code Online (Sandbox Code Playgroud)

现在我需要为 db 添加一个单独的 zpool。为了保持目录层次结构一致,我想到了这个:

zpool2      ---> /var/db
Run Code Online (Sandbox Code Playgroud)

现在,问题是当首先挂载 zpool2 时,zpool1 挂载失败(这是合乎逻辑的)。

除了使用传统的挂载选项之外,有没有一种方法可以强制池的挂载顺序以允许在 zpool1 中挂载 zpool2?像zpools依赖之类的东西?或者我应该不惜一切代价避免这种嵌套的安装?

zfs mount automount zfsonlinux

7
推荐指数
2
解决办法
4413
查看次数

Linux ZFS 不缓冲写入写入缓冲区 (SLOG/ZIL)?

遇到写 I/O 时,日志列中zpool iostat -v永远不会显示任何 ZIL 活动。这导致将数据写入磁盘时的等待时间高于预期(有时在争用期间超过 80 毫秒)。

                     capacity     operations    bandwidth
    pool              alloc   free   read  write   read  write
----------------  -----  -----  -----  -----  -----  -----  
storage           1.88T  2.09T      3  3.01K   512K  39.3M
  mirror           961G  1.05T      0  1.97K   128K  20.8M
    mpathf            -      -      0    393      0  20.8M
    mpathg            -      -      0    391   128K  20.6M
  mirror           961G  1.05T      2  1.04K   384K  18.5M
    mpathi            -      -      1    379   256K  21.1M
    mpathj            -      -      0    281   128K  18.3M
logs                  -      - …
Run Code Online (Sandbox Code Playgroud)

linux zfs cache zfsonlinux

7
推荐指数
1
解决办法
5441
查看次数

如何在不耗尽 RAM 的情况下从池中删除重复数据删除?

我有一台装有 8 个磁盘托架的服务器,里面装满了 3 TB 磁盘。使用 4 个镜像 vdev,每个镜像有 2 个磁盘,这为我提供了 12 TB 的冗余存储。

这是问题所在 - 我在某处读到我需要“每 TB 去重数据需要 x GB 的 RAM”(释义)。我愚蠢地认为这意味着如果我的池包含大部分无法重复数据删除的数据,它就不会使用太多 RAM。令我沮丧的是,“重复数据删除”似乎是指池中已启用重复数据删除的所有数据。

结果是我的系统最近开始锁定,大概是由于 RAM 不足,需要重置。当我意识到我的错误时,我想我可以通过创建一个禁用重复数据删除的新数据集来修复它,将我的所有数据复制到新数据集,然后销毁旧数据集。幸运的是,我只填满了大约 35% 的游泳池。在尝试此之前,我禁用了所有数据集的重复数据删除。

不幸的是,每当我尝试从旧数据集中删除某些内容时,我系统上的所有 16 个线程都会变为 100%,并且所有 24 GB 的内存突然被填满(我看到了这一点htop)然后我的系统锁定。

有什么办法可以在不破坏我的整个游泳池并重新开始的情况下将自己挖出这个洞吗?

zfs zfsonlinux

7
推荐指数
1
解决办法
1686
查看次数

恢复/导入具有重复池名称的 ZFS Linux 池

今天我做了一件非常愚蠢的事情,试图将第三个镜像添加到名为 的现有 Linux zpool 中backup。可以说我犯了几个错误,因为除了每隔几年交换一次磁盘之外,我并没有对 ZFS 进行太多管理。在尝试纠正它们时,我误读了重新创建池的在线建议,并创建了一个新的池backup,从而破坏了现有池。(是的,我-f在它抱怨后使用了该选项。是的,我是个白痴。现在我知道再也不会这样做了。让我们继续吧。)

根据我在网上阅读的内容,我backup“创建”的原始池可能无法恢复。这没什么问题,因为它的命名是backup有原因的——它主要存放我 15 年前的备份。但是,有一些东西最好能恢复(一些非必要的数据我暂时移到那里),还有一些与备份设置有关的东西需要我几天的时间才能重新设置驻留在该卷上。(现在我知道在其他地方备份这些东西,所以这将是一次学习经历。)

但我有我的备份的备份 - 今天我正在更换第三个镜像,以替换几个月前在另一次系统升级(以及操作系统升级)期间删除的驱动器。该驱动器实际上并没有出现故障,但它很旧并且已经开始积累一些坏扇区,所以我想我最好把它拿出来,而不是等待它损坏或其他什么。

不管怎样,我仍然有那个旧驱动器,所以我想我可以将其放回我的系统并从那里恢复池数据。我只会丢失过去几个月的备份数据。现在,我从未正式导出该驱动器或其他任何东西上的池。我已经升级了操作系统,所以我没想到它会自动检测到该驱动器。(我不知道它是否插入同一个 SATA 端口,因为我移动了一些驱动器。)

但该zpool import命令似乎没有自动找到任何内容。使用一些选项,zpool import可以看到(现已被破坏的)backup池的第二个版本,但这只是我在其他两个驱动器上意外创建的空池。

关于如何尝试读取第三个磁盘上的数据有什么建议吗?据我所知,在几个月前我把它从箱子里拿出来之前,它是 ZFS 池的一个功能完美且最新的镜像。尤其:

  1. 事实上,有一个被破坏的池backup可能会干扰检测并尝试恢复/导入这个旧池的能力吗?有办法解决这个问题吗?
  2. 我的服务器上仍然安装有旧操作系统,我相信该操作系统在我使用旧磁盘时正在运行。我尝试启动它只是为了看看它是否可以检测到 ZFS 池,但它没有。(同样,驱动器可能没有插入到同一个位置。)但是是否有任何 ZFS 日志文件或我可以提取的其他内容可能包含旧池的元数据或 ID 号或我可以提取的内容?是否可以强制 ZFS 导入该驱动器上完整的镜像?
  3. 我只是假设前两个磁盘上的池已通过create -f命令销毁。但如果有人知道我如何能够直接在那里恢复第一个池,那显然会很棒。
  4. ZFS 无法将旧的第三个镜像检测为 ZFS 池磁盘还有其他原因吗?如果是的话,还有其他建议吗?我可以尝试其他恢复工具吗?

感谢您的任何帮助或建议。

zdb -l /dev/sdb1编辑:这是(这是第三个驱动器)的输出

------------------------------------
LABEL 0
------------------------------------
    version: 5000
    name: 'backup'
    state: 0
    txg: 0
    pool_guid: 3936176493905234028
    errata: 0
    hostid: …
Run Code Online (Sandbox Code Playgroud)

zfs data-recovery zpool zfsonlinux

7
推荐指数
0
解决办法
1326
查看次数