Using linux box to shrink and separate virtual disks

I have some virtual machines with partitions on their vmdk. This makes it terribly difficult to be resized.

I am going to use old dd linux command to copy all data.

In the hipervisor, I’m using a linux box, actually Debian box, to map all disks, and do all the block writing commands.

vmware_shrink2

I also have to take care of the first blocks of the disks, which contains the booting mark. Otherwise, I will have a copy of my data, but my disk won’t be bootable.

vmware_shrink1

Let’s get started.

I will assign to my linux box, all my disks. Old and new ones.

OS disk: Writing boot sector

#
# Copy boot blocks and old partition tables
#
dd if=/dev/sdb of=/dev/sdc bs=16 count=200

OS disk: writing data

I have to re-do partition table (using fdisk) and then copy all data.

As I copied from the original source disk the first sector, a fake partition table is also writen on my new OS disk. It’s time to repartition.

fdisk /dev/sdc
Welcome to fdisk (util-linux 2.25.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): p
Disk /dev/sdc: 15 GiB, 16106127360 bytes, 31457280 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xfe1387ed
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 63 31471334 31471272 15G 7 HPFS/NTFS/exFAT
/dev/sdc2 31471335 52452224 20980890 10G 7 HPFS/NTFS/exFAT

Delete second partition

Command (m for help): d 2
(...)
Command (m for help): p
(...)
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 63 31471334 31471272 15G 7 HPFS/NTFS/exFAT
(...)
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

To write the data, the dd command has to be invoked partitions name (sdb1) and not entire disk (sdb). Entire disk was used just for the boot mark.

dd if=/dev/sdb1 of=/dev/sdc1

Data disk: writing data

I have 2 options here. As it is data, I can either write blocks (dd) or just ordinary file copying.

I created the partition table.

fdisk /dev/sdd

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 7
Changed type of partition 'HPFS/NTFS/exFAT' to 'HPFS/NTFS/exFAT'.

Command (m for help): p
Disk /dev/sdd: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00c7e39c
Device Boot Start End Sectors Size Id Type
/dev/sdd1 2048 20971519 20969472 10G 7 HPFS/NTFS/exFAT

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

If we are going to use file system operations, I need to give it ntfs format:

apt-get install ntfs-3g
mkfs.ntfs /dev/sdd1

Now, it is time to mount both partitions and copy!

mkdir /mnt/old_data
mkdir /mnt/new_data
mount /dev/sdb2 /mnt/old_data/
mount /dev/sdd1 /mnt/new_data/
cp -rfp /mnt/old_data/* /mnt/new_data/

If ntfs permissions are not correctly written, you can use again old dd:

dd if=/dev/sdb2 of=/dev/sdd1

Vmware Vcenter Migración VSCA 5.5 a VSCA 6

1. Por si acaso, preparamos la vuelta atrás.

Restauración a nivel de máquina

  • Creamos un clon del servidor y apuntamos el host ESXi en el que está ejecutando.

  • Paramos los servicios de DRS para prevenir que las máquinas se muevan de host y poder restaurar en poco tiempo.

Restauración a nivel de datos

  • Creamos una copia del inventario en powershell con inventory snapshot. Aunque no se copian ni host profiles ni custom specifications, al menos nos da un punto de restauración a nivel de inventario de máquinas bastante potente.

2.Comenzando la migración.

Elegimos una máquina windows donde se hará la migración. Esta máquina tendrá que tener visibilidad directa con los hosts ESXi y con el vsphere vcenter 5.X que vamos a migrar. A nivel de seguridad, debe tener los mismos puertos abiertos que el vcenter 5.X.

En la página de vmware, se puede descargar la imagen  de vsca vSphere 6.0

En un cliente windows virtual asignamos la ISO de vsca.

vmware.migration.01

Este cliente, recomendamos que tenga visibilidad directa tanto con hosts esxi, como con el servidor vcenter que se va a migrar.

En nuestro caso, hemos puesto 2 interfaces de red.

– Interfaz de red 1 de gestión, en la misma subred que el antiguo servidor vcenter VSCA 5.5

– Interfaz de red 2 (sin puerta de enlace) en la misma subred que el servidor ESXi al que vamos a encargar la migración.

Instalamos Vmware-ClienIntegrationPlugin-6.0.0 en el cliente windows que usaremos para actualizar vsca.

vmware.migration.02

Abrimos un navegador a la siguiente dirección: file:///D:/vcsa-setup.html

vmware.migration.03

Pinchamos sobre upgrade y configuramos nuestro host vmware en el que vamos a instalar la imagen.

vmware.migration.04

Si sale el error de Platform services controller, es necesario cambiar el tipo de servidor:

Existing Appliance Type → Embedded Platform Services Controller.

vmware.migration.05

https://pubs.vmware.com/vsphere-60/index.jsp#com.vmware.vsphere.upgrade.doc/GUID-6A5C596D-103E-4024-9353-5569263EB427.html

Pasado este punto, el asistente sigue. Tarda aproximadamente 40 minutos, migrando todo el inventario, profiles, custom specifications y datos de rendimiento.

Cuando termina, apaga el antiguo vcenter, se queda el mismo con la IP del antiguo vcenter y la migración está completada.

Have fun!

Powercli: Clonar lista de máquinas eligiendo como destino el datastore que tiene mayor capacidad

Para agilizar las clonaciones de listas de máquinas, es necesario usar un powercli, que, además, elija como destino el datastore que tenga mayor espacio disponible.

VMWare ESXi
VMWare ESXi

Para ordenar los resultados de datastore en función del espacio disponible:

     $datastorelist = Get-Datastore -Location $DatastoreCluster | sort -descending FreeSpaceMB

 

En nuestro caso, tenemos los datastore configurados como un datastorecluster, pero,en el caso de no tener, podríamos usar como Location directamente el nombre del cluster o del datacenter donde queremos seleccionar el datastore.

El script completo, está disponible en github.

 
foreach ($clonename in $new_vm)		
	{
    #Select datastore with more space:
    # $datastorelist = Get-Datastore -Location $Datacenter | sort -descending FreeSpaceMB
    # Use in case there are datastore clusters
    $datastorelist = Get-Datastore -Location $DatastoreCluster | sort -descending FreeSpaceMB
    $datastore = $datastorelist[0].Name
    "Clone $clonename in $datastore"

	if (New-VM -Name $clonename -ResourcePool $respool -VM $sourceVM -Location $folder -Datastore $datastore -DiskStorageFormat Thick )
		{"DONE $clonename"}
	else
		{"Something wrong with cloning"}
}	

Powercli: Configurar máquinas virtuales para que instalen tools en el inicio

A raíz del artículo de Brian Graf y de LucD sobre cambios de especificaciones de máquinas virtuales, hemos hecho un pequeño script configure_vmtools_power_cycle.ps1 capaz de marcar en las máquinas virtuales el atributo “tools upgrade”vmware.vmtools.upgrade.power.cycle

Se invoca desde powercli

.\configure_vmtools_power_cycle.ps1

Requiere configuración para definir en qué contenedor (Location) va a aplicar el cambio de políticas.

Para evitar que queden vmware tools montadas en los linux, sólo aplica el cambio sobre máquinas definidas como Windows y encendidas.

En la versión de powercli 5.5 que estamos trabajando, sólo está relleno el cambio vm.Guest.OsFullname si la máquina está encendida. En el caso de máquinas apagadas, no podemos discriminar por sistema operativo. Por ello, se ha puesto también la opción en la función de forzar la aplicación.

 

 
Function configure_vmtools_power_cycle ( $vm, [bool] $force )
{
       

   
    # Comment if you want to upgrade non windows vm
    if ((($vm.Guest.State -eq "PoweredOn") -and  ($vm.Guest.OSFullName.Contains("Windows")) -or ($force)))
        
       {
    
        write-host "Configure vmtools check and upgrade in every powercycle: " $vm.Name $vm.Guest.OSFullName

        # This line creates the object that encapsulates the settings for reconfiguring the VM
        $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
        # This line creates the object we will be modifying
        $vmConfigSpec.Tools = New-Object VMware.Vim.ToolsConfigInfo
        # This line sets the Tools upgrades policy checkbox
        $vmConfigSpec.Tools.ToolsUpgradePolicy = "UpgradeAtPowerCycle"
        # This line commits the change to each virtual machine
        # Get-View -ViewType VirtualMachine | %{    $_.ReconfigVM($vmConfigSpec)}
    
        # Reconfigure vm
        $vm | Get-View | %{ $_.ReconfigVM($vmConfigSpec)}
        
        
   }
 }

 

Vmware: host profiles con arranque desde SAN

Los host-profiles permiten tener una plantilla de configuración de host que asegura que todos los esxi de un cluster son iguales.

vmware.hostprofiles003

Hacen extraordinariamente cómodo la configuración de nuevos servidores.

Se almacenan los datos de:

  • red
  • almacenamiento
  • ntp
  • servicios, firewall…

El problema viene, cuando parte de los servidores tienen arranque desde SAN.

El perfil,  ve el disco de arranque igual que un datastore. El perfil da error de multimapping y psa invariablemente, al aplicar el perfil sobre otros servidores.

Hemos probado a deshabilitar entero la seccción de storage configuration.

Al no tener nada de información metida en los vmware, al respecto de los discos, entra en funcionamiento el mismo mecanismo que si no huebiera host profile en absoluto: Lo que los Hosts ESX vean a través de la fibra se considera datastore.

El perfil por tanto:

  • Se puede aplicar sobre cualquier host.
  • Configura correctamente red, ntp, dns, etc.
  • Ignora todos los settings de almacenamiento sin dar error.

 

vmware.hostprofiles002

 

 

 

Vmware: Subir compatibilidad de forma automática con los reinicios

VMWare ESXi
VMWare ESXi

Estamos subiendo la compatibilidad de todas nuestras máquinas virtuales a vmx-10 que son las compatibles con ESXi 5.5 or higher.

Requiere reinicio, y aún tenemos muchas máquinas en versiones vmx-07  y vmx-08, que provienen de las versiones esxi 4.1 y 4.5 respectivamente.

Por ello, hemos optado por programarlo de forma automática, de forma que sean los usuarios en el reinicio los que suban de versión:

    https://communities.vmware.com/message/2249221#2249221

Hemos tenido que hacer un cambio en la línea 65 para que actúe sobre las máquinas que están en versión menor a 10:

if ($vmversion -ne "vmx-10") {

y que la versión que instale sea vmx-10, en la linea 72

$spec.ScheduledHardwareUpgradeInfo.versionKey = 'vmx-10'

Vmware: Instalación de parches de servidor

VMWare ESXi
VMWare ESXi

Instalación de parches con powershell

Es necesario descargar el parche en local, y descomprimirlo.

Connect-ViServer host1.myorg.org
$host | Install-VMHostPatch -LocalPath ESXi550-201502001/metadata.zip

Instalación de parches por ssh

Activar ssh vía cli

$host = Start-VMHostService -HostService ($_ | Get-VMHostService | Where { $_.Key -eq "TSM-SSH" } )

Vía ssh:

vim-cmd hostsvc/maintenance_mode_enter
esxcli software vib install -d "/var/tmp/ESXi550-201502001.zip"
esxcli software vib list
vim-cmd hostsvc/maintenance_mode_enter

Power cli: script para mover máquinas virtuales de datastore

VMWare ESXi
VMWare ESXi

Utilizando powershell, podemos hacer un pequeño script que nos libere un datastore completo, moviendo las máquinas virtuales que residen en él a una nueva ubicación.

Además,  desmontamos las vmware tools, si están montadas, como indican en las communities de vmware.

Function migrate_ds  ([string] $old_ds, [string] $new_ds)
{            $vms = Get-VM -Datastore $old_ds
            foreach ($vm in $vms) {  
                    # unmount tools and clean cd drive 
                    $vm | Get-CDDrive | where { $_.IsoPath -or $_.HostDevice -or $_.RemoteDevice } | Set-CDDrive -NoMedia -Confirm:$false
                    $vm  | move-VM -Datastore $new_ds
            
            }
}

migrate_ds my_old_ds my_new_ds

The power of puppet. Curso introductorio de puppet labs

puppetlabts

Hemos comenzado con el curso que dan desde Puppet Labs para comprender mejor y sacarle todo el partido posible a puppet.

El curso es gratuito, y la máquina virtual tiene una función de quests que va midiendo tu aprendizaje. Así es mucho más motivador y más fácil de seguir.

Problema con la máquina virtual para vmware

Al desplegar la máquina virtual sobre vmware, hemos encontrado un primer problema, ya que nos decía que no había host capaz de ejecutar el sistema operativo.

Sustituir en el fichero learn_puppet_centos-6.5-pe-3.3.2-disk1.vmx

guestOS = "redhat"

por

guestOS = "centos-64"

Otra particularidad que hemos visto en la máquina es que hacer un snapshot la rompe. Por ello, hemos tenido que dejarla en una carpeta de la que no se hace backup nunca.

Antes de empezar

Teclas en castellano:

loadkeys es
echo "loadkeys es >> .bashrc"

Configuración de red

system-config-network
services network restart

Configuración ssh

grep /etc/ssh/sshd_config
PermitRootLogin yes
services sshd restart

Configuración de proxy en bash, puppet y wget

  grep proxy ~/.bashrc
export http_proxy =http://192.128.2.2:80

grep proxy /etc/wgetrc
https_proxy = http://192.128.2.2:80
http_proxy =http://192.128.2.2:80
ftp_proxy =http://192.128.2.2:80

 grep proxy   /etc/puppetlabs/puppet/puppet.confgrep proxy /etc/puppetlabs/puppet/puppet.conf
 http_proxy_host = 192.128.2.2
 http_proxy_port = 80



Forzar la configuración de puppet en un momento dado

puppet agent –test

Validar un archivo de puppet

puppet parser validate FILENAME.pp

Encontrar la ruta para los módulos de puppet

puppet agent --configprint modulepath

Simular un manifiesto en local, sin aplicarlo

puppet apply --noop byte.pp

 Aplicar verdaderamente un manifierto en máquina local:

puppet apply byte.pp

Emacs: Configuración para colorear puppet

cat ~/.emacs
(add-to-list 'load-path "/root/.emacs.d")
(autoload 'puppet-mode "puppet-mode.el" "Major mode for editing puppet manifests")
(add-to-list 'auto-mode-alist '("\\.pp$" . puppet-mode))

;; Enable font lock mode globally, because we love our users.
(require 'font-lock)
(global-font-lock-mode 1)

Instalar, actualizar y desinstalar módulos desde puppet forge

puppet module install puppetlabs-mysql --version 2.2.2 --ignore-requirements
puppet module upgrade puppetlabs-mysql
puppet module uninstall puppetlabs-mysql

 

Ver los módulos ya instalados

puppet module list --tree
Configurar el proxy
root@puppet:/etc/puppet/manifests# grep proxy  /etc/puppet/puppet.conf
http_proxy_host=proxy.myorg.org
http_proxy_port = 80

Nueva versión vcenter vsca version 5.5.0 Update 2a

Ya ha salido la nueva versión (update2) de vsca vmware vcenter.

Para actualizar, simplemente se puede hacer a través del interfaz web, en la pestaña Update.

Vendor:
VMware Inc.
Appliance Name:
VMware vCenter Server Appliance
Appliance Version:
5.5.0.20100 Build 2170515
VMware vCenter Server Appliance
Update to version 5.5.0 Update 2a