summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2016-05-20 11:42:28 +0000
committerramon <ramongomez@us.es>2016-05-20 11:42:28 +0000
commit680f79fdc9561195e9816a95fb4b9b16687735c9 (patch)
tree6d4f6f43a81f5d2c1644595568bed37dca6cc40f /client
parentfe5b8d27d359fd382a3593d4be00429097744f9e (diff)
#724: Optimizar funciones {{{ogGetLastSector}}} y {{{ogogGetPartitionId}}}.
git-svn-id: https://opengnsys.es/svn/branches/version1.1@4943 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'client')
-rwxr-xr-xclient/engine/Disk.lib47
1 files changed, 15 insertions, 32 deletions
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index ea05eb24..2c5ca5ec 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -611,12 +611,14 @@ echo $TYPE
#@version 1.0.4 - Primera versión compatible con OpenGnSys.
#@author Universidad de Huelva
#@date 2012/06/03
+#@version 1.1.0 - Usar "hdparm" y "partx" en vez de "sfdisk".
+#@author Ramon Gomez, ETSII Universidad Sevilla
+#@date 2016-05-20
#*/ ##
-
function ogGetLastSector ()
{
# Variables locales
-local DISK PART PTTYPE LASTSECTOR SECTORS CYLS
+local DISK PART LASTSECTOR
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
ogHelp "$FUNCNAME" "$FUNCNAME int_ndisk [int_npart]" \
@@ -624,39 +626,21 @@ if [ "$*" == "help" ]; then
"$FUNCNAME 1 1 => 102400062"
return
fi
-# Error si no se reciben 1 o 2 parámetros.
+
+# Obtener último sector.
case $# in
- 1) DISK=$(ogDiskToDev $1) || return $?
+ 1) # Para un disco.
+ DISK=$(ogDiskToDev $1) || return $?
+ LASTSECTOR=$(hdparm -N $DISK | awk -F"[=/]" '/=/ {print $2}')
;;
- 2) DISK=$(ogDiskToDev $1) || return $?
+ 2) # Para una partición.
PART=$(ogDiskToDev $1 $2) || return $?
+ LASTSECTOR=$(partx -gso END $PART)
;;
- *) ogRaiseError $OG_ERR_FORMAT
+ *) # Error si se reciben más parámetros.
+ ogRaiseError $OG_ERR_FORMAT
return $? ;;
esac
-
-# Hay que comprobar si el disco es GPT
-PTTYPE=$(ogGetPartitionTableType $1)
-PTTYPE=${PTTYPE:-"MSDOS"} # Por defecto para discos vacíos.
-case "$PTTYPE" in
- GPT)
- if [ $# == 1 ]; then
- LASTSECTOR=$(LANG=C sgdisk -p $DISK | awk '/last usable sector/ {print($(NF))}')
- else
- LASTSECTOR=$(LANG=C sgdisk -p $DISK | awk -v P="$2" '{if ($1==P) print $3}')
- fi
- ;;
- MSDOS)
- if [ $# == 1 ]; then
- SECTORS=$(awk -v D=${DISK#/dev/} '{if ($4==D) {print $3*2}}' /proc/partitions)
- CYLS=$(sfdisk -g $DISK | cut -f2 -d" ")
- LASTSECTOR=$[SECTORS/CYLS*CYLS-1]
- else
- LASTSECTOR=$(sfdisk -uS -l $DISK 2>/dev/null | \
- awk -v P="$PART" '{if ($1==P) {if ($2=="*") print $4; else print $3} }')
- fi
- ;;
-esac
echo $LASTSECTOR
}
@@ -718,7 +702,7 @@ LANG=C parted -sm $DISK print 2>/dev/null | awk -F: '$7~/boot/ {print $1}'
function ogGetPartitionId ()
{
# Variables locales.
-local DISK PART ID
+local DISK ID
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -729,9 +713,8 @@ fi
# Error si no se reciben 2 parámetros.
[ $# == 2 ] || ogRaiseError $OG_ERR_FORMAT || return $?
-# Detectar id. de tipo de partición y codificar al mnemónico.
+# Detectar y mostrar el id. de tipo de partición.
DISK=$(ogDiskToDev $1) || return $?
-PART=$(ogDiskToDev $1 $2) || return $?
case "$(ogGetPartitionTableType $1)" in
GPT) ID=$(sgdisk -p $DISK 2>/dev/null | awk -v p="$2" '{if ($1==p) print $6;}') || ogRaiseError $OG_ERR_NOTFOUND "$1,$2" || return $?
[ "$ID" == "8301" -a "$1 $2" == "$(ogFindCache)" ] && ID=CA00