Categorías
Hardware

Montaje selectivo de discos externos

O a cuáles, cuándo y cómo dar acceso al sistema a estos dispositivos.

Ya he hablado de ello antes así que voy a pensar aquí cómo haría que este mecanismo pudiese instalarse con un paquete, sin reinventar la pólvora y sin excesos que ralenticen su puesta en marcha. Luego todo son fallos y es mejor tener algo real que arreglar que no un precioso diseño en papel.

Aspectos a tener en cuenta:

  • Qué dispositivos se pueden o deben montar
  • Montar automáticamente o a petición
  • Dónde situarlos en el sistema
  • Cómo realizar el montaje: si están cifrados o no, o si requieren credenciales o algún elemento externo

Qué dispositivos montar

O cómo identificarlos de manera unívoca. Y aquí es dónde tenemos que elegir entre usar todo el dispositivo o únicamente una partición. Sea como sea la cuestión está en cómo obtener información del disco empleando herramientas que ya existen: lsblk y hdparm.

Tanto si el disco se usa por completo o tan sólo una partición obtendremos el modelo y el número de serie empleando lo siguiente:

$ sudo lsblk -o +MODEL,UUID,SERIAL -d -J
{
   "blockdevices": [
      {"name":"sda", "maj:min":"8:0", "rm":false, "size":"931,5G", "ro":false, "type":"disk", "mountpoint":null, "model":"WDC_WD10EALX-009BA0", "uuid":null, "serial":"WD-WMATR0247666"},
      {"name":"sdb", "maj:min":"8:16", "rm":false, "size":"232,9G", "ro":false, "type":"disk", "mountpoint":null, "model":"MAXTOR_STM3250820AS", "uuid":null, "serial":"9QE2ELJC"},
      {"name":"sr0", "maj:min":"11:0", "rm":true, "size":"1024M", "ro":false, "type":"rom", "mountpoint":null, "model":"TSSTcorp_CDDVDW_SH-224DB", "uuid":null, "serial":"R93E6YBD902D99"}
   ]
}

Al emplear el formato JSON para la salida de resultados es mucho más sencillo que un script seleccione y guarde lo que nos interesa. También es mucho más rápido lo inverso, encontrar el archivo de dispositivo al que corresponde el disco. Hay que recordar que cada vez que el dispositivo externo aparece no está garantizado un mismo archivo de bloques. Si se tocan las reglas de udev es posible asignarle uno siempre pero pretendo que sea más sencillo que eso.

Otro aspecto a destacar es que los parámetros empleados en el ejemplo de arriba están seleccionando dispositivos al completo y no particiones. En caso de no usar -d aparece más información que puede filtrarse con el atributo type.

      {"name":"sdb", "maj:min":"8:16", "rm":false, "size":"232,9G", "ro":false, "type":"disk", "mountpoint":null, "model":"MAXTOR_STM3250820AS", "uuid":null, "serial":"9QE2ELJC",
         "children": [
            {"name":"sdb1", "maj:min":"8:17", "rm":false, "size":"46,6G", "ro":false, "type":"part", "mountpoint":null, "model":null, "uuid":"cff28dfc-ef8b-4bb1-8e75-8646c0050b72", "serial":null},
            {"name":"sdb2", "maj:min":"8:18", "rm":false, "size":"1K", "ro":false, "type":"part", "mountpoint":null, "model":null, "uuid":null, "serial":null},
            {"name":"sdb5", "maj:min":"8:21", "rm":false, "size":"7,5G", "ro":false, "type":"part", "mountpoint":"[SWAP]", "model":null, "uuid":"9dc9fa42-0cb9-4774-9b7e-7a9b3db68d8e", "serial":null},
            {"name":"sdb6", "maj:min":"8:22", "rm":false, "size":"178,9G", "ro":false, "type":"part", "mountpoint":null, "model":null, "uuid":"fcc3ed4a-b9f2-486d-b83f-5fa71fb4adf8", "serial":null}
         ]
      },

Montaje a petición o automático

En este caso tengo claro que prefiero que el acceso al dispositivo sea bajo demanda, evitando cualquier automatismo. Tal vez en versiones posteriores vea que es conveniente pero no por ahora.

Dónde montarlo

El punto de montaje debe ser predeterminado y la única concesión es crearlo si no existe en el momento previo al montaje. Por el momento no contemplo dar soporte a montajes múltiples.

Cómo montar el disco

De nuevo busco la simplicidad así que lo único que voy a añadir al programa es el saber si el disco está cifrado y dónde (o cómo si es un programa externo) encontrar la clave. La preparación previa del volumen tendrá que hacerse a mano.

En las referencias de más abajo se puede encontrar información de sobra sobre el proceso, incluyendo tutoriales paso a paso. Yo voy a estudiarlo para ir incorporándolo al paquete que estoy escribiendo y del que luego haré un resumen en forma de publicación.

Resumiendo

El paquete en el que estoy trabajando puede verse en https://git.astillas.net/msat/tree/topics/sb-disk y va a servir para:

  1. Registrar un disco en la configuración (sbd-register)
  2. Montar un disco para las copias (sbd-mount)
  3. Desmontarlo una vez acabado (sbd-unmount)

Las ampliaciones que surjan según se trabaje con él.

Referencias