Memoria con acceso USB: particiones, sistemas de archivos y etiquetas
140410


Parámetros por defecto

Cuando adquirimos memorias stick con acceso USB, comunmente llamadas memoria USB o simplemente USB, tiene varios parámetros determinados por el fabricante, con la intensión de "comprese y utilicese". Por ejemplo, las memorias fabricadas por la compañia Kingston tienen por defecto la etiqueta KINGSTON, además, dichas memorias tienen una sola partición y un sistema de archivos FAT32, por la sencilla razón de que la mayoría de las personas utilizan el sistema de archivos que puede leer winbugs... upsss! perdón, windogs. Así, cuando se inserta una memoria de este tipo en linux, el sistema tratará de montarla en el directorio /media/ en un subdirectorio con el nombre de la etiqueta, en el ejemplo sería  /media/KINGSTON. Esto simplemente a mi no me gusta, yo quiero que tenga el nombre que yo elija, además que es más comodo cuando tienes varias memorias conectadas con etiquetas personalizadas en lugar de /media/KINGSTON, /media/KINGSTON-1, /media/KINGSTON-2, etc.



Identificando el dispositivo

Debido a que linux mantiene un nombramiento uniforme a los dispositivos independientemente de su constitución física, nombra a los dispositivos como si fueran archivos, los cuales los encontramos en el directorio /dev. Los dispositivos con acceso USB, los nombra como si fueran dispositivos SCSI, haciendo una emulación para su acceso. Los dispositivos de almacenamiento con acceso USB son nombrados /dev/sdXN, donde la X es una letra de la a a la z y N es el número de la partición, normalmente del 1 al 4.

Al insertar la memoria y ejecutando el comando dmesg, el kernel nos indica el nombre que le ha asignado al disposotivo, por ejemplo:

$dmesg
[44091.567613] usb 1-9: new high speed USB device using ehci_hcd and address 44
[44091.724494] usb 1-9: configuration #1 chosen from 1 choice
[44091.727673] scsi30 : SCSI emulation for USB Mass Storage devices
[44091.727673] usb-storage: device found at 44
[44091.727673] usb-storage: waiting for device to settle before scanning
[44091.727673] usb 1-9: New USB device found, idVendor=1307, idProduct=0163
[44091.727673] usb 1-9: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[44091.727673] usb 1-9: Product: USB Mass Storage Device
[44091.727673] usb 1-9: Manufacturer: USBest Technology
[44091.727673] usb 1-9: SerialNumber: 0000000000000D
[44098.809834] usb-storage: device scan complete
[44098.811334] scsi 30:0:0:0: Direct-Access     Ut163    USB2FlashStorage 0.00 PQ: 0 ANSI: 2
[44098.815333] sd 30:0:0:0: [sdj] 1974271 512-byte hardware sectors (1011 MB)
[44098.823055] sd 30:0:0:0: [sdj] Write Protect is off
[44098.823055] sd 30:0:0:0: [sdj] Mode Sense: 00 00 00 00
[44098.823055] sd 30:0:0:0: [sdj] Assuming drive cache: write through
[44098.837283] sd 30:0:0:0: [sdj] 1974271 512-byte hardware sectors (1011 MB)
[44098.841284] sd 30:0:0:0: [sdj] Write Protect is off
[44098.841284] sd 30:0:0:0: [sdj] Mode Sense: 00 00 00 00
[44098.841284] sd 30:0:0:0: [sdj] Assuming drive cache: write through
[44098.841284]  sdj: sdj1
[44098.918605] sd 30:0:0:0: [sdj] Attached SCSI removable disk
[44098.918605] sd 30:0:0:0: Attached scsi generic sg8 type 0
[44099.314524] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!



Podemos notar entre otras cosas que el kernel le ha asignado el nombre /dev/sdj y a su primera partición
/dev/sdj1. También identifica la capacidad de almacenamiento de la memoria y los modos de operación.

Con el siguiente comando podemos ver el punto de montura asociado a cada uno de los dispositivos montados en el sistema:

$df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda4            263056100 157382276  92311360  64% /
tmpfs                  1488536         0   1488536   0% /lib/init/rw
udev                     10240       132     10108   2% /dev
tmpfs                  1488536         0   1488536   0% /dev/shm
/dev/sdg1            153834852  41926068 104094368  29% /media/disk
/dev/sdj1               978004         4    978000   1% /media/KINGSTON



Particionamiento

Las memorias con acceso USB, son emuladas como si fueran discos duros magnéticos, lo que facilita su gestión al ser uniforme tanto para el kernel de linux como para el usuario final. De la misma forma que un disco duro magnético, una memoria USB puede ser particionada, aún cuando evidentemente no está conformada por superficies giratorias, ni cabezas lectoras, ni cilindros.

Podemos visualizar la tabla de particiones del dispositivos si ejecutamos, como super usuario, el comando:

#fdisk -l /dev/sdj

Disk /dev/sdj: 1010 MB, 1010826752 bytes
255 heads, 63 sectors/track, 122 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x91f72d24

   Device Boot      Start         End      Blocks   Id  System
/dev/sdj1               1         122      979933+   b  W95 FAT32

El comando fdisk es una herramienta poderosa para gestionar los dispositivos de almacenamiento. Permite eliminar (d) y crear (n) particiones, tanto primarias como extendidas. También permite cambiar la identificación (t y l) del sistema de archivos.

Al igual que un disco duro magnético, una memoria USB puede tener 4 particiones primarias. Si se genera una partición extendida (o lógica) se pueden tener hasta 16 particiones.


Sistema de archivos

Los sistemas de archivos, son estructuras y funciones que ayudan al sistema operativo para almacenar y recuperar archivos en un sistema de almacenamiento de manera eficiente. Los más utilizados (aunque no muy conocidos) son los sistemas FAT12, FAT16, FAT32 y NTFS para windogs y los sistemas extendidos ext2, ext3 y ext4 para linux. Cada uno tiene sus ventajas y desventajas y actualmente contienen funciones de Journaled File System, para la actualización eficiente de los cambios en el sistema de archivos.

Para crear un sistema de archivos se debe primero hacer una partición y darle el ID adecuado. Después, se utilizan los comandos para crear el sistema de archivos. Por ejemplo, si quisiera que mi partición
/dev/sdj1 tuviera un sistema de archivos FAT:

#mkfs.vfat /dev/sdj1

o un sistema de archivos ext3:

#mkfs.ext3 /dev/sdj1

Cada partición podrá tener un sistema de archivos diferente, evidentemente el sistema de archivos deberá ser soportado por el sistema operativo.


Mtools

Para cambiar la etiqueta de las memorias se puede utilizar varias herramientas: mtools, ntfsprogs, e2fsprogs, jfsutils, xfsprogs, etc. Por simplicidad utilizaremos la colección de aplicaciones mtools, las cuales son un conjunto de herramientas de software libre desarrolladas para UNIX/Linux para la manipulación de archivos y sistemas de archivos MSDOS:

#apt-get install mtools



Cambio de etiqueta (label)

Para asignar la etiqueta mediante mtools, es necesario mapear el dispositivo /dev/sdj1 a una letra de unidad (tipo windows), por ejemplo p: estará mapeado a /dev/sdj1. Se puede editar un archivo con la información del mapeo para que las mtools puedan acceder a dicha información y realizar la operación. El archivo puede estar en el home del usuario o en el archivo de configuración general /etc/mtools.conf.

Creamos el archivo .mtoolsrc, en el home del usuario con el siguiente contenido:

$vim ~/.mtoolsrc
drive p: file="/dev/sdj1"


Ahora ejecutamos el comando:

$mlabel p:elOAN

Si queremos que tenga más de dos palabras:

$mlabel p:"la Pioja"

Es posible que se genere un mensaje como el siguiente:
Total number of sectors (7831520) not a multiple of sectors per track (63)!
Lo podemos solucionar así:
$echo mtools_skip_check=1 >> ~/.mtoolsrc
Ahora cada vez que insertemos nuestra memoria a un sistema linux, se creará un subdirectorio con el nombre /media/elOAN


HAL vs montar

HAL (hardware abstraction layer) es un demonio del sistema operativo que funciona como una interfaz entre el software y el hardware del sistema. Cuando se emplea HAL, las aplicaciones no acceden directamente al hardware sino que lo hacen a una capa abstracta. Del mismo modo que un API, HAL permiten que las aplicaciones sean independientes del hardware porque abstraen información acerca de tales sistemas.

...le sigo al ratito.