Wanneer je aanlogd op het service console bestaan er een aantal ongedocumenteerde commando’s waar hele nuttige dingen mee gedaan kunnen worden.
Zo ontdekten Viktor van den Berg en Christiaan Roeleveld dat het mogelijk is om met het onderstaande script een ESX host in maintenace mode te zetten. Dit kan handig zijn wanneer je een script laat draaien wat alle updates installeert.
vimsh -n -e /hostsvc/maintenance_mode_enter
vimsh -n -e /hostsvc/maintenance_mode_exit
Verder heb ik zelf nog een aardige optie gevonden, een commando waarmee je via het service console kunt achterhalen wat voor type kaart in welk PCI slot zit.
vimsh
[/]$ ?
hostsvc/ ?
csls pinfo puse
internalsvc/ argtype csuimport pload quit
solo/ cls echo ploadpath sleep
vimsvc/ csimport exit pls source
vmsvc/ csinfo help puload
[/]$ hostsvc/host
hostconfig hosthardware hostsummary
[/]$ hostsvc/hosthardware
Er wordt dan een lijst gegenereerd met bijvoorbeeld het onderstaande blok voor een netwerkkaart.
Code:
(vim.host.PciDevice) {
dynamicType = <unset>,
dynamicProperty = (vmodl.DynamicProperty) [],
id = "03:01.0",
classId = 512,
bus = 3,
slot = 1,
function = 0,
vendorId = 5348,
subVendorId = 3601,
vendorName = "Broadcom Corporation",
deviceId = 5704,
subDeviceId = 208,
deviceName = "NC7782 Gigabit Server Adapter (PCI-X, 10,100,1000-T)"
De vimsh wrapper maakt uiteindelijk gebruik van de vsh binary, deze kun je ook vanaf het SC interactief starten.
Code:
#!/bin/sh
#
# Wrapper for the real binary. Ensure that the binary will find all
# the shared libraries it needs. If a shared library is not available from any
# of the standard system-wide locations, we provide it from the build
# directory. --hpreg
#
# Use readlink only when necessary: some boxes don't have it, some boxes have
# one that does not support the -f option. --hpreg
if [ -h "$0" ]; then
this="`readlink -f "$0"`"
else
this="$0"
fi
libdir=/usr/lib/vmware/hostd
binary=/usr/bin/vsh
abslibdir="`cd \"$libdir\" 2>/dev/null && pwd || echo \"$libdir\"`"
cd $libdir
# Check for request to connect remotely.
extracommands="-e \"vmsvc/connect\" -e \"vmsvc/login\" "
if [ -n "$1" ]; then
if [ "$1" == "-r" ]; then
shift
extracommands=''
fi
fi
LD_ASSUME_KERNEL=$LD_ASSUME_KERNEL LD_LIBRARY_PATH="$abslibdir" \
$DEBUG_CMD $binary \
-e 'csuimport vmdb /' \
-e 'puse '"$libdir"'/libhostsvc.so' \
-e 'puse '"$libdir"'/libsolo.so' \
-e 'puse '"$libdir"'/libvmsvc.so' \
-e 'puse '"$libdir"'/libvimsvc.so' \
-e 'puse '"$libdir"'/libinternalsvc.so' \
$extracommands \
"$@"
Dan zie je het volgende lijstje:
Code:
[root@foxtrot root]# vsh
[/]$ help
? connect equals pinfo rget uwatch
abort csimport exit pload rls wait
argtype csinfo get ploadpath set watch
begin csls help pls sleep
bget csuimport listen puload source
cat disconnect localunset puse ulisten
cd echo ls pwd umount
cls end mount quit unset
[/]$