summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2014-09-23 11:48:41 +0000
committerramon <ramongomez@us.es>2014-09-23 11:48:41 +0000
commitfd1846fe10d86fdc5df52e97536816c64ac33960 (patch)
treeecc0bfe90470d054ecd0994fb1fea5942eed45e0
parent2851a935492a9b29c346f631c1409f0ef81402b9 (diff)
#51: Integrar código del ticket:51 para detectar metadispositivos (LVM, RAID hardware y Multipath).
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4395 a21b9725-9963-47de-94b9-378ad31fedc9
-rwxr-xr-xadmin/Interface/getConfiguration5
-rw-r--r--admin/WebConsole/includes/pintaParticiones.php13
-rwxr-xr-xclient/engine/Disk.lib44
3 files changed, 45 insertions, 17 deletions
diff --git a/admin/Interface/getConfiguration b/admin/Interface/getConfiguration
index 2bfdaeeb..0979986d 100755
--- a/admin/Interface/getConfiguration
+++ b/admin/Interface/getConfiguration
@@ -17,6 +17,7 @@ for ((dsk=1; dsk<=$disks; dsk++)); do
case "$ptt" in
MSDOS) ptt=1 ;;
GPT) ptt=2 ;;
+ LVM) ptt=3 ;;
*) ptt=0 ;;
esac
# Información de disco (partición 0)
@@ -31,8 +32,8 @@ for ((dsk=1; dsk<=$disks; dsk++)); do
tam=$(ogGetPartitionSize $dsk $par 2>/dev/null)
tam=${tam:-"0"}
# Sistema operativo instalado
- case "$cod" in
- ""|82|8200|A502|BF02|EE)
+ case "$fsi" in
+ ""|EMPTY|CACHE|LINUX-SWAP|LINUX-LVM)
soi="" ;;
*) soi=$(getOsVersion $dsk $par 2>/dev/null | cut -f2 -d:)
# Sistema de archivos para datos (sistema operativo "DATA")
diff --git a/admin/WebConsole/includes/pintaParticiones.php b/admin/WebConsole/includes/pintaParticiones.php
index 33ab50da..210f4728 100644
--- a/admin/WebConsole/includes/pintaParticiones.php
+++ b/admin/WebConsole/includes/pintaParticiones.php
@@ -85,6 +85,8 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
break;
case 2: $disktable[$tbKeys[$k]["numdisk"]] = "GPT";
break;
+ case 3: $disktable[$tbKeys[$k]["numdisk"]] = "LVM";
+ break;
default: $disktable[$tbKeys[$k]["numdisk"]] = "";
}
}
@@ -92,11 +94,16 @@ function pintaParticiones($cmd,$configuraciones,$idordenadores,$cc)
echo'<tr height="16">'.chr(13);
echo'<td align="center">&nbsp;</td>'.chr(13);
echo'<td align="center">'.$tbKeys[$k]["numpar"].'</td>'.chr(13);
- if (is_numeric ($tbKeys[$k]["tipopar"])) {
- echo '<td align="center"><em>'.sprintf("%02X",$tbKeys[$k]["tipopar"]).'</em></td>'.chr(13);
+ if ($disktable[$tbKeys[$k]["numdisk"]] == "LVM") {
+ echo '<td></td>'.chr(13);
}
else {
- echo '<td align="center">'.$tbKeys[$k]["tipopar"].'</td>'.chr(13);
+ if (is_numeric ($tbKeys[$k]["tipopar"])) {
+ echo '<td align="center"><em>'.sprintf("%02X",$tbKeys[$k]["tipopar"]).'</em></td>'.chr(13);
+ }
+ else {
+ echo '<td align="center">'.$tbKeys[$k]["tipopar"].'</td>'.chr(13);
+ }
}
$filesys=tomaSistemasFicheros($tbKeys[$k]["numpar"],$idordenadores,false,$tbKeys[$k]["numdisk"]);
echo'<td align="center">&nbsp;'.$filesys.'&nbsp;</td>'.chr(13);
diff --git a/client/engine/Disk.lib b/client/engine/Disk.lib
index cf389785..7897fc9c 100755
--- a/client/engine/Disk.lib
+++ b/client/engine/Disk.lib
@@ -430,11 +430,14 @@ return $OG_ERR_NOTFOUND
#@version 1.0.5 - Comprobación correcta de parámetros para soportar valores > 9.
#@author Ramon Gomez, ETSII Universidad Sevilla
#@date 2013-05-07
+#@version 1.0.6 - Soporta RAID hardware y Multipath.
+#@author Ramon Gomez, ETSII Universidad Sevilla
+#@date 2014-09-23
#*/ ##
function ogDiskToDev ()
{
# Variables locales
-local ALLDISKS VOLGROUPS DISK PART
+local ALLDISKS MPATH VOLGROUPS DISK PART i
# Si se solicita, mostrar ayuda.
if [ "$*" == "help" ]; then
@@ -445,13 +448,23 @@ if [ "$*" == "help" ]; then
return
fi
-# Nota: probar rendimiento del comando lsblk.
-#ALLDISKS=$(lsblk -n | awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}')
-# Listar dispositivo para los discos duros (tipos: 3=hd, 8=sd) y grupos de volúmenes.
-ALLDISKS=$(awk '($1==3 || $1==8) && $4!~/[0-9]/ {printf "/dev/%s ",$4}' /proc/partitions)
+# Listar dispositivos de discos duros.
+ALLDISKS=$(lsblk -n | awk '$6~/^disk$/ {gsub(/!/,"/"); printf "/dev/%s ",$1}')
+
+# Listar volúmenes lógicos.
VOLGROUPS=$(vgs -a --noheadings 2>/dev/null | awk '{printf "/dev/%s ",$1}')
ALLDISKS="$ALLDISKS $VOLGROUPS"
+# Detectar caminos múltiples (ignorar mensaje si no está configurado Multipath).
+if MPATH=$(multipath -l -v 1 2>/dev/null | awk '{printf "/dev/mapper/%s ",$1}'; exit ${PIPESTATUS[0]}); then
+ # Quitar de la lista los discos que forman parte de Multipath.
+ for i in $(multipath -ll | awk '$6=="ready" {printf "/dev/%s ",$3}'); do
+ ALLDISKS="${ALLDISKS//$i/}"
+ done
+ # Añadir caminos múltiples a los discos detectados.
+ ALLDISKS="$ALLDISKS $MPATH"
+fi
+
# Mostrar salidas segun el número de parametros.
case $# in
0) # Muestra todos los discos, separados por espacios.
@@ -472,14 +485,21 @@ case $# in
# Comprobar si es partición.
if [ -b "$PART" ]; then
echo "$PART"
- elif [ -n "$VOLGROUPS" ]; then
- # Comprobar si volumen lógico. /* (comentario Doxygen)
- PART=$(lvscan -a 2>/dev/null | grep "'$DISK/" | awk -v n=$2 -F\' '{if (NR==n) print $2}')
- [ -e "$PART" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
- # (comentario Doxygen) */
- echo "$PART"
else
- ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
+ # Comprobar si RAID o Multipath (tener en cuenta enlace simbólico).
+ PART="${DISK}p$2"
+ if [ "$(stat -L -c "%A" "$PART" 2>/dev/null | cut -c1)" == "b" ]; then
+ echo "$PART"
+ elif [ -n "$VOLGROUPS" ]; then
+ # Comprobar si volumen lógico. /* (comentario Doxygen)
+ PART=$(lvscan -a 2>/dev/null | \
+ awk -F\' -v n=$2 "\$2~/^${DISK//\//\\/}\// {if (NR==n) print \$2}")
+ [ -e "$PART" ] || ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
+ # (comentario Doxygen) */
+ echo "$PART"
+ else
+ ogRaiseError $OG_ERR_NOTFOUND "$1 $2" || return $?
+ fi
fi
;;
*) # Formato erroneo.