source: client/engine/FileSystem.lib @ 8e29877

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 8e29877 was 8e29877, checked in by ramon <ramongomez@…>, 12 years ago

Versión 1.0.5: Realizar comprobaciones de errores al inicio de la función ogFormatFs y desmontar siempre antes de formatear.

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

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