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

Перенести необработанный образ диска через LAN

Вот моя ситуация:

Что я хочу сделать:

Мои вопросы:

Несколько разное. особенности:

Это грязно, но выполнимо.

Я предполагаю здесь, что / на /dev/sda3 и это /boot на /dev/sda1.

  1. Уменьшите файловую систему на старом сервере до минимально возможного размера.

    oldserver # resize2fs -M /dev/sda3
    
  2. Разбейте диск нового сервера на разделы одинакового размера. /boot, swapspace и новые / раздел (и все, что вам нужно).

    newserver # parted /dev/sda
    
  3. Скопируйте / и /boot файловые системы.

    oldserver # dd if=/dev/sda1 | ssh root@newserver "dd of=/dev/sda1"
    oldserver # dd if=/dev/sda3 | ssh root@newserver "dd of=/dev/sda3"
    

    Поскольку раздел на новом сервере будет немного меньше, чем раздел на старом сервере, вы получите ложный No space left on device сообщение в конце этого. Однако, поскольку вы уменьшили файловую систему на шаге 1, это не имеет значения.

  4. Измените размер файловой системы на новом сервере до размера раздела.

    newserver # resize2fs /dev/sda3
    
  5. Установите GRUB на новый диск.

    newserver # mount /dev/sda3 /mnt
    newserver # mount /dev/sda1 /mnt/boot
    newserver # mount -o bind /dev /mnt/dev
    newserver # mount -o proc proc /mnt/proc
    newserver # chroot /mnt /bin/bash
    
    newserver(chroot) # grub-install /dev/sda
    newserver(chroot) # exit
    
  6. Завершите остальные настройки (IP-адрес и т. Д.).

Вероятно, вы можете найти способ избежать копирования свободного пространства раздела, но, вероятно, вам потребуется больше времени, чтобы исследовать, чем просто скопировать все это ...

мне бы mkfs свежие файловые системы на новом сервере, затем rsync их со старого сервера. Это перезапускаемый, согласованный, и каждый файл легко проверяется индивидуально. Когда вы отбрасываете неиспользуемые разделы файловой системы (а не судебную копию), я не вижу причин не использовать этот метод. Вам придется повторно запустить GRUB, но это не должно быть проблемой.

Объяснение необработанной копии, поддерживающей файловую систему, займет у меня некоторое время, поэтому, если вы не прокомментируете, почему мое решение rsync не работает, я избавлю себя от набора текста.

Если вы ДЕЙСТВИТЕЛЬНО хотите передавать данные на уровне блочного устройства, я могу придумать один довольно полезный трюк, который я использовал для миграции серверов с минимальным временем простоя.

Дело в том, что вы можете создать деградированное зеркало на исходном сервере с вашим разделом данных, являющимся единственной активной половиной зеркала, а затем экспортировать целевой раздел со второго сервера через АОЕ (Полагаю, оба ваших сервера находятся в одном широковещательном домене). Затем на исходном сервере вы подключаете сетевое блочное устройство к деградировавшему зеркалу, чтобы оно начало восстанавливать. Дождитесь завершения восстановления, остановите зеркало, удалите устройство, экспортированное с помощью AOE, и все в порядке.

Чуть больше деталей (я постараюсь быть краткими).

Составные части:

  • mdadm с этими строить режим (специальное зеркало без метаданных);
  • vblade для экспорта блочного устройства как сетевого устройства AOE;
  • aoe-tools для импорта сетевого блочного устройства AOE.

Вам нужно создать таблицу разделов на целевом сервере, а затем сжать исходный раздел, чтобы он соответствовал назначению. Вы можете легко установить GRUB в новую MBR; синхронизация только разделов по вновь созданной таблице разделов немного менее подвержена ошибкам.

На принимающей стороне вы должны экспортировать свой раздел с помощью vblade инструмент, на исходном сервере вы можете увидеть экспортированные устройства после установки aoe-tools (бегать aoe-discover тогда посмотри на /dev/ether/ для устройств).

Затем вы должны собрать устройство raid1 на исходном сервере с вашим источник водить машину:

mdadm --build /dev/md0 -n2 -l1 --force /dev/sda

После этого вы можете осмотреть только что построенное зеркало:

mdadm --detail /dev/md0
cat /proc/mdstat

На этом этапе вы можете безопасно присоединить экспортированный целевой раздел к этому зеркалу:

mdadm /dev/md0 --add /dev/ether/eX.Y

Тогда просто наблюдайте за процессом синхронизации:

watch -n5 cat /proc/mdstat

После завершения синхронизации просто остановите зеркало: mdadm --stop /dev/md0 на исходном сервере прекратить vblade на целевом сервере, установите GRUB на втором сервере, измените свои IP-адреса и т. д.

Фактически, с помощью этого трюка можно почти вживую перемещать сервер между ящиками, с простоями только для перезагрузки синхронизированных ящиков.


По соображениям производительности я также предлагаю вам увеличить MTU вашего канала (или, если возможно, настроить отдельную VLAN с включенными кадрами jumbo).

Обратите внимание, вы также можете использовать что-то вроде nbd-server/nbd-client (или даже iSCSI, если хотите грубо) в качестве альтернативы AOE, но AOE (vblade + aoe-tools) иметь очень простой интерфейс и отличная производительность (без накладных расходов TCP / IP),