refs #2441 remove "sgdisk" call in ogCreateCache

pull/89/head
Natalia Serrano 2025-07-10 10:56:19 +02:00
parent 38be98d9f1
commit df36d74d7c
1 changed files with 19 additions and 17 deletions

View File

@ -42,7 +42,7 @@ def ogCreateCache (ndsk=1, part=4, sizecache=0):
return None return None
SIZE = 2 * sizecache SIZE = 2 * sizecache
# Inicio partición cache según el disco tenga sectores de 4k o menores # Inicio partición cache según el disco tenga sectores de 4k o menores
IOSIZE = DiskLib.ogGetIoSize (DISK) IOSIZE = DiskLib.ogGetIoSize (ndsk)
if not IOSIZE: if not IOSIZE:
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'Failed to get disk sector size') SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, f'Failed to get disk sector size')
return None return None
@ -89,30 +89,32 @@ def ogCreateCache (ndsk=1, part=4, sizecache=0):
subprocess.run (['gdisk', DISK], input='2\nw\nY\n', capture_output=True, text=True) subprocess.run (['gdisk', DISK], input='2\nw\nY\n', capture_output=True, text=True)
# Si existe la cache se borra previamente # Si existe la cache se borra previamente
if ogFindCache(): ogDeleteCache() if ogFindCache(): ogDeleteCache()
# Capturamos el codigo de particion GPT para cache
# PATCH - Cuando es GPT, la particion con codigo CACHE (CA00) no existe y no puede crearse, se cambia por LINUX (8300) ID = DiskLib.ogTypeToId ('LINUX', 'GPT_GUID')
ID = DiskLib.ogTypeToId ('LINUX', 'GPT') sfdisk_line = f'{DISK}{NVME_PREFIX}{part} : start= {START}, size= {SIZE}, type={ID}, name=CACHE'
subprocess.run (['sgdisk', DISK, f'-n{part}:{START}:{END}', f'-c{part}:CACHE', f'-t{part}:{ID}'])
elif 'MSDOS' == get_ptt: elif 'MSDOS' == get_ptt:
# Si la tabla de particiones no es valida, volver a generarla. # Si la tabla de particiones no es valida, volver a generarla.
if subprocess.run (['parted', '-s', DISK, 'print']).returncode: ## if True, then parted failed if subprocess.run (['parted', '-s', DISK, 'print']).returncode: ## if True, then parted failed
subprocess.run (['fdisk', DISK], input='w\n', text=True) subprocess.run (['fdisk', DISK], input='w\n', text=True)
# Definir particiones y notificar al kernel.
ID = DiskLib.ogTypeToId ('CACHE', 'MSDOS') ID = DiskLib.ogTypeToId ('CACHE', 'MSDOS')
# Salvamos la configuración de las particiones e incluimos la cache. sfdisk_line = f'{DISK}{NVME_PREFIX}{part} : start= {START}, size= {SIZE}, Id={ID}'
tmp = subprocess.run (['sfdisk', '--dump', DISK], capture_output=True, text=True).stdout.splitlines()
tmp = [ x for x in tmp if f'{DISK}{part}' not in x ]
tmp.append (f'{DISK}{NVME_PREFIX}{part} : start= {START}, size= {SIZE}, Id={ID}')
# Ordenamos las líneas de los dispositivos
UNIT = [ x for x in tmp if 'unit' in x ][0]
tmp = sorted ([ x for x in tmp if re.match ('^/dev', x) ])
tmp = [UNIT, ''] + tmp
# Guardamos nueva configuración en el disco.
i = '\n'.join(tmp)
subprocess.run (['sfdisk', '--no-reread', DISK], input=i, text=True)
else: else:
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, 'No hay tabla de particiones en el disco') SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_FORMAT, 'No hay tabla de particiones en el disco')
return False return False
# Salvamos la configuración de las particiones e incluimos la cache.
tmp = subprocess.run (['sfdisk', '--dump', DISK], capture_output=True, text=True).stdout.splitlines()
tmp = [ x for x in tmp if f'{DISK}{part}' not in x ] ## grep -v la_de_cache
tmp.append (sfdisk_line)
# Ordenamos las líneas de los dispositivos
UNIT = [ x for x in tmp if 'unit' in x ][0]
tmp = sorted ([ x for x in tmp if re.match ('^/dev', x) ])
tmp = [UNIT, ''] + tmp
# Guardamos nueva configuración en el disco.
i = '\n'.join(tmp)
subprocess.run (['sfdisk', '--no-reread', DISK], input=i, text=True)
# Actualiza la tabla de particiones en el kernel. # Actualiza la tabla de particiones en el kernel.
DiskLib.ogUpdatePartitionTable() DiskLib.ogUpdatePartitionTable()
return True return True