refs #1412 add ogCreatePartitionTable
parent
34bc9c3c89
commit
9e02db9136
|
@ -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
|
||||
|
||||
|
||||
#/**
|
||||
|
|
|
@ -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