Назад | Перейти на главную страницу

ZFS в Linux: очистить receive_resume_token, указывающую на несуществующий снимок

Я использую синкоид из саноид проект для создания копий файловых систем ZFS на другом компьютере в моей тестовой среде (пара Raspberry Pi)

Я испортил снимок на исходной машине: один сервер запаниковал во время передачи снимка, а позже я удалил снимок, который передавался.

Я вручную создал новый снимок и успешно восстановил его на цели.

Теперь, когда я запускаю syncoid на целевом сервере, используя:

 ${SYNCOID} --sshkey="${SSH_KEY}" root@${REMOTE_SERVER}:${SRC_POOL}/${SAMPLE_FILESYSTEM} ${DEST_POOL}

он жалуется, что не может возобновить транзакцию отправки / получения

Во время обычных операций syncoid извлекает receive_resume_token на целевой машине:

/usr/local/sbin/zfs get -H receive_resume_token 'destpool/samplefs'

Если он его находит, он пытается получить снимок, соответствующий этому токену на исходной машине:

ssh sourceserver zfs send -t (token stored in receive_resume_token retrieved above) | (network stuff...) | zfs receive -s -F 'destpool/samplefs'

cannot resume send: 'sourcepool/samplefs@samplesnap' used in the initial send no longer exists

Единственный способ заставить его работать - это добавить флаг "--no-resume" к команде syncoid. Это не то, что я хочу, так как некоторые файловые системы очень большие и в этом окружении вероятны сбои в работе систем.

Я попытался очистить этот токен, запустив:

 zfs recv -A 'srcpool/samplefs'

на исходной машине и:

 zfs recv -A 'destpool/samplefs'

на целевой машине я получаю:

srcpool/samplefs does not have any resumable receive state to abort

(на целевой машине это destpool / samplefs)

Вопрос: есть ли способ очистить атрибут receive_resume_token в целевой файловой системе?

Обратите внимание, что эта проблема присутствует только в ОДНОЙ файловой системе. На обеих машинах есть много других рабочих передач в обоих направлениях с использованием одного и того же набора команд.

Если zfs recv -A не помогает, вы можете попробовать уничтожить (или переименовать) целевой набор данных и повторно синхронизировать его.

Также обратите внимание на использование syncoid с --no-resume вариант не должен быть проблемой: даже для больших наборов данных инкрементные обновления, как правило, довольно малы и не получают преимуществ от поддержки возобновления (что, наоборот, может быть полезно для первой полной синхронизации).