Мигрировать от RAID программного обеспечения и EXT3 RAID-Z на новых аппаратных средствах?

У меня есть существующий, живой, сервер Ubuntu... поддерживающий многие сервисы, который хорошо работает - но установлен при старении аппаратных средств. Я хотел бы сохранить (почти) идентичную конфигурацию - на новых аппаратных средствах - но принять ZFS и RAID-Z вместо существующего программного обеспечения RAID и EXT 3 решения на старом сервере.

Я установил Ubuntu на новом сервере, и выставил его моей LAN (на отличном статическом IP) и установил подходящую конфигурацию ZFS. Миграция конфигурации многочисленных сервисов (например, почта; веб-приложения; VPNs; прокси; брандмауэры; базы данных - и т.д. и т.д.), оказывается более замысловатым, чем я первоначально ожидал. С 'ручной' стратегией мигрировать, я предусматриваю намного большее время простоя, чем было бы приемлемо.

Есть ли какие-либо инструменты, которые сделали бы это легче (и менее подверженный ошибкам)? Существует ли более легкая стратегия, которой я мог достигнуть того же конечного результата?

0
задан 21 August 2016 в 13:54

1 ответ

Существуют различные способы клонировать машину. Сделайте изображение и восстановите изображение на других аппаратных средствах. Однако, если Вы хотите переместить свой сервер в новые аппаратные средства с очень небольшим количеством времени простоя (в течение нескольких минут), можно использовать описание в этой статье. Статья принимает систему 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

2
ответ дан 28 September 2019 в 16:23

Другие вопросы по тегам:

Похожие вопросы: