12.5. Criando e utilizando mídias ópticas (CDs & DVDs)

Comtribuição de Mike Meyer.

12.5.1. Introdução

Os CDs tem um número diferenciado de funcionalidades dos discos convencionais. Inicialmente, eles não são graváveis aos usuários. Eles são criados o que permite serem lidos continuamente sem esperas para mover o cabeçote entre trilhas. Eles também são facilitadores no transporte de informações entre sistemas com tamanhos de mídias similares e podendo ser feitas ao mesmo tempo.

Os CDs tem trilhas, mas isto se refere a uma seção de dados que são lidos continuamente e não são uma propriedade física do disco. Para produzir um CD no FreeBSD, você deve preparar os arquivos de dados que comporão as trilhas, para que então sejam escritas como trilhas do CD.

O sistema de arquivos ISO 9660 foi desenvolvido para criar um acordo nestas diferenças. Isto infelizmente codifica o sistema de arquivos com limites inerentes ao padrão. Afortunadamente, este provê um mecanismo de extensões que permite gravar CDs apropriadamente para exceder estes limites enquanto estiver trabalhando com sistemas que que não suportam estas extensões.

O programa sysutils/mkisofs é utilizado para produzir um arquivo contendo um sistema de arquivos ISO 9660. Este possui opções que suportam diversas extensões, estas estão descritas abaixo. Você pode instalar o port sysutils/mkisofs.

Qual utilitário usar para gravar o CD dependerá se seu gravador de CD é ATAPI ou algum outro. Gravadores de CD ATAPI usam o programa burncd que é uma parte do sistema. Os gravadores SCSI e USB devem usar o cdrecord do port sysutils/cdrtools.

burncd has a limited number of supported drives. To find out if a drive is supported, see the CD-R/RW supported drives list.

Nota: Se você usa a versão FreeBSD 5.X, FreeBSD 4.8-RELEASE ou acima, será possível utilizar o cdrecord e outros utilitários para controladores SCSI em controladores ATAPI com o ATAPI/CAM module.

12.5.2. mkisofs

O sysutils/mkisofs produz um sistema de arquivos ISO 9660 que é uma imagem da árvore de diretórios no espaço de nomes do sistema de arquivos UNIX®. A maneira mais simples de usá-lo é:

# mkisofs -o imagefile.iso /path/to/tree

Este comando criará o arquivo imagefile.iso contendo um sistema de arquivos ISO 9660 que é uma cópia da árvore de diretórios e arquivos em /path/to/tree . No processo, serão mapeados os nomes de arquivos de acordo com as limitações do padrão ISO 9660, e serão excluídos os arquivos que tiverem nomes não característicos de sistemas de arquivos ISO.

Algumas opções estão disponíveis para exceder as restrições. Em particular, a opção -R ativa as extensões Rock Ridge, que são comuns aos sistemas UNIX, a opção -J ativa o uso de extensões Joliet, que são utilizadas em sistemas da Microsoft, e a opção -hfs pode ser utilizada na criação de sistemas de arquivis HFS, que são utilizados no Mac OS®.

Para CDs que vão ser utilizados apenas em sistemas FreeBSD a opção -U pode ser utilizada para desativar todas a limitações de nomes de arquivos. Quando utilizada com a opção -R, esta produz um sistema de arquivos idêntico à árvore de diretórios do FreeBSD que você utilizou na criação da imagem. Porém isso viola de diversas maneiras o padrão ISO 9660.

A última opção de uso geral é a -b. Ela é utilizada para especificar o local de uma imagem de boot que será utilizada na geração de um CD bootável ``El Torito''. Esta opção pede um argumento que é o caminho da imagem de boot do topo da árvore de diretórios que será escrita no CD. Então, fornecer /tmp/myboot cria um sistema FreeBSD bootável com a imagem de boot em /tmp/myboot/boot/cdboot, você poderia produzir a imagem de um sistema de arquivos ISO 9660 em /tmp/bootable.iso como:

# mkisofs -U -R -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot

Após ter feito o indicado, se você possuir um dispositivo vn (FreeBSD 4.X), ou md (FreeBSD 5.X) configurado em seu kernel, você poderá monta o sistema de arquivos com:

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

Isso no FreeBSD 4.X, já no FreeBSD 5.X faça:

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

Até agora você pode verificar que o /mnt e o /tmp/myboot são idênticos.

Existem diversas outras opções que podem ser utilizadas com o sysutils/mkisofs para ajustar seu comportamento. Em particular, modificações para um layout ISO 9660 e na criação de discos Joliet e HFS. Visite a página de manual do mkisofs(8) para ter mais detalhes.

12.5.3. burncd

Se você tiver um gravador de CD ATAPI, você poderá utilizar o comando burncd para gravar uma imagem ISO num CD. O burncd é parte do sistema, é instalado em /usr/sbin/burncd . Usá-lo é muito simples, e este possui poucas opções:

# burncd -f cddevice data imagefile.iso fixate

Isto irá gravar uma cópia do imagefile.iso no cddevice. O dispositivo padrão é o /dev/acd0c. Visite a página de manual do See burncd(8) para ter mais opções de como definir a velocidade de gravação, para ejetar o CD após a gravação e para gravar CDs de áudio.

12.5.4. cdrecord

Se você não possuir um gravador de CDs ATAPI, você terá que usar o cdrecord para gravar seus CDs. O cdrecord não faz parte do sistema; você deve instalá-lo através do port sysutils/cdrtools ou pelo pacote apropriado. Mudanças no sistema podem fazer que algumas versões binárias deste programa venham resultar em falhas. Você deve atualizar este port quando atualizar o seu sistema, ou se você já estiver tracking -STABLE , atualize o port quando uma nova versão estiver disponível.

Enquanto o cdrecord tem diversas opções, o uso básico dele é mais simples do que o uso do burncd. Para gravar uma imagem ISO 9660 basta:

# cdrecord dev=device imagefile.iso

O segredo da utilização do cdrecord é encontrar a opção dev que deve ser utilizada. Para encontrar a configuração correta, use o parâmetro -scanbus do cdrecord, que podruzirá um resultado parecido com este:

# 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 listagem demonstra qual o valor apropriado que a opção dev deverá ter. Localize seu gravador de CDs, e use os três números separados por vírgulas como valor para a opção dev. Neste caso, o dispositivo CRW é o 1,5,0, então o valor apropriado seria dev=1,5,0. Há maneiras mais fáceis de especificar este valor; visite a página de manual do cdrecord(1) para mais detalhes. Que é onde estão descritas as informações de como gravar trilhas de áudio, controlar a velocidade entre outras possibilidades.

12.5.5. Duplicação de CDs de Áudio

Você pode duplicar um CD de áudio extraindo seus dados do CD em uma série de arquivos, e então gravar estes arquivos num CD virgem. Este processo é um pouco diferente entre controladores ATAPI e SCSI.

Controladores SCSI

  1. Utilize o cdda2wav para extrair o áudio.

    % cdda2wav -v255 -D2,0 -B -Owav
    
  2. Utilize o cdrecord para gravar os arquivos .wav.

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

    Certifique-se que o 2,0 é a configuração apropriada como descrito em Seção 12.5.4.

Controladores ATAPI

  1. A controladora de CD ATAPI torna cada trilha disponível como /dev/acddtnn, onde d é o número da controladora, e nn é o número da trilha escrita em dois dígitos decimais, precedidos com zero quando preciso. Então a primeira trilha no disco é a /dev/acd0t01, a segunda é a /dev/acd0t02, a terceira é a /dev/acd0t03, e assim segue.

    Certifique-se de que os arquivos apropriados existam em /dev.

    # cd /dev
    # sh MAKEDEV acd0t99
    

    Nota: No FreeBSD 5.0, devfs(5) criará automaticamente e gerenciará as entradas em /dev para você, portanto, não é necessário utilizar o MAKEDEV.

  2. Extraia cada trilha utilizando o dd(1). Você deve especificar também um tamanho específico de bloco quando estiver extraindo os arquivos.

    # dd if=/dev/acd0t01 of=track1.cdr bs=2352
    # dd if=/dev/acd0t02 of=track2.cdr bs=2352
    ...
    
  3. Grave os arquivos extraídos para o disco utilizando o burncd. Você deve especificar que são arquivos de áudio, e que o burncd deve executar o fixate no disco quando terminar a gravação.

    # burncd -f /dev/acd0c audio track1.cdr track2.cdr ... fixate
    

12.5.6. Duplicando CDs de Dados

Você pode copiar um CD de dados em um arquivo de imagem que funcionalmente é equivalente a uma imagem criada com o sysutils/mkisofs, e você usar este recurso para duplicar qualquer CD de dados. O exemplo a seguir assume que o seu dispositivo de CDROM é o acd0. Substitua pelo dispositivo de CDROM correto no seu sistema. Um c deve ser adicionado ao final do nome do dispositivo para indicar a partição toda, ou, no caso de CDROMs, o disco inteiro.

# dd if=/dev/acd0c of=file.iso bs=2048

Agora que você possui a imagem, você pode gravá-la num CD como descrito anteriormente.

12.5.7. Utilizando CDs de Dados

Agora que você criou um CD de dados padrão, você provavelmente irá querer montar a unidade e ler dados dele. Por padrão, o mount(8) irá assumir que o tipo de sistema de arquivos é o ufs. Se você tentar algo como:

# mount /dev/cd0c /mnt

Você conseguirá a seguinte mensagem``Incorrect super block'', e o disco não será montado. O CDROM não é um sistema de arquivos UFS, portanto, tentar montá-lo com esta configuração ocasionará em falha. Você só precisa indicar ao mount(8) que o sistema de arquivos é do tipo ISO9660, e tudo funcionará. Você faz isso especificando a opção -t cd9660 ao mount(8). Por exemplo, se você quer montar o dispositivo de CDROM /dev/cd0c, sob o /mnt, você deve executar:

# mount -t cd9660 /dev/cd0c /mnt

Note que seu nome de dispositivo (/dev/cd0c neste exemplo) poderá ser diferente, dependendo da interface que seu CDROM utilizar. Também, a opção -t cd9660 apenas executa o mount_cd9660(8). O exemplo acima pode ser reduzido para:

# mount_cd9660 /dev/cd0c /mnt

Você geralmente pode utilizar CDROMs de dados de qualquer fabricante com este método. Entretanto, discos com algumas extensões do ISO 9660 podem ter um comportamente ímpar. Por exemplo, disco com extensão Joliet armazenam todos os nomes de arquivos em caracteres Unicode de dois bytes. O kernel do FreeBSD não entende Unicode (ainda!), então os caracteres que não pertencerem ao idioma Inglês serão mostrados como sinais de interrogação. (Se você estiver rodando o FreeBSD 4.3 ou superior, o driver CD9660 inclui ganchos para carregar uma tabela de conversão Unicode dinamicamente. Módulos para algumas das codificações comuns estão disponíveis no port sysutils/cd9660_unicode.)

Ocasionalmente, você poderá receber um ``Device not configured'' quando tentar montar um CDROM. Isto geralmente significa que o drive de CDROM acha que não há um disco, ou este drive não é visível no barramento. Pode levar alguns segundos para que um drive de CDROM detectar que está com um disco, portanto seja paciente.

Algumas vezes, um CDROM SCSI pode não ser inicializado devido a não haver tempo suficiente para responder durante um reinício do barramento. Se você possui um CDROM SCSI, por favor, adicione a seguinte opção ao seu arquivo de configuração do kernel e e recompile-o.

options SCSI_DELAY=15000

Isto diz para o barramento SCSI pausar durante 15 segundos durante a inicialização, para dar chance de resposta ao seu drive de CDROM durante o reinício do barramento SCSI.

12.5.8. Gravando CDs de Dados em modo Raw

Você pode querer gravar um arquivo diretamente no CD, sem criar um sistema de arquivos ISO 9660. Algumas pessoas fazem isso no propósito de backup. E este modo de gravação é mais rápido:

# burncd -f /dev/acd1c -s 12 data archive.tar.gz fixate

Para poder acessar os dados que serão gravados no CD você deverá ler os dados de um dispositivo raw:

# tar xzvf /dev/acd1c

Você não pode montar este disco como faria com um CDROM normal. Como um CDROM não poderia ser lido sob nenhum outro sistema operacional, excepto o FreeBSD. Se você quer estar apto a montar os CDs, ou a compartilhar os dados com outros sistemas operacionais, você deve usar o sysutils/mkisofs como já citado.

12.5.9. Utilizando o Driver ATAPI/CAM

Este driver permite que dispositivos ATAPI (CD-ROM, CD-RW, DVD-ROM, etc...) possam ser acessados através do sub-sistema SCSI, permitindo o uso de aplicações como o sysutils/cdrdao ou o cdrecord(1).

Para utilizar este driver, você precisará adicionar as seguintes linhas ao seu arquivo de configuração do kernel:

device atapicam
device scbus
device cd
device pass

Você também prexisará adicionar as seguintes linhas:

device ata
device atapicd

Ambas deverão estar presentes.

Então recompile, instale o novo kernel e reinicie seu sistema. Durante o processo de inicialização, seu gravador de CDs deverá retornar algo como:

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

O drive agora pode ser acessado através do nome de dispositivo /dev/cd0, por exemplo, para montar o CDROM em /mnt faça o seguinte:

# mount -t cd9660 /dev/cd0c /mnt

Como usuário root você pode executar o seguinte comando para saber o endereço SCSI do gravador:

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

Temos que o 1,0,0 será o endereço SCSI para utilizar no cdrecord(1) e para outras aplicações SCSI.

Para maior informações sobre ATAPI/CAM e sistema SCSI, visite as páginas de manual do atapicam(4) e do cam(4).

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.