diff --git a/client/lib/engine/bin/DiskLib.py b/client/lib/engine/bin/DiskLib.py index dcde73f..e700cc4 100755 --- a/client/lib/engine/bin/DiskLib.py +++ b/client/lib/engine/bin/DiskLib.py @@ -722,39 +722,31 @@ def ogGetEsp(): #@exception OG_ERR_NOTFOUND Disco o partición no corresponde con un dispositivo. #@note Requisitos: sfdisk, sgdisk #*/ ## -def ogGetLastSector(*args): - # Variables locales - DISK = None - PART = None - LASTSECTOR = None +def ogGetLastSector (disk, par=None): + DISK = ogDiskToDev (disk) + if not DISK: return None + env = os.environ + env['LANG'] = 'C' + last = None + if par: + PART = ogDiskToDev (disk, par) + if not PART: return None + sgdisk_out = subprocess.run (['sgdisk', '-p', DISK], env=env, capture_output=True, text=True).stdout + for l in sgdisk_out.splitlines(): + items = l.split() + if len(items) < 3: continue + if par != items[0]: continue + last = items[2] + break - # Si se solicita, mostrar ayuda. - if len(args) == 1 and args[0] == "help": - SystemLib.ogHelp("ogGetLastSector", "ogGetLastSector int_ndisk [int_npart]", - "ogGetLastSector 1 => 488392064", - "ogGetLastSector 1 1 => 102400062") - return + else: + sgdisk_out = subprocess.run (['sgdisk', '-p', DISK], env=env, capture_output=True, text=True).stdout + for l in sgdisk_out.splitlines(): + if 'last usable sector' not in l: continue + items = l.split() + last = items[-1] - # Obtener último sector. - if len(args) == 1: # Para un disco. - DISK = ogDiskToDev(args[0]) - if DISK is None: - return - LASTSECTOR = subprocess.getoutput(f"sgdisk -p {DISK} | awk '/last usable sector/ {{print($(NF))}}'") - elif len(args) == 2: # Para una partición. - DISK = ogDiskToDev(args[0]) - if DISK is None: - return - PART = ogDiskToDev(args[0], args[1]) - if PART is None: - return - LASTSECTOR = subprocess.getoutput(f"sgdisk -p {DISK} | awk -v P='{args[1]}' '{{if ($1==P) print $3}}'") - else: # Error si se reciben más parámetros. - SystemLib.ogRaiseError(OG_ERR_FORMAT) - return - - print(LASTSECTOR) - return + return last #/** diff --git a/client/shared/functions/ogGetLastSector b/client/shared/functions/ogGetLastSector new file mode 100755 index 0000000..4723660 --- /dev/null +++ b/client/shared/functions/ogGetLastSector @@ -0,0 +1,30 @@ +#!/usr/bin/python3 + +import sys +import argparse +from SystemLib import ogHelp +from DiskLib import ogGetLastSector + +if 2 == len (sys.argv) and 'help' == sys.argv[1]: + #parser.print_help() sale en inglés aunque la locale indique otra cosa + ogHelp ('ogGetLastSector', 'ogGetLastSector int_ndisk [int_npart]', ['ogGetLastSector 1'], ['ogGetLastSector 1 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 ('par') + +args = parser.parse_args() + +if 2 == len (sys.argv): + ret = ogGetLastSector (args.disk) +elif 3 == len (sys.argv): + ret = ogGetLastSector (args.disk, args.par) + +if ret is not None: + if ret == True: sys.exit (0) + elif ret == False: sys.exit (1) + else: print (ret)