Linux 上的 ZFS“池中没有这样的设备”

Linux 上的 ZFS“池中没有这样的设备”

我有一个池,其中包含一个只有少量错误的光盘。我想清除这些错误,看看在购买新光盘之前它们是否再次出现:

me@server:/$ sudo zpool status tank
  pool: tank
 state: DEGRADED
status: One or more devices are faulted in response to persistent errors.
        Sufficient replicas exist for the pool to continue functioning in a
        degraded state.
action: Replace the faulted device, or use 'zpool clear' to mark the device
        repaired.
  scan: scrub repaired 0 in 7h1m with 0 errors on Sat May 24 20:44:13 2014
config:

        NAME                                            STATE     READ WRITE CKSUM
        tank                                            DEGRADED     0     0     0
          raidz2-0                                      DEGRADED     0     0     0
            ata-ST3000DM001-1CH166_Z1F1HTEW             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1HDXJ             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1J33Y             FAULTED      9     1     0  too many errors
            ata-ST3000DM001-1CH166_Z1F1HM7F             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1HE23             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F175HQ             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1K3TV             ONLINE       0     0     0
            ata-ST3000DM001-1CH166_Z1F1D1XR             ONLINE       0     0     0
        logs
          ata-SSD2SC120GS4DH08B-T_PNY10130000139160634  ONLINE       0     0     0
        cache
          ata-SSD2SC120GS4DH08B-T_PNY10130000139160672  ONLINE       0     0     0

errors: No known data errors

guid我使用以下命令获取了有问题的磁盘zdb

zpool offline tank 12956315685006632708

我清除了错误:

zpool clear tank 12956315685006632708

然后我尝试将光盘联机,但看到以下内容:

zpool online tank 12956315685006632708
cannot online 12956315685006632708: no such device in pool

ata-ST3000DM001-1CH166_Z1F1J33Y我尝试用和替换 GUID /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F1J33Y,但得到的结果相同。

我也尝试使用replace带有上述所有标识符的命令,但没有成功。

我读过有关cfgadm可能需要运行以“取消配置/重新配置”光盘的命令,但它似乎不适用于 Ubuntu。

我如何让该光盘重新上线?

答案1

在以下机构的帮助下这个问题及其答案我能够让它工作(目前正在重新同步)。对于任何阅读本文的 ZFS 开发人员来说,更换磁盘的操作应该变得更加容易/完整(和万无一失)。在初始设置之后,在足够长的时间范围内,每个 ZFS 用户最终必须执行的唯一操作就是更换磁盘。但我离题了。

就我而言,我并不想更换驱动器,我只想清除其故障并使其无故障地重新上线,这样我就可以确定光盘是否真的需要更换。我想要这样做的理由是 1.) 系统已经运行了近一年而没有重新启动,因此位腐烂是可能的 2.) 错误数量相当少。

对我来说,诀窍似乎是从有问题的磁盘中删除分区。首先,我需要确定要对哪个设备进行操作。您可以使用 通过使用 的排除法来确定这一点zdb,但我过去lshw常常一次获得所需的所有信息。基本上,我想将设备zpool status告诉我的故障与某个/dev/sdX设备关联起来(如果您不熟悉,less只需使用向上/向下键显示更多/更少,然后使用q键退出)。

root@server:/# lshw|less
...
              *-disk:2
                   description: ATA Disk
                   product: ST3000DM001-1CH1
                   vendor: Seagate
                   physical id: 0.2.0
                   bus info: scsi@0:0.2.0
                   logical name: /dev/sdd
                   version: CC24
                   serial: Z1F1J33Y
                   size: 2794GiB (3TB)
                   capacity: 2794GiB (3TB)
                   capabilities: 15000rpm gpt-1.00 partitioned partitioned:gpt
                   configuration: ansiversion=6 guid=52d25a12-120a-1c40-92a1-0be436c2d642 sectorsize=4096
                 *-volume:0
                      description: OS X ZFS partition or Solaris /usr partition
                      vendor: Solaris
                      physical id: 1
                      bus info: scsi@0:0.2.0,1
                      logical name: /dev/sdd1
                      serial: f25724a4-dd55-764c-af34-9479521854b9
                      capacity: 2794GiB
                      configuration: name=zfs
                 *-volume:1
                      description: reserved partition
                      vendor: Solaris
                      physical id: 9
                      bus info: scsi@0:0.2.0,9
                      logical name: /dev/sdd9
                      serial: 89eeeedb-e3a0-4940-8a50-d3d7506ad603
                      capacity: 8191KiB
...

在这里我可以看到这/dev/sdd就是我想要的磁盘。然后我从该磁盘中删除了分区:

root@server:/# fdisk -l /dev/sdd

然后只需按照屏幕上的提示删除分区即可。 这里是一个很好的指南。之后以下命令终于起作用了:

root@server:/# zpool replace tank 12956315685006632708 /dev/disk/by-id/ata-ST3000DM001-1CH166_Z1F1J33Y

(那个guid长数字)是使用zdb命令获得的。我思考最后我可能能够使用命令online代替replace,但我没有尝试过。

相关内容