refs #1412 add ogCreatePartitionTable

pull/1/head
Natalia Serrano 2025-01-30 13:17:41 +01:00
parent 34bc9c3c89
commit 9e02db9136
2 changed files with 63 additions and 57 deletions

View File

@ -270,72 +270,48 @@ def ogCreateGptPartitions(*args):
#@note tabletype: { MSDOS, GPT }, MSDOS por defecto
#@note Requisitos: fdisk, gdisk, parted
#*/ ##
def ogCreatePartitionTable(*args):
# Variables locales
DISK = PTTYPE = CREATE = CREATEPTT = None
def ogCreatePartitionTable (disk, createptt=None):
DISK = ogDiskToDev (disk)
if not DISK: return None
# Si se solicita, mostrar ayuda.
if len(args) == 1 and args[0] == "help":
SystemLib.ogHelp('ogCreatePartitionTable', 'ogCreatePartitionTable int_ndisk [str_partype]',
'ogCreatePartitionTable 1 GPT', 'ogCreatePartitionTable 1')
return
pttype = ogGetPartitionTableType (disk) or 'MSDOS' # Por defecto para discos vacíos.
createptt = createptt or pttype
CREATE = None
# Error si no se reciben 1 o 2 parámetros.
if len(args) == 1:
CREATEPTT = ""
elif len(args) == 2:
CREATEPTT = args[1]
else:
SystemLib.ogRaiseError(OG_ERR_FORMAT)
return
# Capturamos el tipo de tabla de particiones actual
DISK = ogDiskToDev(args[0])
if DISK is None:
return
PTTYPE = ogGetPartitionTableType(args[0]) or "MSDOS" # Por defecto para discos vacíos.
CREATEPTT = CREATEPTT or PTTYPE
# Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla.
if CREATEPTT == PTTYPE:
if PTTYPE == "GPT":
# Si la tabla actual y la que se indica son iguales, se comprueba si hay que regenerarla.
if createptt == pttype:
if 'GPT' == pttype:
try:
result = subprocess.run(
["sgdisk", "-p", DISK],
stderr=subprocess.PIPE,
stdout=subprocess.DEVNULL
)
if result.returncode != 0:
CREATE = "GPT"
result = subprocess.run (['sgdisk', '-p', DISK])
if result.returncode:
CREATE = 'GPT'
except subprocess.CalledProcessError:
CREATE = "GPT"
elif PTTYPE == "MSDOS":
CREATE = 'GPT'
elif 'MSDOS' == pttype:
try:
result = subprocess.run(
["parted", "-s", DISK, "print"],
stderr=subprocess.PIPE,
stdout=subprocess.DEVNULL
)
if result.returncode != 0:
CREATE = "MSDOS"
result = subprocess.run (['parted', '-s', DISK, 'print'])
if result.returncode:
CREATE = 'MSDOS'
except subprocess.CalledProcessError:
CREATE = "MSDOS"
CREATE = 'MSDOS'
else:
CREATE = CREATEPTT
CREATE = createptt.upper()
# Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso.
if CREATE == "GPT":
if PTTYPE == "MSDOS":
subprocess.run(["sgdisk", "-go", DISK])
# Dependiendo del valor de CREATE, creamos la tabla de particiones en cada caso.
if 'GPT' == CREATE:
if 'MSDOS' == pttype:
subprocess.run (['sgdisk', '-go', DISK])
else:
subprocess.run(["gdisk", DISK], input="2\nw\nY\n", text=True)
subprocess.run(["partprobe", DISK], stderr=subprocess.DEVNULL)
elif CREATE == "MSDOS":
if PTTYPE == "GPT":
subprocess.run(["sgdisk", "-Z", DISK])
subprocess.run(["fdisk", DISK], input="o\nn\np\n\n\n\nd\n\nw", text=True)
subprocess.run(["partprobe", DISK], stderr=subprocess.DEVNULL)
return
subprocess.run (['gdisk', DISK], input='2\nw\nY\n', text=True)
subprocess.run (['partprobe', DISK])
elif 'MSDOS' == CREATE:
if 'GPT' == pttype:
subprocess.run (['sgdisk', '-Z', DISK])
# Crear y borrar una partición para que la tabla se genere bien.
subprocess.run (['fdisk', DISK], input='o\nn\np\n\n\n\nd\n\nw', text=True)
subprocess.run (['partprobe', DISK])
return None
#/**

View File

@ -0,0 +1,30 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from DiskLib import ogCreatePartitionTable
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogCreatePartitionTable', 'ogCreatePartitionTable int_ndisk [str_partype]', ['ogCreatePartitionTable 1 GPT', 'ogCreatePartitionTable 1'])
sys.exit (0)
parser = argparse.ArgumentParser (add_help=False)
if 2 == len (sys.argv):
parser.add_argument ('disk')
elif 3 == len (sys.argv):
parser.add_argument ('disk')
parser.add_argument ('createptt')
args = parser.parse_args()
if 2 == len (sys.argv):
ret = ogCreatePartitionTable (args.disk)
elif 3 == len (sys.argv):
ret = ogCreatePartitionTable (args.disk, args.createptt)
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (ret)