summaryrefslogtreecommitdiffstats
path: root/client/engine/FileSystem.lib
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2013-05-22 09:28:59 +0000
committerramon <ramongomez@us.es>2013-05-22 09:28:59 +0000
commit31985122bacd862018135710518be34a0dc26d48 (patch)
tree70f9ccbcad376db0d225edcbf0f22790dbac7661 /client/engine/FileSystem.lib
parentcd1f0487198003f9895015cb8254bb848d5d2016 (diff)
#602: Mejoras en librería {{{FileSystem}}}:
* Simplificar función {{{ogFormatFs}}}. * Operaciones completas para Btrfs y Reiser 3/4. * Soporte casi completo para exFAT (FAT 64). * Añadir comprobación de UFS. git-svn-id: https://opengnsys.es/svn/branches/version1.0@3809 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client/engine/FileSystem.lib')
-rwxr-xr-xclient/engine/FileSystem.lib146
1 files changed, 64 insertions, 82 deletions
diff --git a/client/engine/FileSystem.lib b/client/engine/FileSystem.lib
index 15ccb124..ef0d1a4d 100755
--- a/client/engine/FileSystem.lib
+++ b/client/engine/FileSystem.lib
@@ -30,7 +30,7 @@
#@version 1.0.4 - Soportar HFS/HFS+.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-05-21
-#@version 1.0.5 - Desmontar antes de comprobar, soportar Btrfs.
+#@version 1.0.5 - Desmontar antes de comprobar, soportar Btrfs y ExFAT.
#@author Ramon Gomez, ETSII Universidad de Sevilla
#@date 2012-09-05
#*/ ##
@@ -59,11 +59,13 @@ case "$TYPE" in
JFS) PROG="fsck.jfs"; CODES=(1 2) ;;
XFS) PROG="fsck.xfs" ;;
NTFS) PROG="ntfsfix" ;;
+ EXFAT) PROG="fsck.exfat" ;;
FAT32) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT16) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
FAT12) PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
HFS) PROG="fsck.hfs" ;;
HFSPLUS) PROG="fsck.hfsplus" ;;
+ UFS) PROG="fsck.ufs" ;;
*) ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
return $? ;;
esac
@@ -118,7 +120,7 @@ return $ERRCODE
function ogExtendFs ()
{
# Variables locales.
-local PART TYPE PROG PARAMS ERRCODE
+local PART TYPE PROG PARAMS ERRCODE DOMOUNT
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -136,19 +138,25 @@ PART="$(ogDiskToDev $1 $2)" || return $?
TYPE=$(ogGetFsType $1 $2)
case "$TYPE" in
EXT[234]) PROG="resize2fs"; PARAMS="-f" ;;
- BTRFS) PROG="btrfs"; PARAMS="filesystem resize max" ;;
- REISERFS) PROG="resize_reiserfs"; PARAMS="-f" ;;
+ BTRFS) PROG="btrfs"; PARAMS="filesystem resize max"
+ DOMOUNT=1 # Debe estar montado.
+ ;;
+ REISERFS|REISER4)
+ PROG="resize_reiserfs"; PARAMS="-f" ;;
NTFS) PROG="ntfsresize"; PARAMS="<<<\"y\" -f" ;;
# FAT32|FAT16) # Usar "fatresize"
*) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
return $? ;;
esac
-# Error si el sistema de archivos está montado o bloqueado.
-ogUnmount $1 $2 2>/dev/null
-if ogIsMounted $1 $2; then
- ogRaiseError $OG_ERR_PARTITION "$1 $2" # Indicar nuevo error
- return $?
+# Error si el sistema de archivos no se queda en el estado de montaje adecuado.
+if [ "$DOMOUNT" ]; then
+ PART=$(ogMount $1 $2)
+ [ -n "$PART" ] || ogRaiseError $OG_ERR_PARTITION "$1 $2" || return $? # Indicar nuevo error
+else
+ ogUnmount $1 $2 2>/dev/null
+ [ ogIsMounted $1 $2 ] || ogRaiseError $OG_ERR_PARTITION "$1 $2" || return $? # Indicar nuevo error
fi
+# Error si el sistema de archivos está bloqueado.
if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$1 $2"
return $?
@@ -188,10 +196,10 @@ esac
#@brief Formatea un sistema de ficheros según el tipo de su partición.
#@param int_ndisk nº de orden del disco
#@param int_nfilesys nº de orden del sistema de archivos
-#@param type_fstype mnemónico de sistema de ficheros a formatear
+#@param type_fstype mnemónico de sistema de ficheros a formatear (opcional al reformatear)
#@param str_label etiqueta de volumen (opcional)
#@return (por determinar)
-#@exception OG_ERR_FORMAT Formato incorrecto.
+#@exception OG_ERR_FORMAT Formato de ejecución incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@exception OG_ERR_PARTITION Partición no accesible o desconocida.
#@note Requisitos: mkfs*
@@ -203,14 +211,14 @@ esac
#@version 1.0.4 - Solucionado error cuando no se detecta tipo de sistema de ficheros pero si se indica.
#@author Universidad de Huelva
#@date 2012-04-11
-#@version 1.0.5 - Comprobar errores al inicio y desmontar antes de formatear.
+#@version 1.0.5 - Comprobar errores al inicio e independizar del tipo de tabla de particiones.
#@author Universidad de Huelva
-#@date 2012-12-14
+#@date 2013-05-16
#*/ ##
function ogFormatFs ()
{
# Variables locales
-local PART ID TYPE LABEL PROG PARAMS ERRCODE
+local PART ID TYPE LABEL PROG PARAMS LABELPARAM ERRCODE
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -234,81 +242,46 @@ if ogIsLocked $1 $2; then
ogRaiseError $OG_ERR_LOCKED "$1 $2"
return $?
fi
-# Obtener tipo de sisitema de archivos.
-TYPE="$(ogGetFsType $1 $2)"
-if [ -z "$TYPE" ]; then
- # Si no se indico ningun tipo de sistema de ficheros se retorna
- if [ -z "$3" ]; then
- return $?
- else
- # Si no se detecto, se asigna el indicado
- TYPE="$3"
- fi
-fi
+# Si no se indica el tipo de sisitema de archivos, intentar obtenerlo.
+TYPE="${3:-$(ogGetFsType $1 $2)}"
+# Error, si no especifica el tipo de sistema de archivos a formatear.
+[ -n "$TYPE" ] || ogRaiseError $OG_ERR_FORMAT "$1 $2 ..." || return $?
-# Elegir tipo de formato segun el tipo de particion.
-case "$3" in
- EXT2) ID=83; PROG="mkfs.ext2" ;;
- EXT3) ID=83; PROG="mkfs.ext3" ;;
- EXT4) ID=83; PROG="mkfs.ext4" ;;
- BTRFS) ID=83; PROG="mkfs.btrfs" ;;
- REISERFS) ID=83; PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) ID=83; PROG="mkfs.reiser4" ;;
- XFS) ID=83; PROG="mkfs.xfs"; PARAMS="-f" ;;
- JFS) ID=83; PROG="mkfs.jfs"; PARAMS="<<<\"y\"";;
- NTFS) ID=7; PROG="mkntfs"; PARAMS="-f" ;;
- HNTFS) ID=17; PROG="mkntfs"; PARAMS="-f" ;;
- FAT32) ID=b; PROG="mkdosfs"; PARAMS="-F 32" ;;
- HFAT32) ID=1b; PROG="mkdosfs"; PARAMS="-F 32" ;;
- FAT16) ID=6; PROG="mkdosfs"; PARAMS="-F 16" ;;
- HFAT16) ID=16; PROG="mkdosfs"; PARAMS="-F 16" ;;
- FAT12) ID=1; PROG="mkdosfs"; PARAMS="-F 12" ;;
- HFAT12) ID=11; PROG="mkdosfs"; PARAMS="-F 12" ;;
- HFS) ID=af; PROG="mkfs.hfs" ;;
- HFSPLUS) ID=af; PROG="mkfs.hfsplus" ;;
- UFS) ID=bf; PROG="mkfs.ufs"; PARAMS="-O 2" ;;
- *) LABEL="$3" ;;
+# Elegir tipo de formato.
+case "$TYPE" in
+ EXT2) PROG="mkfs.ext2" ;;
+ EXT3) PROG="mkfs.ext3" ;;
+ EXT4) PROG="mkfs.ext4" ;;
+ BTRFS) PROG="mkfs.btrfs" ;;
+ REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f"; LABELPARAM="-l" ;;
+ REISER4) PROG="mkfs.reiser4"; PARAMS="-fy" ;;
+ XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
+ JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
+ LINUX-SWAP) PROG="mkswap" ;;
+ NTFS) PROG="mkntfs"; PARAMS="-f" ;;
+ EXFAT) PROG="mkfs.exfat"; LABELPARAM="-n" ;;
+ FAT32) PROG="mkdosfs"; PARAMS="-F 32"; LABELPARAM="-n" ;;
+ FAT16) PROG="mkdosfs"; PARAMS="-F 16"; LABELPARAM="-n" ;;
+ FAT12) PROG="mkdosfs"; PARAMS="-F 12"; LABELPARAM="-n" ;;
+ HFS) PROG="mkfs.hfs" ;;
+ HFSPLUS) PROG="mkfs.hfsplus"; LABELPARAM="-v" ;;
+ UFS) PROG="mkfs.ufs"; PARAMS="-O 2" ;;
+ *) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
+ return $? ;;
esac
-# Si no se indica explícitamente, detectar el tipo de sistema de archivos.
-if [ -z "$PROG" ]; then
- case "$TYPE" in
- EXT2) PROG="mkfs.ext2" ;;
- EXT3) PROG="mkfs.ext3" ;;
- EXT4) PROG="mkfs.ext4" ;;
- BTRFS) PROG="mkfs.btrfs" ;;
- REISERFS) PROG="mkfs.reiserfs"; PARAMS="-f" ;;
- REISER4) PROG="mkfs.reiser4" ;;
- XFS) PROG="mkfs.xfs"; PARAMS="-f" ;;
- JFS) PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
- LINUX-SWAP) PROG="mkswap" ;;
- NTFS) PROG="mkntfs"; PARAMS="-f" ;;
- FAT32) PROG="mkdosfs"; PARAMS="-F 32" ;;
- FAT16) PROG="mkdosfs"; PARAMS="-F 16" ;;
- FAT12) PROG="mkdosfs"; PARAMS="-F 12" ;;
- HFS) PROG="mkfs.hfs" ;;
- HFSPLUS) PROG="mkfs.hfsplus" ;;
- UFS) PROG="mkfs.ufs"; PARAMS="-O 2" ;;
- *) ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
- return $? ;;
- esac
-else
- [ $TYPE == "$3" -o $ID == "$(ogGetPartitionId $1 $2)" ] || ogRaiseError $OG_ERR_PARTITION "$3 != $TYPE" || return $?
-fi
-# Comprobar consistencia entre id. de partición y tipo de sistema de archivos.
-[ -n "$PROG" ] || ogRaiseError $OG_ERR_PARTITION "$3 != $TYPE" || return $?
# Etiquetas de particion.
if [ -z "$LABEL" ]; then
[ "$4" != "CACHE" ] || ogRaiseError $OG_ERR_FORMAT "$MSG_RESERVEDVALUE: CACHE" || return $?
- [ -n "$4" ] && PARAMS="$PARAMS -L $4"
+ [ -n "$4" ] && PARAMS="$PARAMS ${LABELPARAM:-"-L"} $4"
else
- PARAMS="$PARAMS -L $LABEL"
+ PARAMS="$PARAMS ${LABELPARAM:-"-L"} $LABEL"
fi
# Formatear en modo uso exclusivo (desmontar siempre).
ogLock $1 $2
trap "ogUnlock $1 $2" 1 2 3 6 9
-umount $PART
+umount $PART 2>/dev/null
eval $PROG $PARAMS $PART 2>/dev/null
ERRCODE=$?
case $ERRCODE in
@@ -383,7 +356,7 @@ echo ${SIZE%.0*}
#@param int_ndisk nº de orden del disco
#@param int_nfilesys nº de orden del sistema de archivos
#@return Mnemonico
-#@note Mnemonico: { EXT2, EXT3, EXT4, REISERFS, XFS, JFS, FAT16, FAT32, NTFS, CACHE }
+#@note Mnemonico: { EXT2, EXT3, EXT4, BTRFS, REISERFS, XFS, JFS, FAT32, NTFS, CACHE }
#@exception OG_ERR_FORMAT Formato incorrecto.
#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS() en ATA.lib
@@ -760,10 +733,19 @@ case "$(ogGetFsType $1 $2)" in
#resize2fs -fp $PART "${SIZE}M" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
resize2fs -fpM $PART &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
;;
-# BTRFS) # Usar "btrfs"
-# ;;
-# REISERFS) # Usar "resize_reiserfs"
-# ;;
+ BTRFS)
+ MNTDIR=$(ogMount $1 $2)
+ # Calcular tamaño ocupado + 10%.
+ SIZE=$[ $(df -k $MNTDIR | awk '{getline;print $3}') * 110 / 100 ]
+ btrfs filesystem resize ${SIZE}k $MNTDIR
+ ;;
+ REISERFS|REISER4)
+ MNTDIR=$(ogMount $1 $2)
+ # Calcular tamaño ocupado + 10%.
+ SIZE=$[ $(df -k $MNTDIR | awk '{getline;print $3}') * 110 / 100 ]
+ ogUnmount $1 $2 2>/dev/null
+ resize_reiserfs -s${SIZE}K $PART
+ ;;
NTFS)
ogDeleteFile $1 $2 pagefile.sys
ogDeleteFile $1 $2 hiberfil.sys