Два устройства с одинаковым именем в zpool не могут заменить
Сегодня я нашел это на сервере (FreeBSD 8.2 STABLE):
NAME STATE READ WRITE CKSUM
data DEGRADED 1.38K 0 0
raidz1-0 DEGRADED 1.38K 0 0
ad10 ONLINE 1.38K 0 0
ad12 ONLINE 0 0 0
ad14 ONLINE 0 0 0
ad16 REMOVED 0 0 0
Я быстро снял не тот жесткий диск и вставил новый. После этого я набрал эту неудачливую команду:
zpool add data ad16
В результате в пуле появилось новое устройство ad16:
NAME STATE READ WRITE CKSUM
data DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
ad10 ONLINE 0 0 0
ad12 ONLINE 0 0 0
ad14 ONLINE 0 0 0
ad16 FAULTED 0 0 0 corrupted data
ad16 ONLINE 0 0 0
Первое устройство ad16 неисправно и является частью тома data/raidz1-0. Второе устройство ad16 является онлайн, а не частью какого-либо объема. Проблема в том, что они имеют одинаковое имя, поэтому команда replace не работает:
gw# zpool replace -f data ad16 ad16
invalid vdev specification
the following errors must be manually repaired:
/dev/ad16 is part of active pool 'data'
Я думаю, что мне следует удалить диск ONLINE ad16, прежде чем я смогу заменить диск FAULTED ad16. Но это не работает, потому что я не могу ни отключить его, ни удалить:
gw# zpool offline data ad16
gw# zpool status
pool: data
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a
degraded state.
action: Online the device using 'zpool online' or replace the device with
'zpool replace'.
scan: scrub in progress since Thu Apr 18 03:23:06 2013
26.1G scanned out of 3.13T at 50.7M/s, 17h52m to go
0 repaired, 0.81% done
config:
NAME STATE READ WRITE CKSUM
data DEGRADED 0 0 0
raidz1-0 DEGRADED 0 0 0
ad10 ONLINE 0 0 0
ad12 ONLINE 0 0 0
ad14 ONLINE 0 0 0
ad16 OFFLINE 0 0 0
ad16 ONLINE 0 0 0
errors: No known data errors
gw# zpool remove data ad16
cannot remove ad16: only inactive hot spares, cache, top-level, or log devices can be removed
Я предполагаю, что команда "offline ad16" нацелена на неисправное устройство. Но я хотел бы отключить другой. Я также попытался загрузить систему в однопользовательском режиме с удалением этого нового диска, но это привело к тому, что оба устройства ad16 были UNAVAIL, и весь пул был непригоден для использования (что странно, потому что дисков достаточно для его работы)..)
2 ответа
Команда zpool add предназначена для добавления новых устройств (vdevs) в пулы. Когда вы изначально выполняли эту команду, вы добавили в пул новый vdev (состоящий только из ad16). Вы начали с 4-х дискового raidz, с одним неисправным диском, но теперь у вас есть пул, в котором данные чередуются между raidz и ad16. Потеря этого ONLINE ad16 диска приведет к отказу всего пула.
Поскольку сейчас невозможно удалить ad16 (вы не можете удалить vdev из пула), и я сомневаюсь, что вы хотите, чтобы ваши данные чередовались между 4-дисковым raidz и одним диском, я не думаю, что стоит потратить ваше время на попытки сортировки из этого неисправного диска. Вы бы лучше посмотрели, как перенести свои данные в отдельный пул / диск / сервер и уничтожить / воссоздать этот пул.
Предложение: Ссылка на базовое устройство по UUID против логического имени.