Comunidad Linux en español

Quemando CDs en Linux


Imagen de amp

By amp- Publicado14 Diciembre 2003

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.

<span lang=\"es-ES\">mkisofs</span> 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.


<span lang=\"es-ES\">cdrecord</span> 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
<span lang=\"es-ES\">cdrtools</span> (el comando sigue
llamándose cdrecord), para ver qué
versiones tienes instaladas en tu sistema tipea:

$ cdrecord --<span lang=\"es-ES\">version</span>

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.:\'<br><br>hda: IBM-DTLA-305020, ATA
DISK drive<br>hdb: TOSHIBA DVD-ROM SD-M1202, ATAPI CD/DVD-ROM
drive<br>hdc: LITE-ON LTR-24102B, ATAPI CD/DVD-ROM drive<br>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<br><br>/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\\\"<br>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\"<br>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=\"<code>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<br>$ 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<br><br>Cdrecord 1.10
(i686-pc-linux-gnu) Copyright (C) 1995-2001 Jrg Schilling<br>Linux
sg driver version: 3.1.24<br>Using libscg version
\'schily-0.5\'<br>scsibus0:<br>0,0,0 0) \'TOSHIBA \' \'DVD-ROM
SD-M1202\' \'1020\' Removable CD-ROM<br>0,1,0 1) \'LITE-ON \'
\'LTR-24102B \' \'5S54\' Removable CD-ROM <br>0,2,0 2) *<br>0,3,0 3)
*<br>0,4,0 4) *<br>0,5,0 5) *<br>0,6,0 6) *<br>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<br>$ dd if=/dev/scd0
of=/tmp/diskfile.iso<br>$ 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 <br>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.

Relacionado con Quemando CDs en Linux