# [USB]Encender/Apagar disco externo (abierto)

## Coghan

Hola a to2.

Realizo las backups de mi gentoo personal en un disco USB externo, hasta ahora las realizo a mano, enciendo el disco, hago el backup y apago el disco, todo esto como digo a mano.

Ahora quiero automatizar esto en un cron, pero no quiero dejar el disco USB encendido innecesariamente, ¿existe alguna forma de decirle mediante bash que se encienda y apague el disco?. Además de USB también tiene conexiones Firewire 400 y 800. ¿En caso de que hubiese forma valdría también para firewire?, ¿y para los eSATA?.

El disco que dispongo es un LaCIE, interiormente tiene dos disco IDE en RAID0 realizado por su mismo hardware, tiene un pulsador para endenderlo y/o apagarlo (Pulsador no interruptor), cuando inicio el PC el disco se enciende solo, supongo que al detectar alimentación por USB (aunque trae su propia fuente de alimentación). Esto me ha llevado a pensar que igual se le puede dar la orden por software para el encendido.

----------

## Inodoro_Pereyra

Siempre he visto que el +5V del USB está conectado directamente al +5V de la fuente de alimentación, lo que me lleva a suponer que lo que es controlable por software es data- y data+, no creo que haya forma de evitar que los discos dejen de girar por software a menos que la bios que controla tu raid externo tenga alguna función sleep o similar...

Salud!

----------

## Coghan

He estado investigando algo y he llegado hasta aquí:

He empezado por el kernel activando esta opción para empezar a probar:

 * .config - Linux Kernel v2.6.23-gentoo-r3 Configuration wrote:*   

>  CONFIG_USB_SUSPEND:                                                                                                                             
> 
>    If you say Y here, you can use driver calls or the sysfs                                                                                        
> 
>    "power/state" file to suspend or resume individual USB                                                                                          
> ...

 

Lo que me ha llevado a pensa en ello es que al desconectar el cable usb el disco se apaga directamente, luego o detecta falta de impendancia, o falta voltaje o falta de flujo de datos. Pego la salida lsusb:

```
lsusb -v

Bus 001 Device 004: ID 059f:0421 LaCie, Ltd 

Device Descriptor:

  bLength                18

  bDescriptorType         1

  bcdUSB               2.00

  bDeviceClass            0 (Defined at Interface level)

  bDeviceSubClass         0 

  bDeviceProtocol         0 

  bMaxPacketSize0        64

  idVendor           0x059f LaCie, Ltd

  idProduct          0x0421 

  bcdDevice           9a.bc

  iManufacturer           1 LaCie

  iProduct                2 USB 2.0 LaCie Big Disk

  iSerial                 3 19A00E000880FBBF

  bNumConfigurations      1

  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength           32

    bNumInterfaces          1

    bConfigurationValue     1

    iConfiguration          5  

    bmAttributes         0xc0

      Self Powered

    MaxPower                0mA

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           2

      bInterfaceClass         8 Mass Storage

      bInterfaceSubClass      6 SCSI

      bInterfaceProtocol     80 Bulk (Zip)

      iInterface              4  

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x01  EP 1 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x81  EP 1 IN

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

Device Qualifier (for other device speed):

  bLength                10

  bDescriptorType         6

  bcdUSB               2.00

  bDeviceClass            0 (Defined at Interface level)

  bDeviceSubClass         0 

  bDeviceProtocol         0 

  bMaxPacketSize0        64

  bNumConfigurations      1

Device Status:     0x0001

  Self Powered

```

Es probable que con esta utilidad dev-util/usb-robot pueda enviar algún comando que me comunique con el dispositivo y que me acepte la orden que necesito, pero no encuentro documentación de como hacerlo, en la web del proyecto http://usb-robot.sourceforge.net me habla de que usa libusb y con la documentación me pierdo un poco http://libusb.sourceforge.net/doc. Llego a comprender que con usb-robot-salve puedo comunicarme con los dispositivos usb desde la consola sin necesidad de programar en C.

----------

## paynalton

Si se pueden controlar los 5v del usb, lo se porque es un problema para mí. Mi teléfono se carga mediante USB, cuando se descarga la batería por completo udev no lo reconoce y no enciende el soporte de 5v (supongo que por seguridad) y es entonces que tengo que buscar el cargador de pared para darle vida nuevamente a mi teléfono.

En cuanto a tu disco estava viendo hace unos días el man de hdparm y vi algunas instrucciones para suspender, apagar y volver a encender discos duros, porque no hacer algunas pruiebas con ello?

----------

## Coghan

 *paynalton wrote:*   

> En cuanto a tu disco estava viendo hace unos días el man de hdparm y vi algunas instrucciones para suspender, apagar y volver a encender discos duros, porque no hacer algunas pruiebas con ello?

 

hdparm funciona solo para discos IDE

----------

## Inodoro_Pereyra

 *paynalton wrote:*   

> Si se pueden controlar los 5v del usb, lo se porque es un problema para mí. Mi teléfono se carga mediante USB, cuando se descarga la batería por completo udev no lo reconoce y no enciende el soporte de 5v (supongo que por seguridad) y es entonces que tengo que buscar el cargador de pared para darle vida nuevamente a mi teléfono.
> 
> En cuanto a tu disco estava viendo hace unos días el man de hdparm y vi algunas instrucciones para suspender, apagar y volver a encender discos duros, porque no hacer algunas pruiebas con ello?

 

Usando un multímetro en el +5V del usb y el mother vas a ver que con solo encender la pc ya se miden +5V inclusive estando en el BIOS... Me refería al +5 de salida del USB que no es controlable.

 *Quote:*   

> Lo que me ha llevado a pensa en ello es que al desconectar el cable usb el disco se apaga directamente, luego o detecta falta de impendancia, o falta voltaje

 

Exacto, falta de voltage... Los unicos discos rígidos que trabajan solo con 5V son los que usan las laptops, el resto (y para tu lacie el caso debe ser este) usan +5 y +12V, como USB solo entrega +5 hay que hacerle llegar por medio de un transformador los 12 restantes...

Vas bien encaminado, si tu lacie externo soporta el modo suspendido tiene que existir la forma de ponerlo a funcionar.

Salud!

----------

## gringo

 *Quote:*   

> ¿existe alguna forma de decirle mediante bash que se encienda y apague el disco?

 

no me hagas mucho caso ( porque he estao buscando y no lo encuentro ahora mismo ), pero hace poco leí en las listas del kernel que había lo posibilidad de apagar cualquier dispositivo usb através de la interfaz /sys, no recuerdo si era una discusión sobre como implementarlo o si ya está disponible. En la entrada del dispositivo en cuestión en /sys tienes una entrada offline en algún lao ?

saluetes

----------

## Coghan

 *gringo wrote:*   

>  *Quote:*   ¿existe alguna forma de decirle mediante bash que se encienda y apague el disco? 
> 
> no me hagas mucho caso ( porque he estao buscando y no lo encuentro ahora mismo ), pero hace poco leí en las listas del kernel que había lo posibilidad de apagar cualquier dispositivo usb através de la interfaz /sys, no recuerdo si era una discusión sobre como implementarlo o si ya está disponible. En la entrada del dispositivo en cuestión en /sys tienes una entrada offline en algún lao ?
> 
> saluetes

 

Si, ya había visto esta opción en el kernel, la he puesto en mi post de más arriba (CONFIG_USB_SUSPEND).

En relación a esto he mirado en /sys y he encontrado algo esperanzador, en el directorio /sys/bus/usb/devices/usb1/power encuentro esto tres ficheros:

```
0 -rw-r--r-- 1 root root 0 ene 16 00:37 autosuspend

0 -rw-r--r-- 1 root root 0 ene 16 00:37 level

0 -rw-r--r-- 1 root root 0 ene 16 00:36 wakeup
```

con los valores repectivos en el mismo orden:

```
2

auto

enabled

```

El valor level que parece que es el indicado para lo que pretendo, solo consigo poner en on o en auto pero me rechaza el off, todo esto con un simple:

```
echo "on" > level
```

wakeup me deja cambiarlo a enabled y disabled y autosuspend a 0, 1 y 2.

En ningún caso consigo hacer nada visible, salvo creo, que consiga averiguar como poner level a off.

Por otro lado si subo un nivel en el directorio y vuelvo a /sys/bus/usb/devices/usb1 me encuentro con esta listado en ficheros y carpetas:

```
0 drwxr-xr-x 3 root root    0 ene 16 00:19 1-0:1.0

0 drwxr-xr-x 4 root root    0 ene 16 00:19 1-3

0 drwxr-xr-x 4 root root    0 ene 16 00:19 1-4

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bcdDevice

0 -rw-r--r-- 1 root root    0 ene 16 00:19 bConfigurationValue

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bDeviceClass

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bDeviceProtocol

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bDeviceSubClass

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bmAttributes

0 -r--r--r-- 1 root root 4,0K ene 15 19:33 bMaxPacketSize0

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bMaxPower

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bNumConfigurations

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 bNumInterfaces

0 lrwxrwxrwx 1 root root    0 ene 16 00:18 bus -> ../../../../bus/usb

0 -r--r--r-- 1 root root 4,0K ene 15 19:33 busnum

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 configuration

0 -r--r--r-- 1 root root  65K ene 15 19:33 descriptors

0 -r--r--r-- 1 root root 4,0K ene 15 19:33 dev

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 devnum

0 lrwxrwxrwx 1 root root    0 ene 16 00:13 driver -> ../../../../bus/usb/drivers/usb

0 lrwxrwxrwx 1 root root    0 ene 15 19:33 ep_00 -> ../../../../class/usb_endpoint/usbdev1.1_ep00

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 idProduct

0 -r--r--r-- 1 root root 4,0K ene 16 00:13 idVendor

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 manufacturer

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 maxchild

0 drwxr-xr-x 2 root root    0 ene 15 19:33 power

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 product

0 -r--r--r-- 1 root root 4,0K ene 15 19:33 quirks

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 serial

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 speed

0 lrwxrwxrwx 1 root root    0 ene 16 00:13 subsystem -> ../../../../bus/usb

0 -rw-r--r-- 1 root root 4,0K ene 16 00:18 uevent

0 lrwxrwxrwx 1 root root    0 ene 15 19:33 usb_endpoint:usbdev1.1_ep00 -> ../../../../class/usb_endpoint/usbdev1.1_ep00

0 -r--r--r-- 1 root root 4,0K ene 16 00:18 version
```

Fijaos en los que tienen el atributo de escritura, el fichero bConfigurationValue tiene el valor 1, so lo paso a cero, ¡WOW! el disco usb desaparece (he de aclarar que para las pruebas dejé desmontando el sistema de ficheros, pero con el icono del dispositivo en el escritorio como detectado), desaparece pero no se apaga la alimentación del disco. Bueno es un paso.

Si vuelvo a poner a 1 el fichero bConfigurationValue se vuelve a detectar automáticamente el dispositivo y a montarse el sistema de ficheros.

Mi conclusión hasta ahora confirma que mi disco solo se activa y desactiva detectando +5v y hasta ahora no consigo desactivar esto, lo que si puedo hacer es deshabilitar el dispotivo.

Otra prueba que he hecho es con un disco sin alimentación externa, y este si ke deja de girar al realizar los mismos pasos.

bueno,por hoy está bien de pruebas, el sueño me puede, ya seguiré...

----------

## gringo

una cosa es suspender y otra apagar, yo hablaba de lo segundo. He estao buscando lo que había leido en las listas pero no hay manera, siempre igual, cuando hace falta no se encuentra, cagüentó.

Sin embargo he encontrao esto que creo que tb. te servirá http://www.gniibe.org/log/2006/01/14

saluetes  :Wink: 

----------

## Coghan

@grino, he probado el programa que enlazas, pero no le hace ni cosquillas, según entiendo al japonesito es para controlar dispositivos de control que van conectados a la corriente eléctrica de casa y poder encender y apagar equipos como el la cafetera para que te tenga listo el café cuando llegues de la oficina.  :Smile: 

Peeero en este enlace he encontrado lo que creo que leíste en su momento http://lwn.net/Articles/186331 que viene a ser lo mismo que yo ya había averiguado surfeando por /sys

----------

## gringo

 *Quote:*   

> @grino, he probado el programa que enlazas, pero no le hace ni cosquillas, según entiendo al japonesito es para controlar dispositivos de control que van conectados a la corriente eléctrica de casa y poder encender y apagar equipos como el la cafetera para que te tenga listo el café cuando llegues de la oficina.

 

pos vaya, lo siento, vi lo de hub y ya me obcequé y tiré palante ...

 *Quote:*   

> 
> 
> Peeero en este enlace he encontrado lo que creo que leíste en su momento http://lwn.net/Articles/186331 que viene a ser lo mismo que yo ya había averiguado surfeando por /sys

 

no era eso, se hablaba de entradas en plan offline para cada hub disponible ( como para desconectar las cpus vamos), pero nada, que no hay huevos a encontrarlo ... de cualquier manera, he mirao en un rc del kernel 2.6.24 y tampoco veo las entradas esas, asi que debía ser sólo una discusión sobre como implementarlo, nada funcional o al menos disponible vamos.

suerte y saluetes !

----------

## Coghan

Bueno, he encontrado los parámetros que se le puede pasar a level en este enlace http://thread.gmane.org/gmane.linux.usb.devel/58831 la opción que faltaba era suspend.

La he probado, pero el disco pasa ha estado suspendido, sigue ahí el dispositivo pero ahora no puedo montarlo hasta que no lo vuelva a poner en on. en fin que por aquí tampoco van los tiros, aunque se aprende. Lo que hace es marcar el dispositivo para que se levante o no después de un estado de suspensión del kernel, por lo menos es lo que yo interpreto del manual que publican en el enlace que indico arriba.

Lo más que se acerca a lo que busco es el fichero bConfigurationValue, pero solo lo puedo utilizar con el bus entero, lo cual si tengo más dispositivos en ese mismo bus los desconectaría a todos.

----------

