ITСooky

IT-рецепты съедобные и не очень!

Переносим Виртуальную Машину на реальный HDD!

дата 21.09.2014

И круг замкнулся! А что если Виртуальную перенести на Реальную, способом который так же переносит Реальную в Виртуальную, и Реальную на Реальную — это же бэкап черт побери! Будет сложно и долго, придется много работать пальцами — но это стоит того!!!

itcooky_VM_to_HDD_001

Для начала общий принцип делаем загрузочную флешку с образами ПО которое нужно для копирования Разделов FreeBSD, не важно с виртуальной или реальной. Это будет мультизагруженная USB-шка… но образ FreeBSD она почему то не захочет загрузить, так что его придется писать на болванку… Да, но это все не сработает, и уже сделанная куча скриншотов идет в мусорку!

Так что качаем:
Образ ISO FreeBSD 9.2, так как у нас на вирт 9,2 но нужен он только для разбивке жесткого диска, так что может подойдет любой 9.x
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-i386-dvd1.iso

И все! Можно конечно скачать ISO образ клонировшика жесткого дсика Clonezilla, но она с FreeBSD не работает. Еще можно скачать YUMI – Multiboot USB Creator для создания загрузочной флешки, но тоже с FreeBSD не работает, хотя казалось бы с любым ISO должен работать…

А вот просто флешка нам понадобиться! Да и кстати переносить будем не какую обстрактную виртулаьную машину а ITCooky VPS 1.1!

О железе
Берем старика Intel Atom D330 формат mini-ITX два ядра по 1,6 Ghz, с 1 Gb памяти, еще более старый ATA-шный диск! Что удивительно за 4 года, мат платы на Atom чуть-чуть подрос в герцах, но сильнее в цене!
itcooky_freebsd_02
Он еще тянет — но это прям минимум! Самый прожорливый конечно SAM2 с его детьми для проверки по базе URLов на вшивость! Ruby также — еще один не нужный вебсервер — жрет прям все ядро (хорошо что два)!

В настройках нашей виртуальной машины, которую мы хотим вернуть в реальность, в настройках включаем USB и добавляем нашу флешку
vmtohdd_itcooky_002

Грузим виотуальную машину ITCooky VPS 1.1 на загрузке выбираем
2. Boot Singel User

Для начала проверим все разделы на ошибки
fsck -y
Подключим флешку
mkdir /mnt/test
mount_msdosfs /dev/da0s1 /mnt/test

И начнем копировать разделы! Эээмм процесс простой, но почему-то поиск этих строк у меня занял неделю! Во первых надо понимать что мы пишем на флешку(я с 5-го раза только понял), а она FAT32, значит надо разбить файлы на куски по 4 кило мегабайт. Потом dump хочет в конце создать файл, в который напишет дату создания копии, ндааа только в Single User никуда кроме флешки записать он не сможет, так что указываем ему путь — а то он психанет, и уже созданный дамп сотрет (истеричка)! Так же не достаточно указать размер частей на которые будем делить, надо так же указать и имена дл яэтих частей, а то тоже дамп запорится, у нас больше двух кусков не будет.

Так же надо понимать свою структуру партишенов, её можно посмотреть в /etc/fstab
ada0p2 это / корень
ada0p3 это /var/log
ada1p2 это /usr/hard2 куча всего нужно как бы лежит на другом вирт диске, но всё будем класть на один реальный.

Запускаем команды, это на долго, но не отходим — каждый следующий кусок надо будет потдвержать еськаньем (это не отключить так просто)
dump -0u -B 4000000 -D /mnt/test/droot -f /mnt/test/root1,/mnt/test/root2 /dev/ada0p2
dump -0u -B 4000000 -D /mnt/test/dvarlog -f /mnt/test/varlog /dev/ada0p3
dump -0u -B 4000000 -D /mnt/test/dusrhard2 -f /mnt/test/usrhard2_1,/mnt/test/usrhard2_2 /dev/ada1p2

На ВМ все выключаемся!

Теперь на ПК на который будем переносить ВМ с FreeBSD загрузимся с дсика FreeBSD установщика(жмем 1 в начале, или не жмем 1 по таймауту)!

Сразу выбираем
Shell

Тут беремся за разбивку диска, на котором мы конечно же все удалим
Смотрим что есть
gpart show
есть диск ada0 его удаляем
gpart destroy -F ada0

И делаем разделы чуть больше чем на ВМ, кроме последнего под нег я отдаю все место на HDD, так как у нас будет один диск а не два как на ВМ.

gpart create -s gpt ada0
gpart add -t freebsd-boot -s 512K /dev/ada0
gpart add -s 2048M -t freebsd-swap /dev/ada0
gpart add -s 11G -t freebsd-ufs /dev/ada0
gpart add -s 2048M -t freebsd-ufs /dev/ada0
gpart add -t freebsd-ufs /dev/ada0
gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
newfs /dev/ada0p3
newfs /dev/ada0p4
newfs /dev/ada0p5

Именно так бут раздел, свап раздел, и ufs раздел — грузится с первго ufs раздела значит он должен быть всегда rootовый который!!!

Опять смотрим
gpart show

1 и 2 партишен ada0p1 и ada0p2 это загрузчик и свап.
3-тий будет /, 4-ый /var/log, 5-ый /usr/hard2

Теперь подключаем к ПК флешку с дампом
mount_msdosfs /dev/da0s1 /media
Монтируем раздел куда будем писать /
mount /dev/ada0p3 /mnt

Идем в эту папку и делаем патриотичное восстановление
cd /mnt
restore -rf /media/root1

Ругнётся что уже есть .snap но я надеюсь это не страшно
Сидим ждем когда запросит вторую кассету вводим
/media/root2

Отключаем
cd /
unmount /dev/ada0p3

повторяем это еще два раза для других дампов
mount /dev/ada0p4 /mnt
cd /mnt
restore -rf /media/varlog
cd /
unmount /dev/ada0p4

И
mount /dev/ada0p5 /mnt
cd /mnt
restore -rf /media/userhard2_1

Тут тоже вводим инфу а втором куске дампа
/media/userhard2_2
cd /
unmount /dev/ada0p4

по окончанию сразу редактируем fstab чтобы совпадала с нашими новыми названиями
vi /mnt/etc/fstab
вот так это должно выглядеть

# Device        Mountpoint      FStype  Options Dump    Pass#
/dev/ada0p3     /               ufs     rw,acls 1       1
/dev/ada0p4     /var/log        ufs     rw,acls 1       1
/dev/ada0p5     /usr/hard2      ufs     rw,acls 1       1
/dev/ada0p2     none            swap    sw      0       0
fdesc   /dev/fd         fdescfs         rw      0       0
proc    /proc           procfs          rw      0       0
#linprocfs   /compat/linux/proc   linprocfs   rw   0  0

Выключаем, выниманием диск флешку и грузим!!!

Сервер загрузится но кое что надо еще поменять

Сетевые интерфейсы, смотрим какие есть
ifconfig
re0 — это RJ45 на него надо поменять где у нас записан em0
ath0 — это Wi-Fi его надо подключить сначала.

А пока нам нужен доступ по SSН так что займемся re0
редактируем файл
vi /etc/rc.firewall
строку

lanout="em0"

меняем на

lanout="re0"

и все где есть там em0 меняем на re0
редактируем файл
vi /etc/rc.conf
строку

ifconfig_em0="inet 192.168.1.200 netmask 255.255.255.0"

меняем на

ifconfig_re0="inet 192.168.1.200 netmask 255.255.255.0"

а так же тут строчку

natd_interface="em0"

на

natd_interface="re0"

Перезагружаемся и заходим по SSH

Устанавливаем Wi-Fi

Создаем интерфейс коммандой

ifconfig wlan0 create wlandev ath0

Добавляем в rc.conf строки даем беспроводному интерфейсу IP
вместо

ifconfig_em1="inet 192.168.1.200 netmask 255.255.255.0"

пишем

wlans_ath0="wlan0"
ifconfig_wlan0="inet 192.168.1.200/24"
create_args_wlan0="wlanmode hostap country RU"
hostapd_enable="YES"

Создаем файл

vi /etc/hostapd.conf

добавляем в него строки

interface=wlan0
#hw_mode=g
driver=bsd
macaddr_acl=0
auth_algs=1
ssid=Imya_Nashe_Tochki_dostupa
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=CCMP

Тут обнаружилось что с hw_mode=g Wi-Fi работает плохо, я написал driver=bsd и заработало офигительно

wpa_passphrase должен быть не менее 8 знаков

Редактируем
vi dhcpd.conf
строчку

interface em1;

на

interface wlan0;

редактируем файл
vi /etc/rc.firewall

lanin="em1"

на

lanin="wlan0"

Перегружаемся — работает!!!

Что еще надо изменить

ntopng

Смотрим каике он интерфейсы видет
ntopng -i
и меняем цифорку(у меня совпало, было 3 и стало 3, не менял)
в
vi /etc/rc.conf
вот в этой

ntopng_flags="-G=/var/tmp/ntopng/ntopng.pid --local-networks "192.168.2.0/24" --interface 3"

И пожалуй все! Да на железе кое что работает по другому — например netxmsd плохо через раз грузитсяь на ВМ, на железе вообще не грузиться — запустил его руками!