Поиск по блогу

31 мар. 2016 г.

Дополнение к миграции в virtualbox

Статья про миграцию была в легком формате, чтобы понять общие принципы, поэтому некоторые подробности вынесены сюда.

Kpartx
Это программа, позволяющая создавать системные файлы устройств для разделов диска (или любого блочного устройства), только на момент начала экспериментов я ее не нашел..
После создания образа, его монтирования и создания раздела нам надо создать на нем файловую систему.
#fdisk -l /dev/loop0
Disk /dev/loop0: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6062588a

Device       Boot Start      End  Sectors Size Id Type
/dev/loop0p1 *     2048 20971519 20969472  10G 83 Linux
Смотрим вывод fdisk. Нас интересует сектор начала раздела и размер сектора: 2048*512=1048576. Монтируем раздел вручную со смещением.
#losetup --show -f -o 1048576 partition.img
/dev/loop1
Теперь создадим на не файловую систему. Рассчитываем количество блоков ФС по формуле ((end - start) * units) / blocksize с округлением до следующего целого: ((20971519-2048)*512)/4096=2621184
#mkfs.ext3 -b 4096 /dev/loop1 2621184
Далее все как в первой статье.

Mdadm
Если исходная система жила на программном рейде mdadm или с pae  (bigmem-ядром при 32-битной ОС), то дополнительно необходимо будет исправить порядок загрузки в grub и обновить initrd.
#grub-install --recheck --no-floppy /dev/sda
#nano /etc/default/grub
#update-initramfs -u -k all
#update-grub

Usb-ключ
Тесты проводились в GUI режиме, где в меню device - usb device устройство было "добавлено" к ВМ. Если же понадобится запустить ВМ из консоли, то надо узнать UUID данного usb-устройства и добавить его к ВМ и/или добавить фильтр usb.
#VBoxManage list usbhost
#VBoxManage startvm VM (--type headless)
#VBoxManage controlvm VM usbattach UUID
#VBoxManage list usbfilters
#VBoxManage usbfilter add 1 --target VM --name FilterName --vendorid VendorId --productid ProductId
#VBoxManage controlvm VM poweroff

Grub
Вообще, по идее, загрузчик grub можно установить в образ и из хост-системы. Это будет выглядеть как-то так:
#fdisk -l --units=cylinders /dev/loop0

Disk /dev/loop0: 10 GiB, 10737418240 bytes, 20971520 sectors
Geometry: 107 heads, 17 sectors/track, 1305 cylinders
Units: cylinders of 1819 * 512 = 931328 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x6062588a

Device       Boot Start   End Cylinders Size Id Type
/dev/loop0p1 *        2 11530     11529  10G 83 Linux

#grub --device-map=/dev/null
grub> device (hd0) partition.img
grub> geometry (hd0) 1305 107 17
grub> root (hd0,0)
grub> setup (hd0)
You'll get a lot of output, then:
Done.
grub> quit
Возможно как-то еще можно из хост-системы в образе сделать и update-grub, но у меня пока это не получилось.

Миграция debian в virtualbox

Возникла потребность куда-либо мигрировать один из сервисов, но сервис этот работает на debian lenny, mono, mysql и привязан к usb-ключу.
Поэтому проверим как он будет работать в virtualbox и будет ли. И заодно подготовим возможность развернуть его в будущем на гипервизорах.
Делаем копию файлов оригинальной системы, базы данных бэкапим отдельно. Если базы остановлены то можно, конечно, и так, но в данном случае мы их пропустим, а потом зальем нужные нам отдельно т.к. их много и они разные.
rsync -aAXv /* /tmp/folder --exclude={/var/lib/mysql/*,/dev/*,/home/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/opt/*,/root/*,/usr/local/*}
Запаковываем в архив и переносим куда нужно.
Создаем пустой образ диска, монтируем его как блочное устройство в хост-систему
#truncate -s 1024M partition.img
#losetup --show -f partition.img
~/dev/loop0
Создаем раздел на весь диск (swap у нас в файле), сделаем разделы доступными в виде отдельных устройств, и создадим файловую систему на данном разделе
#cfdisk /dev/loop0
#kpartx -av /dev/loop0
add map loop0p1 (254:2): 0 20969472 linear /dev/loop0 2048
#mkfs.ext3 /dev/mapper/loop0p1
Монтируем данный раздел с файловой системой в хост-систему, распаковываем на него файлы, размонтируем разделы/образы.
Конвертируем наш образ в формат VMDK (VDI,VHD)
#VBoxManage convertdd partition.img partition.vmdk --format=VMDK --variant=Fixed
Подключаем образ к виртуальной машине, грузимся с какого-либо rescuecd, делаем chroot, правим /etc/fstab, устанавливаем загрузчик grub и обновляем его конфиг, заливаем базы данных.
#grub-install --recheck --no-floppy /dev/sda
#update-grub
А вообще, можно сразу создать пустую виртуалку, загрузиться с rescuecd и залить бэкап уже туда с обновлением загрузчика (но изначально была надежда сделать update-grub из хост системы и запустить копию с одного раза).
Пробрасываем usb устройство в вирт. машину и пробуем загрузится с нашего "образа". Работает!
Далее не спеша наводим внутренний лоск.

29 мар. 2016 г.

intro

У меня накопилось немало разных how-to по работе. Какие-то из них живут на бумаге, какие-то в текстовиках (и даже на сдохших винтах), некоторые в zim/wiki или в голове, и много тех, которые я уже и забыл.. Поэтому я пока попробую вести их тут, а там посмотрим.
Оформление настрою постепенно, пока сделал по минимуму. Велкам.