source: client/engine/Disk.lib @ d725a41

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 d725a41 was b061ad0, checked in by adv <adv@…>, 15 years ago

Se corrige Disk.lib según instrucciones ticket 101 http://www.informatica.us.es:8080/opengnsys/ticket/101

git-svn-id: https://opengnsys.es/svn/trunk@708 a21b9725-9963-47de-94b9-378ad31fedc9

  • Property mode set to 100755
File size: 22.1 KB
Line 
1#!/bin/bash
2#/**
3#@file    Disk.lib
4#@brief   Librería o clase Disk
5#@class   Disk
6#@brief   Funciones para gestión de discos y particiones.
7#@version 0.9
8#@warning License: GNU GPLv3+
9#*/
10
11
12#/**
13#         ogCreatePartitions int_ndisk str_parttype:int_partsize ...
14#@brief   Define el conjunto de particiones de un disco.
15#@param   int_ndisk      nº de orden del disco
16#@param   str_parttype   mnemónico del tipo de partición
17#@param   int_partsize   tamaño de la partición (en KB)
18#@return  (nada, por determinar)
19#@exception OG_ERR_FORMAT   formato incorrecto.
20#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
21#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
22#@attention Pueden definirse particiones vacías de tipo \c EMPTY
23#@note    Requisitos: sfdisk, parted, partprobe, awk
24#@todo    Definir atributos (arranque, oculta) y tamaños en MB, GB, etc.
25#@version 0.9 - Primera versión para OpenGNSys
26#@author  Ramon Gomez, ETSII Universidad de Sevilla
27#@date    2009/09/09
28#*/ ##
29function ogCreatePartitions ()
30{
31# Variables locales.
32local DISK PART SECTORS START SIZE TYPE EXTSTART EXTSIZE tmpsfdisk
33# Si se solicita, mostrar ayuda.
34if [ "$*" == "help" ]; then
35    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk str_parttype:int_partsize ..." \
36           "$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000"
37    return
38fi
39# Error si no se reciben menos de 2 parámetros.
40[ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
41
42# Desmontar todos los sistemas de archivos del disco.
43DISK="$(ogDiskToDev $1)" || return $?
44ogUnmountAll $1
45shift
46
47# Nº total de sectores, para evitar desbordamiento
48SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
49# Sector de inicio de la particon (la 1ª empieza en el sector 63).
50START=63
51PART=1
52
53# Fichero temporal de entrada para "sfdisk"
54tmpsfdisk=/tmp/sfdisk$$
55trap "rm -f $tmpsfdisk" 1 2 3 9 15
56
57echo "unit: sectors" >$tmpsfdisk
58echo                >>$tmpsfdisk
59
60# Generar fichero de entrada para "sfdisk" con las particiones.
61while [ $# -gt 0 ]; do
62    # Leer formato de cada parámetro - Tipo:Tamaño
63    TYPE="${1%%:*}"
64    SIZE="${1#*:}"
65    [ -z "$SIZE" ] && ogRaiseError $OG_ERR_FORMAT && return $?
66    # Convertir en sectores de 512 B.
67    SIZE=$[SIZE*2]
68    [ $SIZE -eq 0 ] && ogRaiseError $OG_ERR_FORMAT && return $?
69    # Obtener identificador de tipo de partición.
70    ID=$(ogFsToId "$TYPE")
71    [ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $?
72    # Comprobar si la partición es extendida.
73    if [ $ID = 5 ]; then
74        [ $PART -gt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $?
75        EXTSTART=$START
76        EXTSIZE=$SIZE
77    fi
78    # Incluir particiones lógicas dentro de la partición extendida.
79    if [ $PART = 5 ]; then
80        [ -z "$EXTSTART" ] && ogRaiseError $OG_ERR_FORMAT && return $?
81        START=$EXTSTART
82        SECTORS=$[EXTSTART+EXTSIZE]
83    fi
84    # Generar datos para la partición.
85    echo "$DISK$PART : start=$START, size=$SIZE, Id=$ID" >>$tmpsfdisk
86    # Error si se supera el nº total de sectores.
87    START=$[START+SIZE]
88    [ $START -gt $SECTORS ] && ogRaiseError $OG_ERR_FORMAT && return $?
89    PART=$[PART+1]
90    shift
91done
92# Si no se indican las 4 particiones primarias, definirlas como vacías.
93while [ $PART -le 4 ]; do
94    echo "$DISK$PART : start=0, size=0, Id=0" >>$tmpsfdisk
95    PART=$[PART+1]
96done
97# Si se define partición extendida sin lógicas, crear particion 5 vacía.
98if [ $PART = 5 -a -n "$EXTSTART" ]; then
99    echo "${DISK}5 : start=$EXTSTART, size=$EXTSIZE, Id=0" >>$tmpsfdisk
100fi
101
102# Si la tabla de particiones no es valida, volver a generarla.
103[ $(parted -s $DISK print >/dev/null) ] || fdisk $DISK <<< "w"
104# Definir particiones y notificar al kernel.
105sfdisk -f $DISK < $tmpsfdisk 2>/dev/null && sfdisk -R $DISK
106rm -f $tmpsfdisk
107}
108
109
110#/**
111#         ogDevToDisk path_device
112#@brief   Devuelve el nº de orden de dicso (y partición) correspondiente al nombre de fichero de dispositivo.
113#@param   path_device Camino del fichero de dispositivo.
114#@return  int_ndisk (para dispositivo de disco)
115#@return  int_ndisk int_npartition (para dispositivo de partición).
116#@exception OG_ERR_FORMAT   Formato incorrecto.
117#@exception OG_ERR_NOTFOUND Dispositivo no detectado.
118#@note    Requisitos: awk
119#@version 0.9 - Primera versión para OpenGNSys
120#@author  Ramon Gomez, ETSII Universidad Sevilla
121#@date    2009-07-20
122#*/ ##
123function ogDevToDisk ()
124{
125# Variables locales.
126local d n
127# Si se solicita, mostrar ayuda.
128if [ "$*" == "help" ]; then
129    ogHelp "$FUNCNAME" "$FUNCNAME path_device" \
130           "$FUNCNAME /dev/sda  =>  1 1"
131    return
132fi
133
134# Error si no se recibe 1 parámetro.
135[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
136# Error si no es fichero de bloques.
137[ -b "$1" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
138
139# Procesa todos los discos para devolver su nº de orden y de partición.
140n=1
141for d in $(ogDiskToDev); do
142    [ -n "$(echo $1 | grep $d)" ] && echo "$n ${1#$d}" && return
143    n=$[n+1]
144done
145ogRaiseError $OG_ERR_NOTFOUND "$1"
146return $OG_ERR_NOTFOUND
147}
148
149
150#/**
151#         ogDiskToDev [int_ndisk [int_npartition]]
152#@brief   Devuelve la equivalencia entre el nº de orden del dispositivo (dicso o partición) y el nombre de fichero de dispositivo correspondiente.
153#@param   int_ndisk      nº de orden del disco
154#@param   int_npartition nº de orden de la partición
155#@return  Para 0 parametros: Devuelve los nombres de ficheros  de los dispositivos sata/ata/usb linux encontrados.
156#@return  Para 1 parametros: Devuelve la ruta del disco duro indicado.
157#@return  Para 2 parametros: Devuelve la ruta de la particion indicada.
158#@exception OG_ERR_FORMAT   Formato incorrecto.
159#@exception OG_ERR_NOTFOUND Dispositivo no detectado.
160#@note    Requisitos: awk, lvm
161#@version 0.9 - Primera versión para OpenGNSys
162#@author  Ramon Gomez, ETSII Universidad Sevilla
163#@date    2009-07-20
164#*/ ##
165function ogDiskToDev ()
166{
167# Variables locales
168local ALLDISKS VOLGROUPS DISK PART
169
170# Si se solicita, mostrar ayuda.
171if [ "$*" == "help" ]; then
172    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk [int_npartition]" \
173           "$FUNCNAME      =>  /dev/sda /dev/sdb" \
174           "$FUNCNAME 1    =>  /dev/sda" \
175           "$FUNCNAME 1 1  =>  /dev/sda1"
176    return
177fi
178
179# Listar dispositivo para los discos duros (tipos: 3=hd, 8=sd).
180ALLDISKS=$(awk '($1==3 || $1==8) && $4!~/[0-9]/ {printf "/dev/%s ",$4}' /proc/partitions)
181VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}')
182ALLDISKS="$ALLDISKS $VOLGROUPS"
183
184# Mostrar salidas segun el número de parametros.
185case $# in
186    0)  # Muestra todos los discos, separados por espacios.
187        echo $ALLDISKS
188        ;;
189    1)  # Error si el parámetro no es un digito.
190        [ -z "${1/[1-9]/}" ] || ogRaiseError $OG_ERR_FORMAT || return $?
191        DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}')
192        # Error si el fichero no existe.
193        [ -e "$DISK" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
194        echo "$DISK"
195        ;;
196    2)  # Error si los 2 parámetros no son digitos.
197        [ -z "${1/[1-9]/}" -a -z "${2/[1-9]/}" ] || ogRaiseError $OG_ERR_FORMAT|| return $?
198        DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}')
199        [ -e "$DISK" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $?
200        PART="$DISK$2"
201        # Comprobar si es partición.
202        if [ -b "$PART" ]; then
203            echo "$PART"
204        elif [ -n "$VOLGROUPS" ]; then
205            # Comprobar si volumen lógico.
206            PART=$(lvscan -a 2>/dev/null | grep "'$DISK/" | awk -v n=$2 -F\' '{if (NR==n) print $2}')
207            [ -e "$PART" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
208            echo "$PART"
209        else
210            ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
211        fi
212        ;;
213    *)  # Formato erroneo.
214        ogRaiseError $OG_ERR_FORMAT
215        return $OG_ERR_FORMAT
216        ;;
217esac
218}
219
220
221#/**
222#         ogFsToId str_fstype
223#@brief   Devuelve el identificador de partición correspondiente a un tipo de sistema de archivos.
224#@param   str_fstype  mnemónico de tipo de sistema de archivos
225#@return  int_idpart  nº identificador de tipo de partición.
226#@exception OG_ERR_FORMAT   Formato incorrecto.
227#@version 0.9 - Primera versión para OpenGNSys
228#@author  Ramon Gomez, ETSII Universidad Sevilla
229#@date    2009-12-14
230#*/ ##
231function ogFsToId ()
232{
233# Variables locales
234local ID
235
236# Si se solicita, mostrar ayuda.
237if [ "$*" == "help" ]; then
238    ogHelp "$FUNCNAME" "$FUNCNAME str_fstype" "$FUNCNAME EXT3  =>  83"
239    return
240fi
241# Error si no se recibe 1 parámetro.
242[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
243
244# Asociar id. de partición para su mnemónico de sistema de archivos.
245case "$1" in
246    EMPTY)      ID=0  ;;
247    FAT12)      ID=1  ;;
248    EXTENDED)   ID=5  ;;
249    FAT16)      ID=6  ;;
250    NTFS|EXFAT) ID=7  ;;
251    FAT32)      ID=b  ;;
252    HFAT12)     ID=11 ;;
253    HFAT16)     ID=16 ;;
254    HNTFS)      ID=17 ;;
255    HFAT32)     ID=1b ;;
256    LINUX-SWAP) ID=82 ;;
257    EXT[234]|REISERFS|REISER4|XFS|JFS)
258                ID=83 ;;
259    LINUX-LVM)  ID=8e ;;
260    SOLARIS)    ID=bf ;;
261    CACHE)      ID=ca ;;
262    LINUX-RAID) ID=fd ;;
263    *)          ID="" ;;
264esac
265echo $ID
266}
267
268
269#/**
270#         ogGetPartitionActive int_ndisk
271#@brief   Muestra que particion de un disco esta marcada como de activa.
272#@param   int_ndisk      nº de orden del disco
273#@return  Nº de partición activa
274#@exception OG_ERR_FORMAT Formato incorrecto.
275#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
276#@note    Requisitos: parted
277#@todo    Queda definir formato para atributos (arranque, oculta, ...).
278#@version 0.9 - Primera versión compatible con OpenGNSys.
279#@author  Ramon Gomez, ETSII Universidad de Sevilla
280#@date    2009/07/24
281#*/ ##
282function ogGetPartitionActive ()
283{
284# Variables locales
285local DISK
286
287# Si se solicita, mostrar ayuda.
288if [ "$*" == "help" ]; then
289    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" "$FUNCNAME 1  =>  1"
290    return
291fi
292# Error si no se recibe 1 parámetro.
293[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $?
294
295# Comprobar que el disco existe y listar su partición activa.
296DISK="$(ogDiskToDev $1)" || return $?
297parted $DISK print 2>/dev/null | awk '/boot/ {print $1}'
298}
299
300
301#/**
302#         ogGetPartitionId int_ndisk int_npartition
303#@brief   Devuelve el mnemonico con el tipo de sistema de archivos.
304#@param   int_ndisk      nº de orden del disco
305#@param   int_npartition nº de orden de la partición
306#@return  Identificador de tipo de partición.
307#@exception OG_ERR_FORMAT   Formato incorrecto.
308#@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo.
309#@note    Requisitos: sfdisk
310#@version 0.9 - Primera versión compatible con OpenGNSys.
311#@author  Ramon Gomez, ETSII Universidad de Sevilla
312#@date    25/03/2009
313#*/ ##
314function ogGetPartitionId ()
315{
316# Variables locales.
317local DISK PART
318
319# Si se solicita, mostrar ayuda.
320if [ "$*" == "help" ]; then
321    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
322           "$FUNCNAME 1 1  =>  7"
323    return
324fi
325# Error si no se reciben 2 parámetros.
326[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
327
328# Detectar id. de tipo de particion y codificar al mnemonico.
329DISK=$(ogDiskToDev $1) || return $?
330PART=$(ogDiskToDev $1 $2) || return $?
331echo $(sfdisk --id $DISK $2 2>/dev/null)
332}
333
334
335#/**
336#         ogGetPartitionSize int_ndisk int_npartition
337#@brief   Muestra el tamano en KB de una particion determinada.
338#@param   int_ndisk      nº de orden del disco
339#@param   int_npartition nº de orden de la partición
340#@return  int_partsize - Tamaño en KB de la partición.
341#@exception OG_ERR_FORMAT   formato incorrecto.
342#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
343#@note    Requisitos: sfdisk, awk
344#@version 0.9 - Primera versión para OpenGNSys
345#@author  Ramon Gomez, ETSII Universidad de Sevilla
346#@date    2009/07/24
347#*/ ##
348function ogGetPartitionSize ()
349{
350# Variables locales.
351local PART
352
353# Si se solicita, mostrar ayuda.
354if [ "$*" == "help" ]; then
355    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
356           "$FUNCNAME 1 1  =>  10000000"
357    return
358fi
359# Error si no se reciben 2 parámetros.
360[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
361
362# Obtener el tamaño de la partición.
363DISK="$(ogDiskToDev $1)" || return $?
364PART="$(ogDiskToDev $1 $2)" || return $?
365case "$(ogGetPartitionId $1 $2)" in
366    5|f)  # Procesar detección de tamaño de partición Extendida.
367                # /* (comentario Doxygen)
368          sfdisk -l $DISK 2>/dev/null | \
369                    awk -v p=$PART '{if ($1==p) {sub (/\*/,""); print $5} }'
370                # (comentario Doxygen) */
371          ;;
372    *)    sfdisk -s $PART
373          ;;
374esac
375}
376
377
378#/**
379#         ogListPartitions int_ndisk
380#@brief   Lista las particiones definidas en un disco.
381#@param   int_ndisk  nº de orden del disco
382#@return  str_parttype:int_partsize ...
383#@exception OG_ERR_FORMAT   formato incorrecto.
384#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
385#@note    Requisitos: \c parted \c awk
386#@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize
387#@attention Las tuplas de valores están separadas por espacios.
388#@version 0.9 - Primera versión para OpenGNSys
389#@author  Ramon Gomez, ETSII Universidad de Sevilla
390#@date    2009/07/24
391#*/ ##
392function ogListPartitions ()
393{
394# Variables locales.
395local DISK PART NPARTS TYPE SIZE
396
397# Si se solicita, mostrar ayuda.
398if [ "$*" == "help" ]; then
399    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk" \
400           "$FUNCNAME 1  =>  NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000"
401    return
402fi
403# Error si no se recibe 1 parámetro.
404[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT "$FORMAT" || return $?
405
406# Procesar la salida de \c parted .
407DISK="$(ogDiskToDev $1)" || return $?
408NPARTS=$(ogGetPartitionsNumber $1)
409for (( PART = 1; PART <= NPARTS; PART++ )); do
410    TYPE=$(ogGetFsType $1 $PART 2>/dev/null)
411    if [ $? -eq 0 ]; then
412        SIZE=$(ogGetPartitionSize $1 $PART 2>/dev/null)
413        echo -n "$TYPE:$SIZE "
414    else
415        echo -n "EMPTY:0 "
416    fi
417done
418echo
419}
420
421
422#/**
423#         ogListPrimaryPartitions int_ndisk
424#@brief   Metafunción que lista las particiones primarias no vacías definidas en un disco.
425#@param   int_ndisk  nº de orden del disco
426#@see     ogListPartitions
427#*/ ##
428function ogListPrimaryPartitions ()
429{
430# Variables locales.
431local PARTS
432
433PARTS=$(ogListPartitions "$@") || return $?
434echo $PARTS | cut -sf1-4 -d" " | sed 's/\( EMPTY:0\)*$//'
435}
436
437
438#/**
439#         ogListLogicalPartitions int_ndisk
440#@brief   Metafunción que lista las particiones lógicas definidas en un disco.
441#@param   int_ndisk  nº de orden del disco
442#@see     ogListPartitions
443#*/ ##
444function ogListLogicalPartitions ()
445{
446# Variables locales.
447local PARTS
448
449PARTS=$(ogListPartitions "$@") || return $?
450echo $PARTS | cut -sf5- -d" "
451}
452
453
454#/**
455#         ogSetPartitionActive int_ndisk int_npartition
456#@brief   Establece cual es la partición activa de un disco.
457#@param   int_ndisk      nº de orden del disco
458#@param   int_npartition nº de orden de la partición
459#@return  (nada).
460#@exception OG_ERR_FORMAT   Formato incorrecto.
461#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo.
462#@note    Requisitos: parted
463#@version 0.9 - Primera versión compatible con OpenGNSys.
464#@author  Ramon Gomez, ETSII Universidad de Sevilla
465#@date    2009/09/17
466#*/ ##
467function ogSetPartitionActive ()
468{
469# Variables locales
470local DISK PART
471
472# Si se solicita, mostrar ayuda.
473if [ "$*" == "help" ]; then
474    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
475           "$FUNCNAME 1 1"
476    return
477fi
478# Error si no se reciben 2 parámetros.
479[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
480
481# Comprobar que el disco existe y activar la partición indicada.
482DISK="$(ogDiskToDev $1)" || return $?
483PART="$(ogDiskToDev $1 $2)" || return $?
484parted -s $DISK set $2 boot on 2>/dev/null
485}
486
487
488#/**
489#         ogSetPartitionSize int_ndisk int_npartition int_size
490#@brief   Muestra el tamano en KB de una particion determinada.
491#@param  int_ndisk      nº de orden del disco
492#@param   int_npartition nº de orden de la partición
493#@param   int_size       tamaño de la partición (en KB)
494#@return  (nada)
495#@exception OG_ERR_FORMAT   formato incorrecto.
496#@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo).
497#@note    Requisitos: sfdisk, awk
498#@todo    Compruebar que el tamaño sea numérico positivo y evitar que pueda solaparse con la siguiente partición.
499#@version 0.9 - Primera versión para OpenGNSys
500#@author  Ramon Gomez, ETSII Universidad de Sevilla
501#@date    2009/07/24
502#*/ ##
503function ogSetPartitionSize ()
504{
505# Variables locales.
506local DISK PART SIZE
507
508# Si se solicita, mostrar ayuda.
509if [ "$*" == "help" ]; then
510    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
511           "$FUNCNAME 1 1 10000000"
512    return
513fi
514# Error si no se reciben 3 parámetros.
515[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
516
517# Obtener el tamaño de la partición.
518DISK="$(ogDiskToDev $1)" || return $?
519PART="$(ogDiskToDev $1 $2)" || return $?
520# Convertir tamaño en KB a sectores de 512 B.
521SIZE=$[$3*2] || ogRaiseError $OG_ERR_FORMAT || return $?
522# Usar \c sfdisk para redefinir el tamaño.
523sfdisk -f -uS -N$2 $DISK <<< ",$SIZE" &>/dev/null || ogRaiseError $OG_ERR_PARTITION "$1,$2" || return $?
524}
525
526
527#/**
528#         ogUpdatePartitionTable
529#@brief   Fuerza al kernel releer la tabla de particiones de los discos duros
530#@param   no requiere
531#@return  informacion propia de la herramienta
532#@note    Requisitos: \c partprobe
533#@warning pendiente estructurar la funcion a opengnsys
534#@version 0.1       Date: 27/10/2008                 Author Antonio J. Doblas Viso. Universidad de Malaga
535#@note   funcion importada de EAC
536#*/
537
538function ogUpdatePartitionTable ()
539{
540echo "Forzando al kernel la lectura de la tabla de particiones"
541list=`partprobe -s | cut -f1 -d: ` 2>/dev/null
542echo $list > /tmp/disk
543}
544
545
546
547
548function ogGetPartitionsNumber () {
549#/**  @function ogGetPartitionsNumber: @brief detecta el numero de particiones del disco duro indicado.
550#@param   int_numdisk   (indentificado EAC del disco)
551#@return  devuelve el numero paritiones del disco duro indicado
552#@warning  Salidas de errores no determinada
553#@attention Requisitos: parted
554#@note    Notas sin especificar
555#@version 0.1       Date: 27/10/2008                 Author Antonio J. Doblas Viso. Universidad de Malaga
556#*/
557           #local disco totalpart
558           #disco=`ogDiskToDev $1`
559           #totalpart=`parted $disco print | egrep ^" [0123456789] " -c`
560           #echo $totalpart
561local DISK
562#/// Contar el nº de veces que aparece el disco en su lista de particiones.
563DISK=$(ogDiskToDev $1) 2>/dev/null
564sfdisk -l $DISK 2>/dev/null | grep -c "^$DISK"
565}
566
567
568function ogDiskToRelativeDev () {
569#/**  @function ogDiskToRelativeDev: @brief Traduce los ID de discos o particiones EAC a ID Linux relativos, es decir 1 1 => sda1
570#@param  Admite 1 parametro:   $1  int_numdisk
571#@param  Admite 2 parametro:   $1   int_numdisk                    $2  int_partition
572#@return  Para 1 parametros traduce Discos Duros: Devuelve la ruta relativa linux del disco duro indicado con nomenclatura EAC.........ejemplo: IdPartition 1 => sda
573#@return  Para 2 parametros traduce Particiones: Devuelve la ruta relativa linux de la particion indicado con nomenclatura EAC...........  ejemplo: IdPartition  2 1 => sdb1
574#@warning  No definidas
575#@attention
576#@note    Notas sin especificar
577#@version 0.1       Date: 27/10/2008                 Author Antonio J. Doblas Viso. Universidad de Malaga
578#*/
579
580if [ $# = 0 ]
581then
582        Msg "Info: Traduce el identificador del dispositivo EAC a dispositivo linux \n" info
583        Msg "Sintaxis1: IdPartition int_disk -----------------Ejemplo1: IdPartition 1 -> sda " example
584        Msg "Sintaxis2: IdPartition int_disk int_partition  --Ejemplo2: IdPartition 1 2 -> sda2 " example
585
586return
587fi
588#PART="$(Disk|cut -f$1 -d' ')$2"    # se comenta esta linea porque doxygen no reconoce la funcion disk y no crea los enlaces y referencias correctas.
589PART=$(ogDiskToDev|cut -f$1 -d' ')$2
590echo $PART | cut -f3 -d \/
591}
592
593
594function ogDeletePartitionTable () {
595#/**  @function ogDeletePartitionTable: @brief Borra la tabla de particiones del disco.
596#@param $1 opcion A (identificador LINUX)       str_ID_linux (/dev/sda)
597#@param $1 opcion B (Identifiador EAC)                  int_numdiskEAC(1)
598#@return   la informacion propia del fdisk
599#@warning    no definidos
600#@attention
601#@note
602#@version 0.1       Date: 27/10/2008                 Author Antonio J. Doblas Viso. Universidad de Malaga
603#*/
604if [ $# = 0 ]
605then
606        Msg "sintaxis1: ogDeletePartitionTable int_disk" red
607        Msg "sintaxis2: ogDeletePartitionTable str_/dev/sdX" red
608        return
609fi
610if [ -n "${1%/dev/*}" ]
611        then
612        dev=`DiskToDev $1`
613        else
614        dev=$1
615fi
616echo -ne "o\nw" | fdisk $dev
617}
618
619
620
621function ogSetPartitionId() {
622#/**  @function ogSetPartitionId: @brief Cambia el identificador de la particion, pero no su sistema de archivos.
623#@param  $1 int_numdiskEAC
624#@param  $2 int_numpartitionEAC
625#@param  $3 str_tipoPartition admite EXT2 EXT3 NTFS FAT32 SWAP CACHE
626#@return   la propia del fdisk
627#@warning    no controla los parametros, si se introducen mal o simplemente no se introducen no muestra mensaje
628#@warning    Identifica por nombre del sistema de archivos no por número
629#@attention Requisitos:  fdisk
630#@note
631#@version 0.1       Date: 27/10/2008                 Author Antonio J. Doblas Viso. Universidad de Malaga
632#*/
633
634# Variables locales
635local DISK PART ID
636
637# Si se solicita, mostrar ayuda.
638if [ "$*" == "help" ]; then
639    ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition" \
640           "$FUNCNAME 1 1 10000000"
641    return
642fi
643# Error si no se reciben 3 parámetros.
644[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $?
645
646# Sustituye nº de disco por su dispositivo.
647DISK=`ogDiskToDev $1` || return $?
648PART=`ogDiskToDev $1 $2` || return $?
649
650# Elección del tipo de partición.
651ID=$(ogFsToId "$3")
652[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$TYPE" || return $?
653
654echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK 1>/dev/null 2>&1
655}
656
657
658function ogDeletePartitionsLabels () {
659#/**  @function ogDeletePartitionsLabels: @brief Elimina la informacion que tiene el kernel del cliente og sobre los labels de los sistemas de archivos
660#@param  No requiere
661#@return   Nada
662#@warning
663#@attention Requisitos:  comando interno linux rm
664#@note
665#@version 0.1       Date: 27/10/2008                 Author Antonio J. Doblas Viso. Universidad de Malaga
666#*/
667rm /dev/disk/by-label/*    # */ COMENTARIO OBLIGATORIO PARA DOXYGEN
668}
669
Note: See TracBrowser for help on using the repository browser.