refs #1414 add ogDeleteCache, fix a bug

pull/1/head
Natalia Serrano 2025-01-30 17:32:28 +01:00
parent 1c6b5ace16
commit 0b95027e5e
3 changed files with 42 additions and 25 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)