diff options
Diffstat (limited to 'client/engine/Disk.lib')
-rwxr-xr-x | client/engine/Disk.lib | 470 |
1 files changed, 283 insertions, 187 deletions
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib index f9031d55..88fb132b 100755 --- a/client/engine/Disk.lib +++ b/client/engine/Disk.lib @@ -4,11 +4,18 @@ #@brief Librería o clase Disk #@class Disk #@brief Funciones para gestión de discos y particiones. -#@version 1.0.4 +#@version 1.0.5 #@warning License: GNU GPLv3+ #*/ +# Función ficticia para lanzar parted con timeout, evitando cuelgues del programa. +function parted () +{ +timeout -k 5s -s KILL 3s $(which parted) "$@" +} + + #/** # ogCreatePartitions int_ndisk str_parttype:int_partsize ... #@brief Define el conjunto de particiones de un disco. @@ -24,7 +31,7 @@ #@attention No puede definirse partición de cache y no se modifica si existe. #@note Requisitos: sfdisk, parted, partprobe, awk #@todo Definir atributos (arranque, oculta) y tamaños en MB, GB, etc. -#@version 0.9 - Primera versión para OpenGNSys +#@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/09/09 #@version 0.9.1 - Corrección del redondeo del tamaño del disco. @@ -44,7 +51,7 @@ if [ "$*" == "help" ]; then "$FUNCNAME 1 NTFS:10000000 EXT3:5000000 LINUX-SWAP:1000000" return fi -# Error si no se reciben menos de 2 parámetros. +# Error si no se reciben al menos 2 parámetros. [ $# -ge 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? # Nº total de sectores, para evitar desbordamiento (evitar redondeo). @@ -94,13 +101,13 @@ while [ $# -gt 0 ]; do SIZE=$[SIZE*2] # Comprobar si la partición es extendida. if [ $ID = 5 ]; then - [ $PART -gt 4 ] && ogRaiseError $OG_ERR_FORMAT && return $? + [ $PART -le 4 ] || ogRaiseError $OG_ERR_FORMAT || return $? EXTSTART=$START EXTSIZE=$SIZE fi # Incluir particiones lógicas dentro de la partición extendida. if [ $PART = 5 ]; then - [ -z "$EXTSTART" ] && ogRaiseError $OG_ERR_FORMAT && return $? + [ -n "$EXTSTART" ] || ogRaiseError $OG_ERR_FORMAT || return $? START=$EXTSTART SECTORS=$[EXTSTART+EXTSIZE] fi @@ -247,7 +254,7 @@ sgdisk $DELOPTIONS $OPTIONS $DISK 2>/dev/null && partprobe $DISK #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@note tabletype: { MSDOS, GPT } #@note Requisitos: sfdisk, sgdisk -#@version 1.0.4 - Primera versión compatible con OpenGNSys. +#@version 1.0.4 - Primera versión compatible con OpenGnSys. #@author Universidad de Huelva #@date 2012/03/06 #*/ ## @@ -355,7 +362,7 @@ esac #@version 0.1 - Integracion para Opengnsys - EAC: DiskEAC() en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga #@date 2008/10/27 -#@version 0.9 - Primera version para OpenGNSys +#@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2009/07/20 #*/ ## @@ -402,9 +409,12 @@ return $OG_ERR_NOTFOUND #@Date 2008/06/19 #@author Antonio J. Doblas Viso, Universidad de Malaga #@date 2008/10/27 -#@version 0.9 - Primera version para OpenGNSys +#@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad Sevilla #@date 2009-07-20 +#@version 1.0.5 - Comprobación correcta de parámetros para soportar valores > 9. +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2013-05-07 #*/ ## function ogDiskToDev () { @@ -430,15 +440,15 @@ case $# in 0) # Muestra todos los discos, separados por espacios. echo $ALLDISKS ;; - 1) # Error si el parámetro no es un digito. - [ -z "${1/[1-9]/}" ] || ogRaiseError $OG_ERR_FORMAT || return $? + 1) # Error si el parámetro no es un número positivo. + [[ "$1" =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1" || return $? DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}') # Error si el fichero no existe. [ -e "$DISK" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? echo "$DISK" ;; - 2) # Error si los 2 parámetros no son digitos. - [ -z "${1/[1-9]/}" -a -z "${2/[1-9]/}" ] || ogRaiseError $OG_ERR_FORMAT|| return $? + 2) # Error si los 2 parámetros no son números positivos. + [[ "$1" =~ ^[1-9][0-9]*$ ]] && [[ "$2" =~ ^[1-9][0-9]*$ ]] || ogRaiseError $OG_ERR_FORMAT "$1 $2" || return $? DISK=$(echo "$ALLDISKS" | awk -v n=$1 '{print $n}') [ -e "$DISK" ] || ogRaiseError $OG_ERR_NOTFOUND "$1" || return $? PART="$DISK$2" @@ -464,118 +474,6 @@ esac #/** -# ogFsToId str_fstype -#@see ogTypeToId -#*/ ## -function ogFsToId () -{ -ogTypeToId "$@" -} - - -#/** -# ogTypeToId str_parttype str_tabletype -#@brief Devuelve el identificador correspondiente a un tipo de partición. -#@param str_parttype mnemónico de tipo de partición. -#@param str_tabletype mnemónico de tipo de tabla de particiones (MSDOS por defecto). -#@return int_idpart identificador de tipo de partición. -#@exception OG_ERR_FORMAT Formato incorrecto. -#@note tabletype = { MSDOS, GPT } -#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib -#@author Antonio J. Doblas Viso, Universidad de Malaga -#@date 2008/10/27 -#@version 0.9 - Primera version para OpenGNSys -#@author Ramon Gomez, ETSII Universidad Sevilla -#@date 2009-12-14 -#@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId). -#@author Universidad de Huelva -#@date 2012/03/30 -#*/ ## -function ogTypeToId () -{ -# Variables locales -local PTTYPE ID - -# Si se solicita, mostrar ayuda. -if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \ - "$FUNCNAME LINUX => 83" \ - "$FUNCNAME LINUX MSDOS => 83" - return -fi -# Error si no se reciben 2 parámetro. -[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $? - -# Asociar id. de partición para su mnemónico. -PTTYPE=${2:-"MSDOS"} -case "$PTTYPE" in - GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS. - case "$1" in - EMPTY) ID=0 ;; - WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12) - ID=0700 ;; - WIN-RESERV) ID=0C01 ;; - CHROMEOS-KRN) ID=7F00 ;; - CHROMEOS) ID=7F01 ;; - CHROMEOS-RESERV) ID=7F02 ;; - LINUX-SWAP) ID=8200 ;; - LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) - ID=8300 ;; - LINUX-RESERV) ID=8301 ;; - LINUX-LVM) ID=8E00 ;; - FREEBSD-DISK) ID=A500 ;; - FREEBSD-BOOT) ID=A501 ;; - FREEBSD-SWAP) ID=A502 ;; - FREEBSD) ID=A503 ;; - HFS|HFS+) ID=AF00 ;; - HFS-RAID) ID=AF01 ;; - SOLARIS-BOOT) ID=BE00 ;; - SOLARIS) ID=BF00 ;; - SOLARIS-SWAP) ID=BF02 ;; - SOLARIS-DISK) ID=BF03 ;; - CACHE) ID=CA00;; - EFI) ID=EF00 ;; - LINUX-RAID) ID=FD00 ;; - *) ID="" ;; - esac - ;; - MSDOS) - case "$1" in - EMPTY) ID=0 ;; - FAT12) ID=1 ;; - EXTENDED) ID=5 ;; - FAT16) ID=6 ;; - WINDOWS|NTFS|EXFAT) - ID=7 ;; - FAT32) ID=b ;; - HFAT12) ID=11 ;; - HFAT16) ID=16 ;; - HNTFS) ID=17 ;; - HFAT32) ID=1b ;; - LINUX-SWAP) ID=82 ;; - LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) - ID=83 ;; - LINUX-LVM) ID=8e ;; - FREEBSD) ID=a5 ;; - OPENBSD) ID=a6 ;; - HFS|HFS+) ID=af ;; - SOLARIS-BOOT) ID=be ;; - SOLARIS) ID=bf ;; - CACHE) ID=ca ;; - DATA) ID=da ;; - GPT) ID=ee ;; - EFI) ID=ef ;; - VMFS) ID=fb ;; - LINUX-RAID) ID=fd ;; - *) ID="" ;; - esac - ;; -esac -echo $ID -} - - -#/** # ogGetDiskSize int_ndisk #@brief Muestra el tamaño en KB de un disco. #@param int_ndisk nº de orden del disco @@ -702,7 +600,7 @@ echo $LASTSECTOR #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@note Requisitos: parted #@todo Queda definir formato para atributos (arranque, oculta, ...). -#@version 0.9 - Primera version compatible con OpenGNSys. +#@version 0.9 - Primera version compatible con OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/09/17 #*/ ## @@ -780,7 +678,7 @@ echo $ID #@version 0.1 - Integracion para Opengnsys - EAC: SizePartition () en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga #@date 2008/10/27 -#@version 0.9 - Primera version para OpenGNSys +#@version 0.9 - Primera version para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/07/24 #*/ ## @@ -890,7 +788,7 @@ parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}' #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición #@return Mnemonico -#@note Mnemonico: { EXT2, EXT3, EXT4, REISERFS, XFS, JFS, LINUX-SWAP, LINUX-LVM, LINUX-RAID, SOLARIS, FAT16, HFAT16, FAT32, HFAT32, NTFS, HNTFS, WIN-DYNAMIC, CACHE, EMPTY, EXTENDED, UNKNOWN } +#@note Mnemonico: valor devuelto por ogIdToType. #@exception OG_ERR_FORMAT Formato incorrecto. #@exception OG_ERR_NOTFOUND Disco o particion no corresponden con un dispositivo. #@version 0.1 - Integracion para Opengnsys - EAC: TypeFS() en ATA.lib @@ -902,6 +800,9 @@ parted -sm $DISK print | awk -F: -v D=$DISK '{ if($1 == D) print toupper($6)}' #@version 1.0.3 - Código trasladado de antigua función ogGetFsType. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2011-12-01 +#@version 1.0.5 - Usar función ogIdToType para hacer la conversión id. a tipo. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2013-09-19 #*/ ## function ogGetPartitionType () { @@ -919,50 +820,7 @@ fi # Detectar id. de tipo de partición y codificar al mnemonico. ID=$(ogGetPartitionId "$1" "$2") || return $? -case "$ID" in - 0) TYPE="EMPTY" ;; - 1) TYPE="FAT12" ;; - 5|f) TYPE="EXTENDED" ;; - 6|e) TYPE="FAT16" ;; - 7) TYPE="NTFS" ;; - 700|0700) TYPE="WINDOWS" ;; - b|c) TYPE="FAT32" ;; - C01|0C01) TYPE="WIN-RESERV" ;; - 11) TYPE="HFAT12" ;; - 12) TYPE="COMPAQDIAG" ;; - 16|1e) TYPE="HFAT16" ;; - 17) TYPE="HNTFS" ;; - 1b|1c) TYPE="HFAT32" ;; - 42) TYPE="WIN-DYNAMIC" ;; - 7F00) TYPE="CHROMEOS-KRN" ;; - 7F01) TYPE="CHROMEOS" ;; - 7F02) TYPE="CHROMEOS-RESERV" ;; - 82|8200) TYPE="LINUX-SWAP" ;; - 83|8300) TYPE="LINUX" ;; - 8301) TYPE="LINUX-RESERV" ;; - 8e|8E00) TYPE="LINUX-LVM" ;; - a5|A503) TYPE="FREEBSD" ;; - A500) TYPE="FREEBSD-DISK" ;; - A501) TYPE="FREEBSD-BOOT" ;; - A502) TYPE="FREEBSD-SWAP" ;; - a6) TYPE="OPENBSD" ;; - a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix) - af|AF00) TYPE="HFS" ;; - Af01) TYPE="HFS-RAID" ;; - be|BE00) TYPE="SOLARIS-BOOT" ;; - bf|BF0[0145]) TYPE="SOLARIS" ;; - BF02) TYPE="SOLARIS-SWAP" ;; - BF03) TYPE="SOLARIS-DISK" ;; - ca|CA00) TYPE="CACHE" ;; - da) TYPE="DATA" ;; - ee) TYPE="GPT" ;; - ef|EF00) TYPE="EFI" ;; - EF01) TYPE="MBR" ;; - EF02) TYPE="BIOS-BOOT" ;; - fb) TYPE="VMFS" ;; - fd|FD00) TYPE="LINUX-RAID" ;; - *) TYPE="UNKNOWN" ;; -esac +TYPE=$(ogIdToType "$ID") echo "$TYPE" } @@ -1005,7 +863,82 @@ case "$TYPE" in return $? ;; esac # Cambiar tipo de partición. -ogSetPartitionId $1 $2 $NEWTYPE +ogSetPartitionType $1 $2 $NEWTYPE +} + + +#/** +# ogIdToType int_idpart +#@brief Devuelve el identificador correspondiente a un tipo de partición. +#@param int_idpart identificador de tipo de partición. +#@return str_parttype mnemónico de tipo de partición. +#@exception OG_ERR_FORMAT Formato incorrecto. +#@version 1.0.5 - Primera version para OpenGnSys +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2013-02-07 +#*/ ## +function ogIdToType () +{ +# Variables locales +local ID TYPE + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_idpart" \ + "$FUNCNAME 83 => LINUX" + return +fi +# Error si no se recibe 1 parámetro. +[ $# == 1 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Obtener valor hexadecimal de 4 caracteres rellenado con 0 por delante. +ID=$(printf "%4s" "$1" | tr ' ' '0') +case "${ID,,}" in + 0000) TYPE="EMPTY" ;; + 0001) TYPE="FAT12" ;; + 0005|000f) TYPE="EXTENDED" ;; + 0006|000e) TYPE="FAT16" ;; + 0007) TYPE="NTFS" ;; + 000b|000c) TYPE="FAT32" ;; + 0011) TYPE="HFAT12" ;; + 0012) TYPE="COMPAQDIAG" ;; + 0016|001e) TYPE="HFAT16" ;; + 0017) TYPE="HNTFS" ;; + 001b|001c) TYPE="HFAT32" ;; + 0042) TYPE="WIN-DYNAMIC" ;; + 0082|8200) TYPE="LINUX-SWAP" ;; + 0083|8300) TYPE="LINUX" ;; + 008e|8E00) TYPE="LINUX-LVM" ;; + 00a5|a503) TYPE="FREEBSD" ;; + 00a6) TYPE="OPENBSD" ;; + 00a7) TYPE="CACHE" ;; # (compatibilidad con Brutalix) + 00af|af00) TYPE="HFS" ;; + 00be|be00) TYPE="SOLARIS-BOOT" ;; + 00bf|bf0[0145]) TYPE="SOLARIS" ;; + 00ca|ca00) TYPE="CACHE" ;; + 00da) TYPE="DATA" ;; + 00ee) TYPE="GPT" ;; + 00ef|ef00) TYPE="EFI" ;; + 00fb) TYPE="VMFS" ;; + 00fd|fd00) TYPE="LINUX-RAID" ;; + 0700) TYPE="WINDOWS" ;; + 0c01) TYPE="WIN-RESERV" ;; + 7f00) TYPE="CHROMEOS-KRN" ;; + 7f01) TYPE="CHROMEOS" ;; + 7f02) TYPE="CHROMEOS-RESERV" ;; + 8301) TYPE="LINUX-RESERV" ;; + a500) TYPE="FREEBSD-DISK" ;; + a501) TYPE="FREEBSD-BOOT" ;; + a502) TYPE="FREEBSD-SWAP" ;; + ab00) TYPE="HFS-BOOT" ;; + af01) TYPE="HFS-RAID" ;; + bf02) TYPE="SOLARIS-SWAP" ;; + bf03) TYPE="SOLARIS-DISK" ;; + ef01) TYPE="MBR" ;; + ef02) TYPE="BIOS-BOOT" ;; + *) TYPE="UNKNOWN" ;; +esac +echo "$TYPE" } @@ -1019,7 +952,7 @@ ogSetPartitionId $1 $2 $NEWTYPE #@note Requisitos: \c parted \c awk #@attention El nº de partición se indica por el orden de los párametros \c parttype:partsize #@attention Las tuplas de valores están separadas por espacios. -#@version 0.9 - Primera versión para OpenGNSys +#@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/07/24 #*/ ## @@ -1103,7 +1036,7 @@ echo $PARTS | cut -sf5- -d" " #@version 0.1 - Integracion para Opengnsys - EAC: SetPartitionActive() en ATA.lib #@author Antonio J. Doblas Viso, Universidad de Malaga #@date 2008/10/27 -#@version 0.9 - Primera version compatible con OpenGNSys. +#@version 0.9 - Primera version compatible con OpenGnSys. #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/09/17 #*/ ## @@ -1129,12 +1062,16 @@ parted -s $DISK set $2 boot on 2>/dev/null #/** -# ogSetPartitionId int_ndisk int_npartition str_type +# ogSetPartitionId int_ndisk int_npartition hex_partid #@brief Cambia el identificador de la partición. #@param int_ndisk nº de orden del disco #@param int_npartition nº de orden de la partición -#@param str_partid mnemónico de tipo de partición +#@param hex_partid identificador de tipo de partición #@return (nada) +#@exception OG_ERR_FORMAT Formato incorrecto. +#@exception OG_ERR_NOTFOUND Disco o partición no corresponden con un dispositivo. +#@exception OG_ERR_OUTOFLIMIT Valor no válido. +#@exception OG_ERR_PARTITION Error al cambiar el id. de partición. #@attention Requisitos: fdisk, sgdisk #@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib #@author Antonio J. Doblas Viso. Universidad de Malaga @@ -1142,6 +1079,9 @@ parted -s $DISK set $2 boot on 2>/dev/null #@version 1.0.4 - Soporte para discos GPT. #@author Universidad de Huelva #@date 2012/03/13 +#@version 1.0.5 - Utiliza el id. de tipo de partición (no el mnemónico) +#@author Universidad de Huelva +#@date 2012/05/14 #*/ ## function ogSetPartitionId () { @@ -1150,26 +1090,34 @@ local DISK PART PTTYPE ID # Si se solicita, mostrar ayuda. if [ "$*" == "help" ]; then - ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \ - "$FUNCNAME 1 1 NTFS" + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition hex_partid" \ + "$FUNCNAME 1 1 7" return fi # Error si no se reciben 3 parámetros. [ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? -# Sustituye nº de disco por su dispositivo. -DISK=`ogDiskToDev $1` || return $? -PART=`ogDiskToDev $1 $2` || return $? +# Sustituye nº de disco y nº partición por su dispositivo. +DISK=$(ogDiskToDev $1) || return $? +PART=$(ogDiskToDev $1 $2) || return $? +# Error si el id. de partición no es hexadecimal. +ID="${3^^}" +[[ "$ID" =~ ^[0-9A-F]+$ ]] || ogRaiseError $OG_ERR_OUTOFLIMIT "$3" || return $? # Elección del tipo de partición. PTTYPE=$(ogGetPartitionTableType $1) -ID=$(ogTypeToId "$3" "$PTTYPE") -[ -n "$ID" ] || ogRaiseError $OG_ERR_PARTITION "$3,$PTTYPE" || return $? case "$PTTYPE" in - GPT) sgdisk $DISK -t$PART:$ID 2>/dev/null ;; + GPT) sgdisk -t$2:$ID $DISK 2>/dev/null ;; MSDOS) echo -ne "t\n$2\n${ID}\nw\n" | fdisk $DISK &>/dev/null ;; + *) ogRaiseError $OG_ERR_OUTOFLIMIT "$1,$PTTYPE" + return $? ;; esac -partprobe $DISK 2>/dev/null +if [ $? == 0 ]; then + partprobe $DISK 2>/dev/null +else + ogRaiseError $OG_ERR_PARTITION "$1,$2,$3" + return $? +fi } @@ -1184,7 +1132,7 @@ partprobe $DISK 2>/dev/null #@exception OG_ERR_NOTFOUND disco o particion no detectado (no es un dispositivo). #@note Requisitos: sfdisk, awk #@todo Compruebar que el tamaño sea numérico positivo y evitar que pueda solaparse con la siguiente partición. -#@version 0.9 - Primera versión para OpenGNSys +#@version 0.9 - Primera versión para OpenGnSys #@author Ramon Gomez, ETSII Universidad de Sevilla #@date 2009/07/24 #*/ ## @@ -1214,6 +1162,154 @@ partprobe $DISK 2>/dev/null #/** +# ogSetPartitionType int_ndisk int_npartition str_type +#@brief Cambia el identificador de la partición. +#@param int_ndisk nº de orden del disco +#@param int_npartition nº de orden de la partición +#@param str_type mnemónico de tipo de partición +#@return (nada) +#@attention Requisitos: fdisk, sgdisk +#@version 0.1 - Integracion para Opengnsys - SetPartitionType() en ATA.lib +#@author Antonio J. Doblas Viso. Universidad de Malaga +#@date 2008/10/27 +#@version 1.0.4 - Soporte para discos GPT. +#@author Universidad de Huelva +#@date 2012/03/13 +#@version 1.0.5 - Renombrada de ogSetPartitionId. +#@author Ramon Gomez, ETSII Universidad de Sevilla +#@date 2013/03/07 +#*/ ## +function ogSetPartitionType () +{ +# Variables locales +local DISK PART PTTYPE ID + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk int_npartition str_type" \ + "$FUNCNAME 1 1 NTFS" + return +fi +# Error si no se reciben 3 parámetros. +[ $# == 3 ] || ogRaiseError $OG_ERR_FORMAT || return $? + +# Sustituye nº de disco por su dispositivo. +DISK=`ogDiskToDev $1` || return $? +PART=`ogDiskToDev $1 $2` || return $? + +# Elección del tipo de partición. +PTTYPE=$(ogGetPartitionTableType $1) +ID=$(ogTypeToId "$3" "$PTTYPE") +[ -n "$ID" ] || ogRaiseError $OG_ERR_FORMAT "$3,$PTTYPE" || return $? +ogSetPartitionId $1 $2 $ID +} + + +#/** +# ogTypeToId str_parttype [str_tabletype] +#@brief Devuelve el identificador correspondiente a un tipo de partición. +#@param str_parttype mnemónico de tipo de partición. +#@param str_tabletype mnemónico de tipo de tabla de particiones (MSDOS por defecto). +#@return int_idpart identificador de tipo de partición. +#@exception OG_ERR_FORMAT Formato incorrecto. +#@note tabletype = { MSDOS, GPT }, (MSDOS, por defecto) +#@version 0.1 - Integracion para Opengnsys - EAC: TypeFS () en ATA.lib +#@author Antonio J. Doblas Viso, Universidad de Malaga +#@date 2008/10/27 +#@version 0.9 - Primera version para OpenGnSys +#@author Ramon Gomez, ETSII Universidad Sevilla +#@date 2009-12-14 +#@version 1.0.4 - Soportar discos GPT (sustituye a ogFsToId). +#@author Universidad de Huelva +#@date 2012/03/30 +#*/ ## +function ogTypeToId () +{ +# Variables locales +local PTTYPE ID + +# Si se solicita, mostrar ayuda. +if [ "$*" == "help" ]; then + ogHelp "$FUNCNAME" "$FUNCNAME str_parttype [str_tabletype]" \ + "$FUNCNAME LINUX => 83" \ + "$FUNCNAME LINUX MSDOS => 83" + return +fi +# Error si no se reciben 1 o 2 parámetros. +[ $# -lt 1 -o $# -gt 2 ] && (ogRaiseError $OG_ERR_FORMAT; return $?) + +# Asociar id. de partición para su mnemónico. +PTTYPE=${2:-"MSDOS"} +case "$PTTYPE" in + GPT) # Se incluyen mnemónicos compatibles con tablas MSDOS. + case "$1" in + EMPTY) ID=0 ;; + WINDOWS|NTFS|EXFAT|FAT32|FAT16|FAT12|HNTFS|HFAT32|HFAT16|HFAT12) + ID=0700 ;; + WIN-RESERV) ID=0C01 ;; + CHROMEOS-KRN) ID=7F00 ;; + CHROMEOS) ID=7F01 ;; + CHROMEOS-RESERV) ID=7F02 ;; + LINUX-SWAP) ID=8200 ;; + LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) + ID=8300 ;; + LINUX-RESERV) ID=8301 ;; + LINUX-LVM) ID=8E00 ;; + FREEBSD-DISK) ID=A500 ;; + FREEBSD-BOOT) ID=A501 ;; + FREEBSD-SWAP) ID=A502 ;; + FREEBSD) ID=A503 ;; + HFS-BOOT) ID=AB00 ;; + HFS|HFS+) ID=AF00 ;; + HFSPLUS) ID=AF00 ;; + HFS-RAID) ID=AF01 ;; + SOLARIS-BOOT) ID=BE00 ;; + SOLARIS) ID=BF00 ;; + SOLARIS-SWAP) ID=BF02 ;; + SOLARIS-DISK) ID=BF03 ;; + CACHE) ID=CA00;; + EFI) ID=EF00 ;; + LINUX-RAID) ID=FD00 ;; + *) ID="" ;; + esac + ;; + MSDOS) + case "$1" in + EMPTY) ID=0 ;; + FAT12) ID=1 ;; + EXTENDED) ID=5 ;; + FAT16) ID=6 ;; + WINDOWS|NTFS|EXFAT) + ID=7 ;; + FAT32) ID=b ;; + HFAT12) ID=11 ;; + HFAT16) ID=16 ;; + HNTFS) ID=17 ;; + HFAT32) ID=1b ;; + LINUX-SWAP) ID=82 ;; + LINUX|EXT[234]|REISERFS|REISER4|XFS|JFS) + ID=83 ;; + LINUX-LVM) ID=8e ;; + FREEBSD) ID=a5 ;; + OPENBSD) ID=a6 ;; + HFS|HFS+) ID=af ;; + SOLARIS-BOOT) ID=be ;; + SOLARIS) ID=bf ;; + CACHE) ID=ca ;; + DATA) ID=da ;; + GPT) ID=ee ;; + EFI) ID=ef ;; + VMFS) ID=fb ;; + LINUX-RAID) ID=fd ;; + *) ID="" ;; + esac + ;; +esac +echo $ID +} + + +#/** # ogUnhidePartition int_ndisk int_npartition #@brief Hace visible una partición oculta. #@param int_ndisk nº de orden del disco @@ -1251,7 +1347,7 @@ case "$TYPE" in return $? ;; esac # Cambiar tipo de partición. -ogSetPartitionId $1 $2 $NEWTYPE +ogSetPartitionType $1 $2 $NEWTYPE } |