РЕДАКТИРОВАТЬ: (см. Конец этого вопроса) после дополнительных исследований, похоже, это проблема с системным USB, а не с ZFS, из-за которой диски сбрасываются. Я оставлю этот вопрос для потомков, потому что мне все еще любопытно, есть ли ответ, но тем временем, если у людей есть совет насильственного удаления USB-устройств FreeBSD, я все уши!
Подойдите к этому вопросу с чувством юмора, а не просто отрицайте, потому что это плохая идея, иногда (очень редко!) пользователь полностью нормально с потерей данных и ему просто нужна помощь в заряжании ножного ружья! В конце концов, ZFS предоставляет другие преимущества, помимо целостности данных, и я все равно предпочитаю использовать ее для своих плохих дисков, чем ext4
. Если вы относитесь к тому типу системного администратора, который читает это с хитрой улыбкой и помнит время, когда они потеряли данные, делая именно это, этот вопрос для вас.
Я использую пул с некоторыми USB-накопителями на некритичном сервере с некритическими данными, и мне все равно, если он будет поврежден. Я пытаюсь настроить его так, чтобы ZFS не извлекала USB-накопители принудительно, когда на них возникают ошибки контрольной суммы (точно так же, как ext4 или FAT обрабатывают этот сценарий, не замечая / не заботясь о потере данных).
Читателям, попадающим сюда через Google, пытающимся исправить свой пул ZFS, не пытайтесь ничего описанного в этом вопросе или ответах на него, вы потеряете свои данные!
Поскольку полиция ZFS любит кричать на людей, которые используют USB-накопители или имеют любую другую нестандартную настройку: для этого обсуждения предположим, что это видео с кошками, которые я скопировал в 32 других физически удаленных местах на 128 избыточных SSD. Я полностью осознаю, что я проиграет 100% моих данных в этом пуле безвозвратно (много раз), если я попытаюсь это сделать. Я задаю этот вопрос людям, которым интересно как плохо среда, в которой ZFS может работать (люди, которые любят доводить системы до предела прочности и выше, просто для удовольствия).
hdd
с двумя приводами (с failmode=continue
устанавливать)Я подтвердил, что ненадежный привод связан с программным обеспечением или аппаратной проблемой с шиной USB на сервере, а не с ненадежным кабелем или физической проблемой с приводом. Я подтвердил это, подключив его к своему MacBook с заведомо исправными портами USB, обнулив, а затем записав случайные данные на весь диск и проверив их (выполняется 3 раза, каждый раз 100% успех). Накопитель практически новый, у всех других индикаторов SMART работоспособность ниже 100%. Однако, даже если привод постепенно выходил из строя и терял кое-какие биты здесь и там, меня это устраивает.
Всякий раз, когда у плохого диска есть ошибки контрольной суммы, ZFS удаляет его из пула (Edit: это оказалось неправильным предположением, система его выгнала, а не ZFS). К сожалению, FreeNAS не позволяет мне повторно добавить его в пул без физической перезагрузки или отключения и повторного подключения обоих USB-кабелей, и источник питания привода. Это означает, что я не могу написать сценарий для процесса повторного добавления или сделать это удаленно без перезагрузки всего сервера, мне нужно было физически присутствовать, чтобы отключить что-либо, или иметь подключенный к Интернету Arduino и реле, подключенные к обоим кабелям.
Я уже провел довольно много исследований о том, возможно ли подобное, и это было сложно, потому что каждый раз, когда я нахожу соответствующую тему, полиция целостности данных вмешивается и убеждает спрашивающего отказаться от своей ненадежной настройки вместо того, чтобы игнорировать ошибки или как их обойти. Я прибегаю к этому вопросу, потому что не смог найти документацию или другие ответы о том, как это сделать.
zfs set checksum=off hdd
, Я еще не сделал этого, потому что в идеале я хотел бы сохранить контрольные суммы, чтобы я знал, когда диск работает неправильно, я просто хочу игнорировать сбоиzpool clear hdd
в цикле каждые 500 мс для очистки ошибок контрольной суммы до того, как они достигнут порогаhw.usb.xhci.use_polling=1
чтобы исправить сбой повторного подключения USB после отключения, но пока нет окончательных результатовЯ действительно стараюсь не прибегать к использованию ext4
или другая файловая система, которая не извлекает диски принудительно после ошибок USB, потому что мне нужны все другие функции ZFS, такие как снимки, наборы данных, отправка / получение и т.д., я просто пытаюсь игнорировать / исправлять ошибки целостности данных без отключения дисков.
Это dmesg
выводить каждый раз, когда диск работает неправильно и его удаляют
Jul 7 04:10:35 freenas-lemon ZFS: vdev state changed, pool_guid=13427464797767151426 vdev_guid=11823196300981694957
Jul 7 04:10:35 freenas-lemon ugen0.8: <Western Digital Elements 25A3> at usbus0 (disconnected)
Jul 7 04:10:35 freenas-lemon umass4: at uhub2, port 20, addr 7 (disconnected)
Jul 7 04:10:35 freenas-lemon da4 at umass-sim4 bus 4 scbus7 target 0 lun 0
Jul 7 04:10:35 freenas-lemon da4: <WD Elements 25A3 1021> s/n 5641474A4D56574C detached
Jul 7 04:10:35 freenas-lemon (da4:umass-sim4:4:0:0): Periph destroyed
Jul 7 04:10:35 freenas-lemon umass4: detached
Jul 7 04:10:46 freenas-lemon usbd_req_re_enumerate: addr=9, set address failed! (USB_ERR_IOERROR, ignored)
Jul 7 04:10:52 freenas-lemon usbd_setup_device_desc: getting device descriptor at addr 9 failed, USB_ERR_TIMEOUT
Jul 7 04:10:52 freenas-lemon usbd_req_re_enumerate: addr=9, set address failed! (USB_ERR_IOERROR, ignored)
Jul 7 04:10:58 freenas-lemon usbd_setup_device_desc: getting device descriptor at addr 9 failed, USB_ERR_TIMEOUT
Jul 7 04:10:58 freenas-lemon usb_alloc_device: Failure selecting configuration index 0:USB_ERR_TIMEOUT, port 20, addr 9 (ignored)
Jul 7 04:10:58 freenas-lemon ugen0.8: <Western Digital Elements 25A3> at usbus0
Jul 7 04:10:58 freenas-lemon ugen0.8: <Western Digital Elements 25A3> at usbus0 (disconnected)
Это zpool status hdd
вывод после того, как неисправный диск был выгнан.
pool: hdd
state: DEGRADED
status: One or more devices has been removed 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 repaired 0 in 0 days 00:53:45 with 0 errors on Sun Jul 7 17:19:41 2019
config:
NAME STATE READ WRITE CKSUM
hdd DEGRADED 0 0 0
mirror-0 DEGRADED 0 0 0
gptid/6a8016b8-a08d-11e9-8e1c-ecb1d765a86d ONLINE 0 0 0
11823196300981694957 REMOVED 0 0 0 was /dev/gptid/6c3950c1-a08d-11e9-8e1c-ecb1d765a86d
errors: No known data errors
Редактировать:
После некоторого рытья, похоже, что другие люди тоже испытали такую ошибку. Похоже, это либо ошибка ядра, либо аппаратная / программная проблема USB с некоторыми дисками, а не проблема на уровне ZFS. Система пинает d rives, что затем вызывает ошибки контрольной суммы ZFS, а не наоборот. ZFS не имеет проблем с повторным импортом дисков после перезагрузки, с радостью исправляет ошибки и не сообщает о потере данных. Проблемы с USB могут быть связаны с функциями управления питанием или другими командами USB, которые не поддерживаются на накопителе, но я все еще скептически отношусь к этому, потому что эти два накопителя практически идентичны накопителям WD Elements, купленным с разницей в год. Я не знаю, как это исправить, так как camcontrol rescan all
даже не обнаруживает подключенное USB-устройство после его отключения, действительно требуется полная перезагрузка и часто полное выключение и выключение питания внешнего диска к тому же до перезагрузки.
dmesg
вывод при отказе:
ugen0.8: <Western Digital Elements 25A3> at usbus0 (disconnected)
umass4: at uhub0, port 20, addr 7 (disconnected)
(da4:umass-sim4:4:0:0): READ(10). CDB: 28 00 42 78 cd 98 00 01 00 00
(da4:umass-sim4:4:0:0): CAM status: CCB request completed with an error
(da4:umass-sim4:4:0:0): Retrying command
(da4:umass-sim4:4:0:0): READ(10). CDB: 28 00 42 78 cd 98 00 01 00 00
(da4:umass-sim4:4:0:0): CAM status: CCB request completed with an error
(da4:umass-sim4:4:0:0): Retrying command
...(same thing repeated)...
(da4:umass-sim4:4:0:0): READ(10). CDB: 28 00 42 78 f1 98 00 01 00 00
(da4:umass-sim4:4:0:0): CAM status: CCB request completed with an error
(da4:umass-sim4:4:0:0): Error 5, Retries exhausted
da4 at umass-sim4 bus 4 scbus7 target 0 lun 0
da4: <WD Elements 25A3 1021> s/n 5641474A4D56574C detached
(da4:umass-sim4:4:0:0): Periph destroyed
umass4: detached
Я сам охотно стреляю себе в ногу, используя корпус USB, и поскольку FreeNAS (ну, FreeBSD) справедливо злится на этот корпус за неправильную реализацию протокола SCSI (по какой-то причине почти никто не делает), я переключился на Linux (с ZoL). Несмотря на то, что диски не отключаются регулярно (насколько указывает dmesg), первый из них сообщает об ошибках чтения и, следовательно, контрольных сумм, в таких пакетах, что он выбрасывает один (из четырех, подключенных к тому же интерфейсу) из пула.
В конце концов, я настроил zfs_checksum_events_per_second с 20 на 0, чтобы очистка могла завершиться, не испугавшись.
Я не смог определить что-либо на стороне BSD, что приводило бы в действие приводы, но OP упомянул, что это был фактический интерфейс USB, который сдавался.