source: client/engine/FileSystem.lib @ db8fdd2

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 db8fdd2 was 8971dc86, checked in by ramon <ramongomez@…>, 14 years ago

Version 1.0:

  • Corregir mensaje de error en función ogSetPartitionId.
  • Función ogGetFsType devuelve Ext3 como tipo por defecto para partición de tipo Linux, corrige errores de detección en funciones ogListPartitions, ogFormatFs, ogCheckFs, etc. (cerrar #355).

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

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