refs #1513 add ogSetPartitionId
parent
788ae31b0f
commit
0d8d543526
|
@ -10,6 +10,7 @@ import filecmp
|
||||||
import subprocess
|
import subprocess
|
||||||
import shutil
|
import shutil
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import stat
|
import stat
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
@ -1167,52 +1168,35 @@ def ogSetPartitionActive (disk, par):
|
||||||
#@exception OG_ERR_PARTITION Error al cambiar el id. de partición.
|
#@exception OG_ERR_PARTITION Error al cambiar el id. de partición.
|
||||||
#@attention Requisitos: fdisk, sgdisk
|
#@attention Requisitos: fdisk, sgdisk
|
||||||
#*/ ##
|
#*/ ##
|
||||||
def ogSetPartitionId(*args):
|
def ogSetPartitionId (disk, par, id):
|
||||||
# Variables locales
|
DISK = ogDiskToDev (disk)
|
||||||
DISK = None
|
if not DISK: return None
|
||||||
PART = None
|
|
||||||
PTTYPE = None
|
|
||||||
ID = None
|
|
||||||
|
|
||||||
# Si se solicita, mostrar ayuda.
|
PART = ogDiskToDev (disk, par)
|
||||||
if len(args) == 1 and args[0] == "help":
|
if not PART: return None
|
||||||
SystemLib.ogHelp('ogSetPartitionId', 'ogSetPartitionId int_ndisk int_npartition hex_partid', 'ogSetPartitionId 1 1 7')
|
|
||||||
return
|
|
||||||
|
|
||||||
# Error si no se reciben 3 parámetros.
|
# Error si el id. de partición no es hexadecimal.
|
||||||
if len(args) != 3:
|
if not re.match ('^[0-9A-Fa-f]+$', id):
|
||||||
SystemLib.ogRaiseError(OG_ERR_FORMAT)
|
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_OUTOFLIMIT, id)
|
||||||
return
|
return None
|
||||||
|
|
||||||
# Sustituye nº de disco y nº partición por su dispositivo.
|
# Elección del tipo de partición.
|
||||||
DISK = ogDiskToDev(args[0])
|
PTTYPE = ogGetPartitionTableType (disk)
|
||||||
if DISK is None:
|
if 'GPT' == PTTYPE:
|
||||||
return
|
p = subprocess.run (['sgdisk', f'-t{par}:{id.upper()}', DISK])
|
||||||
PART = ogDiskToDev(args[0], args[1])
|
elif 'MSDOS' == PTTYPE:
|
||||||
if PART is None:
|
p = subprocess.run (['sfdisk', '--id', DISK, par, id.upper()])
|
||||||
return
|
|
||||||
# Error si el id. de partición no es hexadecimal.
|
|
||||||
ID = args[2].upper()
|
|
||||||
if not re.match("^[0-9A-F]+$", ID):
|
|
||||||
SystemLib.ogRaiseError(OG_ERR_OUTOFLIMIT, args[2])
|
|
||||||
return
|
|
||||||
|
|
||||||
# Elección del tipo de partición.
|
|
||||||
PTTYPE = ogGetPartitionTableType(args[0])
|
|
||||||
if PTTYPE == "GPT":
|
|
||||||
subprocess.run(["sgdisk", f"-t{args[1]}:{ID}", DISK], stderr=subprocess.DEVNULL)
|
|
||||||
elif PTTYPE == "MSDOS":
|
|
||||||
subprocess.run(["sfdisk", f"--id", DISK, args[1], ID], stderr=subprocess.DEVNULL)
|
|
||||||
else:
|
else:
|
||||||
SystemLib.ogRaiseError(OG_ERR_OUTOFLIMIT, f"{args[0]},{PTTYPE}")
|
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_OUTOFLIMIT, f'{disk},{PTTYPE}')
|
||||||
return
|
return None
|
||||||
|
|
||||||
# MSDOS) Correcto si fdisk sin error o con error pero realiza Syncing
|
# MSDOS) Correcto si fdisk sin error o con error pero realiza Syncing
|
||||||
if subprocess.run(["partprobe", DISK], stderr=subprocess.DEVNULL).returncode == 0:
|
if 0 == p.returncode:
|
||||||
return
|
subprocess.run (['partprobe', DISK])
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
SystemLib.ogRaiseError(OG_ERR_PARTITION, f"{args[0]},{args[1]},{args[2]}")
|
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk},{part},{id}')
|
||||||
return
|
return None
|
||||||
|
|
||||||
|
|
||||||
#/**
|
#/**
|
||||||
|
|
Loading…
Reference in New Issue