Вопрос или проблема
Я использую 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 не отображаются ошибки.
Возможные причины проблемы
-
Порядок выполнения конфигураций: Убедитесь, что секции
disk_setup
иfs_setup
выполняются в правильном порядке. cloud-init выполняет свои задачи в определённом порядке, и, еслиdisk_setup
не завершил своё выполнение, могли возникнуть конфликты. -
Использование разных конфигураций: Возможно, ваша конфигурация
cloud-config.txt
, находящаяся в/var/lib/cloud/instance/cloud-config.txt
, объединяет несколько файлов (как это подтверждается строкой# from 2 files
), и если одна из конфигураций мешает другой, это может привести к неудаче в создании раздела. -
Версия cloud-init: Вы используете cloud-init версии 19.4. Возможно, в этой версии есть ошибки, которые уже исправлены в более поздних обновлениях. Постарайтесь обновить до последней доступной версии, если это возможно.
Рекомендации по исправлению
-
Изменение порядка выполнения: Попробуйте явно отделить команды
disk_setup
,fs_setup
иmounts
в вашем yaml-файле, чтобы гарантировать, что все шаги выполняются последовательно и корректно. -
Простота конфигурации: Временно упростите ваш YAML-файл для отладки, исключив лишние элементы, чтобы проверить, будет ли успешно создан раздел. Например, используйте только
disk_setup
иfs_setup
, аmounts
можно протестировать позже. -
Проверка журнала ошибок: Если при ручном запуске
disk_setup
всё работает корректно, но проблема возникает при автоматическом запуске, проверьте другие журналы, такие как/var/log/cloud-init-output.log
, чтобы выявить возможные проблемы во время выполнения. -
Тестирование вручную: Поскольку вы упомянули, что ручной запуск работает, внедрение команд для автоматизации может быть хорошей стратегией для обойдённых проблем. Рассмотрите возможность добавления вручную созданных команд в секцию
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, чтобы получить дополнительную помощь.