[FIX] script todo: redimension disque — lecture taille sur VM allumée (-U)
qemu-img info échouait (« Failed to get shared write lock ») sur une VM running car libvirt tient le lock d'écriture : la taille virtuelle lue tombait à 0.0 G, et « -10G » donnait alors 0-10 = -10 → « Taille invalide ». - Ajout de -U (--force-share) aux deux appels qemu-img info (affichage + _qemu_disk_virtual_bytes) : lecture seule sûre même VM allumée. - Garde-fou : si la taille reste illisible (0), on abandonne avec un message clair au lieu de calculer une cible négative. Le redimensionnement lui-même était déjà correct (virsh blockresize à chaud si running, qemu-img resize si éteinte) — pas besoin d'éteindre la VM pour AGRANDIR. Validé : lecture -U renvoie 30.0 G sur une VM running. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c31dc3967d
commit
e36795fb34
2 changed files with 14 additions and 3 deletions
|
|
@ -1219,8 +1219,10 @@ class TODO:
|
|||
def _qemu_disk_virtual_bytes(disk):
|
||||
"""Taille VIRTUELLE (octets) du disque via « qemu-img info --json »."""
|
||||
try:
|
||||
# -U (--force-share) : lit même si la VM tourne (libvirt tient le
|
||||
# lock d'écriture). Sans ça : « Failed to get shared write lock ».
|
||||
res = subprocess.run(
|
||||
["sudo", "qemu-img", "info", "--output=json", disk],
|
||||
["sudo", "qemu-img", "info", "-U", "--output=json", disk],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=20,
|
||||
|
|
@ -1250,13 +1252,18 @@ class TODO:
|
|||
|
||||
# 1) Espace actuel (virtuel + réel) + df invité si joignable.
|
||||
print(f"\n{t('Current disk:')} {disk}")
|
||||
# -U : lecture sûre même VM allumée (sinon « shared write lock »).
|
||||
self.execute.exec_command_live(
|
||||
f"sudo qemu-img info {shlex.quote(disk)}", source_erplibre=False
|
||||
f"sudo qemu-img info -U {shlex.quote(disk)}", source_erplibre=False
|
||||
)
|
||||
cur_bytes = self._qemu_disk_virtual_bytes(disk)
|
||||
cur_gb = cur_bytes / (1 << 30)
|
||||
print(f"{t('Current virtual size:')} {cur_gb:.1f} G")
|
||||
state = self._qemu_domstate(name)
|
||||
if cur_bytes <= 0:
|
||||
print(t("Could not read current disk size; aborting."))
|
||||
print(f"{t('VM state:')} {state or '?'}")
|
||||
return
|
||||
print(f"{t('Current virtual size:')} {cur_gb:.1f} G")
|
||||
print(f"{t('VM state:')} {state or '?'}")
|
||||
|
||||
# 2) Nouvelle taille : +NG (agrandir), -NG (réduire) ou NG (cible).
|
||||
|
|
|
|||
|
|
@ -1416,6 +1416,10 @@ TRANSLATIONS = {
|
|||
"fr": "État de la VM :",
|
||||
"en": "VM state:",
|
||||
},
|
||||
"Could not read current disk size; aborting.": {
|
||||
"fr": "Impossible de lire la taille actuelle du disque ; abandon.",
|
||||
"en": "Could not read current disk size; aborting.",
|
||||
},
|
||||
"Enter +NG to grow, -NG to shrink, or NG for a target size "
|
||||
"(e.g. +20G, -10G, 60G).": {
|
||||
"fr": "Entrez +NG pour agrandir, -NG pour réduire, ou NG pour une "
|
||||
|
|
|
|||
Loading…
Reference in a new issue