首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么重新启动会导致我的ZFS镜像的一侧变成无效?

为什么重新启动会导致我的ZFS镜像的一侧变成无效?
EN

Server Fault用户
提问于 2014-05-17 15:12:12
回答 1查看 3.1K关注 0票数 14

最近,我将一个大容量数据存储池(Linux0.6.2,Debian上的ZFS)从一个单一设备vdev配置迁移到了一个双向镜像vdev配置。

以前的池配置是:

代码语言:javascript
复制
    NAME                     STATE     READ WRITE CKSUM
    akita                    ONLINE       0     0     0
      ST4000NM0033-Z1Z1A0LQ  ONLINE       0     0     0

在resilver完成之后,一切都很好(我在完成resilver之后启动了一个擦洗程序,只是为了让系统再次检查所有的内容,并确保一切都是好的):

代码语言:javascript
复制
  pool: akita
 state: ONLINE
  scan: scrub repaired 0 in 6h26m with 0 errors on Sat May 17 06:16:06 2014
config:

        NAME                       STATE     READ WRITE CKSUM
        akita                      ONLINE       0     0     0
          mirror-0                 ONLINE       0     0     0
            ST4000NM0033-Z1Z1A0LQ  ONLINE       0     0     0
            ST4000NM0033-Z1Z333ZA  ONLINE       0     0     0

errors: No known data errors

然而,在重新启动后,我收到了一封电子邮件,通知我池不是很好,也不是很好。我看了一眼,这就是我看到的:

代码语言:javascript
复制
   pool: akita
  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: scrub in progress since Sat May 17 14:20:15 2014
     316G scanned out of 1,80T at 77,5M/s, 5h36m to go
     0 repaired, 17,17% done
 config:

         NAME                       STATE     READ WRITE CKSUM
         akita                      DEGRADED     0     0     0
           mirror-0                 DEGRADED     0     0     0
             ST4000NM0033-Z1Z1A0LQ  ONLINE       0     0     0
             ST4000NM0033-Z1Z333ZA  UNAVAIL      0     0     0

 errors: No known data errors

需要检查;在重新启动时,有一个cron作业设置来启动一个完整的系统检查。然而,我绝对没有预料到新的HDD会从镜子中掉下来。

我定义了映射到/dev/ disk /by-id/wwn-*名称的别名,如果这两个磁盘都允许ZFS免费使用完整磁盘,包括处理分区:

代码语言:javascript
复制
# zpool history akita | grep ST4000NM0033
2013-09-12.18:03:06 zpool create -f -o ashift=12 -o autoreplace=off -m none akita ST4000NM0033-Z1Z1A0LQ
2014-05-15.15:30:59 zpool attach -o ashift=12 -f akita ST4000NM0033-Z1Z1A0LQ ST4000NM0033-Z1Z333ZA
# 

以下是/etc/zfs/vdev_id.conf中的相关行(我现在注意到,Z1Z333ZA使用制表符来分隔,而Z1Z1A0LQ行只使用空格,但老实说,这里不知道这有什么关系):

代码语言:javascript
复制
alias ST4000NM0033-Z1Z1A0LQ             /dev/disk/by-id/wwn-0x5000c500645b0fec
alias ST4000NM0033-Z1Z333ZA     /dev/disk/by-id/wwn-0x5000c50065e8414a

当我看的时候,/dev/disk/by-id/wwn-0x5000c50065e8414a*和我期望的一样,但是/dev/disk/by-vdev/ST4000NM0033-Z1Z333ZA*没有。

发出sudo udevadm trigger会导致符号链接出现在/dev/disk/by-vdev中。然而,ZFS似乎并没有意识到它们的存在(Z1Z333ZA仍然显示为UNAVAIL)。我想这是可以预料到的。

我试着更换相关的设备,但没有真正的运气:

代码语言:javascript
复制
# zpool replace akita ST4000NM0033-Z1Z333ZA
invalid vdev specification
use '-f' to override the following errors:
/dev/disk/by-vdev/ST4000NM0033-Z1Z333ZA-part1 is part of active pool 'akita'
# 

在引导过程中检测到两个磁盘(dmesg日志输出显示相关驱动器):

代码语言:javascript
复制
[    2.936065] ata2: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.936137] ata4: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    2.937446] ata4.00: ATA-9: ST4000NM0033-9ZM170, SN03, max UDMA/133
[    2.937453] ata4.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[    2.938516] ata4.00: configured for UDMA/133
[    2.992080] ata6: SATA link up 6.0 Gbps (SStatus 133 SControl 300)
[    3.104533] ata6.00: ATA-9: ST4000NM0033-9ZM170, SN03, max UDMA/133
[    3.104540] ata6.00: 7814037168 sectors, multi 16: LBA48 NCQ (depth 31/32), AA
[    3.105584] ata6.00: configured for UDMA/133
[    3.105792] scsi 5:0:0:0: Direct-Access     ATA      ST4000NM0033-9ZM SN03 PQ: 0 ANSI: 5
[    3.121245] sd 3:0:0:0: [sdb] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
[    3.121372] sd 3:0:0:0: [sdb] Write Protect is off
[    3.121379] sd 3:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    3.121426] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    3.122070] sd 5:0:0:0: [sdc] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB)
[    3.122176] sd 5:0:0:0: [sdc] Write Protect is off
[    3.122183] sd 5:0:0:0: [sdc] Mode Sense: 00 3a 00 00
[    3.122235] sd 5:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA

两个驱动器都直接连接到主板上,不涉及离板控制器。

一时冲动,我做了:

代码语言:javascript
复制
# zpool online akita ST4000NM0033-Z1Z333ZA

这似乎已经奏效了;Z1Z333ZA现在至少是ONLINE,并且正在重新镀银。大约一个小时后,它被扫描180克,银重24G,完成9.77%,这意味着它没有做一个完整的重银,而是只转移数据集增量。

老实说,我不确定这个问题是否与Linux上的ZFS或udev有关(闻起来有点像udev,但为什么会检测到一个驱动器而不是另一个驱动器),但我的问题是如何确保下次重新启动时不会再次发生相同的事情?

如果需要的话,我很乐意提供更多关于设置的数据;只要告诉我需要什么就行了。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2014-05-17 16:20:14

这是一个似乎是特定于Debian和Ubuntu变体的udev问题。我在Linux上的大多数ZFS都是使用CentOS/RHEL的。

ZFS讨论列表中的类似线程已经提到了这一点.

请参见:

/dev/disk/by-id下同一硬盘驱动器的scsi和ata条目

Linux/ Ubuntu上的ZFS :在Ubuntu从13.04升级到13.10之后,帮助导入一个zpool,设备ID已经更改

我不知道Debian/Ubuntu系统中最确定的池设备方法是什么。对于RHEL,我更喜欢在一般的池设备上使用设备WWN。但其他时候,设备名称/串行也很有用。但是udev应该能够控制这一切。

代码语言:javascript
复制
# zpool status
  pool: vol1
 state: ONLINE
  scan: scrub repaired 0 in 0h32m with 0 errors on Sun Feb 16 17:34:42 2014
config:

        NAME                        STATE     READ WRITE CKSUM
        vol1                        ONLINE       0     0     0
          mirror-0                  ONLINE       0     0     0
            wwn-0x500000e014609480  ONLINE       0     0     0
            wwn-0x500000e0146097d0  ONLINE       0     0     0
          mirror-1                  ONLINE       0     0     0
            wwn-0x500000e0146090c0  ONLINE       0     0     0
            wwn-0x500000e01460fd60  ONLINE       0     0     0
票数 11
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/596712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档