在下面的示例中,如何更改第二个镜像中的设备,以便它们引用而/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) Oracle在 2010 年秋季放弃了 OpenSolaris,目前还不清楚 Oracle 是否会继续公开发布 ZFS 的更新,除非他们发布下一个主要版本的 Solaris。
FreeBSD 现在有ZFS v28可供测试。
但是 v28 是从哪里来的呢?我注意到主要的 ZFS 网站没有显示可用的版本 28。这个网站被废弃了吗?如果是这样,ZFS 项目的中央网站在哪里,以便我可以浏览存储库、阅读邮件列表、阅读发行说明等。
(我意识到 OpenSolaris 已被 Oracle 抛弃,并且他们将 ZFS 版本限制在社区中)。
我刚刚升级了 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) 我的印象是,如果在从 ZFS 池读取期间发生 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) 我有一个通用服务器,为许多用户提供邮件、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) 我在 Ubuntu 16.04 上使用 Docker CE,使用 ZFS 作为 Docker 的存储。设置非常标准:
/var/lib/docker。大部分时间一切正常。但是,有时当我的 VM 启动时,zpool 无法挂载。我相信(虽然我不是 100% 确定)这是因为 Docker 服务在 ZFS 文件系统安装之前启动,实际上我看到/var/lib/docker在根 FS 上创建了一个文件夹。
如何确保在挂载所有 ZFS 文件系统之前 Docker 服务不会启动?
我在自动挂载具有嵌套挂载点的单独池时遇到问题。我正在使用 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依赖之类的东西?或者我应该不惜一切代价避免这种嵌套的安装?
遇到写 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) 我有一台装有 8 个磁盘托架的服务器,里面装满了 3 TB 磁盘。使用 4 个镜像 vdev,每个镜像有 2 个磁盘,这为我提供了 12 TB 的冗余存储。
这是问题所在 - 我在某处读到我需要“每 TB 去重数据需要 x GB 的 RAM”(释义)。我愚蠢地认为这意味着如果我的池包含大部分无法重复数据删除的数据,它就不会使用太多 RAM。令我沮丧的是,“重复数据删除”似乎是指池中已启用重复数据删除的所有数据。
结果是我的系统最近开始锁定,大概是由于 RAM 不足,需要重置。当我意识到我的错误时,我想我可以通过创建一个禁用重复数据删除的新数据集来修复它,将我的所有数据复制到新数据集,然后销毁旧数据集。幸运的是,我只填满了大约 35% 的游泳池。在尝试此之前,我禁用了所有数据集的重复数据删除。
不幸的是,每当我尝试从旧数据集中删除某些内容时,我系统上的所有 16 个线程都会变为 100%,并且所有 24 GB 的内存突然被填满(我看到了这一点htop)然后我的系统锁定。
有什么办法可以在不破坏我的整个游泳池并重新开始的情况下将自己挖出这个洞吗?
今天我做了一件非常愚蠢的事情,试图将第三个镜像添加到名为 的现有 Linux zpool 中backup。可以说我犯了几个错误,因为除了每隔几年交换一次磁盘之外,我并没有对 ZFS 进行太多管理。在尝试纠正它们时,我误读了重新创建池的在线建议,并创建了一个新的池backup,从而破坏了现有池。(是的,我-f在它抱怨后使用了该选项。是的,我是个白痴。现在我知道再也不会这样做了。让我们继续吧。)
根据我在网上阅读的内容,我backup“创建”的原始池可能无法恢复。这没什么问题,因为它的命名是backup有原因的——它主要存放我 15 年前的备份。但是,有一些东西最好能恢复(一些非必要的数据我暂时移到那里),还有一些与备份设置有关的东西需要我几天的时间才能重新设置驻留在该卷上。(现在我知道在其他地方备份这些东西,所以这将是一次学习经历。)
但我有我的备份的备份 - 今天我正在更换第三个镜像,以替换几个月前在另一次系统升级(以及操作系统升级)期间删除的驱动器。该驱动器实际上并没有出现故障,但它很旧并且已经开始积累一些坏扇区,所以我想我最好把它拿出来,而不是等待它损坏或其他什么。
不管怎样,我仍然有那个旧驱动器,所以我想我可以将其放回我的系统并从那里恢复池数据。我只会丢失过去几个月的备份数据。现在,我从未正式导出该驱动器或其他任何东西上的池。我已经升级了操作系统,所以我没想到它会自动检测到该驱动器。(我不知道它是否插入同一个 SATA 端口,因为我移动了一些驱动器。)
但该zpool import命令似乎没有自动找到任何内容。使用一些选项,zpool import可以看到(现已被破坏的)backup池的第二个版本,但这只是我在其他两个驱动器上意外创建的空池。
关于如何尝试读取第三个磁盘上的数据有什么建议吗?据我所知,在几个月前我把它从箱子里拿出来之前,它是 ZFS 池的一个功能完美且最新的镜像。尤其:
backup可能会干扰检测并尝试恢复/导入这个旧池的能力吗?有办法解决这个问题吗?create -f命令销毁。但如果有人知道我如何能够直接在那里恢复第一个池,那显然会很棒。感谢您的任何帮助或建议。
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) zfsonlinux ×10
zfs ×9
linux ×2
ubuntu ×2
ubuntu-16.04 ×2
automount ×1
cache ×1
docker ×1
freebsd ×1
hard-drive ×1
illumos ×1
mount ×1
openindiana ×1
performance ×1
zpool ×1