Publicado en esdebian (http://www.esdebian.org)
http://www.starlinux.net/staticpages/index.php?page=2003121323312136

Quemando CDs en Linux

mkisofs y cdrecord en la línea de comando lo hacen posible todo

Carla Schroder (dworks-at-bratgrrl.com)
Consultora de Tux Computing
Abril 23 de 2003

Traducido por D.A. Valdez (yacolinux-en-yahoo.com.ar)

Linux ofrece poderosas y flexibles herramientas para crear CDs. Puedes crear discos que son legibles en casi cualquier plataforma y crear imágenes (archivos), .iso para distribuir por Internet.

Quemar CDs desde la línea de comando en cualquier plataforma puede ser misterioso y fastidioso, esto no es así en Linux. Los comandos y la terminología son similares entre plataformas por lo que resulta útil aprender como grabar CDs en Linux y nos dan una idea de cómo funcionan las cosas en otros sistemas operativos (*nix principalmente). Mucho del software Linux es distribuido en forma de imágenes .iso, así que si quieres aprender cómo quemar tus propios cds, podrías bajarte alguna .iso y crear tu propio disco de instalación.

Hay programas de línea de comando para grabar cds en Linux y en Windows, pero las de Linux son más poderosas y versátiles que sus contrapartes en Windows. En este artículo vamos a darle una mirada a las aplicaciones definitivas en el tema de grabación de cds en Linux: mkisofs y cdrecord.

mkisofs permite crear una imagen de los datos a grabar generando dentro de ella un sistema de archivo ISO9660/JOLIET/HFS. Se crea/formatea el sistema de archivo y se cargan los archivos y carpetas que solicitamos que incluya, las dos cosas a la vez; a diferencia de otros medios de almacenamiento como discos rígidos y diskettes, en los que primero se crea/formatea el sistema de archivos y luego se lo carga con archivos y carpetas. Con los cds CD-R solo hay una oportunidad, ya que si los formateáramos primero, obtendríamos un disco vacío y no le podríamos añadir luego ningún archivo.


cdrecord permite grabar CD-R/RWs, y con lo rápido que avanza la tecnología de grabación de CDs las versiones más nuevas de ambos programas son las más recomendables, así mkisofs y cdrecord deberían ser por lo menos de la versión 1.10 (aunque ambos ya están por delante de 2.x). En las últimas versiones, cdrecord se cambió el nombre a cdrtools (el comando sigue llamándose cdrecord), para ver qué versiones tienes instaladas en tu sistema tipea:

$ cdrecord --version

y

$ mkisofs --version

Para los que son nuevos en el mundo de la grabación de CDs, les cuento un algunas cosas que deberían saber antes de seguir:

  • CD-R: CD-Recordable - 'CD Grabable'. Estos CDs son WORM (Write Once, Read Many - 'Escribible un Vez, Legible Muchas').

  • CD-RW: CD-Rewritable - 'CD Regrabable'. Estos CDs son WMRM (Write Many, Read Many- 'Escribible y Legible Muchas Veces').

  • Los CD-Rs son legibles por casi cualquier lectora de CD-ROM.

  • Los CD-RWs deberían ser legibles por cualquier lectora moderna. Una lectora tiene que ser "multiread" para poder leer CD-Rs y CD-RWs Las lectoras viejas suelen dar problemas para esto, así que 'jubile' su lectora de 4x y compre una nueva (no vale la pena la molestia).

  • Los CDs “de fábrica” (no creados con grabadoras), son hechos a presión, no quemados con un láser.

  • Cuales grabadoras son las mejores ? Fijáte en los sitios usuales de testeo de hardware.

Y unos cuantos términos relacionados con formatos de archivo:

  • Yellow Book: Especificación del formato físico de un cd de datos.

  • Orange Book: Especificación del formato físico de un cd de datos grabable:

    • Part I: CD-MO (Magneto-Óptico)

    • Part II: CD-WO (Grabable una vez; el más común, incluye al "hybrid" de los PhotoCD)

    • Part III: CD-RW (Regrabable)

  • ISO-9660: La vieja especificación estándar que permite solo nombres '8.3'

  • Rock Ridge: Extensiones a ISO-9660 que permiten los nombres largos y los enlaces simbólicos de UNIX; preserva todos los atributos de archivo, tal como el propietario y permisos. Los atributos de archivo UNIX no son mostrados cuando el disco es leído en un sistema Windows.

  • Joliet: Extensión de Microsoft al ISO 9660 que permite que se pueda usar carateres Unicode para nombres de archivo y nombres largos. También crea nombres de archivo truncados para compatibilidad con MS-DOS (cosas raras como: FILENA~1.TXT). Permite nombres de hasta 64 carateres, incluyendo espacios en blanco y es legible desde Windows 95 o superior y desde computadoras Macintosh que soporten la extensión Joliet Volume Access. Las nuevas Macs no leerán nombres Joliet de más de 31 caracteres.

  • El Torito: Especificación de formato de CD-ROM Bootable.

  • HFS (Hierarchical File System): Sistema de archivo nativo de Macintosh

  • Multisesión: Permite añadir archivos luego de una primera sesión. Para que un disco sea legible, la sesión debe estar 'cerrada'. Pero esta sesión no permite añadir más archivos, para poder hacerlo hay que crear una nueva sesión. La multisesión enlaza las sesiones individuales y actualiza la tabla de contenido del disco para que aparezca como si todo hubiera sido grabado en una misma sesión.

  • CD-UDF (Universal Disk Format- Formato Universal de Disco): Estándar de la industria, sistema de archivo de escritura incremental por paquetes ('incremental packet-writing filesystem').

Unas breves palabras sobre UDF: UDF implica ser capaz de grabar archivos directamente al disco (igual que hacemos con discos rígidos y diskettes). Actualmente esto se hace a nivel software y para poder leer estos discos se requiere el software usado para crearlos (en Windows por ejemplo, DirectCD o InCD). UDF está en proceso de ser añadido al kernel de Linux, probablemente en el 2.6. Las lectoras de CD necesitarán un circuito CD-MRW ("CD Mount Rainier ReWrite", no me pregunten de donde sacan estos nombres), lo que de hecho las transformara en grabadoras, con la particularidad que copiar archivos desde estas lectoras a discos CD-R/RW será tan fácil como ahora es copiar a un diskette. Ya veremos. (Fijáte en Recursos como obtener más información sobre Mount Rainier).



Aventuras de la emulación SCSI en Linux
Usa una grabadora IDE/ATAPI o una SCSI si puedes. La interfaz de puerto paralelo es una horrible fuente de posibles problemas, y las grabadoras USB son lentas. Ninguna de estas últimas está bien soportada en Linux (aunque puedes tener mejor suerte con las nuevas USB 2.0).

Las grabadoras IDE/ATAPI, que son las más comunes, necesitarán un toque mágico para funcionar. Así que...que pasa si cdrecord no te muestra ninguna configurada ? Para verlo tipea esto:

$ cdrecord -scanbus

Si ya te muestra tu grabadora (fijáte en Grabando el disco, abajo), puedes saltarte esta sección casi por completo, a menos que quieras leer un poco para saber más.

Linux usa un subsistema de emulación SCSI, así que las grabadoras IDE/ATAPI necesitarán drivers de compatibilidad. Si hay una lectora y una grabadora en la misma PC, ambas necesitarán usar el driver de pseudo-dispositivo SCSI para poder copiar de disco a disco. No hay nada de malo en usar emulación SCSI en una lectora, funcionará igual, solo cambiará el nombre del dispositivo. Dependiendo de tu particular distribución de Linux, el nombre puede ser /dev/cdrom0 o /dev/hdc o /dev/scd0 (fijáte en la Tabla 1 una lista de nombres de dispositivos IDE/ATAPI).



Tabla 1. Nombres de dispositivos IDE/ATAPI

Nombre

Dispositivo


hda

IDE bus/connector 0 maestro

hdb

IDE bus/connector 0 esclavo

hdc

IDE bus/connector 1 maestro

hdd

IDE bus/connector 1 esclavo

Para encontrar las unidades de tu sistema, tipea:

$ dmesg | grep '^hd.:'

hda: IBM-DTLA-305020, ATA DISK drive
hdb: TOSHIBA DVD-ROM SD-M1202, ATAPI CD/DVD-ROM drive
hdc: LITE-ON LTR-24102B, ATAPI CD/DVD-ROM drive
hda: 40188960 sectors (20577 MB) w/380KiB Cache, CHS=2501/255/63, UDMA(66)

Muchos Linux vienen actualmente con la emulación SCSI ya compilada en el kernel:

$ locate ide-scsi.o

/lib/modules/2.4.19/kernel/drivers/scsi/ide-scsi.o

Si tu sistema no muestra lo anterior, tendrás que compilarlo en tu kernel. Este procedimiento es bastante largo como para darlo en este artículo, así que por favor fijáte en Recursos (no es difícil cuando ya tenés algo de práctica).

Vas a necesitar editar dos archivos de texto para configurar el sistema para que use el driver scsi. El primero es /etc/modules.conf (en Debian, /etc/modules). Mi sistema tiene una lectora de CD-ROM y una grabadora CD-R/RW, hdb y hdc respectivamente. Añade esas líneas a /etc/modules.conf (r /etc/modules) usando los valores apropiados para tu sistema:

ide-cd ignore=\"hdb hdc\"
ide-scsi

Por defecto el subsistema IDE reclama todos los dispositivos ATA para sí, así que ignora las líneas que activan el subsistema SCSI para la lectora y la grabadora, por ello:

A continuación edita el archivo de configuración de tu booteador, GRUB o LILO. Para los que usan LILO añadan lo siguiente al final de lilo.conf, y luego hacé lilo <enter> en una consola para habilitar los cambios:

append="hdb=ide-scsi"
append="hdc=ide-scsi"

Lo anterior activará la emulación SCSI para todas tus entradas de LILO (Linux), si quieres activar la emulación solo para determinada entrada puedes hacerlo así:

image=/boot/vmlinuz

label=linux

root=/dev/hda1

initrd=/boot/initrd.img

append="hdb=ide-scsi hdc=ide-scsi"

read-only

Lo anterior sería de utilidad en caso de que quieras crear otra entrada en LILO para poder bootear /dev/hdb y/o /dev/hdc sin emulación alguna. Por ejemplo cuando tengas que conectar temporalmente un disco rígido como /dev/hdb y/o /dev/hdc (como se da a menudo en el caso de portátiles).

Los usuarios de GRUB, añadirán lo siguiente a /etc/grub.conf (o en Debian, /boot/grub/menu.lst) al final de la línea kernel:

hdb=scsi hdc=scsi

Ahora rebootea y verifica que ha sido cargado:

$ lsmod | grep ide-scsi

Esto te devolverá unas líneas si es que todo funcionó bien; fijáte por la que dice 'ide-scsi'.



Creando un archivo .iso
Una vez que seleccionaste los archivos que querés copiar, grabarlos a un CD consiste de dos pasos: crear un .iso con mkisofs, y luego quemarlo a un CD con cdrecord. Usá lo siguiente para crear el archivo .iso:

$ mkisofs -o test.iso -Jrv -V test_disk /home/carla/

En este ejemplo:

  • -o le da nombre a la nueva imagen de archivo .iso (test.iso)

  • -J usa Joliet, para tener compatibilidad con Windows

  • -r usa Rock Ridge para compatibilidad con UNIX/Linux, y hace a los archivos públicamente legibles.

  • -v usa el modo 'verbose' que muestra comentarios informativos mientras es quemada la imagen.

  • -V provee un nombre de volumen (test_disk); este es el que se muestra en el Explorador en Windows.

  • Lo último en la lista son los archivos seleccionados para empaquetar dentro de la imagen .iso (todo lo que está dentro de /home/carla/)

Ahora monta la imagen .iso para comprobar que está correctamente construída; para esto me gusta crear un directorio de testeo:

$ mkdir /test_iso
$ mount -t iso9660 -o ro,loop=/dev/loop0 test.iso /test_iso

Fijáte en el contenido del directorio, todos tus archivos deberían estar ahí y ser perfectamente legibles. Si no lo están o hay algún problema para montar la imagen, si la hubieras quemado a un CD, habrías desperdiciado el disco.



Quemando el CD
Escribir la imagen al CD es tan fácil como respirar. Primero encuentra la dirección SCSI de tu grabadora:

$ cdrecord -scanbus

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jrg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.5'
scsibus0:
0,0,0 0) 'TOSHIBA ' 'DVD-ROM SD-M1202' '1020' Removable CD-ROM
0,1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

Los primeros tres números de cada item se refieren al bus SCSI, al ID de dispositivo y a la LUN (Logical Unit Number – Número de Unidad Lógica), respectivamente. (El cuarto número es el ID de dispositivo de nuevo). cdrecord necesita estos tres números. En este ejemplo, la grabadora es 0,1,0. Cualquier cosa en el bus SCSI 0 es acortada a 1,0, dejando fuera el primer 0. Esto es lo normal por convención. Cualquier otro bus, debe ser especificado sin acortarlo de ninguna manera (los tres números).

Ahora grabemos al disco:

$ cdrecord -v -eject speed=8 dev=0,1,0 test.iso

En este ejemplo:

  • -v es 'verbose' (muestra más información de salida que usualmente)

  • -eject ejecta el disco al finalizar la grabación

  • -speed especifica la velocidad de grabación (8)

  • -dev es el número de dispositivo (0,1,0) obtenido con cdrecord -scanbus

  • Lo último es el nombre de la imagen .iso a ser quemada (test.iso)

Esta es una manera simple y rápida para crear CD que se pueden distribuir y que se leen perfectamente en Windows o en Linux. mkisofs por sí mismo es muy bueno para crear imágenes .isos, y con mkisofs se puede crear sistemas de archivo para muchas plataformas. Por favor lee la página man de mkisofs para más información.

En una máquina rápida con mucha memoria, podés hacer esto sin preocuparte por ejecutar tareas livianas para la CPU durante la grabación, pero es mejor no hacer nada durante la misma. El láser no es capaz de detenerse y volver a empezar y por eso cualquier interrupción es fatal para el CD.

cdrecord intentará usar la grabadora a su máxima velocidad, así que no es necesario especificar una velocidad, pero la experiencia debe ser tu guía. Si sabes que tu máquina falla en grabaciones a ciertas velocidades altas (aunque la grabadora sea capaz de grabar), es mejor reducir la velocidad de grabación y evitar errores de buffer. Con las grabadoras más nuevas que tienen tecnología "burn-proof" no se obtiene casi ningún error de buffer.



Copia de disco
Para copiar directamente desde un CD a otro grabable usá este comando:

$ cdrecord -v dev=0,1,0 speed=4 -isosize /dev/scd0

Este comando direcciona el flujo de datos del contenido del CD-ROM en /dev/scd0 a la grabadora en dev=0,1,0. No trates de hacer esto en una máquina muy lenta y/o vieja. El copiado directo es rápido, pero más susceptible a errores. Es mejor primero copiar el disco origen al disco rígido, y luego copiarlo desde ahí al CD en la grabadora:

$ mount /cdrom
$ dd if=/dev/scd0 of=/tmp/diskfile.iso
$ cdrecord dev=0,1,0 speed=8 fs=8m -v -eject -dummy /tmp/diskfile.iso

Fijáte en el par de nuevas opciones, fs=8m y -dummy. fs=8m define el tamaño del buffer, cuando más grande, mejor, hasta cierto punto. Acordate que las interrupciones son fatales; fs=8m crea un buffer lo suficientemente grande como para mantener trabajando a la grabadora si algo enlentece la transferencia de datos. Si 8 MB no es suficiente, tal vez necesites una mejor PC. Por otra parte más de 8 MB no es necesariamente mejor, ya que el sistema operativo puede perder tiempo recargando las tablas de la MMU (Memory Management Unit). El buffer por defecto es 4 MB.

-dummy es una opción maravillosa para hacer un intento antes de hacer la grabación realmente. La grabadora hace todo lo mismo que sin la opción, pero con el láser apagado, lo que le da al usuario la posibilidad de testear y prevenir errores antes de grabar efectivamente al disco.



Multisesión
Los cds están internamente compuestos de sesiones, y cada sección está dividida en pistas. En un disco de una sola sesión, hay un “lead-in”, una indicador de inicio del disco, una sola tabla TOC (Table of Contents – 'Tabla de Contenidos'), luego los datos y un “lead-out”, un indicador de finalización que previene posteriores grabaciones al disco. En un disco multisesión, mkisofs enlaza las diferentes sesiones en una sola, integrándolas. La creación de discos multisesión puede ser fácil con programas gráficos como K3b, XCDRoast o KonCD, pero ésta es la manera de hacerlo desde la línea de comando:

La primera vez que grabás una sesión a un disco, usá el parámetro -multi en cdrecord:

$ cdrecord -v -eject speed=8 dev=0,1,0 -multi test.iso

El disco será cerrado de manera que sea legible y posible abrirlo para añadir más datos. Para añadir más sesiones al disco, mkisofs necesita saber los números del sector de inicio y finalización. Los cuales podés encontrar así:

$ cdrecord dev=0,1,0 -msinfo
0,27139

Asegúrate que el disco al cual estás añadiendo datos está dentro de la grabadora. Luego añade dos parámetros, -C y -M:

$ mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,1,0 /files/path/

O mejor, dejá que el comando de shell haga el trabajo:

$ mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,1,0 -msinfo` -M 0,1,0 /files/path/

Las unidades de CD leen la última sesión escrita. Este comando toma la TOC de la última sesión y la combina dentro de la nueva TOC. Para no hacer esto, y solo grabar los datos nuevos, omitir la opción -multi.



Conclusión
La grabación de Cds en Linux es versátil y poderosa. Las grabadoras pueden ser compartidas en red y usadas en backups automátizados, mkisofs y cdrecord ahora también graban DVDs, y aunque hay muchos buenos front-ends gráficos, la funcionalidad completa solo está disponible en la línea de comando.



Recursos

Acerca de la autora
Carla Schroder es una autora y escritora independiente, trabaja administrando sistemas Linux y Windows para PyMEs, y escribiendo Howtos para gente normal. Carla descubrió las computadoras y la alta tecnología en 1994 y es una prueba viviente que personas autodidactas de edad media pueden convertirse en gurus de computadoras. Próximamente publicará un libro en O'Reilly, The Linux Cookbook. Podés contactar a Carla en dworks-at-bratgrrl.com.


Última Edición Saturday, December 13 2003 @ 11:31 PM ART