为什么 ZFS 清理未完成?

为什么 ZFS 清理未完成?

首先让我们从我正在运行的内容开始。这是运行 Ubuntu 16.10 的家庭媒体服务器。我有一个 6 TB 镜像驱动器池,大约已满一半。我大约一个月前构建了该系统,并且运行良好。它使用 SSD 作为启动驱动器,并使用上述池作为存储。我已经能够用这个泳池做我需要做的一切,一切看起来都很棒。

大约一个月前,当我构建系统时,这两个驱动器都是新的,我对其中一个的额外振动有点好奇。没什么不好,但供应商说他会免费更换它,所以我打算运行一次擦洗并将其拉出来发送进去,在等待期间以降级状态运行。上面没有未备份的数据,所以我并不是很担心,但显然,与杀死池并从备份恢复相比,这样做会更容易。

我现在真正想做的就是运行擦洗并安全地将一个驱动器与镜像分离。我跑

zpool scrub tank

然后立即运行

zpool status

我可以看到磨砂过程正在发生。我可以每隔几秒钟运行一次更新,并看到它更新状态就好了。它运行大约 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

我现在再次尝试擦洗,以确保问题仍然存在。这是我开始后大约 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

大约一分钟后又出现了……

  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

于 2017 年 2 月 16 日编辑添加信息

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

  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

于 2017 年 3 月 29 日编辑添加信息

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

也许是问题的另一个线索?看看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

于 2017 年 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

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

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

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

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

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

相关内容