У меня есть существующий, живой, сервер Ubuntu... поддерживающий многие сервисы, который хорошо работает - но установлен при старении аппаратных средств. Я хотел бы сохранить (почти) идентичную конфигурацию - на новых аппаратных средствах - но принять ZFS и RAID-Z вместо существующего программного обеспечения RAID и EXT 3 решения на старом сервере.
Я установил Ubuntu на новом сервере, и выставил его моей LAN (на отличном статическом IP) и установил подходящую конфигурацию ZFS. Миграция конфигурации многочисленных сервисов (например, почта; веб-приложения; VPNs; прокси; брандмауэры; базы данных - и т.д. и т.д.), оказывается более замысловатым, чем я первоначально ожидал. С 'ручной' стратегией мигрировать, я предусматриваю намного большее время простоя, чем было бы приемлемо.
Есть ли какие-либо инструменты, которые сделали бы это легче (и менее подверженный ошибкам)? Существует ли более легкая стратегия, которой я мог достигнуть того же конечного результата?
Существуют различные способы клонировать машину. Сделайте изображение и восстановите изображение на других аппаратных средствах. Однако, если Вы хотите переместить свой сервер в новые аппаратные средства с очень небольшим количеством времени простоя (в течение нескольких минут), можно использовать описание в этой статье. Статья принимает систему Linux Debian, но это будет работать с Ubuntu также.
Установите основную систему
Вам будут нужны несколько вещей, прежде чем можно будет запустить hotcloning:
рабочая минимальная установка (должен взять Вас максимум 10 минут) рабочая сетевая плата, диски и разделы смонтировали способ, которым Вы хотите их ssh и rsync, не установила Никакие другие рабочие сервисы (за исключением sshd, если Вы делаете это удаленное как в примере). остановите inetd, фактическое время отправления, crond, klogd, syslogd
Синхронизируйте данные
Используя rsync мы можем синхронизировать old_machine с new_machine. Rsync только передает различия, таким образом, можно остановить и перезапустить rsync любое время, и можно также повторно синхронизировать несколько дней спустя, не начиная снова и снова или повторно выполнить rsync для передачи всех измененных файлов.
Исключите шаблоны для rsync
Некоторые файлы не должны быть переданы, потому что они - конкретные аппаратные средства, или доступны по умолчанию или автоматически сгенерированные.
Они специфичны для Ваших аппаратных средств и Вашей установки раздела:
/boot/
/lib/modules
/etc/modules
/etc/lilo.conf
/etc/fstab
/etc/mtab
Они уже доступны. /proc
виртуальная файловая система, обеспеченная рабочим ядром, /dev
дерево устройств от основной установки, lost+found
каталоги, созданные во время форматирования раздела:
/proc
/dev
lost+found/
Они исключены, потому что Вы хотите разделить журналы для каждой машины, и Вы хотите (на данный момент) иметь другую настройку сети для каждой машины:
/var/log
/etc/network/interfaces
Исключить файл содержит все эти записи, каждую запись на новой строке. Если это не ясно, посмотрите man rsync
Вот является пример hotclone_exclude файлом, который Вы будете хранить в / корневом каталоге и ссылке с командой rsync:
/boot/
/lib/modules
/etc/modules
/etc/lilo.conf
/etc/fstab
/etc/mtab
/proc
/dev
lost+found/
/var/log
/etc/network/interfaces
/root
Предупреждение: если у Вас есть сеть, монтирует, что необходимо добавить их к исключить файлу также!!!
Синхронизирующие данные
rsync -e ssh -avz --exclude-from=/root/hotclone_exclude old_server:/ /
Серверы переключателя!
остановите сервисы на old_server
повторно выполненные rsync (не должен занимать много времени начиная с большинства передач, уже сделаны),
обновите/etc/network/interfaces на new_server для содержания IP-адреса old_server выполненный ifdown-a на old_server выполненный ifdown-a на new_server выполненный ifup-a на new_server
Отложите старый сервер, неизменный как запчасть (лучше безопасный, чем жаль).
Вы должны быть все установлены.
Дальнейшее примечание: Если необходимо исключить файлы из определенного пакета, можно получить их со способным файлом как в apt-file packagename
который даст Вам список файлов в том пакете и их местоположениях установки.
Пример: $apt-file list trash-cli
trash-cli: /usr/bin/restore-trash
trash-cli: /usr/bin/trash
trash-cli: /usr/bin/trash-empty
trash-cli: /usr/bin/trash-list
trash-cli: /usr/bin/trash-put
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/__init__.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/assert_equals_with_unidiff.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/describe_trash_list.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/files.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/output_collector.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_file_descriptions.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_filesystem.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_persist.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_restore_trash.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_trash_empty.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/test_trash_put.py
trash-cli: /usr/lib/python2.7/dist-packages/integration_tests/trashinfo.py
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/PKG-INFO
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/SOURCES.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/dependency_links.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/entry_points.txt
trash-cli: /usr/lib/python2.7/dist-packages/trash_cli-0.12.7.egg-info/top_level.txt
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/__init__.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/cmds.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/list_mount_points.py
trash-cli: /usr/lib/python2.7/dist-packages/trashcli/trash.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_available_trash_dirs.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_characterization.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_joining_paths.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_list_mount_points.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_parser.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_parsing_trashinfo_contents.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash_new_tests.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trash_put.py
trash-cli: /usr/lib/python2.7/dist-packages/unit_tests/test_trashdir.py
trash-cli: /usr/share/doc/trash-cli/changelog.Debian.gz
trash-cli: /usr/share/doc/trash-cli/copyright
trash-cli: /usr/share/man/man1/restore-trash.1.gz
trash-cli: /usr/share/man/man1/trash-empty.1.gz
trash-cli: /usr/share/man/man1/trash-list.1.gz
trash-cli: /usr/share/man/man1/trash-put.1.gz
trash-cli: /usr/share/man/man1/trash.1.gz
trash-cli: /usr/share/pyshared/integration_tests/__init__.py
trash-cli: /usr/share/pyshared/integration_tests/assert_equals_with_unidiff.py
trash-cli: /usr/share/pyshared/integration_tests/describe_trash_list.py
trash-cli: /usr/share/pyshared/integration_tests/files.py
trash-cli: /usr/share/pyshared/integration_tests/output_collector.py
trash-cli: /usr/share/pyshared/integration_tests/test_file_descriptions.py
trash-cli: /usr/share/pyshared/integration_tests/test_filesystem.py
trash-cli: /usr/share/pyshared/integration_tests/test_persist.py
trash-cli: /usr/share/pyshared/integration_tests/test_restore_trash.py
trash-cli: /usr/share/pyshared/integration_tests/test_trash_empty.py
trash-cli: /usr/share/pyshared/integration_tests/test_trash_put.py
trash-cli: /usr/share/pyshared/integration_tests/trashinfo.py
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/PKG-INFO
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/SOURCES.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/dependency_links.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/entry_points.txt
trash-cli: /usr/share/pyshared/trash_cli-0.12.7.egg-info/top_level.txt
trash-cli: /usr/share/pyshared/trashcli/__init__.py
trash-cli: /usr/share/pyshared/trashcli/cmds.py
trash-cli: /usr/share/pyshared/trashcli/list_mount_points.py
trash-cli: /usr/share/pyshared/trashcli/trash.py
trash-cli: /usr/share/pyshared/unit_tests/test_available_trash_dirs.py
trash-cli: /usr/share/pyshared/unit_tests/test_characterization.py
trash-cli: /usr/share/pyshared/unit_tests/test_joining_paths.py
trash-cli: /usr/share/pyshared/unit_tests/test_list_mount_points.py
trash-cli: /usr/share/pyshared/unit_tests/test_parser.py
trash-cli: /usr/share/pyshared/unit_tests/test_parsing_trashinfo_contents.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash_new_tests.py
trash-cli: /usr/share/pyshared/unit_tests/test_trash_put.py
trash-cli: /usr/share/pyshared/unit_tests/test_trashdir.py
Если у Вас нет его, можно установить его с sudo apt install apt-file
Поскольку некоторые более полезные инструменты видят ответ @drysdam здесь и ответ @Ressu здесь
Источники:
http://olivier.sessink.nl/publications/hotcloning/
http://olivier.sessink.nl/publications/hotcloning/exclude.txt
man rsync
https://superuser.com/questions/82923/how-to-list-files-of-a-debian-package-without-install