Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. https://www.booking.com/hotel/es/apartamento-en-familia.ca.html Número registro HUTT-005768

jueves, 18 de febrero de 2016

Como solucionar problemas con ST8000AS0002-1NA17Z (8 Tb) en Linux (rsync, dd, cp...)


Si nos hemos comprado el flamante disco duro de Seagate y probado en nuestro Ubuntu (o cualquier otra distribución), veremos que lo detecta sin problemas y que parece funcionar bien. Pero como los que compramos este tipo de discos es porque probablemente lo queremos para soluciones de respaldo (backup), sabremos que al hacer rsync, dd, cp o cualquier otra instrucción contra este disco, hace que el kernel de un error y se nos queda en modo lectura (read-only). Un ejemplo de lo que podemos ver en el syslog es este:


Feb 10 08:57:59 eithel-server kernel: [149638.596415] ------------[ cut here ]------------
Feb 10 08:57:59 eithel-server kernel: [149638.596441] WARNING: CPU: 3 PID: 8153 at /build/linux-lts-vivid-whAhIw/linux-lts-vivid-3.19.0/fs/btrfs/super.c:260 __btrfs_abort_transaction+0x54/0x130 [btrfs]()
Feb 10 08:57:59 eithel-server kernel: [149638.596443] BTRFS: Transaction aborted (error -5)
Feb 10 08:57:59 eithel-server kernel: [149638.596444] Modules linked in: nouveau mxm_wmi wmi video ttm drm_kms_helper drm snd_hda_codec_hdmi i2c_algo_bit intel_powerclamp snd_hda_codec_via snd_hda_codec_generic snd_hda_intel coretemp snd_hda_controller snd_hda_codec kvm_intel snd_hwdep kvm snd_pcm snd_timer snd soundcore serio_raw shpchp 8250_fintek lpc_ich asus_atk0110 mac_hid lp parport btrfs xor raid6_pq pata_acpi psmouse r8169 ahci libahci mii pata_via
Feb 10 08:57:59 eithel-server kernel: [149638.596462] CPU: 3 PID: 8153 Comm: kworker/u32:29 Tainted: G          I    3.19.0-25-generic #26~14.04.1-Ubuntu
Feb 10 08:57:59 eithel-server kernel: [149638.596463] Hardware name: System manufacturer System Product Name/P7P55 LX, BIOS 1102    01/03/2011
Feb 10 08:57:59 eithel-server kernel: [149638.596475] Workqueue: btrfs-extent-refs btrfs_extent_refs_helper [btrfs]
Feb 10 08:57:59 eithel-server kernel: [149638.596476]  ffffffffc041ef40 ffff880002687c28 ffffffff817aed00 0000000000000000
Feb 10 08:57:59 eithel-server kernel: [149638.596478]  ffff880002687c78 ffff880002687c68 ffffffff81074d8a 0000000102687c68
Feb 10 08:57:59 eithel-server kernel: [149638.596479]  ffff880118f071e0 ffff8800d3c7b000 00000000fffffffb ffffffffc041b0b0
Feb 10 08:57:59 eithel-server kernel: [149638.596481] Call Trace:
Feb 10 08:57:59 eithel-server kernel: [149638.596489]  [] dump_stack+0x45/0x57
Feb 10 08:57:59 eithel-server kernel: [149638.596493]  [] warn_slowpath_common+0x8a/0xc0
Feb 10 08:57:59 eithel-server kernel: [149638.596495]  [] warn_slowpath_fmt+0x46/0x50
Feb 10 08:57:59 eithel-server kernel: [149638.596501]  [] __btrfs_abort_transaction+0x54/0x130 [btrfs]
Feb 10 08:57:59 eithel-server kernel: [149638.596508]  [] btrfs_run_delayed_refs.part.66+0x12c/0x2a0 [btrfs]
Feb 10 08:57:59 eithel-server kernel: [149638.596516]  [] delayed_ref_async_start+0x88/0xa0 [btrfs]
Feb 10 08:57:59 eithel-server kernel: [149638.596527]  [] normal_work_helper+0xc2/0x2b0 [btrfs]
Feb 10 08:57:59 eithel-server kernel: [149638.596537]  [] btrfs_extent_refs_helper+0x12/0x20 [btrfs]
Feb 10 08:57:59 eithel-server kernel: [149638.596540]  [] process_one_work+0x14f/0x400
Feb 10 08:57:59 eithel-server kernel: [149638.596541]  [] worker_thread+0x118/0x510
Feb 10 08:57:59 eithel-server kernel: [149638.596543]  [] ? rescuer_thread+0x3d0/0x3d0
Feb 10 08:57:59 eithel-server kernel: [149638.596546]  [] kthread+0xd2/0xf0
Feb 10 08:57:59 eithel-server kernel: [149638.596548]  [] ? kthread_create_on_node+0x1c0/0x1c0
Feb 10 08:57:59 eithel-server kernel: [149638.596552]  [] ret_from_fork+0x58/0x90
Feb 10 08:57:59 eithel-server kernel: [149638.596553]  [] ? kthread_create_on_node+0x1c0/0x1c0
Feb 10 08:57:59 eithel-server kernel: [149638.596555] ---[ end trace ce5daf4bc8891b5b ]---
Feb 10 08:57:59 eithel-server kernel: [149638.596557] BTRFS: error (device sde1) in btrfs_run_delayed_refs:2792: errno=-5 IO failure
Feb 10 08:57:59 eithel-server kernel: [149638.596680] BTRFS info (device sde1): forced readonly

En el ejemplo anterior vemos que he usado el sistema de archivos btrfs. Pues no os preocupeis, no es por el sistema de archivos. El mismo problema te dara cambiando las opciones de montaje del btrfs o probándolo con cualquier otro sistema de archivos ( ext2/3/4, jfs, zfs, xfs, ... ) a excepción de NTFS. Con NTFS no pasa. Podeis hacer vuestras pruebas y con casi total seguridad llegaréis a la misma conclusión.

Y.. ¿ahora que? Bueno, la clave esta en saber que el problema es de nuestro kernel. Así que actualizamos nuestro ubuntu 15.10 (wily) desde el repositorio para ver si lo arregla y seguimos sin arreglarlo:

Linux MiMaquina 4.2.0-27-generic #32-Ubuntu SMP Fri Jan 22 04:49:08 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Entonces ya podemos empezar a caer en la desesperación. Pero aun no esta todo perdido. Podemos mirar de ir más allá del kernel oficial de nuestro repositorio y bajarnos una actualización mayor. Para ello seguiremos el artículo ya publicado:
Una vez actualizado el sistema veremos que ya todos nuestros problemas han acabado y que el disco no se pone en sólo lectura al hacer rsync, dd o cp de gran cantidad de archivos.

Si queremos estar seguros de nuestro modelo de disco duro podemos utilizar los parámetros de hdparm según el artículo publicado anteriormente:

miércoles, 17 de febrero de 2016

Actualizar kernel de Ubuntu a 4.4.* desde paquetes


Si queremos estar a la última con nuestro kernel tenemos siempre la opción de descargarnos las fuentes y compilar el último. Pero esta tarea siempre puede ser trabajosa y necesitamos una solución más rápida. Para ello tenemos kernel.ubuntu.com que nos proporciona los últimos kernels en versión .deb para que los podamos instalar para nuestra distribución sin problemas. 

Yo os aconsejo mirar http://kernel.ubuntu.com/~kernel-ppa/mainline/ y comprobar cual es la ultima versión disponible (stable). A la hora de redactar este artículo la última versión era la 4.4.1 . Adaptarla a vuestras necesidades. 



¿Como procedo? Primero nos descargamos los paquetes necesarios:


Versión 64bits:

$ cd /tmp
$ wget \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.1-wily/linux-headers-4.4.1-040401_4.4.1-040401.201601311534_all.deb \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.1-wily/linux-headers-4.4.1-040401-generic_4.4.1-040401.201601311534_amd64.deb \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.1-wily/linux-image-4.4.1-040401-generic_4.4.1-040401.201601311534_amd64.deb

Versión 32bits:

$ cd /tmp
$ wget \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.1-wily/linux-headers-4.4.1-040401_4.4.1-040401.201601311534_all.deb \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.1-wily/linux-headers-4.4.1-040401-generic_4.4.1-040401.201601311534_i386.deb \
kernel.ubuntu.com/~kernel-ppa/mainline/v4.4.1-wily/linux-image-4.4.1-040401-generic_4.4.1-040401.201601311534_i386.deb



Luego simplemente instalamos estos paquetes:

sudo dpkg -i linux-headers-4.4*.deb linux-image-4.4*.deb

Si por cualquier razón decidieramos desinstalar el kernel, se hace comúnmente con el comando apt-get remove:

$ sudo apt-get remove linux-headers-4.4* linux-image-4.4*

jueves, 11 de febrero de 2016

Nombres de Interfaz de Red Predictivos (cambios de eth0 a enp2s0, etc)

systemd es un conjunto de demonios o daemons de administración de sistema, bibliotecas y herramientas diseñados como una plataforma de administración y configuración central para interactuar con el núcleo del Sistema operativoGNU/Linux. Descrito por sus autores como un "bloque de construcción básico" para un sistema operativo,4 systemd se puede utilizar como un sistema de inicio de Linux (el proceso init llamado por el núcleo o kernel de Linux para inicializar el espacio de usuario durante el proceso de arranque de Linux y gestionar posteriormente todos los demás procesos). El nombre systemd se adhiere a la convención Unix de distinguir los demonios fácilmente por tener la letra d como la última letra del nombre de archivo.5
Se desarrolló systemd para reemplazar el sistema de inicio (init) heredado de los sistemas operativos estilo UNIXSystem V y Berkeley Software Distribution (BSD). En el proceso de arranque en Linux, es el primer proceso que se ejecuta en el espacio de usuario, por lo tanto, también es el proceso padre de todos los procesos hijos en el espacio de usuario. systemd se diseñó para el núcleo de Linux y programado exclusivamente para la API de Linux. Escrito porLennart Poettering1 y se publica como Software_libre_y_de_código_abierto bajo los términos de laGNU_General_Public_License (LGPL) versión 2.1 o posterior.6 Uno de los principales objetivos de systemd es unificar configuraciones básicas de Linux y los comportamientos de servicios en todas las distribuciones.7
(Fuente Wikipedia)


















(Fuente freedesktop.org)


¿Y que tiene que ver todo esto con que ahora mi interfaz de red se llame enp2s0 o enx78e7d1ea46da en vez de eth0? Pues bien, todo esto es a causa de la nueva versión de systemd. Una modificación en este gestor de demonios que afecta a partir de la versión 197. A partir de dicha versión, systemd/udev asigna automáticamente los nombres de interfaz de red para Ethernet, WLAN y WWAN. Desde esta modificación se ha optado por una nomenclatura segun las características físicas (hardware):

1. Nombres que incorporan información del Firmware o BIOS del hardware (ejemplo:ENO1).
2. Nombres que incorporan información del Firmware o BIOS que proporciona el slot PCI Express (ejemplo: ens1)
3. Nombres que incorporan ubicación física del conector (ejemplo: enp2s0)
4. Nombres que incorporan la dirección MAC de las interfaces (ejemplo:enx78f8d1ea46da)
5. El estilo clásico del kernel (ejemplo: eth1)
(Fuente detrás del pingüíno y freedesktop.org)

Sabiendo esta información, vamos a dejar de quejarnos del cambio de nombre (porque despues de tantos años es un cambio al que seguro somos algo reacios) y vamos a empezar a 'jugar'. Vamos a averiguar que entiende udev de nuestro dispositivo de red (por ejemplo, eth0):

eithel@inside:~$ udevadm info -e | grep -A 9 ^P.*eth0
P: /devices/pci0000:00/0000:00:1c.2/0000:04:00.0/net/eth0
E: DEVPATH=/devices/pci0000:00/0000:00:1c.2/0000:04:00.0/net/eth0
E: ID_BUS=pci
E: ID_MM_CANDIDATE=1
E: ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8P67 and other motherboards)
E: ID_MODEL_ID=0x8168
E: ID_NET_DRIVER=r8169
E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link
E: ID_NET_NAME=enp4s0
E: ID_NET_NAME_MAC=enxf46d04ae330e

Segun esta lectura, mi eth0 con la nueva nomenclatura se llamaría enp4s0.

Vale.... pero esto de que es predictivo.... ¿Por que? . Bueno, porque ahora tenemos que entender que significa el nombre que le ha dado. Esto lo podemos ver en las fuentes src/udev/udev-builtin-net_id.c
en donde veremos que significa cada cosa:

/*
 * Predictable network interface device names based on:
 *  - firmware/bios-provided index numbers for on-board devices
 *  - firmware-provided pci-express hotplug slot index number
 *  - physical/geographical location of the hardware
 *  - the interface's MAC address
 *
 * http://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames
 *
 * Two character prefixes based on the type of interface:
 *   en -- ethernet
 *   sl -- serial line IP (slip)
 *   wl -- wlan
 *   ww -- wwan
 *
 * Type of names:
 *   b                             -- BCMA bus core number
 *   ccw                             -- CCW bus group name
 *   o[d]                 -- on-board device index number
 *   s[f][d]     -- hotplug slot index number
 *   x                                -- MAC address
 *   [P]ps[f][d]
 *                                         -- PCI geographical location
 *   [P]ps[f][u][..][c][i]
 *                                         -- USB port number chain


Entonces ahora sabemos que si mi eth0 se llama ahora enp4s0 es porque es un ethernet, en el bus 4 y slot 0.

Podemos comprobar mediante lspci que efectivamente alli tengo una tarjeta de red:

lspci -s 04:00
04:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)

*He buscado 04:00 ya que la salida de udevadm de más arriba, en la linea que empezaba por P: así me indicaba donde encontrarlo.

Bueeeno, pues ahora ya esta. Ya se como funciona. Pero puedo decidir no usar la nueva nomenclatura. ¿Puedo cambiarlo? . La respuesta es, como casi todo en GNU/Linux, que si. Vamos a ver como :

1.- Deshabilitando el enlace de asignaciones a nombres fijos:
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules

2.- Crearse tu propio esquema de nombrado. Esto lo haremos un archivo .link en /etc/systemd/network . Para ello mirad systemd.link(5)

3.- Decirle al kernel que no lo use mediante el parámetro net.ifnames=0 en /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

y luego actualizar grub mediante sudo update-grub

Espero que os haya ayudado a entender el porqué del cambio, como aprovecharse de las nuevas funcionabilidades y, en caso de que no estemos agusto o por compatibilidades de scripts, etc no podamos usarlo, como deshabilitarlo.


Enlaces de interes

  • https://www.freedesktop.org/wiki/Software/systemd/
  • https://es.wikipedia.org/wiki/Freedesktop.org

Algunos ejemplos (en ingles)

emN
Ethernet interface on the motherboard, where N is the number of the interface starting from 1.
pSpP
Network interface on a PCI card, where S is the slot number and P is the port number.
pSpP_V
Virtual interface, where S is the slot number, P is the port number, and V is the virtual interface number.
If biosdevname is set to 0 (the default), systemd naming assigns the prefixes, enwl, and ww to Ethernet, wireless LAN, and wireless WAN interfaces respectively. The prefix is followed by a suffix based on the hardware configuration, system bus configuration, or MAC address of the device:
oN
Onboard device with index number N.
pBsS[fF][dD]
PCI device with bus number B, slot number S, function number F, and device ID D.
pBsS[fF][uP]...[cC][iI]
USB device with bus number B, slot number S, function number F, port number P, configuration number C, and interface number I.
sS[fF][dD]
Hot-plug device with slot number S, function number F, and device ID D.
xM
Device with MAC address M.

lunes, 8 de febrero de 2016

hdparm: Parametrizar tu disco duro

hdparm es una utilidad de línea de comandos de los sistemas operativos GNU/Linux y Windows para ver y ajustar los parámetros del hardware de los discos IDE ySATA1 (aunque estos últimos cuentan también con una utilidad específica llamada sdparm). La utilidad puede ajustar parámetros como el caché de disco, el modo de descanso, el control de energía, la gestión acústica y los ajustes DMA. Suele venir instalado por defecto en la mayoría de distribuciones GNU/Linux.
Cambiar los parámetros de los valores conservativos por defecto a los ajustes óptimos puede aumentar el rendimiento sustancialmente. Por ejemplo, activar el modoDMA puede hacer que en ocasiones se doble o se triplique la velocidad de transferencia de datos. Desgraciadamente no hay un método confiable para determinar los ajustes óptimos para la combinación de una controladora determinada, excepto el método de prueba y error; además, todavía no hay una base de datos central que recolecte y comparta la experiencia de los usuarios de hdparm.
hdparm tiene un serio inconveniente: puede bloquear el sistema y hacer los datos del disco duro inaccesibles si se usan inadecuadamente ciertos parámetros. De aproximadamente unos cuarenta parámetros disponibles, siete son potencialmente peligrosos y pueden ocasionar una corrupción masiva del sistema de ficheros.
(Fuente Wikipedia)

¿Para que podemos querere configurar nuestro disco duro? ¿No es ya suficiente que este funcionando y sin errores?. La respuesta es casi siempre que si. Podemos dejarlo por defecto y en la mayoría de los casos no vamos a quejarnos.... seguramente por desconocimiento. ¿Hace falta engrasar y cuidar la cadena de una bicicleta? Bien.. si vamos solo de vez en cuando con ella, quizas no nos interesa sacarle un buen rendimiento. Pero si lo que queremos es más velocidad, más rendimiento.. entonces nos interesa dar un pasito más y configurarlo. Podemos ganar velocidad de escritura/lectura o incluso ahorrar energia y alargar la vida de nuestro disco. Eso si, hdparm trabaja a un nivel muy bajo, y si lo configuramos mal podemos dejar nuestro disco duro inaccesible. 
Esta guía esta realizada bajo mi experiencia pero no me responsabilizo de daños ocasionados por su uso

Podemos instalar hdparm facilmente desde nuestro repositorio oficial (apt-get install hdparm). 
Para los ejemplos usaremos el dispositivo /dev/sda . Vosotros cambiarlo por el que queráis optimizar.


Primeramente vamos a mirar como está funcionando nuestro disco:

hdparm /dev/sda

/dev/sda:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 486401/255/63, sectors = 7814037168, start = 0


Para sacar toda la información completa y detallada del disco:

hdparm -I /dev/sda


Significado de algunas de estas variables:
  • multicount: Nº de sectores que se leen en cada acceso.
  • IO_support: 16/32 bits.
  • unmakirq: Desemascarar IRQ del disco. Permite “compartir” la IRQ.
  • using_dma: Acceso directo a memoria.


DMA
Mediante este comando podremos saber si nuestro disco tiene UDMA activado (activado por defecto desde Ubuntu 6.06)

* soporte DMA:
sudo hdparm -I /dev/sda |grep ‘DMA:’

por ejemplo:
DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6
(El tipo de DMA que vemos con un asterisco es el que se activa en el arranque del sistema)


También podemos hacerlo mediante:
hdparm -d /dev/sda



Tenemos esta tabla para saber que significa en métrica cada tipo de DMA y PIO:
Transfer Modes
ModeNumberAlso calledMaximum transfer
rate (MB/s)
Defining standard
Ultra DMA016.7ATA-4
125.0ATA-4
2Ultra ATA/3333.3ATA-4
344.4ATA-5
4Ultra ATA/6666.7ATA-5
5Ultra ATA/100100ATA-6
6Ultra ATA/133133ATA-7
7Ultra ATA/167167CompactFlash 6.0[1]
(Fuente Wikipedia)

PIO modes
ModeMaximum transfer rate (MB/s)Minimum cycle timeStandard where spec is defined
Mode 03.3600 nsATA-1
Mode 15.2383 nsATA-1
Mode 28.3240 nsATA-1
Mode 311.1180 nsATA-2
Mode 416.7120 nsATA-2
Mode 520100 nsCompactFlash 2.0
Mode 62580 nsCompactFlash 2.0


(Fuente Wikipedia)


VELOCIDAD
Ahora vamos a mirar el caso de que queramos incrementar la velocidad de lectura/escritura. Veremos en la información extraída con el parámetro '-I' una linea que habla de R/W multiple sector transfer. Bien, pues esta linea nos va a dar la pista de si podemos o no incrementar la velocidad de nuestro disco.

R/W multiple sector transfer: Max = 16 Current = ?

Si queremos poner la transferencia multiple de sectores al máximo, en el ejemplo anterior nos fijamos en el valor 'Max' y hacemos lo siguiente:

hdparm -m16 /dev/sda

(hemos puesto 16 dado que es el valor Máximo segun la especificacion de nuestro dispositivo).

hdparm.conf
En /etc/hdparm.conf podemos configurar como queremos que funcionen nuestros discos en el arranque. Por defecto en Ubuntu viene todo comentado excepto la linea 'quiet'. Así pues, lo que nos quiere decir esto es que ubuntu tiene unas opciones ya por defecto y aquí es donde las podemos cambiar si deseamos un comportamiento diferente. Leerse el archivo este es lo más similar a hacer man hdparm.

AHORRO DE ENERGIA Y VIDA DEL DISCO
Los fabricantes de disco suelen especificar cuantas veces un disco duro puede ser apagado y encendido durante su vida util. Unas 200.000 veces, por decir un estandard. Eso significa que si lo encendemos y apagamos unas 200.000 veces.. podremos agotar su vida util. 200.000 veces, con una vida de disco duro de 5 años, significaría 40.000 apagadas y encendidas por año, osea unas 109 veces en un dia. Ten en cuenta estos cálculos para saber si el apagado/encendido te sale a cuenta.

Si decidimos que SI sale a cuenta, podemos especificar un tiempo de inactividad minimo para que se apagen automáticamente. Por ejemplo:

sudo hdparm -S 24 /dev/sda
El disco se apagará después de 24*5=120 segundos de inactividad

sudo hdparm -Y /dev/sda

El disco entrará en apagado inmediátamente, causando el apagado del disco. Se necesita un reset por software o hardware para iniciarlo de nuevo. El driver IDE de Linux lo hará si se necesita de forma automática.

hdparm -Y /dev/sda1

/dev/sda1:
 issuing sleep command

Ahora seguramente querremos comprobar que estamos en 'Sleep Mode'. Haremos lo siguiente para comprobarlo:

hdparm -C /dev/sda/dev/sdb1:
 drive state is:  standby

Pero tambien hay casos en el que hacer esta prueba justamente lo que hace es levantarnos el disco y sacarnos del modo de apagado. Básicamente al conectar con él para ver su estado, lo sacamos de su letargo. Para comprobarlo podemos mirar el /var/log/syslog y si una vez lo teníamos en sleeping mode, lo levantamos y vemos algo como "ata3.00: waking up from sleep" significará que lo hemos despertado (por lo tanto antes estaba dormido). 

En cambio si lo dejamos en 'standby' eso no pasa. Porque dejamos el disco encendido, pero con energía al mínimo:

hdparm -y /dev/sdb1

/dev/sdb1:
 issuing standby command

Para ello hay quien recomienda smartctl. Para ello tendremos que instalarnos la utilidad (apt-get install smartmontools):

smartctl -i -n standby /dev/sda

Pero podemos usar como antes nuestro comando hdparm:

hdparm -C /dev/sdb

/dev/sdb:
 drive state is:  standby


Recordad que si queremos mirar o configurar una serie de discos que tengamos en el servidor, podemos hacerlo o uno a uno o con un comando solo. Imaginemos que tenemos desde el /dev/sdb al /dev/sdg :

hdparm -C /dev/sd[b-g]

/dev/sdb:
 drive state is:  standby

/dev/sdc:
 drive state is:  active/idle

/dev/sdd:
 drive state is:  active/idle

/dev/sde:
 drive state is:  active/idle

/dev/sdf:
 drive state is:  active/idle

/dev/sdg:
 drive state is:  active/idle

O si son discos salteados:

hdparm -Y /dev/sd{b,g,f,e,d}

/dev/sdb:
 issuing sleep command

/dev/sdg:
 issuing sleep command

/dev/sdf:
 issuing sleep command

/dev/sde:
 issuing sleep command

/dev/sdd:
 issuing sleep command



ERRORES FRECUENTES:

hdparm -d /dev/sdg 

/dev/sdg:
 HDIO_GET_DMA failed: Inappropriate ioctl for device

El comando hdparm, como hemos puesto al inicio de este artículo, se diseñó para dispositivos IDE. Por tanto, hay nomenclaturas que estan obsoletas. En este caso, la opción -d solo funciona sobre dispositivos IDE. 

miércoles, 27 de enero de 2016

Deshabilitar VMware services del arranque de Ubuntu (vmware-USBarbitrator)

VMware Inc., (VM de Virtual Machine) es una filial de EMC Corporation que proporciona software de virtualizacióndisponible para ordenadores compatibles X86. Entre este software se incluyen VMware Workstation, y los gratuitosVMware Server y VMware Player. El software de VMware puede funcionar en WindowsLinux, y en la plataformaMac OS X que corre en procesadores INTEL, bajo el nombre de VMware Fusion. El nombre corporativo de la compañía es un juego de palabras usando la interpretación tradicional de las siglas «VM» en los ambientes de computación, como máquinas virtuales (Virtual Machines).

(Fuente Wikipedia)

Si somos un usario que habitaulmente desde nuestro equipo no arrancamos máquinas virtuales, posiblemente nos interesará deshabilitar el servicio de VMWare. También puede que tengamos un error en el arranque tipo: "/run/systemd/generator.late/vmware-USBarbitrator".

Se trata tanto del servicio vmware como del servicio vmware-USBArbitrator. Si no lo necesitamos, vamos a desinstalarlo:


$ sudo update-rc.d vmware disable
$ sudo update-rc.d vmware-USBArbitrator disable

Si por ejemplo nos da algún error como este:

update-rc.d: error: no runlevel symlinks to modify, aborting!

Significa que la instalación no estaba 100% bien realizada o se han perdido archivos. Así que la recomendación que os podría hacer sería la de mover el script a otro sitio (por no borrarlo):

$ sudo mv /etc/init.d/vmware-USBArbitrator /home/OtroLejanoLugar/


Con esto no deberíamos tener más errores en el arranque o bien no cargaremos en el sistema modulos innecesarios.


viernes, 13 de noviembre de 2015

ifdown: interface ethX not configured

ifconfig («interfaz de configuración») es un programa disponible en varias versiones del sistema operativo UNIX, que permite configurar o desplegar numerosos parámetros de las interfaces de red residentes en el núcleo, como la dirección IP (dinámica o estática), o la máscara de red. Si se llama sin argumentos suele mostrar la configuración vigente de las interfaces de red activas, con detalles como la dirección MAC o el tráfico que ha circulado por las mismas hasta el momento. Las interfaces de red en Linux se suelen denominar eth (eth0, eth1, etc.).

(Fuente Wikipedia)

ifup y ifdown son scripts de control de interfaz que controlan la activación y desactivación de las interfaces del sistema. Son equivalentes a decir ifconfig up o ifconfig down .

Como archivos relacionados con estos comandos podemos encontrar:

       /etc/network/interfaces
              definitions of network interfaces See interfaces(5) for more information.

       /var/run/network/ifstate
              current state of network interfaces


En ocasiones nos puede pasar que queramos desactivar una interficie de red (eth1 por ejemplo) y nos da el siguiente error:

ifdown: interface eth1 not configured

Bien, cuando esto pase tenemos dos opciones. Una es ir al archivo /etc/network/interfaces, comentar la linea auto eth1 y reiniciar. Otra es usar el comando ifdown, pero con el parámetro --force

       --force
              Force configuration or deconfiguration of the interface.

Así pues, seria así: ifdown --force eth1

Con este parámetro, forzamos la desconfiguración de la interficie pese a que por alguna razón no sea 100% aconsejable (por ejemplo, pq tengamos servicios con puertos abiertos en escucha sobre esa interficie). 









lunes, 2 de noviembre de 2015

LSC Project. Sincronizando OpenLDAP con otras bases de datos, etc


LSC es un conector Software Libre para sincronizar identidades entre un directorio LDAP y cualquier otra fuente de datos, incluyendo cualquier base de datos con un conector JDBC (Java Database Connectivity), otro servidor LDAP, etc..  
Esto nos puede ser util para infinidad de cosas, como la de sincronizar un directorio Active Directory con OpenLDAP (en cualquier dirección). De esta manera, podríamos tener un escenario de autenticación híbrido en el cual programas que necesiten AD o OpenLDAP puedan habitar alimentándose de una sóla base de datos. 





Así pues, vamos a proceder a instalar el programa obteniéndolo de la web oficial: http://lsc-project.org/

Tenemos dos maneras de hacerlo:

La más gráfica, mediante un paquete deb:

Lo descargamos

Doble click en el archivo .deb
 

Comprobamos que todo ha ido correctamente

Localización de los archivos:

  • /usr/bin/lsc: wrapper to launch LSC
  • /etc/lsc/: configuration
  • /var/log/lsc/: logs
  • /etc/init.d/lsc: init script (for asynchronous connectors)
  • /etc/default/lsc: init script configuration
  • /etc/cron.d/lsc: cron configuration
  • /usr/lib/lsc/: LSC libraries
  • /var/lib/lsc/nagios/: monitoring scripts
  • /usr/share/doc/lsc: sample scripts


Tambien podemos descargarnos tar.gz y descomprimirlo. Ya viene compilado y listo para usarse. En este caso, pese a que soy defensor de usar los paquetes deb y los repositorios (sobretodo los oficiales) en este caso creo que lo mejor es esta opción. Además, los ejemplos vienen pensados justamente para hacerlo de esta manera (rutas, etc). 

Así que.. queda probarlo:

 ./lsc-sample

 One option from available options is:
   --import []    Import data from CSV file
   --show    Show data from database
   --drop    Drop the table csvdata from database
   --start-ldap-server    Launch an embedded OpenDJ LDAP server
   --stop-ldap-server     Halt an embedded OpenDJ LDAP server
   --run     Run the synchronization task
   --clean   Remove all files from disk
   --help    Print informations

Vamos a probar una sincronización a modo de ejemplo con las herramientas incrustadas que lleva el propio programa. 

Miraremos de cargar los registros que queremos sincronizar en la base de datos:

bin/lsc-sample --import sample.csv

Podemos comprobar el contenido mediante la siguiente linea:

bin/lsc-sample --show

Arrancaremos el servidor LDAP incorporado de pruebas:

#lsc-2.1.3/sample/hsqldb$ bin/lsc-sample --start-ldap-server
Starting LDAP server on ldap://localhost:33389/ ... segons /home/ediaz/Escritorio/lsc-2.1.3/sample/hsqldb/bin/../etc
nov 02 15:36:05 - INFO  - Logging configuration successfully loaded from /home/eithel/Escritorio/lsc-2.1.3/sample/hsqldb/bin/../etc/logback.xml 
nov 02 15:36:05 - INFO  - LSC configuration successfully loaded from /home/eithel/Escritorio/lsc-2.1.3/sample/hsqldb/bin/../etc/

Como el ejemplo lo hace sobre 127.0.0.1 y puede ser que no dispongamos de una herramienta gráfica, podemos mirar de probarlo mediante ldapsearch:


ldapsearch -D "cn=Directory Manager" -w secret -p 33389 -h localhost -b "dc=lsc-project,dc=org" -s sub "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# lsc-project.org
dn: dc=lsc-project,dc=org
dc: lsc-project
objectClass: domain
objectClass: top

# Sample, lsc-project.org
dn: ou=Sample,dc=lsc-project,dc=org
description: Sample subtree
ou: Sample
objectClass: organizationalUnit
objectClass: top

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Con la base de datos cargada y un servidor LDAP en donde migrar esos datos, nos dispondremos a hacer la migración:

#bin/lsc-sample --run

y vemos el resultado de nuevo con la busqueda ldapsearch:
ldapsearch -D "cn=Directory Manager" -w secret -p 33389 -h localhost -b "dc=lsc-project,dc=org" -s sub "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# lsc-project.org
dn: dc=lsc-project,dc=org
dc: lsc-project
objectClass: domain
objectClass: top

# Sample, lsc-project.org
dn: ou=Sample,dc=lsc-project,dc=org
description: Sample subtree
ou: Sample
objectClass: organizationalUnit
objectClass: top

# clem.oudot@gmail.com, Sample, lsc-project.org
dn: mail=clem.oudot@gmail.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9Z3Y5ZGlzaFhaZlNQeGR6ekZ0SU1xMlN1WHp5NU5NTDVSdGJlNXc9PQ=
 =
mail: clem.oudot@gmail.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: c.oudot
cn: Oudot, Clement
sn: Oudot

# jonathan@philipoux.net, Sample, lsc-project.org
dn: mail=jonathan@philipoux.net,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9QUlOd0RoWDROTG5aSE9TUDVpKzRtZUJSTzRkMmF2eFNTaDUwWVE9PQ=
 =
mail: jonathan@philipoux.net
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
carLicense: BHU772
carLicense: DED899
uid: j.clarke
cn: Clarke, Jonathan
sn: Clarke

# thomas@aepik.net, Sample, lsc-project.org
dn: mail=thomas@aepik.net,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9Ynh0Y2FWb1g1cmpRcHZSU29PSEd5ME94VGtGSWZGRnlOK3h1SHc9PQ=
 =
mail: thomas@aepik.net
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: t.chemineau
cn: Chemineau, Thomas
sn: Chemineau

# sebastien.bahloul@gmail.com, Sample, lsc-project.org
dn: mail=sebastien.bahloul@gmail.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9dzRUbDhPOEU5dW9mc2tFZDBqR0JYNW1yTzVPMWZmakFJOUdMdkE9PQ=
 =
mail: sebastien.bahloul@gmail.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: s.bahloul
cn: Bahloul, Sebastien
sn: Bahloul

# remy@schermesser.com, Sample, lsc-project.org
dn: mail=remy@schermesser.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9eE9odElwcENEN3RLRlZONSt4Ris1WkNpRlp5Wmx4NlBYV3M5bUE9PQ=
 =
mail: remy@schermesser.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: r.schermesser
cn: Schermesser, Remy-Christophe
sn: Schermesser

# epereira@linagora.com, Sample, lsc-project.org
dn: mail=epereira@linagora.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9YzUwaFEra2RPLzRLQjI4WG9tMmREQm83KzFFOWo4Wi9GbktaZkE9PQ=
 =
mail: epereira@linagora.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: e.pereira
cn: Pereira, Esteban
sn: Pereira

# dcoutadeur@linagora.com, Sample, lsc-project.org
dn: mail=dcoutadeur@linagora.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9Z2VKUkpFa012dE9wNGZvWDB1anVxeEVHMXZZaE1Ob3cvUmp6T0E9PQ=
 =
mail: dcoutadeur@linagora.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: d.coutadeur
cn: Coutadeur, David
sn: Coutadeur

# rouazana@linagora.com, Sample, lsc-project.org
dn: mail=rouazana@linagora.com,ou=Sample,dc=lsc-project,dc=org
userPassword:: e1NTSEF9YjJKUWQ3NUtTaDlCWnJnUTIrd2E1NWNzNVdNSFIreFpXeG5lbkE9PQ=
 =
mail: rouazana@linagora.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
uid: r.ouazana
cn: Ouazana, Raphael
sn: Ouazana

# search result
search: 2
result: 0 Success

# numResponses: 11
# numEntries: 10

Efectivamente, ha realizado la sincronización perfectamente.

En resumen, lo que hemos hecho es, dado un csv, cargar una base de datos intermedia. Luego, con los datos cargados en esa base de datos, los migramos a otro servidor LDAP (OpenLDAP, AD, etc).








That u don't know what you've got 'til it's gone