最近清理我的 ZFS 池时发现了一个错误:

$ zpool status -v rpool
  pool: rpool
 state: ONLINE
status: One or more devices has experienced an error resulting in data
        corruption.  Applications may be affected.
action: Restore the file in question if possible.  Otherwise restore the
        entire pool from backup.
   see: https://openzfs.github.io/openzfs-docs/msg/ZFS-8000-8A
  scan: scrub repaired 0B in 04:48:04 with 1 errors on Thu Oct 24 14:07:21 2024
config:

        NAME                                            STATE     READ WRITE CKSUM
        rpool                                           ONLINE       0     0     0
          raidz1-0                                      ONLINE       0     0     0
            wwn-0x50014ee216641349-part2                ONLINE       0     0     2
            wwn-0x50014ee216620a52-part2                ONLINE       0     0     2
            wwn-0x50014ee2c1015982-part2                ONLINE       0     0     2
          raidz1-1                                      ONLINE       0     0     0
            ata-WDC_WD3000FYYZ-01UL1B1_WD-WCC1F0293326  ONLINE       0     0     0
            ata-WDC_WD30EZRZ-00Z5HB0_WD-WCC4N2ZYKAKR    ONLINE       0     0     0
            ata-WDC_WD30EZRZ-60Z5HB0_WD-WCC4N0SFH6JA    ONLINE       0     0     0
        logs
          ata-CT500MX500SSD1_2344E8835E4F-part1         ONLINE       0     0     0
        cache
          sdi2                                          ONLINE       0     0     0

errors: Permanent errors have been detected in the following files:

        rpool/[DATASET]@autosnap_2024-09-30_23:30:07_weekly:[FILEPATH]

(注意:实际的文件系统和文件路径出于隐私原因已被删除,但快照名称是真实的。)

显然,错误出现在“autosnap_2024-09-30_23:30:07_weekly”快照中。但是,由于 ZFS 是写时复制的,并且此文件可能在一段时间内没有更改,因此我预计此错误也存在于其他快照中存在的此文件版本中。但是,该zpool status命令没有给我任何提示。我可以做些什么来确定哪些快照中有损坏的文件副本,哪些没有?

2

  • 该文件及其内容的版本是否存在于任何其他快照或实际文件系统本身中?我觉得有点奇怪的是,如果这个包含这些内容的文件存在于这个快照之外,那么这些快照也不会显示相同的损坏。


    – 

  • @AndrewHenle 这正是我要问的问题。或者说,我要问如何确定答案。


    – 


最佳答案
2

删除包含输出中列出的错误的文件。

我认为不需要采取任何其他行动。

1

  • 我已经从备份中恢复了受影响的文件,但我仍然想知道是否有办法确定多个快照中的哪些包含损坏的文件,哪些不包含。(此外,当前的非快照数据集是否包含损坏的文件。)


    – 


tar cf – rpool/[DATASET]@autosnap_2024-09-30_23:30:07_weekly:[FILEPATH] |cat – >/dev/null 将向您显示无法读取的文件。

1

  • 这将向我显示是否可以在特定快照中读取该文件。您是说我应该对每个快照运行此命令或其他读取整个文件的命令来确定哪些是可读的吗?


    –