Как я могу использовать cloud-init для загрузки диска данных на виртуальную машину с Ubuntu в Azure - PullRequest
0 голосов
/ 17 декабря 2018

Я пытался использовать cloud-init для разбиения и монтирования диска данных на виртуальной машине Ubuntu в Azure.Большинство онлайн-примеров показывают, как это сделать для временного диска, но не для диска с данными.Я пытался баловаться с этим без особой удачи.Пожалуйста, дайте мне знать, если я делаю что-то неправильно в приведенном ниже коде или если это невозможно сделать с помощью cloud-init

#cloud-config
device_aliases: {'ephemeral0': '/dev/sdb','datadisk': '/dev/sdc1'}

disk_setup:
    ephemeral0:
         table_type: mbr
         layout: True
         overwrite: False
    /dev/sdc1:
         table_type: mbr
         layout: True
         overwrite: False

fs_setup:
    - label: ephemeral0
      filesystem: ext4
      device: ephemeral0.1
      replace_fs: ntfs
    - cmd: mkfs -t %(filesystem)s -L %(label)s %(device)s
      label: '/dev/sdc1/'
      filesystem: ext4
      device: '/dev/sdc1/'
      replace_fs: ntfs

mounts:
    - ["ephemeral0.1", "/mnt"]
    - ["/dev/sdc1/", "/datadisk"]

1 Ответ

0 голосов
/ 22 января 2019

Согласен - не так много примеров этого общего сценария.Я думаю, что часть проблемы, с которой вы столкнулись выше, заключается в том, что вы ссылаетесь на раздел вместо диска в disk_setup.

В Azure первый диск с данными, подключенный к виртуальной машине, обычно обозначается как /dev/sdc, второй - /dev/sdd и т. Д.Это не гарантируется, однако.Документация здесь указывает, что существуют обстоятельства, которые могут привести к назначению другой буквы диска.В результате мы будем ссылаться на диски, используя встроенный псевдоним.Этот псевдоним гарантированно всегда будет отображаться с использованием LUN, назначенного в шаблоне ARM (или в определении диска).Эти псевдонимы имеют вид /dev/disk/azure/scsi1/lun# (с псевдонимами разделов /dev/disk/azure/scsi1/lun#-part#).

Если вы используете ARM, шаблон будет включать ссылку в определении виртуальной машины на диск.В рамках этого определения вы будете указывать значение LUN.Вы можете ссылаться на это назначенное значение в вашем облаке-init.Например, следующий фрагмент ARM создаст /dev/disk/azure/scsi1/lun0:

"dataDisks": [
{
    "lun": 0,
    "name": "[concat(variables('vmName'),'-datadisk0')]",
    "createOption": "Attach",
    "managedDisk":
    {
        "id": "[resourceId('Microsoft.Compute/disks/', 
                concat(variables('vmName'),'-datadisk0'))]"
    }
},

Зная это, мы можем создать содержимое для облачной конфигурации.Сначала мы определим диск данных.Я предлагаю использовать GPT в качестве типа таблицы для включения поддержки дисков и разделов размером> 2 ТБ.

disk_setup:
    /dev/disk/azure/scsi1/lun0:
        table_type: gpt
        layout: True
        overwrite: True

Далее мы указываем настройку файловой системы для дисков.Мы ссылаемся на каждый раздел и объявляем используемую файловую систему.

fs_setup:
    - device: /dev/disk/azure/scsi1/lun0
      partition: 1
      filesystem: ext4

Наконец, мы монтируем разделы.Процесс, используемый cloud-init, создаст папки и смонтирует указанные разделы.Я использую рекомендованный nofail (гарантирует, что виртуальная машина может загрузиться в случае проблем или отсоединенного диска) вместе с noexec (что предотвращает выполнение двоичных файлов в этом разделе).Поскольку мы поместили файловую систему в первый раздел lun0, нам нужно смонтировать lun0-part1.

mounts:
    - ["/dev/disk/azure/scsi1/lun0-part1", "/datadisk", auto, "defaults,noexec,nofail"]
...