10 de set. 2008

Disco duro Firewire - Linux

Hace poco me he comprado el my book pro edition II de western digital, este que tiene 2 discos de 1000Gb en RAID1 (también se puede configurar con el software que viene en el disco en RAID0 para tener una sola unidad de 2000Gb, casi nada ahora mismo jejeje).


El trasto este (que por cierto trabaja de maravilla), permite usar usb 2.0, firewire 400 y firewire 800.

Así que lo puse en un antiguo servidor que se dedica a hacer las copias de seguridad, pero al ser antiguo los puertos usb son lentos (USB 1.0), así que tuve que optar para firewire.

El equipo se trata de un ubuntu server con el kernel 2.6.22, desde el kernel 2.6.24 el firewire debería estar activado por defecto, pero todo depende de la configuración del kernel precompilado del sistema operativo.
La carga de módulos que explico en este post es igual para todos los linuxes (debian/ubuntu, redhat/fedora, suse, gentoo, etc.)

Al momento de conectar el disco al ordenador vi que con fdisk -l no lo detectaba, así que empezé a investigar... se necesitaban cargar los módulos para poder conectar un disco duro firewire.

El firewire es como un scsi, puede ser un disco, un cd-rom, una tarjeta de red, cualquier cosa. Por esto tenemos que cargar los módulos scsi_mod y ide_scsi, sd_mod para decirle que es un disco, sg (no me acuerdo), y los del firewire ieee1394, ohci1394 y sdb2; pero sorpresa, el sdb2 no estaba por ningún sitio, así que empezé a buscar y en su substitución está el sd_mod, que ya lo tenemos previamente cargado.

Así ¿qué hacemos para que el sistema cargue los módulos al principio? pues añadirlos en /etc/modules

# vi /etc/modules
y añadimos estas lineas
# activar disco duro firewire
scsi_mod
sd_mod
sg
id_scsi
ieee1394
ohci1394
sdb2 #ponlo si al hacer un lsmod |grep sdb2 aparece


Reiniciamos para ver los cambios, pero con el disco encendido no funciona, la unica forma de recargar el disco duro firewire es cargando de nuevo los módulos (manualmente) y reiniciando el disco.
Como esto era inviable, ya que un sistema de estos tiene que ser lo mas autónomo posible se me ocurrió de crear un script que cargara los módulos del kernel antes que se encendiese todo el sistema y el resto de módulos.

Como muchos sabéis en linux existen los niveles init, cada vez que arranca un ordenador con linux carga un nivel init u otro, 0 es para halt y 6 para reboot, luego del init 1 al 5 sirven para cargar el sistema con mas o menos servicios, por ejemplo si queremos hacer mantenimiento del servidor y no queremos que nadie entre a nuestro servidor mientras trabajamos podemos cambiar el nivel init por otro que tenga por ejemplo el apache y el mysql parados, simplemente escribiendo init numero en consola (recomiendo mirarse el man antes de usar este comando).

Así que añadimos este script en /etc/rc2.d/ (porque mi servidor al iniciar lo hace con init 2)

# vi S12firewire.sh

#!/bin/bash

modprobe scsi_mod
modprobe sd_mod
modprobe sg
modprobe ide_scsi
modprobe ieee1394
modprobe ohci1394
Luego reiniciamos y si todo va bien ya podemos ver el disco firewire con fdisk -l

Si tenemos dudas podemos acudir al dmesg o en /var/log/messages en mi caso para ver que realmente se ha conectado el disco veo lo siguiente:
[ 37.250663] ieee1394: sbp2: Logged into SBP-2 device
[ 37.252754] ieee1394: sbp2: Node 0-00:1023: Max speed [S400] - Max payload [2048]
[ 37.266119] scsi 6:0:0:0: Direct-Access WD My Book 1010 PQ: 0 ANSI: 4
[ 37.272690] sd 6:0:0:0: [sdd] 1953508784 512-byte hardware sectors (1000196 MB)
[ 37.277154] sd 6:0:0:0: [sdd] Write Protect is off
[ 37.277161] sd 6:0:0:0: [sdd] Mode Sense: 10 00 00 00
[ 37.280623] sd 6:0:0:0: [sdd] Cache data unavailable
[ 37.280628] sd 6:0:0:0: [sdd] Assuming drive cache: write through
[ 37.287454] sd 6:0:0:0: [sdd] 1953508784 512-byte hardware sectors (1000196 MB)
[ 37.291929] sd 6:0:0:0: [sdd] Write Protect is off
[ 37.291936] sd 6:0:0:0: [sdd] Mode Sense: 10 00 00 00
[ 37.295392] sd 6:0:0:0: [sdd] Cache data unavailable
[ 37.295398] sd 6:0:0:0: [sdd] Assuming drive cache: write through
[ 37.295454] sdd:<6>Linux agpgart interface v0.102 (c) Dave Jones
[ 37.968079] iTCO_vendor_support: vendor-support=0
[ 38.018421] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.01 (21-Jan-2007)
[ 38.228896] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/class/usblp.c: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x413C pid 0x5202
[ 38.228924] usbcore: registered new interface driver usblp
[ 38.228931] /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/class/usblp.c: v0.13: USB Printer Device Class driver
[ 38.518124] input: ImExPS/2 Generic Explorer Mouse as /class/input/input2
[ 38.520737] parport_pc 00:0b: reported by Plug and Play ACPI
[ 38.520755] iTCO_wdt: Found a ICH5 or ICH5R TCO device (Version=1, TCOBASE=0x0860)
[ 38.520797] parport0: PC-style at 0x378 (0x778), irq 7<6>iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)
[ 38.521306] , using FIFO [PCSPP,TRISTATE,COMPAT,ECP]
[ 38.521897] input: PC Speaker as /class/input/input3
[ 38.669411] intel_rng: Firmware space is locked read-only. <4>intel_rng: If you can't or
[ 38.669416] don't want to <4>intel_rng: disable this in firmware setup, and <4>intel_rng: if
[ 38.669420] you are certain that your <4>intel_rng: system has a functional
[ 38.669422] RNG, try<4>intel_rng: using the 'no_fwh_detect' option.
[ 39.329611] ACPI: PCI Interrupt 0000:00:1f.5[B] -> GSI 17 (level, low) -> IRQ 21
[ 39.329651] PCI: Setting latency timer of device 0000:00:1f.5 to 64
[ 39.764075] intel8x0_measure_ac97_clock: measured 58209 usecs
[ 39.764082] intel8x0: clocking to 48000
[ 45.945198] sdd1
[ 45.945324] sd 6:0:0:0: [sdd] Attached SCSI disk
[ 45.945417] sd 6:0:0:0: Attached scsi generic sg4 type 0
[ 45.947243] scsi7 : SBP-2 IEEE-1394
[ 46.001854] md: bind
[ 46.002045] md: bind
[ 46.068447] raid1: raid set md0 active with 2 out of 2 mirrors
[ 46.965963] ieee1394: sbp2: Logged into SBP-2 device
[ 46.968068] ieee1394: sbp2: Node 0-00:1023: Max speed [S400] - Max payload [2048]
[ 46.982422] scsi 7:0:1:0: Enclosure WD My Book Device 1010 PQ: 0 ANSI: 4
[ 46.982568] scsi 7:0:1:0: Attached scsi generic sg5 type 13
En cada momento podemos ver como se cargan cada uno de los módulos y luego se procede al montaje automático del disco (fijarse en los numeros de la izquierda para identificar cada uno de los procesos).

0 comentaris:

Publica un comentari a l'entrada