VirtualBox/ConfigDrive
Задача: (полу) автоматически создать диск, посредством которого можно обмениваться файлами с виртуальной машиной VirtualBox.
- Доступ к диску на чтение / запись и с хоста, и из гостя.
- Предполагается, что либо гость остановлен и с диском работает хост, либо гость запущен и с диском работает только он.
Похоже на Cloud-init, но (1) R/W, (2) для VirtualBox. Традиционный путь решения этой задачи — Shared folders, однако он требует установки в гостевую систему guest additions и ядерного драйвера к ним.
Идея в том, что формат VMDK поддерживает RAW диски; при этом сам VMDK-файл — просто текстовый описатель, а RAW-образ складывается в соседний файл с суффиксом flat.
Создаём диск:
$ VBoxManage createmedium disk --format=VMDK --variant=fixed --size=10 --filename=/home/george/VirtualBox\ VMs/cfgdrv/configdrive.vmdk 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Medium created. UUID: 99d3715c-3793-4c6e-a6f7-0800b69c3049
Получаются два файла — configdrive.vmdk (текстовый) и configdrive-flat.vmdk (10Мб нулей)
Теперь берём mtools и форматируем (можно указать метку CIDATA для совместимости с Cloud-init)
$ mformat -i VirtualBox\ VMs/cfgdrv/configdrive-flat.vmdk -v CIDATA $ mdir -i VirtualBox\ VMs/cfgdrv/configdrive-flat.vmdk Volume in drive : is CIDATA Volume Serial Number is 6AF0-01B0 Directory for ::/
No files
10 457 088 bytes free
Подключаем этот диск к машине (можно по пути, можно по UUID). В моей виртуалке на нулевом порту — собственный диск, вешаем на первый.
$ VBoxManage storageattach cfgdrv --storagectl "SATA Controller" --port 1 --type hdd --medium 99d3715c-3793-4c6e-a6f7-0800b69c3049
Пока это только идея. Если у кого-то получится дописать сюда примеры применения cloud-init или иной системы проброса конфигураций, будет здорово.
Пример работы
Этот диск вполне виден изнутри:
cfgdrv login: root Password: Last login: Wed Sep 24 21:11:41 UTC 2025 on ttyS0 [root@cfgdrv ~]# ls /dev/sd* /dev/sda /dev/sda1 /dev/sdb /dev/sdb1 [root@cfgdrv ~]# mount --label=CIDATA /mnt/ [root@cfgdrv ~]# df Filesystem Size Used Avail Use% Mounted on udevfs 5.0M 0 5.0M 0% /dev runfs 106M 584K 105M 1% /run /dev/sda1 3.9G 740M 3.0G 20% / tmpfs 106M 0 106M 0% /dev/shm tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service tmpfs 106M 0 106M 0% /tmp tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service tmpfs 1.0M 0 1.0M 0% /run/credentials/serial-getty@ttyS0.service tmpfs 22M 4.0K 21M 1% /run/user/0 /dev/sdb1 10M 0 10M 0% /mnt [root@cfgdrv ~]# cal -3 > /mnt/calend.txt [root@cfgdrv ~]# poweroff
И снаружи
$ mdir -i VirtualBox\ VMs/cfgdrv/configdrive-flat.vmdk Volume in drive : is CIDATA Volume Serial Number is 6AF0-01B0 Directory for ::/
CALEND TXT 520 2025-09-24 21:13 calend.txt
1 file 520 bytes
10 452 992 bytes free
$ mcopy -i VirtualBox\ VMs/cfgdrv/configdrive-flat.vmdk ::calend.txt .
$ cat calend.txt
August 2025 September 2025 October 2025
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31