refs #1330 add ogCheckFs

pull/1/head
Natalia Serrano 2025-01-28 13:17:12 +01:00
parent e266bf07c9
commit 6f59aaaca7
2 changed files with 74 additions and 105 deletions

View File

@ -30,116 +30,62 @@ import FileSystemLib
#@warning No se comprueban sistemas de archivos montados o bloqueados. #@warning No se comprueban sistemas de archivos montados o bloqueados.
#@todo Definir salidas. #@todo Definir salidas.
#*/ ## #*/ ##
def ogCheckFs(int_ndisk, int_nfilesys): def ogCheckFs (disk, par):
PART = DiskLib.ogDiskToDev (disk, par)
if not PART: return
if len(sys.argv) != 3: data = {
SystemLib.ogRaiseError( 'EXT2': { 'prog': 'e2fsck', 'params': '-y', 'codes': (1, 2), },
"session", 'EXT3': { 'prog': 'e2fsck', 'params': '-y', 'codes': (1, 2), },
ogGlobals.OG_ERR_FORMAT, 'EXT4': { 'prog': 'e2fsck', 'params': '-y', 'codes': (1, 2), },
"Not enough arguments" 'CACHE': { 'prog': 'e2fsck', 'params': '-y', 'codes': (1, 2), },
) 'BTRFS': { 'prog': 'btrfsck', 'codes': (1), },
return 'REISERFS': { 'prog': 'fsck.reiserfs', 'codes': (1, 2), 'input': 'Yes' },
'REISER4': { 'prog': 'fsck.reiser4', 'params': '-ay', },
# Obtener partición. 'JFS': { 'prog': 'fsck.jfs', 'codes': (1, 2), },
PART = DiskLib.ogDiskToDev(int_ndisk, int_nfilesys) 'XFS': { 'prog': 'xfs_repair', },
if not PART: 'F2FS': { 'prog': 'fsck.f2fs', },
return 'NTFS': { 'prog': 'ntfsfix', },
'EXFAT': { 'prog': 'fsck.exfat', },
TYPE = ogGetFsType(int_ndisk, int_nfilesys) 'FAT32': { 'prog': 'dosfsck', 'params': '-a', 'codes': (1), },
if TYPE == "EXT[234]" or TYPE == "CACHE": 'FAT16': { 'prog': 'dosfsck', 'params': '-a', 'codes': (1), },
PROG = "e2fsck" 'FAT12': { 'prog': 'dosfsck', 'params': '-a', 'codes': (1), },
PARAMS = "-y" 'HFS': { 'prog': 'fsck.hfs', 'params': '-f', },
CODES = [1, 2] 'HFSPLUS': { 'prog': 'fsck.hfs', 'params': '-f', },
elif TYPE == "BTRFS": 'UFS': { 'prog': 'fsck.ufs', },
PROG = "btrfsck" 'ZFS': { 'prog': 'fsck.zfs', },
CODES = [1] }
elif TYPE == "REISERFS": type = ogGetFsType (disk, par)
PROG = "fsck.reiserfs" if type in data:
PARAMS = "<<<\"Yes\"" prog = data[type]['prog']
CODES = [1, 2] params = data[type]['params'] if 'params' in data[type] else ''
elif TYPE == "REISER4": codes = data[type]['codes'] if 'codes' in data[type] else []
PROG = "fsck.reiser4" input = data[type]['input'] if 'input' in data[type] else None
PARAMS = "-ay"
elif TYPE == "JFS":
PROG = "fsck.jfs"
CODES = [1, 2]
elif TYPE == "XFS":
PROG = "xfs_repair"
elif TYPE == "F2FS":
PROG = "fsck.f2fs"
elif TYPE == "NTFS":
PROG = "ntfsfix"
elif TYPE == "EXFAT":
PROG = "fsck.exfat"
elif TYPE == "FAT32":
PROG = "dosfsck"
PARAMS = "-a"
CODES = [1]
elif TYPE == "FAT16":
PROG = "dosfsck"
PARAMS = "-a"
CODES = [1]
elif TYPE == "FAT12":
PROG = "dosfsck"
PARAMS = "-a"
CODES = [1]
elif TYPE == "HFS":
PROG = "fsck.hfs"
PARAMS = "-f"
elif TYPE == "HFSPLUS":
PROG = "fsck.hfs"
PARAMS = "-f"
elif TYPE == "UFS":
PROG = "fsck.ufs"
elif TYPE == "ZFS":
PROG = "fsck.zfs"
else: else:
SystemLib.ogRaiseError( SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk}, {par}, {type}')
"session", return None
ogGlobals.OG_ERR_PARTITION,
f"{int_ndisk}, {int_nfilesys}"
)
return
# Error si el sistema de archivos esta montado o bloqueado. ogUnmount (disk, par)
ogUnmount(int_ndisk, int_nfilesys) if ogIsMounted (disk, par):
if ogIsMounted(int_ndisk, int_nfilesys): SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk} {par}')
SystemLib.ogRaiseError( return None
"session", if ogIsLocked (disk, par):
ogGlobals.OG_ERR_PARTITION, SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_LOCKED, f'{disk} {par}')
f"{int_ndisk} {int_nfilesys}" return None
)
return
if ogIsLocked(int_ndisk, int_nfilesys):
SystemLib.ogRaiseError(
"session",
ogGlobals.OG_ERR_LOCKED,
f"{int_ndisk} {int_nfilesys}"
)
return
# Comprobar en modo uso exclusivo. ogLock (disk, par)
ogLock(int_ndisk, int_nfilesys) rc = subprocess.run ([prog] + params.split() + [PART], input=input, text=True).returncode
try: if 0 == rc or rc in codes:
result = subprocess.run([PROG, PARAMS, PART], capture_output=True) errcode = 0
ERRCODE = result.returncode elif 127 == rc:
except FileNotFoundError: SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_NOTEXEC, prog)
SystemLib.ogRaiseError( errcode = ogGlobals.OG_ERR_NOTEXEC
"session", else:
ogGlobals.OG_ERR_NOTEXEC, SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_PARTITION, f'{disk} {par}')
PROG errcode = ogGlobals.OG_ERR_PARTITION
)
ERRCODE = ogGlobals.OG_ERR_NOTEXEC
except:
SystemLib.ogRaiseError(
"session",
ogGlobals.OG_ERR_PARTITION,
f"{int_ndisk} {int_nfilesys}"
)
ERRCODE = ogGlobals.OG_ERR_PARTITION
ogUnlock(int_ndisk, int_nfilesys) ogUnlock (disk, par)
return ERRCODE return errcode
#/** #/**

View File

@ -0,0 +1,23 @@
#!/usr/bin/python3
import sys
import argparse
from SystemLib import ogHelp
from FileSystemLib import ogCheckFs
parser = argparse.ArgumentParser (add_help=False)
parser.add_argument ('disk')
parser.add_argument ('par')
if 2 == len (sys.argv) and 'help' == sys.argv[1]:
#parser.print_help() sale en inglés aunque la locale indique otra cosa
ogHelp ('ogCheckFs', 'ogCheckFs int_ndisk int_nfilesys', ['ogCheckFs 1 1'])
sys.exit (0)
args = parser.parse_args()
ret = ogCheckFs (args.disk, args.par)
if ret is not None:
if ret == True: sys.exit (0)
elif ret == False: sys.exit (1)
else: print (ret)