为什么 ZFS 清理未完成?

Thu*_*r33 18 zfs ubuntu

首先让我们从我正在运行的东西开始。这是一个运行 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 秒的状态...

  pool: Tank
 state: ONLINE
  scan: scrub in progress since Fri Feb 10 14:25:12 2017
    62.5M scanned out of 2.97T at 1.08M/s, (scan is slow, no estimated time)
    0 repaired, 0.00% done
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)

大约一分钟后又来了……

  pool: Tank
 state: ONLINE
  scan: scrub repaired 0 in 0h1m with 0 errors on Fri Feb 10 14:27:01 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)

编辑附加信息 2/16/17

我没时间把“嘈杂”的驱动器送回去,所以我把它拉了出来。我什么也没做,只是拔掉它(当系统启动时)。目前一切都继续正常运行,尽管如预期的那样处于降级状态。我想我会继续在这里记录我的经历,因为我已经开始这样做了。听起来没有其他人有这个问题。我似乎无法在网上找到与此情况相同的其他人。幸运的我。当我拿到替换驱动器和重新同步器时,我们会看到会发生什么。谁知道……也许数据之神会怜悯我,简单地更换驱动器将迫使问题自行解决。:/以下是我断开驱动器后的输出。

  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: scrub repaired 0 in 0h1m with 0 errors on Sun Feb 12 00:24:38 2017
config:

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

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

编辑附加信息 3/29/17

root@NAS:~# zpool status
  pool: Tank
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://zfsonlinux.org/msg/ZFS-8000-9P
  scan: resilvered 525M in 0h3m with 0 errors on Wed Mar 29 14:28:46 2017
config:

        NAME        STATE     READ WRITE CKSUM
        Tank        ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            sdb2    ONLINE       0     0     0
            sdc     ONLINE       0     0   732

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

也许问题的另一个线索?看看sdc的分区...

root@NAS:/dev# parted --list
Model: ATA Samsung SSD 850 (scsi)
Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size    File system     Name                  Flags
 1      1049kB  538MB  537MB   fat32           EFI System Partition  boot, esp
 2      538MB   233GB  232GB   ext4
 3      233GB   250GB  17.1GB  linux-swap(v1)


Warning: Not all of the space available to /dev/sdb appears to be used, you can
fix the GPT to use all of the space (an extra 7 blocks) or continue with the
current setting?
Fix/Ignore? i
Model: ATA HGST HUH728060AL (scsi)
Disk /dev/sdb: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      2097kB  2150MB  2147MB
 2      2150MB  6001GB  5999GB  zfs


Model: ATA HGST HUH728060AL (scsi)
Disk /dev/sdc: 6001GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name                  Flags
 1      1049kB  6001GB  6001GB  zfs          zfs-802af6a53a6d8383
 9      6001GB  6001GB  8389kB
Run Code Online (Sandbox Code Playgroud)

17 年 4 月 13 日编辑附加信息

是的,几个月来我一直在努力解决这个问题:/

首先,在导出/导入驱动器号更改后,请注意 sdb 变为 sdc,sdc 变为 sdd。

我想我发现了这个问题,我想获得有关如何解决它的建议。当我运行“sudo fdisk -l”时终于发现了这个问题。下面是相关的剪辑...

Disk /dev/sdc: 5.5 TiB, 6001175126016 bytes, 11721045168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 7127FE7D-E061-11E6-BD1F-3497F600DDAF

 Device     Start        End       Sectors    Size    Type
/dev/sdc1   4096       4198399     4194304     2G     FreeBSD swap
/dev/sdc2  4198400   11721043967 11716845568  5.5T    FreeBSD ZFS

...

Disk /dev/sdd: 5.5 TiB, 6001175126016 bytes, 11721045168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: E799A1D5-F9B7-C843-AB62-AADC9B0A2180

Device        Start           End         Sectors    Size    Type
/dev/sdd1      2048       11721027583   11721025536  5.5T    Solaris /usr & Apple ZFS
/dev/sdd9  11721027584    11721043967      16384      8M     Solaris reserved 1
Run Code Online (Sandbox Code Playgroud)

请注意:镜像最初是在 FreeNAS (FreeBSD) 中创建的。sdc 在驱动器的开头有一个 2G 交换。sdd 是在 Ubuntu 中创建的,无论出于何种原因,在驱动器的末尾都获得了 8M 的交换空间。

现在,担心问题是驱动器坏了,我离线 sdd 并在其上运行坏块。这会擦除所有信息。好消息是驱动器很好,没有坏块。这也会将分区重置为空。

我有两个选择。1.) 尝试手动将 sdd 的分区与工作驱动器 (sdc) 匹配。尽管我认为 zfs 应该通过仅执行 zpool 替换来自动执行此操作,所以这可能是在浪费时间。2.) 我备份了数据,所以我可以擦除两个驱动器并从头开始,创建一个新镜像,并让它成为本机 Ubuntu 池。

也许这是多虑了,但我认为我会冒更大的破坏和恢复风险。我不得不销毁仅备份在非镜像磁盘上的好数据,然后将其同步回新创建的池。仅供参考,我使用 rsync 创建备份,它在同一台电脑上。我不得不在没有冗余的情况下将 3 个驱动器条带化以容纳其中的所有数据。我也担心像这样移动数据而无法清理它可能会给我带来一些损坏,我永远不会知道。

有人有什么建议吗?谢谢!