source: client/engine/Disk.lib @ 74c04a0

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 74c04a0 was bf1840e9, checked in by ramon <ramongomez@…>, 15 years ago

Corrección fallo en reducción de sistema de archivos; engine-1.0: función getDiskType.

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

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