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