17.5. Criando e Usando Mídia em CD

Contribuído por Mike Meyer.

A mídia em disco compacto (CD) fornece vários recursos que os diferenciam dos discos convencionais. Eles são projetados para que possam ser lidos continuamente sem atrasos para mover a cabeça entre as trilhas. Embora a mídia CD tenha faixas, elas se referem a uma seção de dados a ser lida continuamente e não a uma propriedade física do disco. O sistema de arquivos ISO 9660 foi projetado para lidar com essas diferenças.

A Coleção de Ports do FreeBSD fornece vários utilitários para gravar e duplicar áudio e dados de CDs. Este capítulo demonstra o uso de vários utilitários de linha de comando. Para o software de gravação de CD com um utilitário gráfico, considere instalar os pacotes ou ports sysutils/xcdroast ou sysutils/k3b.

17.5.1. Dispositivos Suportados

Contribuído por Marc Fonvieille.

O kernel GENERIC fornece suporte para SCSI, USB, e leitores e gravadores de CD ATAPI. Se um kernel personalizado for usado, as opções que precisam estar presentes no arquivo de configuração do kernel variam de acordo com o tipo de dispositivo.

Para um gravador SCSI, verifique se essas opções estão presentes:

device scbus	# SCSI bus (required for ATA/SCSI)
device da	# Direct Access (disks)
device pass	# Passthrough device (direct ATA/SCSI access)
device cd	# needed for CD and DVD burners

Para um gravador de USB, verifique se essas opções estão presentes:

device scbus	# SCSI bus (required for ATA/SCSI)
device da	# Direct Access (disks)
device pass	# Passthrough device (direct ATA/SCSI access)
device cd	# needed for CD and DVD burners
device uhci	# provides USB 1.x support
device ohci	# provides USB 1.x support
device ehci	# provides USB 2.0 support
device xhci	# provides USB 3.0 support
device usb	# USB Bus (required)
device umass	# Disks/Mass storage - Requires scbus and da

Para um gravador ATAPI, verifique se essas opções estão presentes:

device ata	# Legacy ATA/SATA controllers
device scbus	# SCSI bus (required for ATA/SCSI)
device pass	# Passthrough device (direct ATA/SCSI access)
device cd	# needed for CD and DVD burners

Nota:

Nas versões do FreeBSD anteriores a 10.x, esta linha também é necessária no arquivo de configuração do kernel se o gravador for um dispositivo ATAPI:

device atapicam

Como alternativa, esse driver pode ser carregado no momento da inicialização adicionando a seguinte linha ao arquivo /boot/loader.conf:

atapicam_load="YES"

Isso exigirá uma reinicialização do sistema, pois esse driver só pode ser carregado no momento da inicialização.

Para verificar se o FreeBSD reconhece o dispositivo, execute o dmesg e procure por uma entrada para o dispositivo. Nos sistemas anteriores a 10.x, o nome do dispositivo na primeira linha da saída será acd0 em vez de cd0.

% dmesg | grep cd
cd0 at ahcich1 bus 0 scbus1 target 0 lun 0
cd0: <HL-DT-ST DVDRAM GU70N LT20> Removable CD-ROM SCSI-0 device
cd0: Serial Number M3OD3S34152
cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)
cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed

17.5.2. Gravando um CD

No FreeBSD, cdrecord pode ser usado para gravar CDs. Este comando é instalado com o pacote ou port sysutils/cdrtools.

Enquanto o cdrecord tem muitas opções, o uso básico é simples. Especifique o nome do arquivo ISO para gravar e, se o sistema tiver vários dispositivos de gravação, especifique o nome do dispositivo a ser usado:

# cdrecord dev=device imagefile.iso

Para determinar o nome do dispositivo do gravador, use -scanbus, que pode produzir resultados como este:

# cdrecord -scanbus
ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling
Using libscg version 'schily-0.9'
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) *

Localize a entrada para o gravador de CD e use os três números separados por vírgulas como o valor para dev. Nesse caso, o dispositivo gravador Yamaha é 1,5,0, portanto, a entrada apropriada para especificar esse dispositivo é dev=1,5,0. Consulte a página de manual do cdrecord para outras formas de especificar este valor e informações sobre como gravar faixas de áudio e controlar a velocidade de gravação.

Como alternativa, execute o seguinte comando para obter o endereço do dispositivo do gravador:

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

Use os valores numéricos para scbus, target e lun. Para este exemplo, 1,0,0 é o nome do dispositivo a ser usado.

17.5.3. Escrevendo Dados em um Sistema de Arquivos ISO

Para produzir um CD de dados, os arquivos de dados que compõem as faixas no CD devem ser preparados antes que possam ser gravados no CD. No FreeBSD, sysutils/cdrtools instala o mkisofs, que pode ser usado para produzir um sistema de arquivos ISO 9660 que é uma imagem de uma árvore de diretórios dentro um sistema de arquivos UNIX®. O uso mais simples é especificar o nome do arquivo ISO para criar e o caminho para os arquivos a serem colocados no sistema de arquivos ISO 9660:

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

Este comando mapeia os nomes dos arquivos no caminho especificado para os nomes que se ajustam às limitações do sistema de arquivos padrão ISO 9660 e excluirá arquivos que não atendem ao padrão para o sistemas de arquivos ISO.

Várias opções estão disponíveis para superar as restrições impostas pelo padrão. Em particular, -R permite que as extensões Rock Ridge comuns aos sistemas UNIX® e -J ativem as extensões Joliet usadas por sistemas Microsoft®.

Para CDs que serão usados apenas em sistemas FreeBSD, -U pode ser usado para desabilitar todas as restrições de nome de arquivo. Quando usado com -R, ele produz uma imagem do sistema de arquivos que é idêntica à árvore FreeBSD especificada, mesmo se violar o padrão ISO 9660.

A última opção de uso geral é -b. Isso é usado para especificar a localização de uma imagem de inicialização para uso na produção de um CD inicializável El Torito. Essa opção usa um argumento que é o caminho para uma imagem de inicialização a partir do topo da árvore que está sendo gravada no CD. Por padrão, o mkisofs cria uma imagem ISO no modo de emulação de disquete e, portanto, espera que a imagem de inicialização tenha exatamente 1200, 1440 ou 2880 KB de tamanho. Alguns gerenciadores de inicialização, como o usado pela mídia de distribuição do FreeBSD, não utilizam o modo de emulação. Nesse caso, -no-emul-boot deve ser usado. Então, se /tmp/myboot possuir um sistema FreeBSD inicializável com a imagem de inicialização em /tmp/myboot/boot/cdboot, este comando produziria /tmp/bootable.iso:

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

A imagem ISO resultante pode ser montada como um disco de memória com:

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

Pode-se então verificar se /mnt e /tmp/myboot são idênticos.

Existem muitas outras opções disponíveis para mkisofs para ajustar seu comportamento. Consulte mkisofs(8) para obter detalhes.

Nota:

É possível copiar um CD de dados para um arquivo de imagem que seja funcionalmente equivalente ao arquivo de imagem criado com mkisofs. Para fazer isso, use dd com o nome do dispositivo como o arquivo de entrada e o nome do ISO para criar como o arquivo de saída:

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

O arquivo de imagem resultante pode ser gravado em CD, conforme descrito em Seção 17.5.2, “Gravando um CD.

17.5.4. Usando CDs de Dados

Uma vez que uma ISO tenha sido gravada em um CD, ela pode ser montada especificando o tipo de sistema de arquivos, o nome do dispositivo que contém o CD e um ponto de montagem existente:

# mount -t cd9660 /dev/cd0 /mnt

Como mount assume que um sistema de arquivos é do tipo ufs, um erro Incorrect super block ocorrerá se -t cd9660 não está incluído ao montar um arquivo de dados CD.

Embora qualquer CD de dados possa ser montado dessa forma, discos com determinadas extensões ISO 9660 podem se comportar de maneira estranha. Por exemplo, os discos Joliet armazenam todos os nomes de arquivos em caracteres Unicode de dois bytes. Se alguns caracteres não ingleses aparecerem como pontos de interrogação, especifique o conjunto de caracteres local com -C. Para mais informações, consulte mount_cd9660(8).

Nota:

Para fazer esta conversão de caracteres com a ajuda de -C, o kernel requer que o módulo cd9660_iconv.ko seja carregado. Isto pode ser feito adicionando esta linha ao arquivo loader.conf:

cd9660_iconv_load="YES"

e reinicializando a máquina, ou carregando diretamente o módulo com kldload .

Ocasionalmente, Device not configured será exibido ao tentar montar um CD de dados. Isso geralmente significa que a unidade de CD não detectou um disco na bandeja ou que a unidade não está visível no barramento. Pode levar alguns segundos para que uma unidade de CD detecte a mídia, por isso, seja paciente.

Às vezes, uma unidade de CD SCSI pode ser perdida porque não teve tempo suficiente para responder à reinicialização do barramento. Para resolver isso, um kernel personalizado pode ser criado, o que aumenta o delay SCSI padrão. Adicione a seguinte opção ao arquivo de configuração do kernel personalizado e reconstrua o kernel usando as instruções em Seção 8.5, “Criando e Instalando um Kernel Customizado”:

options SCSI_DELAY=15000

Isso faz com que o barramento SCSI faça uma pausa de 15 segundos durante a inicialização, para dar à unidade de CD todas as chances possíveis de responder à reinicialização do barramento.

Nota:

É possível gravar um arquivo diretamente no CD, sem criar um sistema de arquivos ISO 9660. Isso é conhecido como gravação de dados brutos em CD e algumas pessoas fazem isso para fins de backup.

Este tipo de disco não pode ser montado como um CD de dados normal. Para recuperar os dados gravados em um CD, os dados devem ser lidos no nó do dispositivo bruto. Por exemplo, este comando irá extrair um arquivo tar compactado localizado no segundo dispositivo de CD para o diretório de trabalho atual:

# tar xzvf /dev/cd1

Para montar um CD de dados, os dados devem ser escritos usando mkisofs.

17.5.5. Duplicando CDs de Áudio

Para duplicar um CD de áudio, extraia os dados de áudio do CD para uma série de arquivos e, em seguida, grave esses arquivos em um CD em branco.

Procedimento 17.1, “Duplicando um CD de Áudio” descreve como duplicar e gravar um CD de áudio. Se a versão do FreeBSD for menor que 10.0 e o dispositivo for ATAPI, o módulo atapicam deve ser carregado primeiro usando as instruções em Seção 17.5.1, “Dispositivos Suportados”.

Procedimento 17.1. Duplicando um CD de Áudio
  1. O pacote ou port sysutils/cdrtools instala o cdda2wav. Este comando pode ser usado para extrair todas as faixas de áudio, com cada faixa gravada em um arquivo WAV separado no diretório de trabalho atual:

    % cdda2wav -vall -B -Owav

    Um nome de dispositivo não precisa ser especificado se houver apenas um dispositivo de CD no sistema. Consulte a página de manual cdda2wav para obter instruções sobre como especificar um dispositivo e aprender mais sobre as outras opções disponíveis para este comando.

  2. Use o cdrecord para escrever os arquivos .wav:

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

    Certifique-se de que 2,0 esteja configurado adequadamente, conforme descrito em Seção 17.5.2, “Gravando um CD.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.