18.6. Creación y uso de medios ópticos (CD)

Texto de Mike Meyer.

18.6.1. Introducción

Los CD tienen muchas opciones que los hacen distintos de los discos convencionales. Al principio los usuarios no podían escribirlos. Su diseño permite que leamos en ellos sin el retardo del movimiento de una cabeza lectora de una pista a otra. También son mucho más fáciles de transportar de un sistema a otro que muchos otros soportes de información.

Los CD tienen pistas, pero son una sección de los que permiten lectura contínua, no una propiedad física del disco. Para crear un CD en FreeBSD debe preparar los ficheros de datos que van a constituir las pistas del CD y luego escribir las pistas al CD.

El sistema de ficheros ISO 9660 se diseñó para gestionar estas diferencias. Por desgracia implementa límites de sistema de ficheros que eran comunes en la época en que se diseñó. Por suerte también proporciona un mecanismo de extensiones que permite que CD escritos excediendo dichos límites funcionen en sistemas que no soportan esas extensiones.

El port sysutils/cdrtools incluye mkisofs(8), un programa que le permitirá crear un fichero de datos que contenga un sistema de ficheros ISO 9660. Incorpora opciones que soportan varias extensiones. Se describe más adelante.

Qué herramienta usar para grabar el CD depende de si su grabadora es ATAPI o no. Las grabadoras de CD ATAPI usan el programa burncd, que forma parte del sistema base. Las grabadoras SCSI y USB usan cdrecord, del port sysutils/cdrtools.

burncd no soporta cualquier unidad de grabación. Para saber si una unidad está soportada consulte la siguiente lista de unidades CD-R/RW soportadas.

Nota: Si utiliza FreeBSD 5.X, FreeBSD 4.8-RELEASE o posteriores, puede utilizar cdrecord y otras herramientas para unidades SCSI en hardware ATAPI con el módulo ATAPI/CAM.

Si quiere usar un interfaz gráfico con su software de grabación de CD quizás le guste X-CD-Roast o K3b. Puede instalar estas herramientas como paquetes o desde los ports sysutils/xcdroast y sysutils/k3b, respectivamente. X-CD-Roast y K3b requieren el módulo ATAPI/CAM si usa hardware ATAPI.

18.6.2. mkisofs

El programa mkisofs(8) (que forma parte del port sysutils/cdrtools) genera un sistema de ficheros ISO 9660 que es una imagen de un árbol de directorios en el espacio de nombres del sistema de ficheros UNIX®. Esta es la forma más simple de usarlo:

# mkisofs -o ficherodeimagen.iso /ruta/del/árbol

Este comando creará un ficherodeimagen.iso que contenga un sistema de ficheros ISO 9660 que es una copia del árbol ubicado en /ruta/al/árbol. En el proceso, mapeará los nombres de fichero a nombres que se ajusten a las limitaciones del estándar del sistema de ficheros ISO 9660, y excluirá ficheros que posean nombres no característicos de sistemas de ficheros ISO.

Existe gran cantidad de opciones que permiten superar esas restricciones. En particular, -R habilita las extensiones Rock Ridge comunes para sistemas UNIX, -J habilita las extensiones Joliet usadas por sistemas Microsoft y -hfs puede usarse para crear sistemas de ficheros utilizados por Mac OS®.

Puede utilizar -U para deshabilitar todas las restricciones de nombres de fichero si quiere crear un CD que se vaya a usar exclusivamente en sistemas FreeBSD. Cuando se usa con -R produce una imagen de sistema de ficheros que es idéntica al árbol FreeBSD origen, aunque puede violar el estándar ISO 9660 de múltiples formas.

La última opción de uso general es -b. Se usa para configurar la ubicación de la imagen de arranque que se usará al crear un CD arrancable “El Torito”. Esta opción usa como argumento la ruta a la imagen de arranque desde la raíz del árbol de directorios que se va a escribir en el CD. Por defecto mkisofs(8) crea una imagen ISO en un modo llamado “de emulación de disquete (floppy)”, y por lo tanto espera que la imagen de arranque sea exactamente de 1.200, 1.440 o 2880 KB de tamaño. Algunos cargadores de arranque, como el que se usa en los discos de la distribución FreeBSD, no utilizan modo de emulación: se usa la opción -no-emul-boot. Por tanto, si /tmp/miarranque tiene un sistema FreeBSD arrancable con la imagen de arranque en /tmp/miarranque/boot/cdboot podría crear la imagen en un sistema de ficheros ISO 9660 en /tmp/arrancable.iso de la siguiente manera:

# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/arrancable.iso /tmp/miarranque

Hecho esto, si tiene vn (FreeBSD 4.X), o md (FreeBSD 5.X) configurado en su kernel, puede montar el sistema de ficheros del siguiente modo:

# vnconfig -e vn0c /tmp/arrancable.iso
# mount -t cd9660 /dev/vn0c /mnt

En FreeBSD 4.X y FreeBSD 5.X proceda del siguiente modo:

# mdconfig -a -t vnode -f /tmp/arrancable.iso -u 0
# mount -t cd9660 /dev/md0 /mnt

Ahora puede verificar que /mnt y /tmp/miarranque sean idénticos.

Existen muchas otras opciones que puede usar para depurar el comportamiento de mkisofs(8), sobre todo en lo que se refiere al esquema ISO 9660 y la creación de discos Joliet y HFS. Consulte el manual de mkisofs(8).

18.6.3. burncd

Si tiene una grabadora ATAPI puede usar burncd para grabar una imagen ISO en un CD. burncd forma parte del sistema base, y está en /usr/sbin/burncd. Su uso es muy sencillo, ya que tiene pocas opciones:

# burncd -f unidaddecd data ficheroimagen.iso fixate

Esto grabará una copia de ficheroimagen.iso en unidadcd. El dispositivo por defecto es /dev/acd0 (o /dev/acd0c en FreeBSD 4.X). Consulte burncd(8) para ver las opciones de configuración de velocidad de escritura, expulsión de CD una vez grabado, y escritura de datos de audio.

18.6.4. cdrecord

Si no dispone de una grabadora ATAPI de CD, tendrá que usar cdrecord para grabar sus CD. cdrecord no forma parte del sistema base; instálelo desde el port sysutils/cdrtools o como paquete. Los cambios en el sistema base pueden hacer que las versiones binarias del programa fallen. Tendrá que actualizar el port cuando actualice su sistema o, si está siguiendo la rama -STABLE, actualizar el port cuando haya una nueva versión disponible.

Aunque cdrecord tiene muchas opciones, el uso básico es incluso más simple que el de burncd. Así se graba una imagen ISO 9660:

# cdrecord dev=dispositivo ficheroimagen.iso

La parte complicada de utilizar cdrecord es encontrar qué dev usar. Utilice la bandera -scanbus para dar con la configuración apropiada. La salida será parecida a la siguiente:

# cdrecord -scanbus
Cdrecord 1.9 (i386-unknown-freebsd4.2) Copyright (C) 1995-2000 Jörg Schilling
Using libscg version 'schily-0.1'
scsibus0:
        0,0,0     0) 'SEAGATE ' 'ST39236LW       ' '0004' Disk
        0,1,0     1) 'SEAGATE ' 'ST39173W        ' '5958' Disk
        0,2,0     2) *
        0,3,0     3) 'iomega  ' 'jaz 1GB         ' 'J.86' Removable Disk
        0,4,0     4) 'NEC     ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) *
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) 'YAMAHA  ' 'CRW4260         ' '1.0q' Removable CD-ROM
        1,6,0   106) 'ARTEC   ' 'AM12S           ' '1.06' Scanner
        1,7,0   107) *

Esta lista muestra los valores dev apropiados para los dispositivos de la lista. Localice su grabadora de CD y utilice los tres números separados por comas como valor para dev. En este caso, el dispositivo CDW es 1,5,0 y por tanto la entrada apropiada sería dev=1,5,0. Hay modos más fáciles de especificar este valor; consulte cdrecord(1) para más detalles. También es el lugar donde buscar información sobre la escritura de pistas de audio, controlar la velocidad de escritura y muchas más cosas.

18.6.5. Copiar CD de audio

Puede duplicar un CD de audio extrayendo los datos de audio del CD a ficheros y escribir estos ficheros en un CD virgen. El proceso es ligeramente diferente en unidades ATAPI y SCSI.

Unidades SCSI

  1. Use cdda2wav para extraer el audio.

    % cdda2wav -v255 -D2,0 -B -Owav
    
  2. Use cdrecord para escribir los ficheros .wav.

    % cdrecord -v dev=2,0 -dao -useinfo  *.wav
    

    Asegúrese de que 2,0 este configurado apropiadamente, como se describe en la Sección 18.6.4.

Unidades ATAPI

  1. El controlador de CD ATAPI hace que cada pista sea accesible como /dev/acddtnn, donde d es el número de unidad y nn es el número de pista expresado con dos dígitos decimales, precedido por un cero si es necesario. La primera pista del primer disco es /dev/acd0t01, la segunda es /dev/acd0t02, la tercera es /dev/acd0t03 y así sucesivamente.

    Asegúrese de que existen los ficheros apropiados en /dev.

    # cd /dev
    # sh MAKEDEV acd0t99
    

    Nota: En FreeBSD 5.0 devfs(5) creará y gestionará automáticamente las entradas necesarias en /dev, así que no será necesario usar MAKEDEV.

  2. Extraer cada pista con dd(1). También deberá declarar un tamaño específico de bloque al extraer los ficheros.

    # dd if=/dev/acd0t01 of=pista1.cdr bs=2352
    # dd if=/dev/acd0t02 of=pista2.cdr bs=2352
    ...
    
  3. Grabar los ficheros extraídos a disco con burncd. Debe declarar que son ficheros de audio y que burncd debe cerrar (“fixate”) el disco al terminar la grabación.

    # burncd -f /dev/acd0 audio pista1.cdr pista2.cdr ... fixate
    

18.6.6. Duplicar CDs de datos

Puede copiar un CD de datos a un fichero de imagen que será funcionalmente equivalente al fichero de imagen creado con mkisofs(8), y puede usarlo para duplicar cualquier CD de datos. El ejemplo dado aquí asume que su dispositivo CDROM es acd0. Sustitúyalo por el dispositivo CDROM correcto para su configuración. Bajo FreeBSD 4.X, se debe añadir una c al final del nombre del dispositivo para indicar la partición entera o, en el caso de los CDROM, el disco entero.

# dd if=/dev/acd0 of=fichero.iso bs=2048

Hecha la imagen puede garbarla en un CD como se describió anteriormente.

18.6.7. Uso de CD de datos

Ahora que ha creado un CDROM de datos estándar tal vez quiera montarlo y leer los datos que contiene. Por defecto mount(8) asume que los sistemas de ficheros son de tipo ufs. Si trata de hacer algo como

# mount /dev/cd0 /mnt

recibirá un error como este: “Incorrect super block” y no se montará. Un CDROM no es un sistema de ficheros UFS así que los intentos de montarlo como tal fallarán. Tendrá que decirle a mount(8) que el sistema de ficheros es de tipo ISO9660 y funcionará. Puede hacerlo mediante la opción -t cd9660. Por ejemplo, si quiere montar el dispositivo CDROM /dev/cd0 en /mnt ejecute:

# mount -t cd9660 /dev/cd0 /mnt

Tenga en cuenta que el nombre de su dispositivo (/dev/cd0 en este ejemplo) puede ser diferente, dependiendo de la interfaz que su CDROM utilice. Además la opción -t cd9660 sólo ejecuta mount_cd9660(8). El ejemplo de arriba puede resumirse del siguiente modo:

# mount_cd9660 /dev/cd0 /mnt

En general puede usar CDROM de datos de cualquier fabricante, aunque los discos con ciertas extensiones ISO 9660 pueden mostrar un comportamiento extraño. Por ejemplo, los discos Joliet almacenan todos los nombres de fichero en caracteres unicode de dos-bytes. El kernel de FreeBSD no comprende unicode (todavía) así que los caracteres que no están en inglés aparecen como signos de interrogación. (Si utiliza FreeBSD 4.3 o alguna versión posterior, el controlador CD9660 incluye unas estructuras llamadas “ganchos”, que le permitirán cargar una tabla de conversión unicode apropiada cuando haga falta. Hay módulos para algunas de las codificaciones más comunes en el port sysutils/cd9660_unicode.)

Es posible que reciba un error “Device not configured” al tratar de montar un CDROM. Generalmente esto significa que la unidad de CDROM piensa que no hay disco en la bandeja, o que la unidad no es visible en el bus. Puede llevar un par de segundos el que una unidad de CDROM se dé cuenta de que ha sido alimentada, por lo tanto sea paciente.

Algunas veces un CDROM SCSI puede “perdido” debido a que no tuvo tiempo suficiente para responder al reset del bus. Si tiene un CDROM SCSI añada la siguiente opción a su fichero de configuración del kernel y recompile su kernel.

options SCSI_DELAY=15000

Esto le indica a su bus SCSI que haga una pausa de 15 segundos durante el arranque para darle ocasión a su unidad de CDROM de responder al reset del bus.

18.6.8. Grabar CD de datos “crudos” (Raw)

Puede guardar un fichero directamente a CD sin crear un sistema de ficheros ISO 9660. Algunas personas hacen esto al crear respaldos. Es un proceso más rápido que grabar un CD estándar:

# burncd -f /dev/acd1 -s 12 data fichero.tar.gz fixate

Para recuperar los datos guardardados de este modo en un CD, debe leer los datos desde el nodo de dispositivo “crudo”:

# tar xzvf /dev/acd1

No puede montar este disco como lo haría con un CDROM normal. Estos CDROM no pueden leerse en ningún sistema operativo que no sea FreeBSD. Si quiere montar el CD o compartir los datos con otro sistema operativo debe utilizar mkisofs(8) como se describió previamente.

18.6.9. Uso del controlador ATAPI/CAM

Original de Marc Fonvieille.

Este controlador permite que dispositivos ATAPI (CD-ROM, CD-RW, unidades DVD, etc) sean accesibles a través del subsistema SCSI y por lo tanto permite el uso de aplicaciones como sysutils/cdrdao o cdrecord(1).

Para usar este controlador necesitará añadir la siguiente línea al fichero de configuración de su kernel:

device atapicam

Es posible que necesite también las siguientes líneas en el fichero de configuración de su kernel:

device ata
device scbus
device cd
device pass

(que, por otra parte, ya deberín estar presentes).

Recompile, instale su nuevo kernel y reinicie su máquina. Durante el proceso de arranque su grabadora debe ser detectada; veamos un ejemplo:

acd0: CD-RW <MATSHITA CD-RW/DVD-ROM UJDA740> at ata1-master PIO4
cd0 at ata1 bus 0 target 0 lun 0
cd0: <MATSHITA CDRW/DVD UJDA740 1.00> Removable CD-ROM SCSI-0 device
cd0: 16.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

Puede acceder a la unidad a través del del nombre de dispositivo /dev/cd0; por ejemplo, para montar un CDROM en /mnt, teclée lo siguiente:

# mount -t cd9660 /dev/cd0 /mnt

Como root, puede ejecutar el siguiente comando para obtener las direcciones SCSI del dispositivo:

# camcontrol devlist
<MATSHITA CDRW/DVD UJDA740 1.00>   at scbus1 target 0 lun 0 (pass0,cd0)

Según esto, 1,0,0 será la dirección SCSI a utilizar con cdrecord(1) y otras aplicaciones SCSI.

Para mayor información sobre sistemas ATAPI/CAM y SCSI, diríjase a las páginas de manual atapicam(4) y cam(4).

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.