[IMP] script todo: redimension — avertir de la taille max soutenable (hôte)
À l'agrandissement, on indique désormais l'espace libre de l'hôte et la taille virtuelle MAX « soutenable » ≈ (taille réelle actuelle + libre hôte) — affichée AVANT la saisie pour guider le choix. Si la cible la dépasse, avertissement NON bloquant : le qcow2 est creux, donc OK tant que la VM ne remplit pas, mais au-delà l'hôte tomberait à court d'espace. Ex. : réel 115G + libre 30G -> max soutenable ~145G ; viser 190G affiche « dépasse de ~45G — surallocation ». L'opération n'est pas bloquée. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ae3745a22a
commit
bea9a82d75
2 changed files with 50 additions and 0 deletions
|
|
@ -1656,6 +1656,25 @@ class TODO:
|
|||
print(f"{t('Current virtual size:')} {cur_gb:.1f} G")
|
||||
print(f"{t('VM state:')} {state or '?'}")
|
||||
|
||||
# Espace HÔTE : le qcow2 est creux (sparse), donc on PEUT fixer une
|
||||
# taille virtuelle plus grande que l'espace réel — mais si la VM la
|
||||
# remplit, l'hôte tombe à court. Max « soutenable » ≈ taille réelle
|
||||
# actuelle + espace libre de l'hôte. On l'AFFICHE (avertissement, pas
|
||||
# de blocage) pour guider le choix.
|
||||
g = 1 << 30
|
||||
_virt, actual = self._qemu_disk_sizes(disk)
|
||||
try:
|
||||
free = shutil.disk_usage(os.path.dirname(disk)).free
|
||||
except OSError:
|
||||
free = 0
|
||||
max_safe_gb = (actual + free) / g if free else 0
|
||||
if max_safe_gb:
|
||||
print(
|
||||
f"{t('Host free space:')} {free / g:.1f} G · "
|
||||
f"{t('max sustainable total (before host full):')} "
|
||||
f"~{max_safe_gb:.1f} G"
|
||||
)
|
||||
|
||||
# 2) Nouvelle taille : +NG (agrandir), -NG (réduire) ou NG (cible).
|
||||
guide = t(
|
||||
"Enter +NG to grow, -NG to shrink, or NG for a target size "
|
||||
|
|
@ -1684,6 +1703,18 @@ class TODO:
|
|||
print(
|
||||
f"\n{t('New virtual size:')} {cur_gb:.1f} G -> {new_gb:.1f} G"
|
||||
)
|
||||
# Avertissement (NON bloquant) : agrandir au-delà de ce que l'hôte
|
||||
# peut soutenir -> surallocation, l'hôte se remplira si la VM utilise
|
||||
# tout l'espace.
|
||||
if not shrink and max_safe_gb and new_gb > max_safe_gb:
|
||||
over = new_gb - max_safe_gb
|
||||
msg1 = t("Beyond host capacity by ~%.1f G — overcommit.") % over
|
||||
msg2 = t(
|
||||
"The qcow2 is thin: fine until the VM fills it, then the "
|
||||
"host disk runs out. Max sustainable: ~%.1f G."
|
||||
) % max_safe_gb
|
||||
print(f"⚠ {msg1}")
|
||||
print(f" {msg2}")
|
||||
|
||||
# 3) Application selon agrandir/réduire et l'état de la VM.
|
||||
was_shut_down = False # la VM a-t-elle été éteinte pour l'occasion ?
|
||||
|
|
|
|||
|
|
@ -1424,6 +1424,25 @@ TRANSLATIONS = {
|
|||
"fr": "Impossible de lire la taille actuelle du disque ; abandon.",
|
||||
"en": "Could not read current disk size; aborting.",
|
||||
},
|
||||
"Host free space:": {
|
||||
"fr": "Espace libre hôte :",
|
||||
"en": "Host free space:",
|
||||
},
|
||||
"max sustainable total (before host full):": {
|
||||
"fr": "max soutenable au total (avant hôte plein) :",
|
||||
"en": "max sustainable total (before host full):",
|
||||
},
|
||||
"Beyond host capacity by ~%.1f G — overcommit.": {
|
||||
"fr": "Dépasse la capacité de l'hôte de ~%.1f G — surallocation.",
|
||||
"en": "Beyond host capacity by ~%.1f G — overcommit.",
|
||||
},
|
||||
"The qcow2 is thin: fine until the VM fills it, then the "
|
||||
"host disk runs out. Max sustainable: ~%.1f G.": {
|
||||
"fr": "Le qcow2 est creux : OK tant que la VM ne remplit pas, sinon "
|
||||
"l'hôte tombe à court. Max soutenable : ~%.1f G.",
|
||||
"en": "The qcow2 is thin: fine until the VM fills it, then the "
|
||||
"host disk runs out. Max sustainable: ~%.1f G.",
|
||||
},
|
||||
"Safe shrink needs libguestfs (virt-resize).": {
|
||||
"fr": "La réduction sûre nécessite libguestfs (virt-resize).",
|
||||
"en": "Safe shrink needs libguestfs (virt-resize).",
|
||||
|
|
|
|||
Loading…
Reference in a new issue