source: client/engine/FileSystem.lib @ cca8f29

918-git-images-111dconfigfileconfigure-oglivegit-imageslgromero-new-oglivemainmaint-cronmount-efivarfsmultivmmultivm-ogboot-installerogClonningEngineogboot-installer-jenkinsoglive-ipv6test-python-scriptsticket-301ticket-50ticket-50-oldticket-577ticket-585ticket-611ticket-612ticket-693ticket-700ubu24tplunification2use-local-agent-oglivevarios-instalacionwebconsole3
Last change on this file since cca8f29 was 066fa01, checked in by ramon <ramongomez@…>, 12 years ago

Versión 1.0.5: Desmontar usando umount en función ogFormatFs.

git-svn-id: https://opengnsys.es/svn/branches/version1.0@3471 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 31.9 KB
RevLine 
[2e15649]1#!/bin/bash
2#/**
3#@file    FileSystem.lib
[9f57de01]4#@brief   Librería o clase FileSystem
[2e15649]5#@class   FileSystem
6#@brief   Funciones para gestión de sistemas de archivos.
[452ade2]7#@version 1.0.5
[2e15649]8#@warning License: GNU GPLv3+
9#*/
10
11
[be81649]12#/**
[b6208d8]13#         ogCheckFs int_ndisk int_nfilesys
[be81649]14#@brief   Comprueba el estado de un sistema de archivos.
[42669ebf]15#@param   int_ndisk      nº de orden del disco
[b6208d8]16#@param   int_nfilesys   nº de orden del sistema de archivos
[be81649]17#@return  (nada)
18#@exception OG_ERR_FORMAT    Formato incorrecto.
19#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
20#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
21#@note    Requisitos: *fsck*
[a3348ce]22#@warning No se comprueban sistemas de archivos montados o bloqueados.
23#@todo    Definir salidas.
[1616b6e]24#@version 0.9 - Primera adaptación para OpenGnSys.
[be81649]25#@author  Ramon Gomez, ETSII Universidad de Sevilla
26#@date    2009-10-07
[1616b6e]27#@version 1.0.2 - Ignorar códigos de salida de comprobación (no erróneos).
28#@author  Ramon Gomez, ETSII Universidad de Sevilla
29#@date    2011-09-23
[02f271b]30#@version 1.0.4 - Soportar HFS/HFS+.
31#@author  Ramon Gomez, ETSII Universidad de Sevilla
32#@date    2012-05-21
[3011075]33#@version 1.0.5 - Desmontar antes de comprobar.
34#@author  Ramon Gomez, ETSII Universidad de Sevilla
35#@date    2012-09-05
[6e390b1]36#*/ ##
[42669ebf]37function ogCheckFs ()
38{
[3458879]39# Variables locales.
[cbbb046]40local PART TYPE PROG PARAMS CODES ERRCODE
41# Si se solicita, mostrar ayuda.
42if [ "$*" == "help" ]; then
[e087194]43    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[cbbb046]44           "$FUNCNAME 1 1"
45    return
46fi
[be81649]47
[1616b6e]48# Error si no se reciben 2 parámetros.
[1956672]49[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
[1616b6e]50# Obtener partición.
[1956672]51PART="$(ogDiskToDev $1 $2)" || return $?
[be81649]52
53TYPE=$(ogGetFsType $1 $2)
54case "$TYPE" in
[99d1786]55    EXT[234])     PROG="e2fsck"; PARAMS="-y"; CODES=(1 2) ;;
[ea8051a]56    REISERFS)     PROG="fsck.reiserfs"; PARAMS="<<<\"Yes\""; CODES=(1 2) ;;
[1616b6e]57    REISER4)      PROG="fsck.reiser4"; PARAMS="-ay" ;;
[ea8051a]58    JFS)          PROG="fsck.jfs"; CODES=(1 2) ;;
[a3348ce]59    XFS)          PROG="fsck.xfs" ;;
[5804229]60    NTFS)         PROG="ntfsfix" ;;
61    FAT32)        PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
62    FAT16)        PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
63    FAT12)        PROG="dosfsck"; PARAMS="-a"; CODES=1 ;;
[02f271b]64    HFS)          PROG="fsck.hfs" ;;
[b6208d8]65    HFSPLUS)      PROG="fsck.hfsplus" ;;
[c7d9af7]66    *)            ogRaiseError $OG_ERR_PARTITION "$1, $2, $TYPE"
[1616b6e]67                  return $? ;;
[1956672]68esac
[1616b6e]69# Error si el sistema de archivos esta montado o bloqueado.
[3011075]70ogUnmount $1 $2
[a3348ce]71if ogIsMounted $1 $2; then
[7250491]72    ogRaiseError $OG_ERR_PARTITION "$1 $2"       # Indicar nuevo error
[a3348ce]73    return $?
74fi
75if ogIsLocked $1 $2; then
76    ogRaiseError $OG_ERR_LOCKED "$1 $2"
77    return $?
78fi
[1616b6e]79# Comprobar en modo uso exclusivo.
[a3348ce]80ogLock $1 $2
[7b9dedd]81trap "ogUnlock $1 $2" 1 2 3 6 9
[a3348ce]82eval $PROG $PARAMS $PART
83ERRCODE=$?
84case $ERRCODE in
[ea8051a]85    0|${CODES[*]})
86            ERRCODE=0 ;;
87    127)    ogRaiseError $OG_ERR_NOTEXEC "$PROG"
88            ERRCODE=$OG_ERR_NOTEXEC ;;
89    *)      ogRaiseError $OG_ERR_PARTITION "$1 $2"
90            ERRCODE=$OG_ERR_PARTITION ;;
[a3348ce]91esac
92ogUnlock $1 $2
93return $ERRCODE
[1956672]94}
95
96
[2e15649]97#/**
[e087194]98#         ogExtendFs int_ndisk int_nfilesys
[3f49cf7]99#@brief   Extiende un sistema de archivos al tamaño de su partición.
[42669ebf]100#@param   int_ndisk      nº de orden del disco
[b6208d8]101#@param   int_nfilesys   nº de orden del sistema de archivos
[3f49cf7]102#@return  (nada)
103#@exception OG_ERR_FORMAT   Formato incorrecto.
104#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
105#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
106#@note    Requisitos: *resize*
[985bef0]107#@version 0.1 -  Integracion para Opengnsys  -  EAC:   EnlargeFileSystem() en ATA.lib
108#@author  Antonio J. Doblas Viso. Universidad de Malaga
109#@date    2008-10-27
[b6208d8]110#@version 0.9 - Primera adaptacion para OpenGnSys.
[3f49cf7]111#@author  Ramon Gomez, ETSII Universidad de Sevilla
112#@date    2009-09-23
[452ade2]113#@version 1.0.5 - Soporte para BTRFS.
114#@author  Ramon Gomez, ETSII Universidad de Sevilla
115#@date    2012-06-28
[6e390b1]116#*/ ##
[42669ebf]117function ogExtendFs ()
118{
[3f49cf7]119# Variables locales.
[cbbb046]120local PART TYPE PROG PARAMS ERRCODE
[3f49cf7]121
[1616b6e]122# Si se solicita, mostrar ayuda.
[3f49cf7]123if [ "$*" == "help" ]; then
[e087194]124    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[3f49cf7]125           "$FUNCNAME 1 1"
126    return
127fi
[1616b6e]128# Error si no se reciben 2 parámetros.
[3f49cf7]129[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
130
[1616b6e]131# Obtener partición.
[3f49cf7]132PART="$(ogDiskToDev $1 $2)" || return $?
133
[1616b6e]134# Redimensionar al tamano máximo según el tipo de partición.
[be81649]135TYPE=$(ogGetFsType $1 $2)
136case "$TYPE" in
[2717297]137    EXT[234])   PROG="resize2fs"; PARAMS="-f" ;;
138    REISERFS)   PROG="resize_reiserfs"; PARAMS="-f" ;;
[452ade2]139    BTRFS)      PROG="btrfs"; PARAMS="filesystem resize max" ;;
[5804229]140    NTFS)       PROG="ntfsresize"; PARAMS="<<<\"y\" -f" ;;
[743257e]141#    FAT32|FAT16)       # Usar "fatresize"
[2717297]142    *)          ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
143                return $? ;;
[3f49cf7]144esac
[1616b6e]145# Error si el sistema de archivos está montado o bloqueado.
[e087194]146ogUnmount $1 $2 2>/dev/null
[2717297]147if ogIsMounted $1 $2; then
[7250491]148    ogRaiseError $OG_ERR_PARTITION "$1 $2"       # Indicar nuevo error
[2717297]149    return $?
150fi
151if ogIsLocked $1 $2; then
152    ogRaiseError $OG_ERR_LOCKED "$1 $2"
153    return $?
154fi
[1616b6e]155# Redimensionar en modo uso exclusivo.
[2717297]156ogLock $1 $2
[7b9dedd]157trap "ogUnlock $1 $2" 1 2 3 6 9
[1c04494]158eval $PROG $PARAMS $PART &>/dev/null
[2717297]159ERRCODE=$?
160case $ERRCODE in
161    0)    ;;
[ea8051a]162    127)  ogRaiseError $OG_ERR_NOTEXEC "$PROG"
163          ERRCODE=$OG_ERR_NOTEXEC ;;
164    *)    ogRaiseError $OG_ERR_PARTITION "$1 $2"
165          ERRCODE=$OG_ERR_PARTITION ;;
[2717297]166esac
167ogUnlock $1 $2
168return $ERRCODE
[3f49cf7]169}
170
171
172#/**
[e087194]173#         ogFormat int_ndisk int_nfilesys | CACHE
[e09311f]174#@see     ogFormatFs ogFormatCache
[6e390b1]175#*/ ##
[42669ebf]176function ogFormat ()
177{
[e09311f]178case "$*" in
179    CACHE|cache)  ogFormatCache ;;
180    *)            ogFormatFs "$@" ;;
181esac
[40488da]182}
183
184
185#/**
[b6208d8]186#         ogFormatFs int_ndisk int_nfilesys [type_fstype] [str_label]
[40488da]187#@brief   Formatea un sistema de ficheros según el tipo de su partición.
[42669ebf]188#@param   int_ndisk      nº de orden del disco
[b6208d8]189#@param   int_nfilesys   nº de orden del sistema de archivos
[42669ebf]190#@param   type_fstype    mnemónico de sistema de ficheros a formatear
191#@param   str_label      etiqueta de volumen (opcional)
[40488da]192#@return  (por determinar)
193#@exception OG_ERR_FORMAT    Formato incorrecto.
194#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
195#@exception OG_ERR_PARTITION Partición no accesible o desconocida.
[a3348ce]196#@note    Requisitos:   mkfs*
197#@warning No formatea particiones montadas ni bloqueadas.
198#@todo    Definir salidas.
[b6208d8]199#@version 0.9 - Primera versión para OpenGnSys.
[40488da]200#@author  Ramon Gomez, ETSII Universidad de Sevilla
[a3348ce]201#@date    2009-10-08
[066fa01]202#@version 1.0.4 - Solucionado error cuando no se detecta tipo de sistema de ficheros pero si se indica.
[e068946]203#@author  Universidad de Huelva
204#@date    2012-04-11
[066fa01]205#@version 1.0.5 - Comprobar errores al inicio y desmontar antes de formatear.
206#@author  Universidad de Huelva
207#@date    2012-12-14
[1e7eaab]208#*/ ##
[42669ebf]209function ogFormatFs ()
210{
[40488da]211# Variables locales
[be81649]212local PART ID TYPE LABEL PROG PARAMS ERRCODE
[40488da]213
[42669ebf]214# Si se solicita, mostrar ayuda.
[40488da]215if [ "$*" == "help" ]; then
[e087194]216    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys [str_label]" \
[40488da]217           "$FUNCNAME 1 1" \
[be81649]218           "$FUNCNAME 1 1 EXT4" \
[55ad138c]219           "$FUNCNAME 1 1 \"DATA\"" \
220           "$FUNCNAME 1 1 EXT4 \"DATA\""
[40488da]221    return
222fi
[1e7eaab]223# Error si no se reciben entre 2 y 4 parámetros.
[be81649]224[ $# -ge 2 -a $# -le 4 ] || ogRaiseError $OG_ERR_FORMAT || return $?
[8e29877]225# Obtener fichero de dispositivo.
[40488da]226PART="$(ogDiskToDev $1 $2)" || return $?
[8e29877]227# Error si la partición está montada o bloqueada.
228if ogIsMounted $1 $2; then
229    ogRaiseError $OG_ERR_PARTITION "$1 $2"       # Indicar nuevo error
230    return $?
231fi
232if ogIsLocked $1 $2; then
233    ogRaiseError $OG_ERR_LOCKED "$1 $2"
234    return $?
235fi
236# Obtener tipo de sisitema de archivos.
[e068946]237TYPE="$(ogGetFsType $1 $2)"
238if [ -z "$TYPE" ]; then
239    # Si no se indico ningun tipo de sistema de ficheros se retorna
240    if [ -z "$3" ]; then
241        return $?
242    else
243    # Si no se detecto, se asigna el indicado
244        TYPE="$3"
245    fi
246fi
[be81649]247
[1e7eaab]248# Elegir tipo de formato segun el tipo de particion.
[be81649]249case "$3" in
[68f360e]250    EXT2)      ID=83; PROG="mkfs.ext2" ;;
251    EXT3)      ID=83; PROG="mkfs.ext3" ;;
252    EXT4)      ID=83; PROG="mkfs.ext4" ;;
253    BTRFS)     ID=83; PROG="mkfs.btrfs" ;;
[a3348ce]254    REISERFS)  ID=83; PROG="mkfs.reiserfs"; PARAMS="-f" ;;
[68f360e]255    REISER4)   ID=83; PROG="mkfs.reiser4" ;;
[a3348ce]256    XFS)       ID=83; PROG="mkfs.xfs"; PARAMS="-f" ;;
257    JFS)       ID=83; PROG="mkfs.jfs"; PARAMS="<<<\"y\"";;
[3458879]258    NTFS)      ID=7;  PROG="mkntfs"; PARAMS="-f" ;;
[a3348ce]259    HNTFS)     ID=17; PROG="mkntfs"; PARAMS="-f" ;;
[c7d9af7]260    FAT32)     ID=b;  PROG="mkdosfs"; PARAMS="-F 32" ;;
261    HFAT32)    ID=1b; PROG="mkdosfs"; PARAMS="-F 32" ;;
262    FAT16)     ID=6;  PROG="mkdosfs"; PARAMS="-F 16" ;;
263    HFAT16)    ID=16; PROG="mkdosfs"; PARAMS="-F 16" ;;
264    FAT12)     ID=1;  PROG="mkdosfs"; PARAMS="-F 12" ;;
265    HFAT12)    ID=11; PROG="mkdosfs"; PARAMS="-F 12" ;;
[02f271b]266    HFS)       ID=af; PROG="mkfs.hfs" ;;
[b6208d8]267    HFSPLUS)   ID=af; PROG="mkfs.hfsplus" ;;
[68f360e]268    UFS)       ID=bf; PROG="mkfs.ufs"; PARAMS="-O 2" ;;
[be81649]269    *)         LABEL="$3" ;;
[40488da]270esac
[1e7eaab]271# Si no se indica explícitamente, detectar el tipo de sistema de archivos.
[be81649]272if [ -z "$PROG" ]; then
273    case "$TYPE" in
[68f360e]274        EXT2)         PROG="mkfs.ext2" ;;
275        EXT3)         PROG="mkfs.ext3" ;;
276        EXT4)         PROG="mkfs.ext4" ;;
277        BTRFS)        PROG="mkfs.btrfs" ;;
[a3348ce]278        REISERFS)     PROG="mkfs.reiserfs"; PARAMS="-f" ;;
[68f360e]279        REISER4)      PROG="mkfs.reiser4" ;;
[a3348ce]280        XFS)          PROG="mkfs.xfs"; PARAMS="-f" ;;
[1616b6e]281        JFS)          PROG="mkfs.jfs"; PARAMS="<<<\"y\"" ;;
282        LINUX-SWAP)   PROG="mkswap" ;;
[b6208d8]283        NTFS)         PROG="mkntfs"; PARAMS="-f" ;;
284        FAT32)        PROG="mkdosfs"; PARAMS="-F 32" ;;
285        FAT16)        PROG="mkdosfs"; PARAMS="-F 16" ;;
286        FAT12)        PROG="mkdosfs"; PARAMS="-F 12" ;;
[02f271b]287        HFS)          PROG="mkfs.hfs" ;;
[b6208d8]288        HFSPLUS)      PROG="mkfs.hfsplus" ;;
[68f360e]289        UFS)          PROG="mkfs.ufs"; PARAMS="-O 2" ;;
[be81649]290        *)            ogRaiseError $OG_ERR_PARTITION "$1 $2 $TYPE"
291                      return $? ;;
292    esac
293else
[a3348ce]294    [ $TYPE == "$3" -o $ID == "$(ogGetPartitionId $1 $2)" ] || ogRaiseError $OG_ERR_PARTITION "$3 != $TYPE" || return $?
[be81649]295fi
[1e7eaab]296# Comprobar consistencia entre id. de partición y tipo de sistema de archivos.
[be81649]297[ -n "$PROG" ] || ogRaiseError $OG_ERR_PARTITION "$3 != $TYPE" || return $?
298
[1e7eaab]299# Etiquetas de particion.
[be81649]300if [ -z "$LABEL" ]; then
301    [ "$4" != "CACHE" ] || ogRaiseError $OG_ERR_FORMAT "$MSG_RESERVEDVALUE: CACHE" || return $?
302    [ -n "$4" ] && PARAMS="$PARAMS -L $4"
303else
304    PARAMS="$PARAMS -L $LABEL"
305fi
[40488da]306
[8e29877]307# Formatear en modo uso exclusivo (desmontar siempre).
[40488da]308ogLock $1 $2
[7b9dedd]309trap "ogUnlock $1 $2" 1 2 3 6 9
[066fa01]310umount $PART
[a3348ce]311eval $PROG $PARAMS $PART 2>/dev/null
[be81649]312ERRCODE=$?
313case $ERRCODE in
314    0)    ;;
315    127)  ogRaiseError $OG_ERR_NOTEXEC "$PROG" ;;
316    *)    ogRaiseError $OG_ERR_PARTITION "$1 $2" ;;
317esac
[40488da]318ogUnlock $1 $2
[be81649]319return $ERRCODE
[40488da]320}
321
322
323#/**
[7b9dedd]324#         ogGetFsSize int_ndisk int_npartition [str_unit]
325#@brief Muestra el tamanio del sistema de archivos indicado, permite definir la unidad de medida, por defecto GB
326#@param   int_ndisk      nº de orden del disco
327#@param   int_npartition nº de orden de la partición
328#@param   str_unit       unidad (opcional, por defecto: KB)
329#@return  float_size - Tamaño del sistema de archivos
330#@note    str_unit = { KB, MB, GB, TB }
331#@exception OG_ERR_FORMAT   Formato incorrecto.
332#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
333#@version 0.1 -  Integracion para Opengnsys  -  EAC:  SizeFileSystem() en FileSystem.lib
334#@author  Antonio J. Doblas Viso. Universidad de Malaga
335#@date    2008-10-27
336#@version 1.0.4 - Adaptación de las salidas.
337#@author  Ramon Gomez, ETSII Universidad de Sevilla
338#@date    2012-06-18
339#*/ ##
340function ogGetFsSize ()
341{
342# Variables locales.
[68f360e]343local MNTDIR UNIT VALUE FACTOR SIZE
[7b9dedd]344# Si se solicita, mostrar ayuda.
345if [ "$*" == "help" ]; then
346    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition [str_unit]" \
347           "$FUNCNAME 1 1  =>  15624188" \
348           "$FUNCNAME 1 1 KB  =>  15624188"
349    return
350fi
351# Error si no se reciben 2 o 3 parámetros.
352[ $# == 2 ] || [ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
[68f360e]353# Obtener unidad y factor de medida.
[7b9dedd]354UNIT="$3"
355UNIT=${UNIT:-"KB"}
356case "$UNIT" in
357    [kK]B)
358        FACTOR=1 ;;
359    MB) FACTOR=1024 ;;
360    GB) FACTOR=$[1024*1024] ;;
361    TB) FACTOR=$[1024*1024*1024] ;;
362    *)  ogRaiseError $OG_ERR_FORMAT "$3 != { KB, MB, GB, TB }"
363        return $? ;;
364esac
[68f360e]365
366# Obtener el tamaño del sistema de archivo (si no está formateado; tamaño = 0).
367MNTDIR="$(ogMount $1 $2 2>/dev/null)"
368if [ -n "$MNTDIR" ]; then
369    VALUE=$(df -BK "$MNTDIR" | awk '{getline; print $2}')
370    SIZE=$(echo "$VALUE $FACTOR" | awk '{printf "%f\n", $1/$2}')
371else
372    SIZE=0
373fi
374# Devolver el tamaño (quitar decimales si son 0).
375echo ${SIZE%.0*}
[7b9dedd]376}
377
378
379#/**
[b6208d8]380#         ogGetFsType int_ndisk int_nfilesys
[9f57de01]381#@brief   Devuelve el mnemonico con el tipo de sistema de archivos.
[42669ebf]382#@param   int_ndisk      nº de orden del disco
[b6208d8]383#@param   int_nfilesys   nº de orden del sistema de archivos
[9f57de01]384#@return  Mnemonico
[5804229]385#@note    Mnemonico: { EXT2, EXT3, EXT4, REISERFS, XFS, JFS, FAT16, FAT32, NTFS, CACHE }
[9f57de01]386#@exception OG_ERR_FORMAT   Formato incorrecto.
387#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
[985bef0]388#@version 0.1 -  Integracion para Opengnsys  -  EAC:   TypeFS() en ATA.lib
389#@author  Antonio J. Doblas Viso. Universidad de Malaga
390#@date    2008-10-27
[5804229]391#@version 0.9 - Primera adaptacion para OpenGnSys.
[9f57de01]392#@author  Ramon Gomez, ETSII Universidad de Sevilla
[5dbb046]393#@date    2009-07-21
[5804229]394#@version 1.0.2 - Obtención de datos reales de sistemas de ficheros.
395#@author  Ramon Gomez, ETSII Universidad de Sevilla
396#@date    2011-12-02
[b6208d8]397#@version 1.0.5 - Usar "mount" en vez de "parted".
398#@author  Ramon Gomez, ETSII Universidad de Sevilla
[3011075]399#@date    2012-09-04
[1e7eaab]400#*/ ##
[cbbb046]401function ogGetFsType ()
402{
[59f9ad2]403# Variables locales.
[b6208d8]404local PART ID TYPE
[1e7eaab]405# Si se solicita, mostrar ayuda.
[59f9ad2]406if [ "$*" == "help" ]; then
[e087194]407    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[59f9ad2]408           "$FUNCNAME 1 1  =>  NTFS"
409    return
410fi
[1e7eaab]411# Error si no se reciben 2 parámetros.
[a5df9b9]412[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
[2e15649]413
[b6208d8]414# Detectar id. de tipo de partición.
415PART=$(ogDiskToDev "$1" "$2") || return $?
416ID=$(ogGetPartitionId "$1" "$2")
[4e1dc53]417[ "$ID" == "a7" ] && ID="ca"    # Traducir antiguo id. de partición de caché.
[5804229]418TYPE=""
[2e15649]419case "$ID" in
[f2c8049]420     ca|CA00)  # Detectar caché local (revisar detección en tablas GPT).
[5804229]421               ogIsFormated $1 $2 2>/dev/null && TYPE="CACHE"
422               ;;
423     *)        # Detectar sistema de ficheros.
[b6208d8]424               ogMount $1 $2 &>/dev/null
[bbe1bcf]425               TYPE=$(mount | awk -v p=$PART '{ if ($1==p) { print toupper($5); } }')
[b6208d8]426               # Detectar otros sistemas de archivos (FUSE, VFAT).
427               case "$TYPE" in
428                    FUSEBLK) TYPE="NTFS" ;;    # usar "file -Ls" para detectar
429                    VFAT)    TYPE="FAT32" ;;   # usar "file -Ls" para detectar
430               esac
[5804229]431               ;;
[2e15649]432esac
[5804229]433
434[ -n "$TYPE" ] && echo "$TYPE"
[2e15649]435}
436
[aae34f6]437
[a3348ce]438#/**
[b6208d8]439#         ogGetMountPoint int_ndisk int_nfilesys
[a3348ce]440#@brief   Devuelve el punto de montaje de un sistema de archivos.
[42669ebf]441#@param   int_ndisk      nº de orden del disco
[b6208d8]442#@param   int_nfilesys   nº de orden del sistema de archivos
[f8f4dfa]443#@return  Punto de montaje
444#@exception OG_ERR_FORMAT    Formato incorrecto.
445#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
[3458879]446#@note    Requisitos: \c mount* \c awk
[b6208d8]447#@version 0.9 - Primera versión para OpenGnSys.
[f8f4dfa]448#@author  Ramon Gomez, ETSII Universidad de Sevilla
449#@date    2009-10-15
[1e7eaab]450#*/ ##
[42669ebf]451function ogGetMountPoint ()
452{
[a3348ce]453# Variables locales
454local PART
[1e7eaab]455# Si se solicita, mostrar ayuda.
[a3348ce]456if [ "$*" == "help" ]; then
[e087194]457    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[a3348ce]458           "$FUNCNAME 1 1  =>  /mnt/sda1"
459    return
460fi
[1e7eaab]461# Error si no se reciben 2 parámetros.
[a3348ce]462[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
[1e7eaab]463# Obtener partición.
[a3348ce]464PART="$(ogDiskToDev $1 $2)" || return $?
465
[2af9738]466mount | awk -v P=$PART '{if ($1==P) {print $3}}'
[a3348ce]467}
468
469
470#/**
[b6208d8]471#         ogIsFormated int_ndisk int_nfilesys
[5a4f399]472#@brief   Comprueba si un sistema de archivos está formateado.
473#@param   int_ndisk      nº de orden del disco o volumen.
[b6208d8]474#@param   int_nfilesys   nº de orden del sistema de archivos
[7685100]475#@return  Código de salida: 0 - formateado, 1 - sin formato o error.
[5a4f399]476#@version 0.91 - Adaptación inicial para comprobar que existe caché.
477#@author  Ramon Gomez, ETSII Universidad de Sevilla
478#@date    2010-03-18
[7685100]479#@version 1.0.1 - Devolver falso en caso de error.
480#@author  Ramon Gomez, ETSII Universidad de Sevilla
481#@date    2011-05-18
[b6208d8]482#@version 1.0.5 - Dejar de usar "parted".
483#@author  Ramon Gomez, ETSII Universidad de Sevilla
[3011075]484#@date    2012-09-04
[5a4f399]485#*/ ##
486function ogIsFormated ()
487{
488# Variables locales
489local DISK
490if [ "$*" == "help" ]; then
[e087194]491    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[5a4f399]492           "if $FUNCNAME 1 1; then ... ; fi"
493    return
494fi
[7685100]495# Falso, en caso de error.
496[ $# == 2 ] || return 1
[5a4f399]497
[b6208d8]498test -n "$(ogMount "$1" "$2")"
[5a4f399]499}
500
501
502#/**
[b6208d8]503#         ogIsMounted int_ndisk int_nfilesys
[a3348ce]504#@brief   Comprueba si un sistema de archivos está montado.
[42669ebf]505#@param   int_ndisk      nº de orden del disco
[b6208d8]506#@param   int_nfilesys   nº de orden del sistema de archivos
[7685100]507#@return  Código de salida: 0 - montado, 1 - sin montar o error.
[b6208d8]508#@version 0.9 - Primera versión para OpenGnSys.
[f8f4dfa]509#@author  Ramon Gomez, ETSII Universidad de Sevilla
510#@date    2009-10-15
[7685100]511#@version 1.0.1 - Devolver falso en caso de error.
512#@author  Ramon Gomez, ETSII Universidad de Sevilla
513#@date    2011-05-18
[1e7eaab]514#*/ ##
[42669ebf]515function ogIsMounted ()
516{
517# Si se solicita, mostrar ayuda.
[a3348ce]518if [ "$*" == "help" ]; then
[e087194]519    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[a3348ce]520           "if $FUNCNAME 1 1; then ... ; fi"
521    return
522fi
[7685100]523# Falso, en caso de error.
524[ $# == 2 ] || return 1
[a3348ce]525
526test -n "$(ogGetMountPoint $1 $2)"
527}
528
529
[aae34f6]530#/**
[9d96c57]531#         ogIsLocked int_ndisk int_npartition
532#@brief   Comprueba si una partición está bloqueada por una operación de uso exclusivo.
[42669ebf]533#@param   int_ndisk      nº de orden del disco
534#@param   int_npartition nº de orden de la partición
[7685100]535#@return  Código de salida: 0 - bloqueado, 1 - sin bloquear o error.
[73c8417]536#@note    El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-".
[b6208d8]537#@version 0.9 - Primera versión para OpenGnSys.
[9d96c57]538#@author  Ramon Gomez, ETSII Universidad de Sevilla
539#@date    2009-09-03
[7685100]540#@version 1.0.1 - Devolver falso en caso de error.
541#@author  Ramon Gomez, ETSII Universidad de Sevilla
542#@date    2011-05-18
[1e7eaab]543#*/ ##
[42669ebf]544function ogIsLocked ()
545{
[59f9ad2]546# Variables locales
[73c8417]547local PART LOCKFILE
[9d96c57]548
[1e7eaab]549# Si se solicita, mostrar ayuda.
[9d96c57]550if [ "$*" == "help" ]; then
551    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
[a3348ce]552           "if $FUNCNAME 1 1; then ... ; fi"
[9d96c57]553    return
554fi
[7685100]555# Falso, en caso de error.
556[ $# == 2 ] || return 1
[9d96c57]557
[1e7eaab]558# Obtener partición.
[7685100]559PART="$(ogDiskToDev $1 $2)" || return 1
[9d96c57]560
[1e7eaab]561# Comprobar existencia del fichero de bloqueo.
[73c8417]562LOCKFILE="/var/lock/lock${PART//\//-}"
563test -f $LOCKFILE
[9d96c57]564}
565
566
567#/**
568#         ogLock int_ndisk int_npartition
[89403cd]569#@see     ogLockPartition
570#*/
[42669ebf]571function ogLock ()
572{
[89403cd]573ogLockPartition "$@"
574}
575
576#/**
577#         ogLockPartition int_ndisk int_npartition
[9d96c57]578#@brief   Genera un fichero de bloqueo para una partición en uso exlusivo.
[42669ebf]579#@param   int_ndisk      nº de orden del disco
580#@param   int_npartition nº de orden de la partición
[9d96c57]581#@return  (nada)
582#@exception OG_ERR_FORMAT    Formato incorrecto.
583#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
[73c8417]584#@note    El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-".
[b6208d8]585#@version 0.9 - Primera versión para OpenGnSys.
[9d96c57]586#@author  Ramon Gomez, ETSII Universidad de Sevilla
587#@date    2009-09-03
[1e7eaab]588#*/ ##
[42669ebf]589function ogLockPartition ()
590{
[59f9ad2]591# Variables locales
592local PART LOCKFILE
[9d96c57]593
[1e7eaab]594# Si se solicita, mostrar ayuda.
[9d96c57]595if [ "$*" == "help" ]; then
596    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
597           "$FUNCNAME 1 1"
598    return
599fi
[1e7eaab]600# Error si no se reciben 2 parámetros.
[9d96c57]601[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
602
[1e7eaab]603# Obtener partición.
[9d96c57]604PART="$(ogDiskToDev $1 $2)" || return $?
605
[1e7eaab]606# Crear archivo de bloqueo exclusivo.
[73c8417]607LOCKFILE="/var/lock/lock${PART//\//-}"
608touch $LOCKFILE
[9d96c57]609}
610
611
612#/**
[b6208d8]613#         ogMount int_ndisk int_nfilesys
[3458879]614#@see     ogMountFs ogMountCache ogMountCdrom
[1e7eaab]615#*/ ##
[42669ebf]616function ogMount ()
617{
[ee4a96e]618case "$*" in
[18f4bc2]619    CACHE|cache)
620        ogMountCache ;;
[ee4a96e]621    CDROM|cdrom)
622        ogMountCdrom ;;
623    *)  ogMountFs "$@" ;;
624esac
[73c8417]625}
626
[ee4a96e]627
[73c8417]628#/**
[b6208d8]629#         ogMountFs int_ndisk int_nfilesys
[aae34f6]630#@brief   Monta un sistema de archivos.
[42669ebf]631#@param   int_ndisk      nº de orden del disco
[b6208d8]632#@param   int_nfilesys   nº de orden del sistema de archivos
[aae34f6]633#@return  Punto de montaje
634#@exception OG_ERR_FORMAT    Formato incorrecto.
635#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
636#@exception OG_ERR_PARTITION Tipo de particion desconocido o no se puede montar.
[985bef0]637#@version 0.1 -  Integracion para Opengnsys  -  EAC:   MountPartition() en FileSystem.lib
638#@author  Antonio J. Doblas Viso. Universidad de Malaga
639#@date    2008-10-27
[b6208d8]640#@version 0.9 - Primera version para OpenGnSys.
[aae34f6]641#@author  Ramon Gomez, ETSII Universidad de Sevilla
[40488da]642#@date    2009-09-28
[b6208d8]643#@version 1.0.5 - Independiente del tipo de sistema de ficheros.
[02f271b]644#@author  Ramon Gomez, ETSII Universidad de Sevilla
[3011075]645#@date    2012-09-04
[1e7eaab]646#*/ ##
[42669ebf]647function ogMountFs ()
648{
[1e7eaab]649# Variables locales
[b6208d8]650local PART MNTDIR
[aae34f6]651
[1e7eaab]652# Si se solicita, mostrar ayuda.
[aae34f6]653if [ "$*" == "help" ]; then
[e087194]654    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[aae34f6]655           "$FUNCNAME 1 1  =>  /mnt/sda1"
656    return
657fi
[1e7eaab]658# Error si no se reciben 2 parámetros.
[aae34f6]659[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
660
[1e7eaab]661# Obtener partición.
[b6208d8]662PART="$(ogDiskToDev "$1" "$2")" || return $?
[aae34f6]663
[1e7eaab]664# Comprobar si el sistema de archivos ya está montada.
[a3348ce]665MNTDIR="$(ogGetMountPoint $1 $2)"
[e2c805a]666# Si no, montarlo en un directorio de sistema.
[aae34f6]667if [ -z "$MNTDIR" ]; then
668    # Error si la particion esta bloqueada.
[52fa3da]669    if ogIsLocked $1 $2; then
670        ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION, $1 $2"
671        return $?
672    fi
[e2c805a]673    # Crear punto de montaje o enlace simbólico para caché local.
[aae34f6]674    MNTDIR=${PART/dev/mnt}
[3ffa256]675    if [ "$(ogFindCache)" == "$1 $2" -a -n "$OGCAC" ]; then
[e2c805a]676        mkdir -p $OGCAC
677        ln -fs $OGCAC $MNTDIR
678    else
679        mkdir -p $MNTDIR
680    fi
[b6208d8]681    # Montar sistema de archivos.
682    mount $PART $MNTDIR &>/dev/null || \
683               mount $PART $MNTDIR -o force,remove_hiberfile &>/dev/null || \
684               ogRaiseError $OG_ERR_PARTITION "$1, $2" || return $?
[aae34f6]685fi
[cbbb046]686echo "$MNTDIR"
[aae34f6]687}
688
689
[ee4a96e]690#####  PRUEBAS
691# Montar CDROM
[42669ebf]692function ogMountCdrom ()
693{
[ee4a96e]694local DEV MNTDIR
695DEV="/dev/cdrom"            # Por defecto
696MNTDIR=$(mount | awk -v D=$DEV '{if ($1==D) {print $3}}')
697if [ -z "$MNTDIR" ]; then
698    MNTDIR=${DEV/dev/mnt}
699    mkdir -p $MNTDIR
700    mount -t iso9660 $DEV $MNTDIR || ogRaiseError $OG_ERR_PARTITION "cdrom" || return $?
701fi
702echo $MNTDIR
703}
704
[3f49cf7]705
706#/**
[b6208d8]707#         ogReduceFs int_ndisk int_nfilesys
[3f49cf7]708#@brief   Reduce el tamaño del sistema de archivos, sin tener en cuenta el espacio libre.
[42669ebf]709#@param   int_ndisk      nº de orden del disco
[b6208d8]710#@param   int_nfilesys   nº de orden del sistema de archivos
[d3669a2]711#@return  int_tamañoKB - tamaño en KB
[3f49cf7]712#@exception OG_ERR_FORMAT    Formato incorrecto.
713#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
714#@exception OG_ERR_PARTITION Partición desconocida o no accesible.
[3458879]715#@warning En Windows, se borran los ficheros pagefile.sys e hiberfile.sys
[d3669a2]716#@warning El sistema de archivos se amplía al mínimo + 10%.
[3458879]717#@note    Requisitos:   *resize*
[985bef0]718#@version 0.1 -  Integracion para Opengnsys  -  EAC:   ReduceFileSystem() en ATA.lib
719#@author  Antonio J. Doblas Viso. Universidad de Malaga
720#@date    2008-10-27
[b6208d8]721#@version 0.9 - Primera version para OpenGnSys.
[3f49cf7]722#@author  Ramon Gomez, ETSII Universidad de Sevilla
723#@date    2009-09-23
[d3669a2]724#@version 0.9.2 - Añadir un 10% al tamaño mínimo requerido.
725#@author  Ramon Gomez, ETSII Universidad de Sevilla
726#@date    2010-09-27
[c114529]727#@version 1.0 -  Deteccion automatica del tamaño minimo adecuado
728#@author  Antonio J. Doblas Viso. Universidad de Malaga
729#@date    2011-02-24
[1e7eaab]730#*/ ##
[42669ebf]731function ogReduceFs ()
732{
[3f49cf7]733# Variables locales
734local PART BLKS SIZE
735
[1e7eaab]736# Si se solicita, mostrar ayuda.
[3f49cf7]737if [ "$*" == "help" ]; then
[e087194]738    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_nfilesys" \
[3f49cf7]739           "$FUNCNAME 1 1"
740    return
741fi
[1e7eaab]742# Error si no se reciben 2 parámetros.
[3f49cf7]743[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
744
[1e7eaab]745# Obtener partición.
[3f49cf7]746PART="$(ogDiskToDev $1 $2)" || return $?
747
[1e7eaab]748# Redimensionar según el tipo de particion.
[3f49cf7]749case "$(ogGetFsType $1 $2)" in
[1c04494]750    EXT[234])
[3458879]751        ogUnmount $1 $2 2>/dev/null
[1c04494]752        # Ext2/3/4: Tamaño de los bloques del sistema de archivos
753        BLKS=$(tune2fs -l $PART | awk '/Block size/ {print int($3/512)}')
754        # Traduce el num. en sectores de 512B a tamano en MB.
[c114529]755        #SIZE=$(resize2fs -P $PART 2>/dev/null | \
756                #       awk -v B=$BLKS '/minimum size/ {print int($7*1.1*B/2048)}')
757        #resize2fs -fp $PART "${SIZE}M" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
758        resize2fs -fpM $PART  &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
[743257e]759        ;;
760#    BTRFS)             # Usar "btrfs"
761#       ;;
[c7d9af7]762#    REISERFS)          # Usar "resize_reiserfs"
[743257e]763#       ;;
[b6208d8]764    NTFS)
[3458879]765        ogDeleteFile $1 $2 pagefile.sys
[6277770]766        ogDeleteFile $1 $2 hiberfil.sys
[3458879]767        ogUnmount $1 $2 2>/dev/null
[c114529]768        ## NTFS: Obtiene tamaño mínimo en MB.
769        #SIZE=$(ntfsresize -fi $PART | awk '/resize at/ {print int($8*1.1)}')
770        #ntfsresize -fns "${SIZE}M" $PART >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
771        #ntfsresize -fs "${SIZE}M" $PART <<<"y" >/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
[6277770]772        SIZE=$(ogReduceFsCheck $1 $2)
773        [ "$SIZE" == 0 ] && return 1   
[c114529]774        ntfsresize -fs "${SIZE}M" $PART <<<"y"  || ogRaiseError $OG_ERR_PARTITION "error reduciendo $1,$2" || return $?
[6277770]775        ;;
[743257e]776#    FAT32|FAT16)       # Usar "fatresize"
777#        ;;
[1c04494]778    *)  ogRaiseError $OG_ERR_PARTITION "$1,$2"
[6277770]779        return $? ;;
[3f49cf7]780esac
[c114529]781ogGetFsSize $1 $2
[3f49cf7]782}
783
784
[c114529]785function ogReduceFsCheck ()
786{
787#IMPORTANTE: retorna el valor en MB que podrá reducir el FS de una particion ntfs
788#valor devuelto 0, y codigo error 1. No se puede reducir, probar a reiniciar windows y chkdsk
789
790
791local  PART RC MODE SIZE SIZEDATA
792[ $# == 2 ] && MODE=STAGE1
793[ $# == 3 ] && MODE=STAGE2
794[ -z $MODE ] && return
795
796PART="$(ogDiskToDev $1 $2)" || return $?
797ogUnmount $1 $2 &>/dev/null
798
799
800case $MODE in
801        STAGE1)
802        #       echo "primera etapa $*"
803                ntfsresize -fi $PART &>/dev/null
804                RC=`echo $?`
805        #       echo "RC es" $RC
806                if [ "$RC" -eq "1" ]
807                then
808                        echo "0"
809                        return 1       
810                fi 
811                SIZEDATA=$(ntfsresize -fi $PART | awk '/resize at/ {print $8+1000}')
812        #       echo "salida" $?
813        #       echo $SIZEDATA
814                ogReduceFsCheck $1 $2 $SIZEDATA
815                return 0
816       ;;
817        STAGE2)
818        #       echo "segunda etapa $*"
819                SIZEDATA=$3
820                ntfsresize -fns "${SIZEDATA}M" $PART &>/tmp/ntfsresize.txt
821                RC=$?
822                if [ "$RC" == "0" ]
823                then 
824                        SIZE=$SIZEDATA 
825                        echo $SIZE     
826                else
827                        SIZEEXTRA=$(cat /tmp/ntfsresize.txt | awk '/Needed relocations :/ {print $0}' | awk -F"(" '{print $2}' | awk '{print $1+500}')
828                        SIZE=$(expr $SIZEDATA + $SIZEEXTRA)
829                        ogReduceFsCheck $1 $2 $SIZE
830                        return 0
831                fi
832        ;;
833        *)
834        return
835        ;;
836esac
837}
838
839
840
[5dbb046]841#/**
[9d96c57]842#         ogUnlock int_ndisk int_npartition
[89403cd]843#@see     ogUnlockPartition
[6e390b1]844#*/ ##
[42669ebf]845function ogUnlock ()
846{
[89403cd]847ogUnlockPartition "$@"
848}
849
850#/**
851#         ogUnlockPartition int_ndisk int_npartition
[9d96c57]852#@brief   Elimina el fichero de bloqueo para una particion.
[42669ebf]853#@param   int_ndisk      nº de orden del disco
854#@param   int_npartition nº de orden de la partición
[9d96c57]855#@return  (nada)
856#@exception OG_ERR_FORMAT    Formato incorrecto.
857#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
[73c8417]858#@note    El fichero de bloqueo se localiza en \c /var/lock/part, siendo \c part el dispositivo de la partición, sustituyendo el carácter "/" por "-".
[b6208d8]859#@version 0.9 - Primera versión para OpenGnSys.
[9d96c57]860#@author  Ramon Gomez, ETSII Universidad de Sevilla
861#@date    2009-09-03
[1e7eaab]862#*/ ##
[42669ebf]863function ogUnlockPartition ()
864{
[59f9ad2]865# Variables locales
866local PART LOCKFILE
[9d96c57]867
[1e7eaab]868# Si se solicita, mostrar ayuda.
[9d96c57]869if [ "$*" == "help" ]; then
870    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
871           "$FUNCNAME 1 1"
872    return
873fi
[1e7eaab]874# Error si no se reciben 2 parámetros.
[9d96c57]875[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
876
[1e7eaab]877# Obtener partición.
[9d96c57]878PART="$(ogDiskToDev $1 $2)" || return $?
879
[1e7eaab]880# Borrar archivo de bloqueo exclusivo.
[73c8417]881LOCKFILE="/var/lock/lock${PART//\//-}"
882rm -f $LOCKFILE
[9d96c57]883}
884
885
886#/**
[5dbb046]887#         ogUnmount int_ndisk int_npartition
[40488da]888#@see     ogUnmountFs
[6e390b1]889#*/ ##
[42669ebf]890function ogUnmount ()
891{
[40488da]892ogUnmountFs "$@"
[89403cd]893}
894
895#/**
[b6208d8]896#         ogUnmountFs int_ndisk int_nfilesys
[5dbb046]897#@brief   Desmonta un sistema de archivos.
[42669ebf]898#@param   int_ndisk      nº de orden del disco
[b6208d8]899#@param   int_nfilesys   nº de orden del sistema de archivos
[5dbb046]900#@return  Nada
901#@exception OG_ERR_FORMAT    Formato incorrecto.
902#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
903#@warning La partición no está previamente montada o no se puede desmontar.
[985bef0]904#@version 0.1 -  Integracion para Opengnsys  -  EAC:  UmountPartition() en FileSystem.lib
905#@author  Antonio J. Doblas Viso. Universidad de Malaga
906#@date    2008-10-27
[b6208d8]907#@version 0.9 - Primera version para OpenGnSys.
[5dbb046]908#@author  Ramon Gomez, ETSII Universidad de Sevilla
[40488da]909#@date    2009-09-28
[1e7eaab]910#*/ ##
[42669ebf]911function ogUnmountFs ()
912{
[59f9ad2]913# Variables locales
[c56dec5]914local PART MNTDIR
[5dbb046]915
[1e7eaab]916# Si se solicita, mostrar ayuda.
[5dbb046]917if [ "$*" == "help" ]; then
918    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" "$FUNCNAME 1 1"
919    return
920fi
[1e7eaab]921# Error si no se reciben 2 parámetros.
[5dbb046]922[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
923
[1e7eaab]924# Obtener partición y punto de montaje.
[5dbb046]925PART="$(ogDiskToDev $1 $2)" || return $?
[a3348ce]926MNTDIR="$(ogGetMountPoint $1 $2)"
[5dbb046]927
[1e7eaab]928# Si está montada, desmontarla.
[c56dec5]929if [ -n "$MNTDIR" ]; then
[5a4f399]930    # Error si la particion está bloqueada.
[52fa3da]931    if ogIsLocked $1 $2; then
932        ogRaiseError $OG_ERR_LOCKED "$MSG_PARTITION $1, $2"
933        return $?
934    fi
[5a4f399]935    # Desmontar y borrar punto de montaje.
[52fa3da]936    umount $PART 2>/dev/null || ogEcho warning "$FUNCNAME: $MSG_DONTUNMOUNT: \"$1, $2\""
[5a4f399]937    rmdir $MNTDIR 2>/dev/null || rm -f $MNTDIR 2>/dev/null
[5dbb046]938else
939    ogEcho warning "$MSG_DONTMOUNT: \"$1,$2\""
940fi
941}
942
[ee4a96e]943
[be81649]944#/**
945#         ogUnmountAll int_ndisk
946#@brief   Desmonta todos los sistema de archivos de un disco, excepto el caché local.
[42669ebf]947#@param   int_ndisk      nº de orden del disco
[be81649]948#@return  Nada
949#@exception OG_ERR_FORMAT    Formato incorrecto.
950#@exception OG_ERR_NOTFOUND  Disco o particion no corresponden con un dispositivo.
951#@warning No se desmonta la partición marcada como caché local.
[b6208d8]952#@version 0.9 - Versión para OpenGnSys.
[be81649]953#@author  Ramon Gomez, ETSII Universidad de Sevilla
954#@date    2009/10/07
[1e7eaab]955#*/ ##
[42669ebf]956function ogUnmountAll ()
957{
[be81649]958# Variables locales
[18f4bc2]959local DISK PART
[1e7eaab]960# Si se solicita, mostrar ayuda.
[18f4bc2]961if [ "$*" == "help" ]; then
962    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" "FUNCNAME 1"
963    return
964fi
[1e7eaab]965# Error si no se recibe 1 parámetro.
[18f4bc2]966[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
967
[1e7eaab]968# Obtener partición y punto de montaje.
[18f4bc2]969DISK="$(ogDiskToDev $1)" || return $?
970for ((PART=1; PART<=$(ogGetPartitionsNumber $1); PART++)); do
971    case "$(ogGetFsType $1 $PART)" in
[5804229]972        CACHE) ;;
[7c52c30]973        *)     ogUnmount $1 $PART 2>/dev/null ;;
[7250491]974    esac
[18f4bc2]975done
976}
977
[c114529]978
979function ogGetFreeSize () {
980if [ $# = 0 ]
981then
982        echo "sintaxis: ogGetFreeSize int_disco int_partition str_SizeOutput [ kB MB GB -default GB]-]" red
983        echo "devuelve int_size : int_data : int_free" red
984return
985fi
986if [ $# -ge 2 ]
987then
988        particion=`ogMount $1 $2 ` #1>/dev/null 2>&1
989        if [ -z $3 ]
990                then
991                        unit=kB  # s B kB MB GB TB %
992                else
993                        unit=$3
994        fi
995        case $unit in
996                kB)
997                        factor="1.024";
998                        #valor=`df | grep  $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d:%d:%d", size,used,free}'`
999                        valor=`df | grep  $particion | awk -F" " '{size=$2*1.024; used=$3*1.024; free=$4*1.024; printf "%d", free}'`
1000                        ;;
[a957f02]1001                MB)
1002                        factor="1.024/1000";
1003                        valor=`df | grep  $particion | awk -F" " '{size=$2*1.024/1000; used=$3*1.024/1000; free=$4*1.024/1000; printf "%d:%d:%d", size,used,free}'`
1004                ;;
1005                GB)
1006                        factor="1.024/1000000";
1007                        valor=`df | grep $particion | awk -F" " '{size=$2*1.024/1000000; used=$3*1.024/1000000; free=$4*1.024/1000000; printf "%f:%f:%f", size,used,free}'`
1008                ;;
1009        esac
1010        #echo $valor
1011        #NumberRound $valor
1012        #valor=`NumberRound $valor`;
1013        ogUnmount $1 $2 1>/dev/null 2>&1
1014        echo $valor
1015
1016fi
[c114529]1017}
1018
Note: See TracBrowser for help on using the repository browser.