Виртуальные системы для практикума, технические подробности

Подготовка образа к безопасному использованию

Образ виртуальной машины состоит из двух частей:
  • конфигурационный файл
  • образ диска + снимки

Образ проходит следующую подготовку (можете сделать и вы) для безопасности:
  • импортируется конфигурация (добавляется на тестовую машину)
  • отключается диск от машины
  • настройки диска меняются на multiattach
    • нельзя изменить, если диск используется/подключен
    • в этот момент создается пустой (2MB) снимок изменений (snapshot)
  • подключается обратно в машину
    • в конфигурации запоминается, что образ подключен как multiattach и что нужно использовать снимок.

Далее измененная конфигурация, обновленный образ диска и начальный снимок распространяется на остальные рабочие станции.

Пример для SATA образа с Windows 10

Для Windows10 было выполнено:
  1. VBoxManage registervm /virtualbox/vms/Windows10/prac.win10.vbox
  2. VBoxManage list vms
    1. Убеждаемся, что добавилась, под каким именем
  3. VBoxManage showvminfo prac.win10
    1. Смотрим имя контроллера, куда подключен диск
    2. Имя:SATA, порт: 0
  4. VBoxManage storageattach prac.win10 --storagectl SATA --port 0 --medium none
  5. VBoxManage storageattach prac.win10 --storagectl SATA --port 0 --type hdd --medium /virtualbox/vms/Windows10/prac.win10.vdi --mtype multiattach
  6. Для сохранения:
    • tar -cf - Windows10 | 7zr a -si -t7z -m0=lzma -mx=9 -mfb=64 -md=32m /mnt/data/Win10/Win10.tar.7z
    • Можно и просто 7zr, т.к. особенные права пользователям не нужны:
      • 7zr a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m /mnt/data/Win10/Win10.7z Windows10

Пример для IDE образа с Windows XP

После того как зашли в её директорию:
  1. VBoxManage registervm WinXP_Minimal.vbox
  2. VBoxManage list vms
    1. Убеждаемся, что добавилась, под каким именем (WinXP_Minimal)
  3. VBoxManage showvminfo WinXP_Minimal
    1. Смотрим имя контроллера, куда подключен диск
    2. Имя:IDE, порт: 0,0 * Значит порт 0 и устройство 0
  4. VBoxManage storageattach WinXP_Minimal --storagectl IDE --port 0 --device 0 --medium none
  5. VBoxManage storageattach WinXP_Minimal --storagectl IDE --port 0 --device 0 --type hdd --medium winxp_disk.vdi --mtype multiattach
  6. Для сохранения только образа, без архива:
    • plzip -n 8 -k winxp_disk.vdi

Создание виртуальной машины

Если дан только образ диска, то cначала создается (допустим, мы хотим создать машину prac.debian.r7):
  1. VBoxManage createvm --name prac.debian.r7
  2. VBoxManage list vms
  3. VBoxManage registervm "$HOME/VirtualBox VMs/prac.debian.r7/prac.debian.r7.vbox"
  4. VBoxManage storagectl prac.debian.r7 --name SATA --add sata
  5. VBoxManage storageattach prac.debian.r7 --storagectl SATA --port 0 --type hdd --medium /virtualbox/vdi/prac.debian/prac.debian.r7.vmdk
А потом аналогично предыдущим вариантам:
  1. VBoxManage storageattach prac.debian.r7 --storagectl SATA --port 0 --medium none
  2. VBoxManage modifymedium disk /virtualbox/vdi/prac.debian/prac.debian.r7.vmdk --type multiattach
  3. VBoxManage storageattach prac.debian.r7 --storagectl SATA --port 0 --type hdd --medium /virtualbox/vdi/prac.debian/prac.debian.r7.vmdk --mtype multiattach

Обновление образа

  • Переключаете диск обратно в normal
  • Обновляете
  • Переключаете в multiattach
  • сжимаете образ (7z/gzip/bzip2/...) и присылаете
    • т.к. изменений в конфигурации нет, то она не требуется
    • в вашей конфигурации пропишется и создаться другой снимок, чем в классах, но это не страшно, т.к. они отличаются лишь идентификаторами, а данных не содержат, поэтому на старой конфигурации, где прописано использование предыдущего пустого снимка, всё будет работать. А вот смешивать один файл конфигурации со снимком от другого уже нельзя.

Сравнение компрессоров

Был взят снимок от Linux-Ubuntu

тип компрессор время real/user размер декомпрессор время real/user
исходный cat 2m18.513s/0m0.048s 8304721920 cat 2m18.513s/0m0.048s
plzip plzip -n 8 -k olymp-linux.vdi 8m0.202s/63m8.660s 2919147664 plzip -d -n 8 -k olymp-linux.vdi.lz 2m25/4m13
7z lzma 7zr a -t7z -m0=lzma olymp-linux.7z olymp-linux.vdi 20m33.273s/36m11.004s 2867524309 7zr x olymp-linux.7z 3m52/2m46
parallel gzip (pigz) pigz -k olymp-linux.vdi 1m10.802s/5m15.928s 3538554722 unpigz -k olymp-linux.vdi.gz 1m44.298s/0m32.976s

Нужно ли сжимать образ

Для Windows XP:
  • исходный: 34434187264

Plzip:
  • сжатый образ: 15826428655
  • разливка на класс сжатого plzip образа: 10 мин
  • декомпрессия: 15 мин
Надо учесть еще предварительное сжатие (одно для всех классов): 34 минуты

Если не сжимать, то:
  • 22 мин (оценка)
Для классов со 100Mbit/s будет хуже

Pigz:
  • сжатый образ: 19747988523
  • разливка на класс сжатого gzip образа: 12 мин (оценка)
  • декомпрессия: 11 мин
Надо учесть еще предварительное сжатие (одно для всех классов): 8m12s

Вариант с tee (mbuffer -4 -I 9091 -s 128k -m 10000M | tee test.gz| unpigz -p 8 > test):
  • 7min 30.8sec

Если передавать образ (1GB от olymp-linux.vdi): ( dd | комрессор| mbuffer -> сеть -> mbuffer| декомпрессор | dd)
тип время (c)
cat 10
gzip -1 16
pigz -p 8 -1 4
plzip -n 8 -1 26
Вывод: можно сжать pigz и разжимать тоже им.

Устройство виртуализатора

  • /virtualbox: общее хранилище
    • /virtualbox/vms: хранение неизменяемых данных
    • /virtualbox/write: хранение изменяемых данных
    • /virtualbox/vbox: хранение данных для копирования/изменения для пользователя
    • /virtualbox/bin: скрипты, которые обеспечивают работу пользователя с VM:
      • shell: основной скрипт. Дальше он запускает либо скрипт выбора (если есть выбор), либо безальтернативный запуск
      • dialog: скрипт с выбором из меню. Левая часть - имя Vm
      • dialog-one: запуск одной системы
      • start-vm: подготовка и запуск VM
      • startvbox.sh: непосредственная команда запуска VM

Добавление образа

Положить неизменяемый образ в /virtualbox/vms, положить архив со снапшотом и vbox-файл в /virtualbox/vbox. Названия файлов == названию VM (смотри примеры в директории). Прописать VM в /virtualbox/bin/dialog, проверить файл /virtualbox/bin/shell

Изменение образа

Заменить образ в /virtualbox/vms, если изменился снапшот и/или vbox-файл, то обновить их в /virtualbox/vbox. Важно: снепшоты от старого образа могут не подходить к новому. Их надо удалить: rm -rf /virtualbox/write/home/*

Разливка системы

Подготовленная вышеозначенным способом система состоит из двух компонент:

  • образ диска, несколько GB
    • Пример: BarashkovDB.vdi.gz, заранее сжатый
  • служебные данные (vbox-файлы, начальные снапшоты, меню):
    • barashkov-bd.tbz (несколько KB):
      • vdi/BarashkovDB/ — куда будут положены подготовленные образы дисков
      • vbox/BarashkovDB/BarashkovDB-snap.tbz — архив снапшотов (дисков в VM может быть несколько, снимков для них — тоже)
      • vbox/BarashkovDB/BarashkovDB.vbox — сам файл параметров для VM, в частности должны соответствововать и путь до образов, и до снапшотов
      • etc/dialog-data/31-barashkov-bd — файл для показа в меню

Служебные данные заливаются в класс аналогично:
  • for host in `cat classes/371`; do echo -n $host ; ssh $host "cd /virtualbox; tar -jpxf -" < files/vbox-with-menu/371-class-router.tbz ; done

Образы дисков — т.к. через служебные данные директория для образов уже создана, то можно о создании не беспокоиться, будет аналогично:
  • ./class-sender-list.sh /virtualbox/vdi/FreeBSD-Router.tbz classes/371 10.6.11.21
Topic revision: r6 - 04 Dec 2017, RomanKondakov
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WikiCMC? Send feedback