source: client/engine/FileSystem.lib @ f8a75f18

opengnsys-1.0.6b
Last change on this file since f8a75f18 was f8a75f18, checked in by ramon <ramongomez@…>, 8 years ago

#754: corregir errata en revisión r5158.

git-svn-id: https://opengnsys.es/svn/tags/opengnsys-1.0.6b@5159 a21b9725-9963-47de-94b9-378ad31fedc9

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