我有一个池,其中包含一个只有少量错误的光盘。我想清除这些错误,看看在购买新光盘之前它们是否再次出现:
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
,但我没有尝试过。