jueves, 9 de enero de 2014

Proxmox, KVM, Windows y licencia ROK para servidor HP

Al instalar un servidor Windows 2012 Server (licencia Essential ROK para HP) virtualizado con KVM sobre un servidor HP ProLiant ML310e Gen8 v2 con Proxmox instalado me he encontrado con un mensaje parecido a: "Esta licencia de Windows es solo para servidores HP".

Las licencias ROK son precisamente para eso, pero la licencia permite virtualizar sobre hardware HP esa licencia, en la propia web de HP explica como hacerlo sobre VMware pero no dice nada para otros sistemas de virtualización.

Vamos a utilizar el siguiente manual: http://jamar.org/2012/09/28/installing-windows-2008-hp-oem-as-kvm-guest/ con la diferencia que en Proxmox no tenemos los ficheros .xml de configuración de las máquinas virtuales KVM sino que tenemos ficheros .conf bastante diferentes.

Con el comando dmidecode sobre el servidor Proxmox extraemos la información necesaria (en negrita he marcado la información relevante):

# dmidecode | more
SMBIOS 2.7 present.
84 structures occupying 2717 bytes.
Table at 0xF3FCB000.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
        Vendor: HP
        Version: P78
        Release Date: 09/01/2013

[...]
Handle 0x0100, DMI type 1, 27 bytes
System Information
        Manufacturer: HP
       Product Name: ProLiant ML310e Gen8 v2

        Version: Not Specified
        Serial Number: CZXXXXXXY2     
        UUID: 30303734-XXXX-XXXX-XXXX-XXXXXXXXXXXX
        Wake-up Type: Power Switch
        SKU Number: XXXXXX-800     
        Family: ProLiant

[...]

Con esta información editamos el fichero de configuración de nuestra máquina virtual y añadimos una opción más: args:

# cat /etc/pve/qemu-server/100.conf
args: -smbios type=0,vendor=HP,version=P78,date=09/01/2013 -smbios type=1,manufacturer=HP,product="ProLiant ML310e Gen8 v2",serial=CZXXXXXXY2,sku=XXXXXX-800

balloon: 2048
boot: dcn
bootdisk: virtio0
cores: 2
ide0: cdrom,media=cdrom
ide1: local:iso/virtio-win-0.1-74.iso,media=cdrom,size=59836K
memory: 6144
name: Win2012
net0: virtio=9A:2A:73:58:B2:CC,bridge=vmbr0
ostype: win8
sockets: 1
virtio0: local:100/vm-100-disk-1.qcow2,format=qcow2,cache=writeback,size=100G
virtio1: local:100/vm-100-disk-3.qcow2,format=qcow2,cache=writeback,size=100G

En el siguiente enlace tenemos todas las opciones disponibles para los ficheros de configuración: http://pve.proxmox.com/wiki/Manual:_vm.conf

Con esta configuración ya podemos arrancar y completar nuestra instalación.

Más referencias:
Link indispensable para instalar windows 2012 server sobre Proxmox: http://pve.proxmox.com/wiki/Windows_2012_guest_best_practices
http://forum.proxmox.com/threads/6943-Windows-OEM-and-SMBIOS


lunes, 2 de septiembre de 2013

Truco: Clonar máquina virtual openvz

Truco rápido para clonar un máquina virtual de un contenedor openvz en un sistema con proxmox:

# vzdump 100 -storage backup --stdout | vzrestore - 101

Copia la instancia con id 100 y crea una nueva con el id 101.
Para terminar, desde el gui del proxmox, cambiamos el hostname y el dns domain (pestaña DNS) y en la pestaña RED cambiamos la MAC de la tarjeta de red.

Para terminar arrancamos la máquina y cambiamos la configuración de red y de hostname.

miércoles, 6 de febrero de 2013

Instalación de Xen 4.1 en Ubuntu 12.04 + pci passthrough

Comenzamos con una instalación básica de Ubuntu Server 12.04 instalada previamente.

Primero configuraremos la red.

# aptitude install bridge-utils ifenslave-2.6 ethtool

Configuración de /etc/network/interfaces:
auto br0 iface br0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1

  # dns-* options are implemented by the resolvconf package, if installed
  dns-nameservers 192.168.1.254
  dns-search nuestrodominio.com

  bridge_ports eth0
  bridge_fd 9
  bridge_hello 2
  bridge_maxage 12
  bridge_stp on

Activamos la nueva configuración de red:

# /etc/init.d/networking restart

Instalamos el software del hipervisor de Xen:

# aptitude install xen-hypervisor-4.1-amd64 xen-tools xen-utils-4.1

Configuramos xen-tools modificando los siguientes parámetros, el resto los mantenemos como aparecen en el fichero de configuración original.
En /etc/xen-tools/xen-tools.conf
dir = /vserver
size   = 20Gb      # Disk image size.
memory = 2048Mb    # Memory size
swap   = 2048Mb    # Swap size

gateway    = 192.168.100.181
netmask    = 255.255.255.0
broadcast  = 192.168.100.255

nameserver = 192.168.100.182

bridge = br0
passwd = 1

arch = amd64
boot = 1
disk_device = xvda

Creamos el directorio donde se guardarán los discos de nuestras máquinas virtuales:
# mkdir /vserver

Configuramos xen cambiado las siguiente líneas de  /etc/xen/xend-config.sxp
(xend-unix-server yes)
(network-script network-bridge)
Completamos la configuración:

# ln -s /usr/share/qemu-linaro/ /usr/share/qemu

# sed -i 's/GRUB_DEFAULT=.*\+/GRUB_DEFAULT="Xen 4.1-amd64"/'
# /etc/default/grub
# update-grub

# reboot

Intentamos crear una máquina virtual nueva:

# xen-create-image --hostname=elantris --ip=192.168.1.200 --force --verbose

Y nos encontramos con el siguiente error:

Executing : xt-install-image --hostname=elantris --location=/tmp/0bz_TNjCaW --dist=precise --install-method=debootstrap --mirror=http://es.archive.ubuntu.com/ubuntu/ --cache=yes --cachedir=/var/cache/apt/archives/ --verbose --arch=amd64

  We are trying to configure an installation of precise in
 /tmp/0bz_TNjCaW - but there is no hook directory for us to use.

  This means we would not know how to configure this installation.

  We would expect the hook directory to be /usr/lib/xen-tools/precise.d.

  Aborting.
Finished : xt-install-image --hostname=elantris --location=/tmp/0bz_TNjCaW --dist=precise --install-method=debootstrap --mirror=http://es.archive.ubuntu.com/ubuntu/ --cache=yes --cachedir=/var/cache/apt/archives/ --verbose --arch=amd64 2>&1
Running command 'xt-install-image --hostname=elantris --location=/tmp/0bz_TNjCaW --dist=precise --install-method=debootstrap --mirror=http://es.archive.ubuntu.com/ubuntu/ --cache=yes --cachedir=/var/cache/apt/archives/ --verbose --arch=amd64 2>&1' failed with exit code 256.
Aborting
See /var/log/xen-tools/elantris.log for details
/tmp/0bz_TNjCaW/etc/ssh/ssh_host_rsa_key.pub: No such file or directory
Executing : umount /tmp/0bz_TNjCaW/proc
umount: /tmp/0bz_TNjCaW/proc: not found
Finished : umount /tmp/0bz_TNjCaW/proc 2>&1
Running command 'umount /tmp/0bz_TNjCaW/proc 2>&1' failed with exit code 256.
Aborting
See /var/log/xen-tools/elantris.log for details
cannot remove directory for /tmp/0bz_TNjCaW: Dispositivo o recurso ocupado at /usr/share/perl/5.14/File/Temp.pm line 902


Tenemos problemas con la versión de xen-tools instalada por lo que vamos a actualizarla:

# aptitude install add-apt-key
# apt-get install python-software-properties
# add-apt-repository ppa:xtaran/xen-tools

Además actualizamos el sistema completamente:
# aptitude update && aptitude safe-upgrade

Comprobamos las versiones disponibles e instaladas de xen-tools:
# apt-cache policy xen-tools
xen-tools:
  Instalados: 4.3.1~rc1-1
  Candidato:  4.3.1~rc1-1
  Tabla de versión:
 *** 4.3.1~rc1-1 0
        500 http://ppa.launchpad.net/xtaran/xen-tools/ubuntu/ precise/main amd64 Packages
        100 /var/lib/dpkg/status
     4.2.1-1 0
        500 http://es.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages

Volvemos a lanzar la orden:

# xen-create-image --hostname=elantris --ip=192.168.1.200 --force --verbose

En esta ocasión todo ha funcionado correctamente, ya podemos acceder a nuestra nueva máquina virtual. Algunos comandos útiles:

# xm list
# xm create elantris.cfg
# xm destroy elantris
# xm console elantris o id

Para salir de la consola podemos utilizar la combinación: ctrl + Alt Gr + corchete cierre (la que tiene el símbolo +)

Una vez conectados a la máquina virtual comprobamos que dispone de una instalación básica, al menos configuramos el idioma y algunas utilidades:

# apt-get install aptitude bash-completion nano
# aptitude install locales manpages-es manpages-es-extra manpages
# locale-gen es_ES.UTF-8
# aptitude update && aptitude safe-upgrade

Vamos a instalar una utilidad para ver nuestras máquinas virtuales, su funcionalidad es límitada (sin más configuración no es recomendable realizar tareas de configuración) pero al menos nos permite visulizar las consolas de forma gráfica.

# aptitude install virt-manager

Pero la consola no funciona nos aparece el siguiente error:
"Error conectando a la consola de texto: No se puede abrir un dispositivo sin nombre de alias"

Es debido a este bug: https://bugs.launchpad.net/ubuntu/+source/virt-manager/+bug/1057319

He encontrado una solución en los foros de bugs de novell:

# cd /usr/share/virt-manager/virtManager
#cp serialcon.py serialcon.py.old
# cd ..
# wget http://bugzillafiles.novell.org/attachment.cgi?id=506198 -O virtman-reverse-serialcon.patch
#patch -p0 < virtman-reverse-serialcon.patch

Si volmemos a probar veremos que la consola ya funciona.

Podemos hacer que nuestras máquinas virtuales arranque automáticamente al encender el hipervisor:

# mkdir /etc/xen/auto# cd /etc/xen/auto
# ln -s . ../elantris.cfg

Este servidor es un blade de cisco UCS con tarjeta M81KR y nos interesa mapear directamente las tarjetas de red a las máquinas virtuales para ello utilizaremos Xen Pci Passthrough

Vamos a utilizar "Dynamic assignment with sysfs", creamos el script pciback_script.sh:
 #!/bin/bash

if [ $# -eq 0 ]; then
    echo "Require PCI devices in format:  ::."
    echo "Eg: $(basename $0) 0000:00:1b.0"
    exit 1
fi

modprobe xen-pciback

for pcidev in $@; do
    if [ -h /sys/bus/pci/devices/"$pcidev"/driver ]; then
        echo "Unbinding $pcidev from" $(basename $(readlink /sys/bus/pci/devices/"$pcidev"/driver))
        echo -n "$pcidev" > /sys/bus/pci/devices/"$pcidev"/driver/unbind
    fi
    echo "Binding $pcidev to pciback"
    echo -n "$pcidev" > /sys/bus/pci/drivers/pciback/new_slot
    echo -n "$pcidev" > /sys/bus/pci/drivers/pciback/bind
done
A este script le pasamos el identificador pci de nuestra tarjeta de red como parámetro, para averiguar que identificador utiliza nuestra tarjeta (eth0):

# cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x1137:/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0/0000:08:00.3 (enic)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:b5:00:00:19", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"

# PCI device 0x1137:/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0/0000:08:00.1 (enic)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:b5:00:00:18", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

# PCI device 0x1137:/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0/0000:08:00.0 (enic)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:b5:00:00:08", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1137:/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0/0000:08:00.4 (enic)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:b5:00:00:16", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4"

# PCI device 0x1137:/sys/devices/pci0000:00/0000:00:07.0/0000:04:00.0/0000:05:00.0/0000:06:00.0/0000:07:00.0/0000:08:00.2 (enic)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:25:b5:00:00:09", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
Ejecutamos el script:
# sh pciback_script.sh 0000:08:00.0

Comprobamos su disponibilidad:
# xm pci-list-assignable-devices
0000:08:00.0

Modificamos el fichero de definición de VMS, /etc/xen/elantris.cfg y añadimos:

pci = ['0000:08:00.0']
En la línea del kernel del menu.lst del grub de la máquina virtual hay que añadir:
iommu=soft
Al arrancar nuestra máquina virtual tendremos otra interfaz de red, tan solo nos falta configurar su parámetros ip.

Con la colaboración de @alionka

jueves, 21 de junio de 2012

ZFS en ubuntu

IMPORTANTE: No lo recomiendo para entornos en producción.

Después de las pruebas realizadas y varios "kernel panics" he decidido no utilizarlo todavía en producción, es una lastima pero no me la juego.

Proceso de instalación de zfs:
# add-apt-repository "deb http://ppa.launchpad.net/zfs-native/stable/ubuntu oneiric main "
# aptitude update
# aptitude safe-upgrade -s
# aptitude install ubuntu-zfs
Creación del pool:
# zpool create cabina_emc /dev/mapper/mpath6-part1
Comprobamos el pool recién creado:
# zpool status -v
pool: cabina_emc
state: ONLINE
scan: none requested
config:

NAME STATE READ WRITE CKSUM
cabina_emc ONLINE 0 0 0
mpath6-part1 ONLINE 0 0 0

errors: No known data errors

Creamos un sistema de ficheros (dataset):

# zfs create cabina_emc/backup
Establecemos el punto de montaje:

# zfs set mountpoint=/media/cabina_emc cabina_emc
# zfs set mountpoint=/media/cabina_emc/backup cabina_emc/backup
Realizamos varias comprobaciones:

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
cabina_emc 169G 838G 30K /media/cabina_emc
cabina_emc/backup 169G 838G 169G /media/cabina_emc/backup
# zfs mount cabina_emc/backup


# mount
cabina_emc/backup on /media/cabina_emc/backup type zfs (rw,xattr)
# df -h
S.ficheros Tam. Usado Disp. % Uso Montado en
cabina_emc/backup 1007G 169G 838G 17% /media/cabina_emc/backup
Listado de paquetes instalados:
# dpkg -l \*zfs*|grep iiii libzfs1 0.6.0.56-0ubuntu1~oneiric1 Native ZFS filesystem library for Linux
ii ubuntu-zfs 6~oneiric Native ZFS filesystem metapackage for Ubuntu.
ii zfs-dkms 0.6.0.56-0ubuntu1~oneiric1 Native ZFS filesystem kernel modules for Linux
ii zfsutils 0.6.0.56-0ubuntu1~oneiric1 Native ZFS management utilities for Linux

Solución de errores:

Si os aparece un error como este:
Apr 24 10:37:57 Mercurio kernel: [1018898.922590] vmap allocation for size 4198400 failed: use vmalloc= to increase size.

Editamos el  fichero: /etc/default/grub y añadimos el valor vmalloc.
# nano /etc/default/grub

# If you change this file, run 'update-grub' afterwards to update# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="vmalloc=512M"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Actualizamos grub y reiniciamos el sistema:
# update-grub
# reboot
Comprobamos que el cambio surge efecto:

# cat /proc/meminfo
MemTotal: 2062236 kB
MemFree: 274552 kB
Buffers: 69436 kB
Cached: 1494816 kB
SwapCached: 12 kB
Active: 982260 kB
Inactive: 641228 kB
Active(anon): 46772 kB
Inactive(anon): 16796 kB
Active(file): 935488 kB
Inactive(file): 624432 kB
Unevictable: 47012 kB
Mlocked: 47012 kB
HighTotal: 1585096 kB
HighFree: 113960 kB
LowTotal: 477140 kB
LowFree: 160592 kB
SwapTotal: 1783144 kB
SwapFree: 1783132 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 106140 kB
Mapped: 16844 kB
Shmem: 1364 kB
Slab: 57488 kB
SReclaimable: 36392 kB
SUnreclaim: 21096 kB
KernelStack: 2232 kB
PageTables: 2916 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2814260 kB
Committed_AS: 359632 kB
VmallocTotal: 524288 kB
VmallocUsed: 26680 kB
VmallocChunk: 281000 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8184 kB
DirectMap2M: 503808 kB

Referencias:
http://hub.opensolaris.org/bin/download/Community+Group+zfs/docs/zfsadmin.pdf
http://zfsonlinux.org/faq.html
http://tech.libresoft.es/doku.php/manejozfs

miércoles, 13 de junio de 2012

Iscsi y mutlipath con una cabina EMC VNXe 3300

Disponemos de la red configurada como vimos en este artículo: http://blog.rubensalazar.net/2012/05/bridges-bonding-y-lacp.html

Debemos tener configurados los switches con las vlans correctamente para no tener problemas de red. Este tema no es objeto de este artículo.

En la cabina EMC hemos definido dos servidores iSCSI cada uno de ellos definido por dos ips, dos interfaces de red y cada uno asignado a un controlador diferente (storage processor) de forma que aseguramos la máxima redundancia.

Antes de seguir comentar que la consola de administración web de la cabina EMC ¡está hecha en flash!!!!!!!!!  lo que provoca mis mas sinceras maldiciones en arameo. ¿A estás alturas todavía con estas capulladas?.

Continuamos creando los espacios de almacenamiento, no voy a entrar más en la configuración de la cabina ya que cada una tiene su propio gestor y forma de configuración, de todos modos os pongo varios screenshots.

iSCSI Servers

Storages

Permisos de acceso a un Storage



















Como podemos ver en la imagen anterior hay un servidor con acceso a ese storage.
Vamos con la configuración del servidor para que pueda acceder a este recurso.

Instalamos el software necesario:

# aptitude install open-iscsi scsitools multipath-tools open-iscsi-utils
Editamos el fichero de configuración de open-scsi cambiando la propiedad node.startup de manual a automatic:
# nano /etc/iscsi/iscsid.conf
# To request that the iscsi initd scripts startup a session set to "automatic".
node.startup = automatic
Como hemos visto anteriormente tenemos dos servidores iSCSI:
  • iSCSIServer00: con dos ips 10.0.1.254 y 10.0.2.254
  • iSCSIServer01: ips 10.0.1.253 y 10.0.2.253

Realizamos el discover de los targets iSCSI de los servidores:
# iscsiadm -m discovery -t st -p 10.0.1.254
# iscsiadm -m discovery -t st -p 10.0.2.254
# iscsiadm -m discovery -t st -p 10.0.2.253
# iscsiadm -m discovery -t st -p 10.0.1.253
Comprobamos:
# iscsiadm -m node
10.0.1.254:3260,1 iqn.1992-05.com.emc:ckm001123005530000-6-vnxe
10.0.2.254:3260,1 iqn.1992-05.com.emc:ckm001123005530000-6-vnxe
10.0.1.253:3260,1 iqn.1992-05.com.emc:ckm001123005530000-7-vnxe
10.0.2.253:3260,1 iqn.1992-05.com.emc:ckm001123005530000-7-vnxe
Si listamos los dispositivos todavía no tendremos ninguno en nuestro sistema:

# ll /dev/mapper
total 0
drwxr-xr-x  2 root root     120 jun  6 12:26 ./
drwxr-xr-x 18 root root    4480 jun  6 12:26 ../
crw-------  1 root root 10, 236 abr 30 14:33 control
lrwxrwxrwx  1 root root       7 abr 30 14:33 remo-root -> ../dm-0
lrwxrwxrwx  1 root root       7 abr 30 14:33 remo-swap -> ../dm-1
Nos falta realizar el proceso de login:

# iscsiadm -m node -L all
Volvemos a listar los dispositivos:
# ll /dev/mapper
total 0
drwxr-xr-x  2 root root     120 jun  6 12:26 ./
drwxr-xr-x 18 root root    4480 jun  6 12:26 ../
crw-------  1 root root 10, 236 abr 30 14:33 control
lrwxrwxrwx  1 root root       7 jun  6 12:26 mpath0 -> ../dm-2
lrwxrwxrwx  1 root root       7 abr 30 14:33 remo-root -> ../dm-0
lrwxrwxrwx  1 root root       7 abr 30 14:33 remo-swap -> ../dm-1
A partir de este momento: crear particiones, formatear y añadir la entrada en /etc/fstab.

Para añadir más volúmenes y que el sistema los reconozca primero creamos el disco virtual y le damos acceso al host desde la cabina, para que lo reconozca el sistema realizamos logout y volvemos a hacer login (mucho cuidado con hacer los siguientes pasos si hay volúmenes montados de la cabina en este servidor, primero desmontar las unidades o se pueden perder datos):

# iscsiadm -m node --logout
Logging out of session [sid: 13, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.1.253,3260]
Logging out of session [sid: 14, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.2.253,3260]
Logging out of session [sid: 15, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.1.254,3260]
Logging out of session [sid: 16, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.2.254,3260]
Logout of [sid: 13, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.1.253,3260]: successful
Logout of [sid: 14, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.2.253,3260]: successful
Logout of [sid: 15, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.1.254,3260]: successful
Logout of [sid: 16, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.2.254,3260]: successful
# iscsiadm -m node -L all
Logging in to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.1.253,3260]
Logging in to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.2.253,3260]
Logging in to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.1.254,3260]
Logging in to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.2.254,3260]
Login to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.1.253,3260]: successful
Login to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-7-vnxe, portal: 10.0.2.253,3260]: successful
Login to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.1.254,3260]: successful
Login to [iface: default, target: iqn.1992-05.com.emc:ckm001123005530000-6-vnxe, portal: 10.0.2.254,3260]: successful
Volvemos a listar los dispositivos y veremos que nos aparece un nuevo volúmen:

# ll /dev/mapper
total 0
drwxr-xr-x  2 root root      140 jun  6 12:25 ./
drwxr-xr-x 18 root root     4520 jun  6 12:25 ../
crw-------  1 root root  10, 236 abr 30 14:33 control
brw-rw----  1 root disk 252,   3 jun  6 12:25 mpath0
brw-rw----  1 root disk 252,   2 jun  6 12:25 mpath1
lrwxrwxrwx  1 root root        7 abr 30 14:33 remo-root -> ../dm-0
lrwxrwxrwx  1 root root        7 abr 30 14:33 remo-swap -> ../dm-1 

martes, 5 de junio de 2012

Evitar que los vídeos en flash salgan en azul

Pese a mi odio creciente al flash todavía tengo que soportarlo por lo menos hasta que html5 lo borre del mapa.

Desde hace varias semanas los vídeos aparecen en azul en ubuntu 12.04, está es la solución rápida:

$ sudo mkdir /etc/adobe
$ sudo echo "EnableLinuxHWVideoDecode=1" > /etc/adobe/mms.cfg

Reiniciamos el navegador y ... solucionado.

jueves, 17 de mayo de 2012

Acceso a una cabina de almacenamiento HP EVA 4100 con multipath

Disponemos de un servidor con dos tarjetas de Fiber Channel, cada una de estás tarjetas está conectada a un switch de fibra distinto y cada switch está conectado a los dos controladores de la EVA.
Vamos a ver como configurar el servidor con Ubuntu 10.04 para proporcionar acceso a la cabina en alta disponibilidad con multipath de forma que, desde el servidor, trabajaremos con un único dispositivo de almacenamiento por cada disco virtual que la EVA presente al servidor.
El esquema de conexión es el siguiente:



Comprobamos que el servidor dispone de las dos tarjetas conectadas:

# lspci| grep Fiber
01:08.0 Fibre Channel: Emulex Corporation Helios LightPulse Fibre Channel Host Adapter (rev 01)
02:09.0 Fibre Channel: Emulex Corporation Helios LightPulse Fibre Channel Host Adapter (rev 01)
El kernel cargará el módulo lpfc como driver para estás tarjetas:

root@Mercurio:/etc/modprobe.d# lsmod |grep lpfc
lpfc                  526920  24
scsi_transport_fc      52158  1 lpfc
En mi caso, en está versión de ubuntu no es necesario, pero si tenéis problemas con lpfc podéis crear el archivo /etc/modprobe.d/lpfc.conf para configurar su comportamiento:

# cat /etc/modprobe.d/lpfc.conf
#options lpfc lpfc_use_msi=0 lpfc_log_verbose=0xffff
options lpfc lpfc_use_msi=0
Para instalar multipath:

# aptitude install multipath-tools scsitools
Configuramos multipath con el siguiente fichero, tiene una sección específica para nuestra EVA 4100:
# cat /etc/multipath.conf
##
## This is a template multipath-tools configuration file
## Uncomment the lines relevent to your environment
##


## Use user friendly names, instead of using WWIDs as names.
defaults {
        user_friendly_names yes
}


blacklist {
root@Mercurio:~# cat /etc/multipath
multipath/      multipath.conf 
       devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st|eth|br)[0-9]*"
       devnode "^hd[a-z][[0-9]*]"
#       devnode "^sd[c-d][[0-9]*]"
       devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}


devices {
        device {
                vendor "HP"
                product "HSV200"
                path_grouping_policy group_by_prio
                getuid_callout "/lib/udev/scsi_id -g -u /dev/%n"
                path_checker directio
                path_selector "round-robin 0"
                prio alua
                rr_weight uniform
                failback immediate
                hardware_handler "0"
                no_path_retry 12
                rr_min_io 100
       }
}
Podemos reiniciar el servidor o utilizar la utilidad rescan-scsi-bus para encontrar dispositivos y que los agrege al sistema. También debemos utilizar está utilidad si presentamos más discos virtuales desde la EVA al servidor.
Cuando "despresentamos" discos virtuales se pueden utilizar con la opción -r pero por mis pruebas el resultado no siempre es bueno y requiere reiniciar el servidor.

Con el siguiente comando comprobamos el estado del multipath:
# multipath -ll
mpath2 (3600508b40006c54300011000003f0000) dm-2 HP,HSV200
size=57G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 6:0:0:1 sdm 8:192 active ready running
| `- 5:0:0:1 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 5:0:1:1 sdf 8:80 active ready running
`- 6:0:1:1 sdp 8:240 active ready running
mpath8 (3600508b40006c5430001100000520000) dm-0 HP,HSV200
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 5:0:1:3 sdh 8:112 active ready running
| `- 6:0:1:3 sdr 65:16 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 6:0:0:3 sdo 8:224 active ready running
`- 5:0:0:3 sde 8:64 active ready running
mpath7 (36006048c0b49c13af746348067dac3bb) dm-7 EMC,Celerra
size=1.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:1 sdl 8:176 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 8:0:0:1 sdk 8:160 active undef running
mpath6 (36006048c33fbd15cdb351637f9c6ab26) dm-5 EMC,Celerra
size=1.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 10:0:0:1 sdi 8:128 active undef running
`-+- policy='round-robin 0' prio=1 status=active
`- 9:0:0:1 sdj 8:144 active ready running
mpath5 (3600508b40006c54300011000004c0000) dm-1 HP,HSV200
size=20G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 6:0:0:2 sdn 8:208 active ready running
| `- 5:0:0:2 sdd 8:48 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 5:0:1:2 sdg 8:96 active ready running
`- 6:0:1:2 sdq 65:0 active ready running
Como podéis ver hay otra cabina que dará para otro artículo, de momento no le hacemos caso.
Vemos el estado de los caminos posibles a cada disco y que todos están activos, sin encontrásemos alguno en fallo deberíamos revisar el hardware. (Os recomiendo revisar primero los latiguillos de fibra y comprobar los leds de las tarjetas para ver si alguno está apagada).

Listamos los discos y particiones:


# ll /dev/mapper/
crw------- 1 root root 10, 236 2012-05-14 15:35 control
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath2 -> ../dm-2
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath2-part1 -> ../dm-3
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath5 -> ../dm-1
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath5-part1 -> ../dm-6
lrwxrwxrwx 1 root root       7 2012-05-16 15:55 mpath6 -> ../dm-5
lrwxrwxrwx 1 root root       8 2012-05-16 15:55 mpath6-part1 -> ../dm-11
lrwxrwxrwx 1 root root       7 2012-05-16 15:54 mpath7 -> ../dm-7
lrwxrwxrwx 1 root root       7 2012-05-16 15:54 mpath7-part1 -> ../dm-8
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath8 -> ../dm-0
lrwxrwxrwx 1 root root       7 2012-05-14 15:35 mpath8-part1 -> ../dm-4
Aquí ya vemos particiones pero si es un disco nuevo utilizamos fdisk sobre, por ejemplo, /dev/mapper/mpath2 y generamos una partición /dev/mapper/mpath2-part1
Después creamos el sistema de ficheros y ya podemos motarla he incluirla en el /etc/fstab. Os recomiendo utilizar los UUID de los discos desde el fstab, para averiguarlos:
# ll /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 0059c482-d8b9-4d88-8d98-f15b71318077 -> ../../md3
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 056f57cb-1b77-4df5-a023-1f20c41c21e7 -> ../../md4
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 13776bb7-2242-4068-a41f-e919baff3a86 -> ../../dm-4
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 156c04a8-199e-41f5-b974-3ba3a4b5e635 -> ../../sdb7
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 2c0bdeca-617e-4e3a-b31a-31442ac63ff7 -> ../../md2
lrwxrwxrwx 1 root root 11 2012-05-17 02:07 2df684f9-1798-4e21-960b-304933b46637 -> ../../dm-11
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 3b9a2cb0-32c3-4be9-a787-340e106041d5 -> ../../dm-3
lrwxrwxrwx 1 root root 10 2012-05-17 02:07 465081f7-2591-4456-a972-847d813e4d0c -> ../../dm-8
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 510ed901-d0a3-4585-b594-002d9a78b61b -> ../../dm-6
lrwxrwxrwx 1 root root 10 2012-05-14 15:35 57bc797f-74f8-467e-9145-200cdcafe180 -> ../../sda7
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 7c6e736b-9f82-4107-b127-62831384d9ce -> ../../md1
lrwxrwxrwx 1 root root  9 2012-05-14 15:35 a04ca2ee-97fc-4644-8dd3-3184fead0f2c -> ../../md0

Como podemos ver aquí tenemos montados nuestros sistemas de ficheros:

# mount
/dev/md0 on / type ext3 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
none on /sys/kernel/debug type debugfs (rw)
none on /sys/kernel/security type securityfs (rw)
udev on /dev type devtmpfs (rw,mode=0755)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
none on /run/shm type tmpfs (rw,nosuid,nodev)
/dev/md4 on /tmp type ext3 (rw)
/dev/md1 on /boot type ext3 (rw)
/dev/mapper/mpath2-part1 on /media/admine type ext3 (rw,acl,user_xattr,errors=remount-ro)
/dev/mapper/mpath5-part1 on /media/faxing type ext3 (rw,acl,user_xattr,errors=remount-ro)
/dev/mapper/mpath6-part1 on /media/backup type ext4 (rw,acl,user_xattr,errors=remount-ro)/dev/mapper/mpath8-part1 on /media/F type ext4 (rw,acl,user_xattr,usrquota,errors=remount-ro)
/dev/md2 on /var type ext3 (rw)
/dev/md3 on /home type ext3 (rw)
Si después queréis utilizar acceso concurrente desde dos servidores ocfs2 funciona muy bien.