Как преобразовать изображение в VHD фиксированного размера для загрузки в Azure на macOS?

Вопрос или проблема

Я пытаюсь создать VHD фиксированного размера на Apple Silicon Mac для загрузки в Azure blob store, который не принимает динамически изменяемый размер VHD.

Я пробовал qemu-img, а также VBoxManage, но каждый раз, когда я передавал опцию -subformat=fixed для команды преобразования, файл превращался в raw вместо VHD.

Это ожидаемо? Как я могу сгенерировать VHD фиксированного размера?

Вот несколько примеров того, что я пробовал:

VBoxManage createhd --filename ~/path/to/test_vbox.vhd --size 10240 --format VHD --variant Fixed
qemu-img create -f vpc -o subformat=fixed ~/path/to/test_qemu.vhd 16G

Для обоих этих примеров выполнение qemu-img info --output=json на соответствующих файлах возвращает:

{
    "children": [
        {
            "name": "file",
            "info": {
                "children": [
                ],
                "virtual-size": 17180320256,
                "filename": "test_qemu.vhd",
                "format": "file",
                "actual-size": 28672,
                "format-specific": {
                    "type": "file",
                    "data": {
                    }
                },
                "dirty-flag": false
            }
        }
    ],
    "virtual-size": 17180320256,
    "filename": "test_qemu.vhd",
    "format": "raw",
    "actual-size": 28672,
    "dirty-flag": false
}

Я также пробовал создать файл qcow2 и конвертировать его в raw, а затем из raw в vhd, но это приводит к такому же результату.

Ответ или решение

Создание фиксированного размера VHD на Apple Silicon Mac для загрузки в Azure может быть непростой задачей, учитывая специфику инструментов, доступных в macOS. Рассмотрим, как это сделать с использованием QEMU и VirtualBox, а также возможные обходные пути для достижения желаемого результата.

Теория

Microsoft Azure требует VHD-файлов фиксированного размера, поскольку файлы с динамическим выделением противоречат условиям использования. Фиксированный VHD имеет постоянный размер, и его структура отличается от динамического VHD. Файл с динамическим выделением хранилища использует минимальное пространство и увеличивает его по мере необходимости, что не подходит для загрузки в Azure.

Примеры

  1. Использование VBoxManage: Вы пробовали создать VHD с помощью VBoxManage, используя следующий синтаксис:

    VBoxManage createhd --filename ~/path/to/test_vbox.vhd --size 10240 --format VHD --variant Fixed

    Этот инструмент от VirtualBox должен генерировать фиксированного размера VHD. Однако, если результат не отвечает ожиданиям, может возникнуть проблема в процессе конверсии или поддержке Apple Silicon.

  2. Использование QEMU-img: Вы предприняли попытку создать VHD с помощью qemu-img, используя следующий синтаксис:

    qemu-img create -f vpc -o subformat=fixed ~/path/to/test_qemu.vhd 16G

    Однако результат оказался формата raw. Это может быть связано с ограничениями или несоответствиями в обработке команд утилитой на вашей платформе.

Применение

Для исправления ситуации предлагаем следующие шаги:

  1. Проверка версий инструментов: Убедитесь, что у вас установлены последние версии VirtualBox и QEMU. Иногда новые версии исправляют известные проблемы или предлагают улучшенные функции.

  2. Идентификация проблемы: Использование qemu-img info показало, что файлы не создаются в формате VHD. Попробуйте использовать альтернативный подход:

    a. Преобразование из qcow2 в VHD:

    Сначала создайте образ формата qcow2, а затем преобразуйте его в VHD:

      qemu-img create -f qcow2 ~/path/to/image.qcow2 16G
      qemu-img convert -f qcow2 -O vpc -o subformat=fixed ~/path/to/image.qcow2 ~/path/to/final_image.vhd

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

  3. Проверка файловой системы: Убедитесь, что файловая система, на которой хранится ваш VHD, поддерживает файлы такого размера, и что у вас хватает места для создания файла фиксированного размера.

  4. Использование Docker: Если инструменты на macOS не справляются, можно воспользоваться образом Docker, который будет иметь предустановленные необходимые версии пакетов и правильно оптимизирован для таких задач.

  5. Тестирование на других системах: Попробуйте выполнить те же команды на другой системе, например, виртуальной машине Windows или Linux, для проверки кросс-платформенной совместимости.

  6. Обратитесь к документации: Внимательно ознакомьтесь со всеми параметрами команд, описанными в документации VirtualBox и QEMU, чтобы убедиться, что настройки формата и размера соответствуют ожиданиям.

Если все вышеперечисленное не решает проблему, можно рассмотреть возможность использования альтернативных облачных сред или инструментов, которые могут предложить более дружелюбные для использования команды и элементы управления для вашей macOS-среды.

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

Оцените материал
Добавить комментарий

Капча загружается...