Files
Hrankin, Aleksandr (contracted) f243f440c3 init
2026-02-19 11:34:13 +00:00

88 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Bug Report: cloud-init расширение root-диска ломается из-за «рандомного» имени диска (/dev/sda не всегда root)
## TL;DR
Скрипт в `terraform cloud-init` жёстко использует `/dev/sda`, но система **не всегда** назначает root-диск как `sda`. Иногда root оказывается на `sdc` (или другом), из‑за чего `runcmd` частично/полностью не выполняет расширение LVM и файловой системы.
---
## Контекст
В `cloud-init` используется `runcmd`, который расширяет разделы и LVM на диске `/dev/sda`:
```yaml
runcmd:
- |
set -euxo pipefail
# растянуть extended + LVM partition до конца диска
growpart /dev/sda 2 || true
growpart /dev/sda 5 || true
parted -s /dev/sda "resizepart 2 100%" "resizepart 5 100%" || true
partprobe /dev/sda || true
# растянуть PV -> LV(root) -> FS
pvresize /dev/sda5
lvextend -l +100%FREE -r /dev/vg0/root
```
---
## Симптомы
- После первого бута rootраздел **не расширен** (LVM/FS остаются маленькими).
- В `cloud-init status --long` возможны ошибки в `scripts-user / runcmd` (если команды без `|| true` падают).
- Скрипт «работает в большинстве случаев», но **иногда ломается** без изменений в конфиге.
---
## Наблюдение (доказательство)
Одинаковая VMлогика, но rootдиск получает разные имена.
### Случай A (работает): root на `sda`
```
sda 30G disk
├─sda1 /boot
└─sda5
└─vg0-root /
sdb 150G disk
sdc 150G disk
```
### Случай B (ломается): root на `sdc`
```
sda 150G disk
sdb 150G disk
sdc 30G disk
├─sdc1 /boot
└─sdc5
└─vg0-root /
```
---
## Причина (root cause)
Имена `/dev/sdX` **не гарантированы**: порядок обнаружения дисков может меняться (особенно в VM/Proxmox при разных контроллерах/порядке подключения).
Скрипт предполагает, что root всегда на `/dev/sda`, но когда root на `/dev/sdc`, команды `growpart/pvresize` применяются к **не тому** диску.
---
## Ожидаемое поведение
Скрипт должен определять **реальный диск**, на котором смонтирован `/`, и работать с ним (а не с фиксированным `/dev/sda`).
---
## Фактическое поведение
Скрипт работает только когда root-диск случайно оказывается `sda`. При других раскладах расширение не происходит.
---
## Влияние
- Интермиттентный (рандомный) фейл на bootstrap VM.
- На части VM root остаётся маленьким → проблемы при установке пакетов/логах/кэше и т.д.
- Сложно диагностировать, т.к. «иногда всё ок».
---
## Почему сейчас не фикшу
Баг проявляется редко и не хочу тратить время на стабильное авто‑определение диска прямо сейчас.
В большинстве случаев root всё же назначается на `sda`.
---