From 0b95027e5edcd7179c955d79f86c75c50f3cdb47 Mon Sep 17 00:00:00 2001 From: Natalia Serrano Date: Thu, 30 Jan 2025 17:32:28 +0100 Subject: [PATCH] refs #1414 add ogDeleteCache, fix a bug --- client/lib/engine/bin/CacheLib.py | 50 +++++++++++++------------- client/lib/engine/bin/FileSystemLib.py | 4 ++- client/shared/functions/ogDeleteCache | 13 +++++++ 3 files changed, 42 insertions(+), 25 deletions(-) create mode 100755 client/shared/functions/ogDeleteCache diff --git a/client/lib/engine/bin/CacheLib.py b/client/lib/engine/bin/CacheLib.py index d2303b1..19f7943 100755 --- a/client/lib/engine/bin/CacheLib.py +++ b/client/lib/engine/bin/CacheLib.py @@ -60,34 +60,36 @@ def ogCreateCache(ndisk=1, npart=4, partsize=None): #@return (nada, por determinar) #@exception OG_ERR_FORMAT formato incorrecto. #@note Requisitos: fdisk, sgdisk, partprobe -#@version 0.91 - Definición de caché local. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2010/03/11 -#@version 1.0.4 - Soporte para discos GPT. -#@author Universidad de Huelva -#@date 2012/03/13 -#@version 1.0.6b - llamada correcta a ogUpdatePartitionTable -#@author Antonio Doblas Universidad de Málaga -#@date 2016/11/16 -#@version 1.1.0 - Sustituir "sfdisk" por "fdisk" para discos MSDOS. -#@author Ramon Gomez, ETSII Universidad de Sevilla -#@date 2016/05/25 #*/ ## def ogDeleteCache(): - """ - Borra la partición utilizada para caché. - - :raises RuntimeError: Si ocurre un error durante la eliminación de la partición de caché. - """ cachepart = ogFindCache() - if cachepart is None: - raise RuntimeError("No se encontró la partición de caché.") + if not cachepart: + SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, ogGlobals.lang.MSG_NOCACHE) + return None - disk = f"/dev/sd{chr(96 + int(cachepart))}" - try: - subprocess.run(["parted", disk, "rm", cachepart], check=True) - except subprocess.CalledProcessError as e: - raise RuntimeError(f"Error al borrar la partición de caché: {e}") + ndisk, npart = cachepart.split() + disk = DiskLib.ogDiskToDev (ndisk) + +# Desmontar todos los sistemas de archivos del disco. + FileSystemLib.ogUnmountAll (ndisk) + + ptt = DiskLib.ogGetPartitionTableType (ndisk) + if 'GPT' == ptt: + # Si la tabla de particiones no es valida, volver a generarla. + if subprocess.run (['sgdisk', '-p', disk]).returncode: + subprocess.run (['gdisk', disk], input='2\nw\nY\n', text=True) + subprocess.run (['sgdisk', disk, f'-d{npart}']) + elif 'MSDOS' == ptt: + # Si la tabla de particiones no es valida, volver a generarla. + if subprocess.run (['parted', '-s', disk, 'print']).returncode: + subprocess.run (['fdisk', disk], input='w', text=True) + # Eliminar la partición de caché. + subprocess.run (['fdisk', disk], input=f'd\n{npart}\nw', text=True) +# Borrar etiqueta de la caché. + if os.path.exists ('/dev/disk/by-label/CACHE'): + os.unlink ('/dev/disk/by-label/CACHE') +#Actualiza la tabla de particiones en el kernel. + DiskLib.ogUpdatePartitionTable() #/** # ogFindCache diff --git a/client/lib/engine/bin/FileSystemLib.py b/client/lib/engine/bin/FileSystemLib.py index 9b01d35..bb4fc61 100755 --- a/client/lib/engine/bin/FileSystemLib.py +++ b/client/lib/engine/bin/FileSystemLib.py @@ -851,7 +851,9 @@ def ogUnmountFs(disk, par): #*/ ## def ogUnmountAll (disk): DISK = DiskLib.ogDiskToDev (disk) - for PART in range (1, DiskLib.ogGetPartitionsNumber (disk) + 1): + n = DiskLib.ogGetPartitionsNumber (disk) + if not n: return None + for PART in range (1, n+1): if 'CACHE' != ogGetFsType (disk, PART): ogUnmount (disk, PART) diff --git a/client/shared/functions/ogDeleteCache b/client/shared/functions/ogDeleteCache new file mode 100755 index 0000000..80914b8 --- /dev/null +++ b/client/shared/functions/ogDeleteCache @@ -0,0 +1,13 @@ +#!/usr/bin/python3 + +import sys +import argparse +from SystemLib import ogHelp +from CacheLib import ogDeleteCache + +ret = ogDeleteCache() + +if ret is not None: + if ret == True: sys.exit (0) + elif ret == False: sys.exit (1) + else: print (ret)