У меня есть несколько виртуальных машин Xen, работающих на нескольких серверах Linux. Эти виртуальные машины хранят свои образы дисков в томах Linux LVM с именами устройств в соответствии с / dev / xenVG / SERVER001OS и так далее. Я хотел бы регулярно делать резервные копии этих образов дисков, чтобы я мог восстановить виртуальные машины в случае необходимости (устройства LVM уже зеркалированы с DRBD между двумя физическими машинами каждая, я здесь просто параноик).
Как мне это сделать? Очевидно, что первым шагом является создание снимка устройства LVM, но как мне затем передать данные на сервер резервного копирования наиболее эффективным способом? Я мог бы просто скопировать все устройство, что-то вроде:
dd if=/dev/xenVG/SERVER001OS | ssh administrator@backupserver "dd of=/mnt/largeDisk/SERVER001OS.img"
... но это заняло бы много пропускной способности. Существует ли rsync-подобный инструмент для синхронизации содержимого целых дисковых блоков между удаленными серверами? Что-то типа:
rsync /dev/xenVG/SERVER001OS backupServer:/mnt/largeDisk/SERVER001OS.img
Если я правильно понимаю справочную страницу rsync, приведенная выше команда на самом деле не будет работать (правда?), Но она показывает, к чему я стремлюсь. Я понимаю, что опция --devices rsync предназначена для копирования самих устройств, а не их содержимого. Создание локальной копии образа виртуальной машины перед ее синхронизацией с удаленным сервером не вариант, поскольку на диске нет места.
Есть ли полезная утилита, которая может синхронизировать между блочными устройствами и файлом резервной копии на удаленном сервере? Я могу написать один, если мне нужно, но существующее решение будет лучше. Я пропустил опцию rsync, которая делает это для меня?
Хотя для RSync есть патчи для «устройства записи» и «устройства копирования», они хорошо работают только на небольших изображениях (1-2 ГБ). RSync потратит целую вечность на поиск подходящих блоков на больших изображениях, и это почти бесполезно для 40 ГБ или более крупных устройств / файлов.
Мы используем следующее для сравнения контрольной суммы на 1 МБ, а затем просто копируем содержимое, если оно не совпадает. Мы используем это для резервного копирования серверов на виртуальном хосте в США в систему резервного копирования в Великобритании через общедоступный Интернет. Очень мало активности процессора и производительности снимка происходит только после нескольких часов:
Создать снимок:
Первоначальный посев:
Инкрементное ночное резервное копирование (только отправка измененных блоков):
Удалить снимок:
источник
read ARGV,$buf,1024
вместоread STDIN,$buf,1024
@ sysadmin1138? (Я пытаюсь ответить на stackoverflow.com/q/22693823/2987828 и не понимаю ARGV здесь). Я использую каждый день вариант в вопросе stackoverflow.com/q/22693823/2987828, и он работает хорошо.Людям, интересующимся этим конкретно со снимками LVM, может понравиться мой инструмент lvmsync , который читает список измененных блоков в снимке и отправляет только эти изменения.
источник
Взгляните на Zumastor Linux Storage Project, в котором реализовано резервное копирование «моментальных снимков» с помощью двоичного «rsync» с помощью инструмента ddsnap .
С man-страницы:
ddsnap обеспечивает репликацию блочных устройств с возможностью создания моментальных снимков на уровне блоков, способных эффективно удерживать несколько одновременных снимков. ddsnap может сгенерировать список фрагментов снимков, которые отличаются между двумя снимками, а затем отправить это различие по проводам. На нижестоящем сервере запишите обновленные данные на блочное устройство со снимком.
источник
Существует скрипт на python, который называется blocksync, который представляет собой простой способ синхронизировать два блочных устройства по сети через ssh, передавая только изменения.
Я недавно взломал его, чтобы очистить и изменить его на тот же алгоритм быстрой контрольной суммы, что и rsync ( Adler-32 ).
источник
Если вы пытаетесь свести к минимуму количество пустого пространства, которое вы бы отправили через провод с помощью простого
dd
, не могли бы вы просто передать его в gzip перед передачей в ssh?например, dd if = / dev / xenVG / SERVER001OS | GZIP | ssh administrator @ backupserver "dd of = / mnt / largeDisk / SERVER001OS.img.gz"
источник
Просто помните, что производительность системы, имеющей снимки LVM, пропорциональна количеству снимков.
Например производительность Mysql со снимками lvm
источник
В дополнение к ответу Дэвида Херсельмана - следующий скрипт будет синхронизироваться с локальным устройством:
Насколько я знаю, оба скрипта были впервые опубликованы на lists.samba.org .
источник
Это старый вопрос, но никто не упомянул два очень полезных инструмента для эффективной синхронизации двух блочных устройств:
bdsync , который использует подход diff- Transfer -and-Patch;
Blocksync (здесь вы можете найти мою улучшенную версию ), которая использует подход перезаписи на месте.
Я настоятельно рекомендую поиграть с обоими инструментами и выбрать тот, который лучше адаптируется к вашему назначению.
источник
После нескольких лет поиска я недавно создал инструмент для синхронизации снимков LVM между серверами. Он предназначен для использования минимального ввода-вывода и позволяет системам работать во время синхронизации.
Он аналогичен отправке и получению ZFS, поскольку синхронизирует различия между снимками LVM и использует тонкую настройку, поэтому влияние на производительность минимально.
Я хотел бы получить обратную связь, поэтому, пожалуйста, посмотрите.
источник
Для этого сценария было сделано несколько выгод:
источник