В списке рассылки freebsd-emulation был задан вопрос "как получить доступ к содержимому образа диска от VirtualBox?". Задача показалась мне интересной.
Немного погуглив нашёл вот такое описание формата. Прочитав его, немного покопался в исходниках VirtualBox и вот, за пару вечеров написал GEOM модуль для доступа к этим образам.
Модуль простенький, рассчитан он на одну версию метаданных (хотя добавить старые версии не сложно, но лень и не на чем тестировать), предоставляет доступ только для чтения. Код можно посмотреть здесь. Пользоваться просто - загружаете модуль, подключаете образ диска через mdconfig и, теоретически, он должен обнаружиться и для него будет создан провайдер с суффиксом .vdi. Примерно вот так:
Немного погуглив нашёл вот такое описание формата. Прочитав его, немного покопался в исходниках VirtualBox и вот, за пару вечеров написал GEOM модуль для доступа к этим образам.
Модуль простенький, рассчитан он на одну версию метаданных (хотя добавить старые версии не сложно, но лень и не на чем тестировать), предоставляет доступ только для чтения. Код можно посмотреть здесь. Пользоваться просто - загружаете модуль, подключаете образ диска через mdconfig и, теоретически, он должен обнаружиться и для него будет создан провайдер с суффиксом .vdi. Примерно вот так:
# make # make load /sbin/kldload -v /usr/home/butcher/work/vbox/mod/geom_vdi.ko Loaded /usr/home/butcher/work/vbox/mod/geom_vdi.ko, id=5 # sysctl debug.bootverbose=1 debug.bootverbose: 0 -> 1 # mdconfig -f 10G_GPT_UFS.vdi md0 GEOM_VDI: valid signature detected. GEOM_VDI: Provider md0.vdi created. # gpart show md0.vdi => 34 20971453 md0.vdi GPT (10G) 34 256 1 freebsd-boot (128k) 290 2097152 2 freebsd-swap (1.0G) 2097442 4194304 3 freebsd-ufs (2.0G) 6291746 14679741 4 freebsd-ufs (7G) # geom vdi list Geom name: md0.vdi dataoffset: 41472 blocksoffset: 512 blockscount: 10240 blocksize: 1048576 mediasize: 10737418240 Providers: 1. Name: md0.vdi Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: md0 Mediasize: 468754944 (447M) Sectorsize: 512 Mode: r0w0e0
Может оформить в порт?
ОтветитьУдалитьПоддерживаю предыдущего оратора - пожалуйста, оформите в виде порта? А то при попытке найти нечто подобное - костыли костылями, а тут - все аккуратно и "как надо". К тому же, если будут обновления, всегда удобнее просто обновить порты :)
ОтветитьУдалить