Как создать раздел на диске с помощью cloud-init

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

Я использую cloud-init для настройки экземпляра в облаке Oracle.

У меня есть следующий yaml для создания раздела на диске, его форматирования для ext4 и подключения.

#cloud-config
disk_setup:
  /dev/sdb: {layout: true, overwrite: true, table_type: gpt}
fs_setup:
  - device: /dev/sdb
  - filesystem: ext4
  - label: data
  - partition: auto
mounts:
  - [ /dev/sdb1, /scratch ]

Однако это не создает раздел, который, как я ожидал, должен быть создан в fs_setup

# fdisk -l
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.

Disk /dev/sda: 50.0 GB, 50010783744 bytes, 97677312 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes
Disk label type: gpt
Disk identifier: AEAC51C9-5D28-48CB-82FF-1B7312827FEB


#         Start          End    Size  Type            Name
 1         2048       411647    200M  EFI System      EFI System Partition
 2       411648     17188863      8G  Linux swap      
 3     17188864     97675263   38.4G  Microsoft basic 

Disk /dev/sdb: 549.8 GB, 549755813888 bytes, 1073741824 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 1048576 bytes

Я не вижу никаких ошибок в cloud-init.log или в /var/log/messages

Моя версия cloud-init:

# cloud-init --version
/bin/cloud-init 19.4

Вот эффективный файл cloud-init из /var/lib/cloud/instance/cloud-config.txt

#cloud-config

# из 2 файлов
# fdisk.yaml
# cloud-init.yaml

---
disk_setup:
    /dev/sdb:
        layout: true
        overwrite: true
        table_type: gpt
fs_setup:
-   device: /dev/sdb
-   filesystem: ext4
-   label: data
-   partition: auto
mounts:
-   - /dev/sdb1
    - /scratch
runcmd:
- chown "fdaud:root" /scratch
users:
-   gecos: Feroze Daud
    groups: sudo
    homedir: /home/fdaud
    name: fdaud
    shell: /bin/bash
    ssh_authorized_keys:
    - ssh-ed25519 REDACTED
    sudo:
    - ALL=(ALL) NOPASSWD:ALL
...

Если я вручную выполню раздел disk_setup с помощью cloud-init, это работает отлично.

Есть идеи, что я делаю не так?

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

Для создания раздела на диске с использованием cloud-init в Oracle Cloud, необходимо учитывать несколько аспектов, чтобы предотвратить возможные проблемы и гарантировать успешное выполнение всех задач. Давайте подробно разберемся с вашим YAML-файлом и шагами, которые могут помочь вам добиться желаемого результата.

Анализ текущей конфигурации

Ваш текущий YAML-файл выглядит следующим образом:

#cloud-config
disk_setup:
  /dev/sdb: {layout: true, overwrite: true, table_type: gpt}
fs_setup:
  - device: /dev/sdb
  - filesystem: ext4
  - label: data
  - partition: auto
mounts:
  - [ /dev/sdb1, /scratch ]

Согласно предоставленной информации, вы ожидаете, что cloud-init создаст раздел на диске /dev/sdb, отформатирует его в файловую систему ext4 и смонтирует в /scratch. Однако этого не происходит, хотя в журнале cloud-init не отображаются ошибки.

Возможные причины проблемы

  1. Порядок выполнения конфигураций: Убедитесь, что секции disk_setup и fs_setup выполняются в правильном порядке. cloud-init выполняет свои задачи в определённом порядке, и, если disk_setup не завершил своё выполнение, могли возникнуть конфликты.

  2. Использование разных конфигураций: Возможно, ваша конфигурация cloud-config.txt, находящаяся в /var/lib/cloud/instance/cloud-config.txt, объединяет несколько файлов (как это подтверждается строкой # from 2 files), и если одна из конфигураций мешает другой, это может привести к неудаче в создании раздела.

  3. Версия cloud-init: Вы используете cloud-init версии 19.4. Возможно, в этой версии есть ошибки, которые уже исправлены в более поздних обновлениях. Постарайтесь обновить до последней доступной версии, если это возможно.

Рекомендации по исправлению

  1. Изменение порядка выполнения: Попробуйте явно отделить команды disk_setup, fs_setup и mounts в вашем yaml-файле, чтобы гарантировать, что все шаги выполняются последовательно и корректно.

  2. Простота конфигурации: Временно упростите ваш YAML-файл для отладки, исключив лишние элементы, чтобы проверить, будет ли успешно создан раздел. Например, используйте только disk_setup и fs_setup, а mounts можно протестировать позже.

  3. Проверка журнала ошибок: Если при ручном запуске disk_setup всё работает корректно, но проблема возникает при автоматическом запуске, проверьте другие журналы, такие как /var/log/cloud-init-output.log, чтобы выявить возможные проблемы во время выполнения.

  4. Тестирование вручную: Поскольку вы упомянули, что ручной запуск работает, внедрение команд для автоматизации может быть хорошей стратегией для обойдённых проблем. Рассмотрите возможность добавления вручную созданных команд в секцию runcmd.

Вот пример упрощенного YAML-файла, который вы можете использовать для отладки:

#cloud-config
disk_setup:
  /dev/sdb:
    layout: true
    overwrite: true
    table_type: gpt

fs_setup:
  - device: /dev/sdb
    filesystem: ext4
    label: data
    partition: auto

mounts:
  - [ /dev/sdb1, /scratch ]

Заключение

Правильная конфигурация cloud-init требует точного учета всех деталей и зависимостей. Проведите указанные выше проверки и изменения, и это должно помочь вам решить проблему с созданием разделов на диске. Если все вышеперечисленные шаги не сработают, рассмотрите возможность обращения в службу поддержки Oracle Cloud или на форумы cloud-init, чтобы получить дополнительную помощь.

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

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