source: client/engine/FileSystem.lib @ 2ff31f9

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 2ff31f9 was 3e3cfdb, checked in by ramon <ramongomez@…>, 9 years ago

#696 #726: Función ogIsFormated hace la comprobación de formateo sin montar el sistema de archivos; evitar mostrar errores en funciones ogIs...

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

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