refs #1410 add ogGetLastSector
parent
451fa584b5
commit
e73e91dbc3
|
@ -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
|
||||
|
||||
|
||||
#/**
|
||||
|
|
|
@ -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)
|
Loading…
Reference in New Issue