7/10/2008


UUID, Labels, Particiones y Fstab

Antes de comenzar a hablar sobre UUID y Labels es necesario conocer el funcionamiento del fichero /etc/fstab, pueden ingresar en la siguiente entrada donde se habla del mismo.
En la última versión de Archlinux(Core Dump), podemos observar que una de las características sobresaliente es la siguiente:

"- Se utilizan los UUID para una nomenclatura persistente de discos".

A decir verdad, no tenía ni la menor idea de lo que significaba, claro hasta hoy que necesité montar un disco. Hacía mucho no montaba nada, luego de instalar hal ni me preocupaba por las conexiones usb o discos posteriores que pudiera conectar en mi máquina, ya que lo detectaba automáticamente...
Pero no todo es color de rosa, en Gnome, hal me molestaba, noté una baja de velocidad al iniciar ya que detecta los discos u particiones que tuviese en el equipo, y bueno lo terminé desactivando.
Ahora era necesario editar el fstab para poder montar de nuevo aquellas particiones desde el inicio y me encontré con algunas sorpresas, veamos que nos muestra /etc/fstab:


#
# /etc/fstab: static file system information
#
# <filesystem> <dir> <type> <options> <dump> <pass>
none /dev/pts devpts defaults 0 0
none /dev/shm tmpfs defaults 0 0


/dev/cdrom /media/cdrom auto ro,user,noauto,unhide 0 0
UUID=70c4f0be-c6a0-449e-b2f2-b9689d1f93b6 swap swap defaults 0 0
UUID=7824e60c-2dfd-4919-88df-b672eea43400 /home ext3 defaults 0 1
UUID=dfa49bd0-dd2c-4c76-a318-a044fc691a6a / ext3 defaults 0 1
Como podrán observar ha aparecido un nuevo campo(columna) en la parte donde se declaran los discos, llamada UUID.

Algo de teoría


Utilizando nombres persistentes en dispositivos de bloques:

Mientras que las distribuciones Gnu/Linux están evolucionando y la detección de hardware es más confiable, hay un número de nuevos problemas y también de nuevos cambios:
  • Si usted tiene más de un controlador de discos sata/scsi o ide, el orden en que es agregado al sistema es al azar. Esto da como resultados nombres de dispositivos como hdX y hdY variando al azar con cada arranque. Lo mismo para los sdX y sdY. El uso de nombres persistentes permite que el usuario no se tenga que preocupar de ninguna manera por esto.
  • Con la introducción del nuevo soporte para libata pata, todos los dispositivos hdX serán dispositivos sdX en el futuro. Nuevamente, con nombramientos persistente, puede ser que ni se note este cambio.
  • Máquinas con controladores sata e ide son bastante común hoy en día. Con los cambios libata mencionados anteriormente, el primer problema no se presentará, así que ambos discos, sata e ide tendrán nombres sdX.
¿Qué nombre debo usar?

Hay cuatro métodos diferentes para utilizar nombres persistentes.

Por UUID (by-uuid): UUID significa Identificador Único Universal(Universally Unique Identifier) y es un mecanismo para dar a cada sistema de archivos un identificador único. Esta diseñado para que las colisiones sean poco probables. Todos las sistemas de archivos de Gnu/Linux (incluyendo el swap) soportan UUID. Los sistemas de archivos FAT y NTFS no soportan UUID, pero se encuentran listados en "by-uuid" con una identificador único. Método Recomendado:
[root@ArchLinux braianet]# ls -lF /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 jul 10 12:24 100CA78D0CA76D02 -> ../../sda1
lrwxrwxrwx 1 root root 10 jul 10 12:24 11f5a43a-5904-47bf-845d-8d95ac8730d4 -> ../../sda4
lrwxrwxrwx 1 root root 10 jul 10 12:24 5e716466-9f33-44c3-8455-383c8d1e9a10 -> ../../sda2
lrwxrwxrwx 1 root root 10 jul 10 12:24 70c4f0be-c6a0-449e-b2f2-b9689d1f93b6 -> ../../sdb1
lrwxrwxrwx 1 root root 10 jul 10 12:24 7824e60c-2dfd-4919-88df-b672eea43400 -> ../../sdb3
lrwxrwxrwx 1 root root 10 jul 10 12:24 dfa49bd0-dd2c-4c76-a318-a044fc691a6a -> ../../sdb2
lrwxrwxrwx 1 root root 10 jul 10 12:24 fe97b59c-3776-452c-9232-65966a5cc230 -> ../../sda3
[root@ArchLinux braianet]#
Como puede ver, los particiones fat y ntfs (100CA78D0CA76D02 --> NTFS) tienen nombres cortos, pero todavía están listado. La ventaja de usar el método "uuid" es que es mucho menos probable que puede tener una colisión que con labels (etiquetas); la desventaja es que son mucho más difícil de memorizar.

Por etiqueta(by-label): En Archlinux no contamos con este método.
Casi todos los tipos de sistemas de archivos pueden usar un "label". Todos los particiones que tiene una están listada en el directorio /dev/disk/by-label:
$ ls -lF /dev/disk/by-label
total 0
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data -> ../../sdb2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 data2 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 16 10:27 fat -> ../../sda6
lrwxrwxrwx 1 root root 10 Oct 16 10:27 home -> ../../sda7
lrwxrwxrwx 1 root root 10 Oct 16 10:27 root -> ../../sda1
lrwxrwxrwx 1 root root 10 Oct 16 10:27 swap -> ../../sda5
lrwxrwxrwx 1 root root 10 Oct 16 10:27 windows -> ../../sdb1
Puede cambiar estas etiquetas de la sistema de archivos utilizando estos comandos:
* swap: Crear un nuevo área de intercambio, así: mkswap -L 
Tenga cuidado: Las etiquetas tienen que ser únicas para hacer este trabajo, a fin de asegurar su correcto funcionamiento.

Por Id (by-id):
Crea un nombre único en función del número de serie de hardware. Ej:
[root@ArchLinux braianet]# ls -lF /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 9 jul 10 12:24 ata-ST340823A_6EF0VBZA -> ../../sda
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-ST340823A_6EF0VBZA-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-ST340823A_6EF0VBZA-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-ST340823A_6EF0VBZA-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-ST340823A_6EF0VBZA-part4 -> ../../sda4
lrwxrwxrwx 1 root root 9 jul 10 12:24 ata-WDC_WD150AA-34BAA0_WD-WMA2N1336879 -> ../../sdb
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-WDC_WD150AA-34BAA0_WD-WMA2N1336879-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-WDC_WD150AA-34BAA0_WD-WMA2N1336879-part2 -> ../../sdb2
lrwxrwxrwx 1 root root 10 jul 10 12:24 ata-WDC_WD150AA-34BAA0_WD-WMA2N1336879-part3 -> ../../sdb3
lrwxrwxrwx 1 root root 9 jul 10 12:24 scsi-SATA_ST340823A_6EF0VBZA -> ../../sda
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_ST340823A_6EF0VBZA-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_ST340823A_6EF0VBZA-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_ST340823A_6EF0VBZA-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_ST340823A_6EF0VBZA-part4 -> ../../sda4
lrwxrwxrwx 1 root root 9 jul 10 12:24 scsi-SATA_WDC_WD150AA-34BWD-WMA2N1336879 -> ../../sdb
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_WDC_WD150AA-34BWD-WMA2N1336879-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_WDC_WD150AA-34BWD-WMA2N1336879-part2 -> ../../sdb2
lrwxrwxrwx 1 root root 10 jul 10 12:24 scsi-SATA_WDC_WD150AA-34BWD-WMA2N1336879-part3 -> ../../sdb3
[root@ArchLinux braianet]#
Por ruta (by-path): Crea un nombre único, dependiendo de la ruta más corta física (de acuerdo a sysfs). Ambos contienen cadenas para indicar al subsistema al que pertenecen (es decir, "-ide-", por "by-path", y "ata-" por "by-id ') y, por lo tanto, no son adecuadas para la solución de los problemas mencionados en el principio de este artículo. No recomendado utilizar este método.
[root@ArchLinux braianet]# ls -lF /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 9 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:0:0-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:0:0-part4 -> ../../sda4
lrwxrwxrwx 1 root root 9 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:1:0 -> ../../sdb
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:1:0-part1 -> ../../sdb1
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:1:0-part2 -> ../../sdb2
lrwxrwxrwx 1 root root 10 jul 10 12:24 pci-0000:00:00.1-scsi-0:0:1:0-part3 -> ../../sdb3
lrwxrwxrwx 1 root root 9 jul 10 12:24 pci-0000:00:00.1-scsi-1:0:1:0 -> ../../sr0
[root@ArchLinux braianet]#
Basta de Teoría je. Ahora continuemos con mi objetivo, poder montar una partición, vemos las particiones en mi sistema con el comando fdisk -l:

[root@ArchLinux braianet]# fdisk -l

Disco /dev/sda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x4c2ba12c

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sda1 * 2 2365 18988830 7 HPFS/NTFS
/dev/sda2 2366 4675 18555075 83 Linux
/dev/sda3 4761 4865 843412+ 82 Linux swap / Solaris
/dev/sda4 4676 4760 682762+ 83 Linux

Las entradas de la tabla de particiones no están en el orden del disco

Disco /dev/sdb: 15.0 GB, 15020457984 bytes
16 heads, 63 sectors/track, 29104 cylinders
Units = cilindros of 1008 * 512 = 516096 bytes
Disk identifier: 0x90909090

Disposit. Inicio Comienzo Fin Bloques Id Sistema
/dev/sdb1 1 1008 508000+ 82 Linux swap / Solaris
/dev/sdb2 * 1009 15540 7324128 83 Linux
/dev/sdb3 15541 29104 6836256 83 Linux
[root@ArchLinux braianet]#
Quiero agregar /dev/sda2 al fstab pero no conozco su UUID, ahora lo averiguaremos, tenemos dos opciones, una es haciendo un ls -l /dev/disk/by-uuid y la otra es utilizando el comando blkid, la segunda opción es la que recomiendo:
[root@ArchLinux braianet]# blkid 
/dev/sda1: UUID="100CA78D0CA76D02" TYPE="ntfs"
/dev/sda2: UUID="5e716466-9f33-44c3-8455-383c8d1e9a10" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda3: TYPE="swap" UUID="fe97b59c-3776-452c-9232-65966a5cc230"
/dev/sda4: UUID="11f5a43a-5904-47bf-845d-8d95ac8730d4" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdb1: TYPE="swap" UUID="70c4f0be-c6a0-449e-b2f2-b9689d1f93b6"
/dev/sdb2: UUID="dfa49bd0-dd2c-4c76-a318-a044fc691a6a" SEC_TYPE="ext2" TYPE="ext3"
/dev/sdb3: UUID="7824e60c-2dfd-4919-88df-b672eea43400" SEC_TYPE="ext2" TYPE="ext3"
[root@ArchLinux braianet]#
Ya obtuvimos su UUID, el tipo de sistema es ext2/3. Creamos un directorio en /media llamado Datos_Linux y lo agregamos al fstab:

#
# /etc/fstab: static file system information
#
# <filesystem> <dir> <type> <options> <dump> <pass>
none /dev/pts devpts defaults 0 0
none /dev/shm tmpfs defaults 0 0


/dev/cdrom /media/cdrom auto ro,user,noauto,unhide 0 0
UUID=70c4f0be-c6a0-449e-b2f2-b9689d1f93b6 swap swap defaults 0 0
UUID=7824e60c-2dfd-4919-88df-b672eea43400 /home ext3 defaults 0 1
UUID=dfa49bd0-dd2c-4c76-a318-a044fc691a6a / ext3 defaults 0 1
UUID=5e716466-9f33-44c3-8455-383c8d1e9a10 /media/Datos_Linux defaults 0 2
Bueno ya logré lo que buscaba, espero que les haya resultado útil el artículo, lo recomendable es utilizar el UUID en el Grub, así independientemente del lugar donde conecten sus discos se podrá bootear igual.

Ejemplo de mi /boot/grub/menu.lst:
# (0) Arch Linux
title Arch Linux (Core Dump)
root (hd1,1)
kernel /boot/vmlinuz26 root=/dev/disk/by-uuid/dfa49bd0-dd2c-4c76-a318-a044fc691a6a ro
initrd /boot/kernel26.img

# (1) Arch Linux
title Arch Linux Fallback
root (hd1,1)
kernel /boot/vmlinuz26 root=/dev/disk/by-uuid/dfa49bd0-dd2c-4c76-a318-a044fc691a6a ro
initrd /boot/kernel26-fallback.img
#
# (1) Windows
title Windows
rootnoverify (hd0,0)
makeactive
chainloader +1
[braianet@ArchLinux ~]$
Con Gnu/Linux siempre algo nuevo se aprende todos los días. Saludos!

Referencias: wiki.archlinux.org, dalealteclado.com, manual.sidux.com

9 comentarios:

Anonymous said...

Gracias por el tutorial!

Braian said...

Que bueno que te haya gustado Miguel, Saludos. Gracias.

Anonymous said...

Recomiendo tu artículo en GiLUG

Braian said...

Gracias Narcis, Saludos!

Mail de contacto said...

Muchas gracias... muy clara la guia. También me hacia falta montar algo y me vino de lujo.

Anonymous said...

Muchas gracias.
Me ha sido de mucha utilidad.

Braian said...

Gracias a todos :). Saludos!

Carlos said...

Hola, muy util y claro el post. Quisiera ver si me puedes ayudar con un inconveniente: realizé una copia de mi sistema y lo "pegé" :) en otra partición, la cosa es que ahora tengo dos dispositivos sda7 y sda9 con el mismo UUID :S hay una manera de generar un nuevo uuid??

Saludos!

Maurito said...

Gracias por compartir, me sirvio mucho la explicacion...
saludos!