Не удалось отправить zfs | zfs получает наборы данных в том же zpool

У меня две среды: постановка ( постановка ) и развитие ( чанг ). Я не могу реплицировать ( включая моментальные снимки ) из набора данных zfs/staging.assets в другой набор данных zfs/choang.assets пределах того же zpool zfs .

ПРИМЕЧАНИЕ. Я предполагаю, что мне нужно размонтировать как исходные, так и целевые наборы данных.

 zfs unmount zfs/staging.assets zfs unmount zfs/choang.assets zfs send -R zfs/staging.assets | zfs receive -F zfs/choang.assets 

При выполнении вышеуказанных команд генерируется следующая ошибка:

 Error: Unsupported flag with filesystem or bookmark. cannot receive: failed to read from stream 

Когда я удаляю параметр -R и выполняю команды, он преуспевает:

 zfs send zfs/staging.assets | zfs receive -F zfs/choang.assets 

Однако моментальные снимки не получены, и создается один снимок zfs/choang.assets@--head-- .

Наконец, я попытался отправить снимок – подумав, может быть, я могу отправить снимок за раз:

 zfs send zfs/staging.assets@sha512_hash | zfs receive -Fduv zfs/choang.assets 

Это также не сработало и возникла следующая ошибка:

 internal error: Invalid argument cannot receive: failed to read from stream 

Как я могу копировать все снимки?

3 Solutions collect form web for “Не удалось отправить zfs | zfs получает наборы данных в том же zpool”

Используя Send / Receive on ZFS, вы можете использовать его только с моментальными снимками, и нет необходимости размонтировать наборы данных. Вы не сможете отправлять / получать тома.

Команда zfs send создает представление потока моментального снимка, которое записывается на стандартный вывод. По умолчанию генерируется полный поток. Вы можете перенаправить вывод в файл или в другую систему. Команда получения zfs создает моментальный снимок, содержимое которого указано в потоке, который предоставляется на стандартном входе. Если получен полный поток, создается новая файловая система. Вы можете отправлять данные моментального снимка ZFS и получать данные снимков и файловые системы ZFS с помощью этих команд.

Собственные команды:

 zfs send tank/data@snap1 | zfs recv spool/ds01 

Лучший способ отправить / получить снимок zfs – использовать mbuffer для минимизации риска задержки ввода-вывода и заполнения сетевого буфера.

На отправляющей машине:

 zfs send pool/image@test | mbuffer -s 128k -m 1G -O 127.0.0.1:9090 

На приемной машине:

 mbuffer -s 128k -m 1G -I 9090 | zfs receive -F pool/image1 

Поскольку вы можете использовать 127.0.0.1 для одного и того же компьютера или xx.xx.xx.xx для удаленной машины.

Источник: https://docs.oracle.com/cd/E18752_01/html/819-5461/gbchx.html

Здесь важно несколько вещей. Ваши ошибки связаны с их комбинациями:

  • Обычно вы отправляете конкретный снимок или несколько снимков вместо целой файловой системы. Это означает, что вам не нужно размонтировать наборы данных и нарушить работу ваших пользователей, и вы можете поэтапно send/recv позже.
  • Если вы не укажете моментальный снимок источника, вы получите автоматически сгенерированный снимок @--head-- , который является состоянием вашего источника в момент отправки (если бы вы отправили существующий моментальный снимок, этот снимок будет @--head-- место @--head-- на стороне назначения).
  • send -R | recv -F send -R | recv -F означает полную репликацию (рекурсивную и включающую свойства в исходное состояние, уничтожение старых объектов по назначению), поэтому вам нужно решить, как расширить иерархию файловой системы: вы можете использовать флаг -e , -d или no при получении (флаг не означает объединение содержимого в новом наборе данных без сохранения имени родительского набора данных на стороне источника):

     The -d and -e options cause the file system name of the target snapshot to be determined by appending a portion of the sent snapshot's name to the specified target filesystem. If the -d option is specified, all but the first element of the sent snapshot's file system path (usually the pool name) is used and any required intermediate file systems within the specified one are created. If the -e option is specified, then only the last element of the sent snapshot's file system name (ie the name of the source file system itself) is used as the target file system name. 
  • Ваша последняя идея (единая отправка, полный прием) должна работать (я протестировал ее в простой среде, и это действительно сработало), но в любом случае это не так.

Итак, подведем итоги и применим к вашей конкретной ситуации:

  1. Сначала рекурсивно создайте текущий снимок или выберите более старый, содержащий все старые файлы, которые вы хотите реплицировать):

     zfs snapshot -r zfs/staging.assets@now 
  2. Уничтожьте все старые снимки на стороне назначения, которые находятся на стороне источника (показать все снимки с помощью zfs list -Hr -o name -t snap zfs/choang.assets или взять подсказки из сообщения об ошибке). Альтернативно уничтожить набор данных назначения и воссоздать его, если он не содержит ничего важного.

  3. Отправить рекурсивно и полностью получать, уничтожая все старые наборы данных во втором наборе данных, объединяя подданные в место назначения, чтобы они отражали источник:

     zfs send -R zfs/staging.assets@now | zfs recv -Fu zfs/choang.assets 

Обновление ядра недавно произошло на сервере (через CPanel), и сервер не был перезапущен. После просмотра файлов журналов я заметил, что ZFS также обновлен. Я считаю, что команды в этом вопросе не работают из-за конфликта версий между модулем ядра и инструментами CLI.

Я пришел к такому выводу после успешного выполнения следующего на другом сервере.

 # zfs send -R tank1@--refresh-- | zfs recv -Fu tank2 # zfs list -t snapshot NAME USED AVAIL REFER MOUNTPOINT tank1@turtle 9K - 34K - tank1@tiger 9K - 47.5K - tank1@squirrel 10K - 58.5K - tank1@rabbit 10K - 70K - tank1@owl 11K - 80.5K - tank1@deer 11K - 90.5K - tank1@bear 0 - 106K - tank1@--refresh-- 0 - 106K - tank2@turtle 9K - 34K - tank2@tiger 9K - 47.5K - tank2@squirrel 10K - 58.5K - tank2@rabbit 10K - 70K - tank2@owl 11K - 80.5K - tank2@deer 11K - 90.5K - tank2@bear 1K - 106K - tank2@--refresh-- 0 - 106K - 

Затем я вернулся на исходный сервер и переключил модуль ZFS с DKMS на систему модулей kABI для ядра и перезапустил сервер. Команды выполнены правильно. См. https://github.com/zfsonlinux/zfs/wiki/RHEL-%26-CentOS

  • Как перенести файлы из одной файловой системы zfs в другую файловую систему zfs в том же пуле?
  • Чтение и запись ZFS отображаются в выводе vmstat -p
  • Можно ли изменить размер сектора раздела для zfs raidz pool в linux?
  • ZFS ACL (NFS4 ACL)
  • Невозможно выполнить umount / mnt
  • Объединить разделы
  • Почему мой ресурс CIFS показывает одни и те же файлы несколько раз?
  • Как устранить неисправность контроллера диска в системах на базе Illumos?
  • Как изменить ZFS на Linux на CentOS
  • Счетчики ошибок iostat в Solaris
  • Как установить FreeBSD вместе с Linux, с файловой системой ZFS для рута?
  • Interesting Posts

    Распечатайте n-ю строку перед совпадающей строкой, строка соответствия и n-я строка из согласованной строки

    x11 – не может перемещать курсор мыши с нуворишем, xev все еще сообщает движение

    Если я открываю консоль, она открывает безостановочно больше окон консоли

    Как понять ssh-keygen и ssh-copy-id?

    Каков правильный подход к уменьшению размера rootfs.cpio?

    Как распаковать gzip-ответ HTTP?

    Скрипт пытается создать файлы, даже если им это не нужно?

    Застрял на старом ядре при попытке перейти от Squeeze to Wheezy

    Как узнать, какие дистрибутивы используют конкретную версию Linux?

    Как ограничить SSH, чтобы разрешить удаленное туннелирование (не локально)?

    Создание образа Debian с панели запуска Ubuntu

    Использование sed для цветного вывода из команды на Solaris

    Найти команду – список аргументов слишком длинный

    Текстовые аннотации и добавления изображений в PDF-файл с использованием бесплатного программного обеспечения

    Проблемы с unixODBC и SQLite

    Linux и Unix - лучшая ОС в мире.