COMO FAZER um Disco de Inicialização Linux
  Tom Fawcett (fawcett@croftj.net


  v3.2, Junho de 1998

  Este documento descreve como definir e construir o seu próprio
  disquete de inicialização e do sistema de arquivos raiz para o Linux.
  Estes discos podem ser usados como disquetes de emergência ou no teste
  de novos componentes do sistema. Caso não se tenha lido o FAQ do Linux
  e outros relacionados, como o Tutorial de Instalação Linux e o Guia de
  Instalação Linux, não é indicada a construção de discos de
  inicialização. Caso se deseje somente criar discos de emergência, veja
  o Anexo ``Discos de inicialização pré-configurados ''.
  ______________________________________________________________________

  Índice geral

















































  1. Prefácio

     1.1 Notas
     1.2 Opiniões e Créditos
     1.3 Política de Distribuição

  2. Introdução

  3. Discos de Inicialização e o Processo de Inicialização do Sistema

     3.1 O Processo de Inicialização
     3.2 Tipos de Discos

  4. Construíndo um Sistema de Arquivos Raiz

     4.1 Visão Geral
     4.2 Criando o Sistema de Arquivos
     4.3 Ocupando o Sistema de Arquivos
     4.4 Módulos
     4.5 Alguns detalhes finais
     4.6 Empacotando

  5. Escolhendo um kernel

  6. Colocando tudo junto: Construindo o(s) disco(s)

     6.1 Transferindo o kernel com o  LILO
     6.2 Transferindo o kernel sem o LILO
     6.3 Configurando o disco em memória
     6.4 Transferindo o sistema de arquivos raiz

  7. Problemas

  8. Diversos

     8.1 Reduzindo o tamanho do sistema de arquivos raiz
     8.2 Sistemas de arquivos raiz não residentes em discos na memória
     8.3 Construindo um disquete de utilitários

  9. Como os profissionais fazem isso

  10. Lista das Perguntas Mais Frequentes (FAQ)

  11. Recursos e Endereços

     11.1 Discos de Inicialização Pré-Configurados
     11.2 Discos de Emergência
     11.3 Programas de Lote de Graham Chapman
     11.4 LILO --- O carregador Linux
     11.5 Perguntas Mais Freqüentes e Como Fazer
     11.6 Uso do Disco em Memória
     11.7 O processo de inicialização do Linux

  12. Códigos de Erros de Inicialização do LILO

  13. Listas de exemplo do conteúdo do disco de inicialização

  14. Listas de exemplo do conteúdo do disco de utilitários



  ______________________________________________________________________




  11..  PPrreeffáácciioo


  NNoottaa:: eessttee ddooccuummeennttoo ppooddee nnããoo eessttaarr aattuuaalliizzaaddoo.. Verifique na página do
  Projeto de Documentação Linux  <http://sunsite.unc.edu/LDP/> se há
  alguma versão mais recente deste documento.

  Apesar  deste  documento  estar  em  formato texto, ele pode ser
  visualizado de maneira muito _m_a_i_s agradável em formato Postscript
  (.ps) ou HTML, em virtude dos comandos de notação tipográfica
  utilizados. Nós sugerimos a utilização de um destes formatos.


  11..11..  NNoottaass


  Graham Chapman (grahamc@zeta.org.au) escreveu a versão original e a
  suportou até a versão 3.1. Tom Fawcett (fawcett@croftj.net) adicionou
  uma grande quantidade de informações do kernel 2.0 e é o mantenedor
  atual da versão 3.2, porém muito da versão original ainda permanece.

  Este documento está voltado para usuários da versão  22..00 ddoo KKeerrnneell ddoo
  LLiinnuuxx oouu ppoosstteerriioorr. Caso se esteja utilizando uma versão anterior
  (1.2.xx ou mais antiga), é aconselhável utilizar versões do COMOFAZER-
  Bootisk arquivadas na Página Pessoal de Graham Chapman
  <http://www.zeta.org.au/~grahamc/linux.html>.

  As informações aqui apresentadas estão voltadas para os usuários da
  plataforma IInntteell, porém muito do aqui descrito aplica-se ainda a
  outros processadores, porém não podemos ser conclusivos a respeito
  disso. Caso alguém tenha essa experiência, por favor nos contacte.




  11..22..  OOppiinniiõõeess ee CCrrééddiittooss

  Quaisquer comentários ou sugestões, positivas ou negativas, sobre o
  conteúdo deste documento são bem-vindas. Fizemos o melhor possível
  para garantir que as informações aqui contidas sejam confiáveis e
  acuradas. Por favor avise-nos caso sejam encontrados erros ou
  omissões.

  Agradecemos às inúmeras pessoas que enviaram as suas sugestões e
  correções. A sua contribuição certamente tornou este documento muito
  melhor, do que se   tivéssemos feito tudo sozinhos.

  Por favor envie comentários, correções e dúvidas ao autor  no
  endereço-eletrônico apresentado mais acima. Não me incomodo em
  responder dúvidas, porém por favor leia primeiramente a seção
  ``Problemas''.




  11..33..  PPoollííttiiccaa ddee DDiissttrriibbuuiiççããoo


  Copyright © 1995,1996,1997,1998 de Tom Fawcett and Graham Chapman.
  Este documento pode ser distribuído sob os termos da Licença do
  Projeto de Documentação Linux  disponível em
  <http://sunsite.unc.edu/LDP/COPYRIGHT.html>.  Por favor contacte os
  autores caso não seja possível obter uma licença.

  Esta é uma documentação livre. É distribuída na expectativa de ser
  útil, porém sem qquuaallqquueerr ggaarraannttiiaa;  mesmo as garantias inerentes de
  ccoommeerrcciiaalliizzaaççããoo ou aaddeeqquuaaççããoo aa uumm pprrooppóóssiittoo ppaarrttiiccuullaarr.




  22..  IInnttrroodduuççããoo


  Discos de inicialização do Linux são úteis em diversas situações, tais
  como:

  ·  Testes de um novo kernel.

  ·  Recuperação de falhas de disco -- qualquer coisa que pode variar
     desde um setor de inicialização à uma quebra de cabeça de disco.

  ·  Consertando um sistema defeituoso. Um pequeno erro como
     superusuário pode tornar o sistema  sem condições de uso, e pode
     ser necessário inicializar o sistema a partir um disquete, para
     consertá-lo.

  ·  Atualizar arquivos críticos do sistema, tais como o libc.so.

  Há várias formas de se obter discos de inicialização (boot):


  ·  Usar um de uma distribuição como Slackware, Red Hat, Conectiva
     Linux, o qual permitirá que ao menos o sistema seja inicializado.

  ·  Usar um pacote  desenvolvido para a criação de discos de
     emergência.

  ·  Aprender o que é necessário para cada tipo de disco operar e
     construir um por conta própria.

  Algumas pessoas escolhem a última opção, construindo os seus próprios
  discos de emergência. Desta forma, na ocorrência de algum problema,
  eles podem saber o que deve ser corrigido. Mais ainda, é uma grande
  maneira de aprender como o Linux funciona.

  Este documento assume alguma familiaridade com os conceitos básicos de
  administração de sistemas Linux. Por exemplo, deve-se  conhecer os
  conceitos de diretórios, sistemas de arquivos e disquetes. Deve-se
  saber ainda utilizar os comandos  mount e tt/df/, bem como o
  significado dos arquivos /etc/passwd efstab e como eles estão
  constituídos, assim como saber que a maioria dos comandos deste COMO
  FAZER devem ser executados como superusuário (root).

  A construção de um disco de inicialização do nada pode ser bem
  complexa. Caso não se tenha lido os conteúdos do FAQ do Linux e
  documentos relacionados, como por exemplo, o  COMO FAZER Instalação
  Linux e o Guia de Instalação Linux, não é aconselhável tentar-se a
  construção dos discos desta forma. Caso se necessite somente de um
  disco de emergência  que funcione, será _m_u_i_t_o  mais simples utilizar
  um pré-existente. Veja o Apêndice ``Discos de Inicialização
  Pré-Configurados'', abaixo, a fim de verificar onde encontrá-los .




  33..  DDiissccooss ddee IInniicciiaalliizzaaççããoo ee oo PPrroocceessssoo ddee IInniicciiaalliizzaaççããoo ddoo SSiisstteemmaa


  Um disco de inicialização é basicamente uma miniatura de um sistema
  completo, ou seja é um sistema Linux contido em um disquete. Ele deve
  executar muitas das funções que o sistema completo permite. Antes de
  tentar construir um, deve-se conhecer os conceitos básicos do processo
  de inicialização do sistema, apresentados a seguir, os quais são
  suficientes para o entendimento do restante deste documento. Alguns
  detalhes e opções foram omitidos por não serem significativos para o
  conteúdo deste documento.


  33..11..  OO PPrroocceessssoo ddee IInniicciiaalliizzaaççããoo

  Todos os sistemas em microcomputadores começam o processo de
  inicialização executando o código existente na ROM  (especificamente
  no BIOS O BIOS tenta então executar este setor. Em muitos discos
  inicializáveis, o setor 0, cilindro 0, pode conter ainda:

  ·  código de um carregador de sistemas, como o LILO, o qual localiza o
     kernel do sistema escolhido, carrega e  executa, de acordo com a
     opção definida.

  ·  o início de um kernel de um sistema operacional, como por exemplo o
     Linux.

  Caso o kernel do Linux  tenha sido copiado fisicamente para um
  disquete, o primeiro setor do disco será o primeiro setor do kernel do
  Linux. O primeiro setor continuará o processo de inicialização,
  carregando o restante do kernel contido no dispositivo.

  Uma vez que o  kernel tenha sido completamente carregado, ele executa
  alguma inicialização básica de dispositivos. Ele tenta carregar e
  montar o ssiisstteemmaa ddee aarrqquuiivvooss rraaiizz

  Em algumas situações de início do sistema, freqüentemente na
  inicialização a partir de disquetes, o sistema de arquivos é montado
  em um ddiissccoo eemm mmeemmóórriiaa ssiisstteemmaa ddee aarrqquuiivvooss ccoommppaaccttaaddooss

  Uma vez que o sistema de arquivos raiz é montado, pode-se visualizar
  uma mensagem similar a:


          VFS:  Raiz montado (sistema de arquivos ext2) somente para leitura.





  ·  Execução do comando  fsck em todos os discos

  ·  Carga dos módulos

  ·  Inicialização da área de troca

  ·  Inicialização da rede

  ·  Montagem dos discos descritos em fstab.

  Este programa normalmente aciona diversos outros, tornando o processo
  de inicialização modular. Por exemplo, na estrutura comum do SysVinit,
  o diretório /etc/rc.d/ contém uma estrutura complexa de subdiretórios,
  cujos arquivos definem como iniciar e desligar a maior parte dos
  serviços do sistema. De qualquer forma, um programa sysinit em um
  disco de inicialização é normalmente muito simples.

  Quando o programa sysinit termina, o controle retorna ao  init,  o
  qual entrará no  _n_í_v_e_l _d_e _e_x_e_c_u_ç_ã_o _p_a_d_r_ã_o, especificado em  inittab,
  através da palavra chave initdefault.  A linha de nível de execução
  normalmente especifica um programa como getty,  o qual é responsável
  pelo gerenciamento das comunicações através do console e dos ttys. É o
  programa  getty que apresenta a expressão familiar ``login:''. O
  programa getty por sua vez, chama o programa login  para administrar o
  processo de validação e iniciar  as sessões dos usuários.


  33..22..  TTiippooss ddee DDiissccooss

  Após a revisão do processo básico de inicialização, podemos agora
  definir diversos tipos de discos envolvidos. Podemos classificar os
  discos em quatro tipos. A discussão aqui contida e através de todo o
  documento do uso do termo disco refere-se a disquetes, a menos que
  seja especificado o contrário, observando-se que na verdade, o
  conceito pode ser aplicado sem distinção a discos rígidos.



     iinniicciiaalliizzaaççããoo
        Um disco contendo um kernel do sistema que pode ser
        inicializado. O disco pode ser usado  para iniciar o kernel do
        sistema, o qual pode carregar o sistema de arquivos raiz a
        partir de outro disco. O kernel em um disco de inicialização
        pode receber informações sobre a localização do sistema de
        arquivos raiz.

        Freqüentemente um disco de inicialização carrega o sistema de
        arquivos raiz a partir de outro disquete, porém é possível
        configurar a carga a partir de um sistema de arquivos raiz
        residente em um disco rígido, por exemplo. Isso é comumente
        feito quando se está testando um novo kernel (na verdade ``make
        zdisk'' criará um disco de inicialização automaticamente a
        partir dos fontes do kernel).


     rraaiizz
        Um disco com um sistema de arquivos raiz contém os arquivos
        necessários para a execução de um sistema Linux. Tal disco pode
        não conter necessariamente nem o kernel e tão pouco o carregador
        de sistemas disco raiz

        Um disco raiz pode ser usado para executar o sistema
        independentemente de outros discos, uma vez que o kernel do
        sistema tenha sido inicializado. Normalmente o disco raiz é
        automaticamente copiado para um disco em memória, o que torna o
        acesso às suas informações muito mais rápido e libera a unidade
        de disquetes para outras atividades.


     iinniicciiaalliizzaaççããoo//rraaiizz
        Um disco pode conter  tanto o kernel


     uuttiilliittáárriioo
        É um disco que contém um sistema de arquivos, mas que não será
        montado como um sistema raiz. É um disco de dados adicionais, e
        pode ser utilizado para a disponibilização de utilitários, caso
        o disco raiz não tenha mais espaço disponível.


  Em geral, quando falamos de "construir um disco de inicialização"
  significa a criação das funções de carga do kernel e do sistema de
  arquivos raiz. Elas podem estar juntas (em um único disco de
  inicialização e raiz) ou separados (disco de inicialização e disco
  raiz). A abordagem mais flexível para discos de emergência é
  provavelmente usar disquetes separados, e um ou mais disquetes de
  utilitários para gerenciar o que não foi possível colocar nos
  primeiros.
  44..  CCoonnssttrruuíínnddoo uumm SSiisstteemmaa ddee AArrqquuiivvooss RRaaiizz


  Criar um sistema de arquivos raiz envolve a seleção dos arquivos
  necessários para que o sistema possa ser executado. Nesta seção
  descreveremos como construir um _s_i_s_t_e_m_a _d_e _a_r_q_u_i_v_o_s _r_a_i_z _c_o_m_p_a_c_t_a_d_o


  44..11..  VViissããoo GGeerraall

  Um sistema de arquivos raiz deve conter todo o necessário para
  suportar um sistema Linux completo. Para tanto, o disco deve incluir
  os requisitos mínimos de um sistema Linux:



  ·  A estrutura básica do sistema de arquivos

  ·  Conjunto mínimo de diretórios: /dev, /proc, /bin, /etc, /lib, /usr,
     /tmp

  ·  Conjunto básico de utilitários: sh, ls, cp, mv, etc.

  ·  Conjunto mínimo de arquivos de configuração: rc, inittab, fstab,
     etc...

  ·  Dispositivos: /dev/hd*, /dev/tty*, /dev/fd0, etc...

  ·  Biblioteca que disponibilize as funções básicas necessárias aos
     utilitário

  Evidentemente, qualquer sistema somente torna-se útil quando permite a
  execução de algum programa, e um disquete raiz somente é útil quando
  permite que sejam executadas funções como:


  ·  Verificar um sistema de arquivos em outro dispositivo, por exemplo
     para checar o sistema de arquivos raiz em um disco rígido será
     necessário carregar o sistema operacional a partir de outro
     dispositivo, o que pode ser feito com um sistema de arquivos raiz
     em disquete. Pode-se então executar fsck no dispositivo original
     que contém o sistema raiz enquanto ele não estiver montado.

  ·  Restauração total ou parcial do dispositivo raiz original a partir
     de uma cópia de segurança usando arquivamento ou utilitários de
     compactação, tais como  cpio, tar, gzip e ftape.

  Descreveremos como construir um sistema de arquivos  _c_o_m_p_a_c_t_a_d_o, assim
  chamado  porque é arquivado compactado no disco e é descompactado do
  disco para memória.  Um sistema de arquivos compactado pode conter
  diversos arquivos (aproximadamente 2 megabytes) em um disquete padrão
  1.440 Kb. Como o arquivo é muito maior que o disquete, não se pode
  construí-lo diretamente no dispositivo. Deve-se construí-lo em outro
  local qualquer, compactá-lo, e então copiá-lo para o disquete.



  44..22..  CCrriiaannddoo oo SSiisstteemmaa ddee AArrqquuiivvooss


  Para construir-se um sistema de arquivos raiz, deve-se ter um
  dispositivo extra, grande o suficiente para conter todos os arquivos
  antes da compactação. Deve-se ter à mão um dispositivo capaz de conter
  pelo menos 4 Mb. Há diversas opções:


  ·  Usar um ddiissccoo eemm mmeemmóórriiaa


             RAMDISK_SIZE = nnn




  Verifique a existência de um dispositivo como por exemplo /dev/ram0,
  /dev/ram ou /dev/ramdisk. Caso não exista, crie  /dev/ram0 com  mknod
  (maior numero 1, menor 0).

  ·  Caso se tenha uma partição de disco rígido grande o suficiente
     (diversos megabytes) disponível, esta certamente será uma boa
     solução. Caso se tenha memória RAM disponível, pode-se desligar as
     funções de troca e utilizar a partição de troca (swap).

  ·  Usar uma ssiimmuullaaccaaoo ddee ddiissppoossiittiivvoo

     PPaarraa ffaazzeerr uussoo ddaa ssiimmuullaaççããoo ddee ddiissppoossiittiivvooss,, ddeevvee--ssee uuttiilliizzaarr ooss
     pprrooggrraammaass mount e unmount especialmente alterados para isso. Eles
     podem ser encontrados no diretório:
     ftp://ftp.win.tue.nl/pub/linux/util/mount/


     Caso não se tenha uma simulação de dispositivos  (/dev/loop0,
     /dev/loop1, etc...) no sistema, pode-se criar uma através do
     comando ``mknod /dev/loop0 b 7 0''.  Uma vez instalados os binários
     especiais de mount e umount , deve-se criar um arquivo temporário
     em um disco rígido com capacidade suficiente (por exemplo,
     /tmp/fsfile). Pode-se, por exemplo, utilizar o comando:


       dd if=/dev/zero of=/tmp/fsfile bs=1k count=_n_n_n


  para criar um arquivo com  _n_n_n blocos.

  Deve-se utilizar então o nome do arquivo no lugar do DISPOSITIVO a
  seguir. Ao utilizar o comando mount deve-se incluir a opção``-o loop''
  para definir uma simulação de dispositivo.

          mount -o loop -t ext2 /tmp/fsfile /mnt



  irá montar  /tmp/fsfile (através de uma simulação de dispositivo) no
  ponto de montagem  /mnt.  Através do comando df pode-se obter a
  confirmação disso.


  Após a escolha de alguma dessas opções, deve-se preparar o DISPOSITIVO
  com o seguinte comando:


          dd if=/dev/zero of=DISPOSITIVO bs=1k count=3000



  Este comando inicializa com zeros o DISPOSITIVO. Este passo é
  importante pois o sistema de arquivos será compactado posteriormente e
  as partes não utilizadas e preenchidas com zeros, atingirão o máximo
  de compactação.



  O comando necessário será algo similar a:

       mke2fs -m 0 -i 2000 DISPOSITIVO


  (Caso se esteja usando uma simulação de dispositivos, o arquivo em
  disco que se esteja utilizando deve ser informado no lugar do
  DISPOSITIVO.

  O comando mke2fs  automaticamente detectará o espaço disponível e fará
  a configuração automaticamente. O parâmetro -m 0  evita a alocação de
  espaço para o raiz, e adicionalmente provê mais espaço útil em disco.

  A seguir deve-se montar o dispositivo:


          mount -t ext2 DISPOSITIVO /mnt



  (Deve-se criar um ponto de montagem mnt caso ele ainda não exista).
  Nas próximas seções, todos os nomes de diretórios são assumidos como
  relativos a  /mnt.


  44..33..  OOccuuppaannddoo oo SSiisstteemmaa ddee AArrqquuiivvooss


  Segue um razoável número mínimo de diretórios no sistema de arquivos
  raiz:


  ·  /dev  Dispositivos, necessários para as operações de
     Leitura/Gravação

  ·  /proc Diretório temporário requerido pelo sistema de arquivos proc

  ·  /etc  Arquivos de configuração do sistema

  ·  /sbin Binários fundamentais do sistema

  ·  /bin  Binários básicos e considerados parte do sistema

  ·  /lib  Bibliotecas compartilhadas que provêem suporte à execução dos
     binários

  ·  /mnt  Um ponto de montagem para manutenção em outros discos

  ·  /usr  Utilitários adicionais e aplicações

  (A estrutura de diretórios aqui apresentada é somente para uso no
  disquete raiz. Sistemas Linux têm uma política mais complexa e
  disciplinada, chamada Padrões de Sistemas de Arquivos, para determinar
  quais arquivos devem estar presentes e aonde.)


  Três destes diretórios devem estar vazios no sistema de arquivos raiz,
  devendo somente serem criados com o comando  mkdir.  O diretório /proc
  é basicamente um ponto de referência onde o sistema de arquivos proc
  está localizado. Os diretórios  /mnt e /usr são somente pontos de
  montagem para uso após a inicialização do sistema e a carga do sistema
  de arquivos raiz. Mais uma vez, estes diretórios somente precisam ser
  criados.

  Os quatro diretórios remanescentes estão descritos nas seções a
  seguir:
  /dev



  Um diretório /dev  contendo um arquivo especial com todos os
  dispositivos a serem utilizados pelo sistema é fundamental para o
  Linux. O diretório em si é um diretório comum e pode ser criado com o
  comando  mkdir  da forma usual. Os arquivos especiais de dispositivos
  devem ser criados de uma forma especial, utilizando-se o comando
  mknod.

  Há um atalho, podendo-se copiar o conteúdo do diretório /dev e
  apagando-se o que for desnecessário. A única exigência é que a cópia
  seja efetuada com a utilização do parâmetro -R. Isso copiará o
  diretório sem copiar o conteúdo dos arquivos.  _E_s_t_e_j_a _s_e_g_u_r_o _d_e
  _u_t_i_l_i_z_a_r _u_m _R _m_a_i_ú_s_c_u_l_o. Caso seja utilizado  r em formato minúsculo,
  provavelmente será copiado o conteúdo completo de todo o disco rígido
  -- ou no mínimo, o que couber no disquete! De qualquer forma, é
  importante estar atento ao comando:


          cp -dpR /dev /mnt




  Assumindo-se que o disquete esteja montado em /mnt.  A opção dp
  garante que ligações simbólicas serão copiadas como ligações, ao invés
  de usar um arquivo de destino, e que os atributos originais do arquivo
  serão preservados, assim como as informações sobre os donos.

  Alternativamente, pode-se usar o programa cpio  com a opção -p, uma
  vez que o cpio  lida com arquivos especiais corretamente, e não
  tentará copiar o seu conteúdo. Pode-se por exemplo, utilizar o
  seguinte comando:



       cd /dev
       find . -print | cpio -pmd /mnt/dev




  o qual irá copiar todos os arquivos especiais de  /dev para /mnt/dev.
  Na verdade, irá copiar todos os arquivos da árvore de diretórios
  iniciada em /dev,  e criará todos os subdiretórios necessários na
  árvore de diretórios de destino.

  Caso se deseje fazer da forma mais difícil, deve-se usar  ls -l  para
  mostrar os números maior e menor dos dispositivos desejados, e
  criá-los  no disquete através do comando  mknod.


  Uma vez que os dispositivos estejam copiados, é aconselhável verificar
  se todos os arquivos de dispositivos necessários foram copiados no
  disco de emergência. Por exemplo, o ftape  é utilizado por unidades de
  fitas, sendo necessário copiar todos eles, caso se pretenda acessar um
  dispositivo desse tipo a partir do disco de inicialização.

  Note que um inode é necessário para cada tipo de arquivo especial de
  dispositivo, e

  _D_e_v_e_-_s_e _n_e_c_e_s_s_a_r_i_a_m_e_n_t_e _t_e_r _o_s _s_e_g_u_i_n_t_e_s _a_r_q_u_i_v_o_s _n_e_s_t_e _d_i_r_e_t_ó_r_i_o_:
  console, kmem, mem, null, ram, tty1.

  /etc


  Este diretório deve conter uma série de arquivos de configuração. Na
  maioria dos sistemas este pode estar dividido em três grupos:



  1. Sempre requeridos, _p_o_r _e_x_e_m_p_l_o rc, fstab, passwd

  2. Podem ser requeridos, mas não há como assegurar

  3. Arquivos desnecessários

  Arquivos que não são essenciais podem ser identificados através do
  comando:



               ls -ltru




  Este comando gera uma lista em ordem inversa de último acesso,
  dependendo de que arquivos não são acessados ou utilizados e que,
  podem não estar presentes no disquete raiz.

  Nos nossos disquetes raiz, temos um número de arquivos de configuração
  inferior a 15. Isso reduz o trabalho de lidar com um conjunto de três
  tipos de arquivos.


  1. Os arquivos que devem ser configurados para um  sistema:


     a. rc.d/* início do sistema e definição dos programas de cada nível
        de execução

     b. fstab lista dos sistemas de arquivos que devem ser montados

     c. inittab parâmetros para o processo init , o primeiro que é
        executado em tempo de inicialização do sistema.


  2. Estes devem ser customizados para a inicialização de um sistema:

     a. passwd lista de usuários, diretórios pessoais, etc...

     b. group grupos de usuários

     c. shadow senha dos usuários. Eventualmente pode não existir.


     Caso a segurança seja um item importante do sistema específico,
     passwd  e shadow  devem ser  suprimidos, a fim de evitar a cópia de
     senhas de usuários para fora do sistema, e quando o sistema for
     inicializado através de disquetes, acessos indesejados serão
     rejeitados. De qualquer forma, há uma razão para  _n_ã_o suprimir
     passwd e  group. O tar (e provavelmente outros programas de
     arquivamento) armazenam o usuário e o grupo junto com os dados dos
     arquivos. Caso estes arquivos sejam restaurados no disco rígido a
     partir de uma fita, os arquivos serão restaurados com seus nomes
     originais. Caso os nomes dos donos e grupos não existam em
     passwd/group  durante a restauração,  as identificações de usuários
     e grupos (UID e GID) não estarão corretas.
     Esteja certo de que o arquivo passwd contém ao menos o superusuário
     (root).  Caso se pretenda utilizar outros usuários para acessar o
     sistema, deve-se estar seguro da existência de seus diretórios
     pessoais e interpretadores de comando (shell).


  3. Os demais: verificaremos mais adiante as informações sobre este
     tópico.

  Além disso, deve-se somente configurar dois arquivos, e o que eles
  devem conter é surpreendentemente pequeno.

  ·  rc deve conter

             #!/bin/sh
             /bin/mount -av
             /bin/hostname Conectiva



  Deve-se estar seguro de que os diretórios estão corretos. A execução
  de hostname  não é obrigatória, somente dá um melhor acabamento ao
  trabalho.

  ·  fstab deve conter, no mínimo:


             /dev/ram0       /               ext2    defaults
             /dev/fd0        /               ext2    defaults
             /proc           /proc           proc    defaults



  Pode-se copiar as entradas de um arquivo  fstab, já existente, mas não
  se deve montar automaticamente qualquer partição do disco rígido;
  usando-se então o parâmetro noauto, pois o disco rígido pode estar
  danificado ou sem condições de uso no momento da inicialização do
  sistema.


  O inittab deve ser alterado, de outra forma a linha  sysinit executará
  o  rc ou qualquer outro programa básico de inicialização que seja
  indicado. Ainda para assegurar-se de que usuários em portas seriais
  não poderão acessar o sistema, pode-se comentar todas as entradas em
  getty que incluam  dispositivos ttys ou ttyS  ao final da linha. Deve-
  se deixar as portas tty para poder-se acessar o sistema a partir do
  console.

  Um arquivo inittab mínimo contém:

          id:2:initdefault:
          si::sysinit:/etc/rc
          1:2345:respawn:/sbin/getty 9600 tty1
          2:23:respawn:/sbin/getty 9600 tty2



  O arquivo inittab define o que o sistema executará nos vários estados,
  inclusive no seu início, em modo multiusuário, etc... Um ponto no qual
  deve-se ter muito cuidado é o de verificar se todos os comandos
  informados em inittab referem-se a programas presentes e se o
  diretório está corretamente indicado. Caso se coloque no disco de
  emergência os arquivos de comandos apresentados  na Seção ``Listas de
  exemplo do conteúdo do disco de inicialização''  como um guia, e após
  se copie o  inittab  para o disco sem uma verificação cuidadosa,
  provavelmente ele falhará, e o problema terá origem na ausência de
  arquivos ou indicações erradas de diretórios.

  Note que alguns comandos não podem ser movidos para qualquer outro
  lugar, porque têm a sua localização dentro de seu código. Por exemplo
  em nosso sistema, o /etc/shutdown tem a sua localização definida no
  fonte do comando /etc/reboot. Caso reboot seja movido para
  /bin/reboot, e após seja executado o comando shutdown, ele falhará,
  porque o arquivo reboot não pode ser localizado.


  Para todo o restante, deve-se simplesmente copiar os arquivos texto no
  diretório /etc, mais os executáveis do mesmo diretório que não possam
  ser definidos como desnecessários. Como um guia, pode-se consultar os
  exemplos na Seção ``Listas de exemplo do conteúdo do disco de
  inicialização''. Provavelmente será suficiente copiar somente aqueles
  arquivos, porém sistemas podem ser muito diferentes, então não se pode
  estar seguro de que a lista apresentada seja suficiente. O único
  método de estar seguro é iniciar o sistema com inittab e verificar o
  que é solicitado.

  Muitos sistemas utilizam um diretório /etc/rc.d/ contendo roteiros do
  interpretador de comandos de diferentes níveis de execução. O mínimo é
  um simples programa rc, mas pode ser mais simples copiar o inittab e o
  diretório /etc/rc.d de um sistema já existente, e suprimir os roteiros
  no diretório rc.d para remover os processamentos não relevantes do
  ambiente de sistema em disquete.

  /bin e /sbin


  O diretório /bin  é um lugar adequado para utilitários extras
  necessários à execução de atividades básicas. Utilitários como ls, mv,
  cat e dd.Veja o Apêndice ``Listagem de exemplo de conteúdo do disco de
  inicialização'' para um exemplo da lista de arquivos que podem estar
  presentes nos diretórios /bin e /sbin. Ela não inclui nenhum
  utilitário requerido para restaurar cópias de segurança, tais como
  cpio, tar e gzip. Isso porque estes programas foram colocados em um
  disquete de utilitários em separado, visando economizar espaço no
  disquete de inicialização e raiz. Uma vez que o disquete de
  inicialização tenha sido carregado, ele é copiado para o disco em
  memória, deixando a unidade de disquetes livre para montar outro
  disquete, o disquete de utilitários. Normalmente montamos esse
  disquete como /usr.

  A criação de um disquete de utilitários

  _E_s_t_e_j_a _s_e_g_u_r_o _d_e _i_n_c_l_u_i_r _o_s _s_e_g_u_i_n_t_e_s _p_r_o_g_r_a_m_a_s_: init, getty ou
  equivalente, login, mount, algum interpretador que possa executar os
  programas rc, e uma ligação de sh para o interpretador de comandos.


  /lib


  No diretório /lib deve-se colocar as bibliotecas compartilhadas e seus
  carregadores. Caso as bibliotecas necessárias não sejam encontradas no
  diretório /lib, o sistema não poderá ser iniciado. Com um pouco de
  sorte pode-se receber uma mensagem de erro dizendo a razão.

  Praticamente todos os programas requerem no mínimo a biblioteca libc,
  libc.so._N, onde _N é o número da versão corrente. Ao verificar o
  diretório /lib, libc.so.5 é normalmente uma ligação simbólica para um
  arquivo com o número completo da versão.



  % ls -l /lib/libc.so*
  lrwxrwxrwx  1 root root      14 Nov  1 20:34 /lib/libc.so.5 -> libc.so.5.4.33*
  -rwxr-xr-x  1 root root  573176 Jun 12 02:05 /lib/libc.so.5.4.33*




  Neste caso, tem-se disponível o arquivo libc.so.5.4.33. Para encontrar
  outras bibliotecas deve-se verificar todos os binários necessários e
  verficar as suas dependências com o comando ldd . Por exemplo:


          % ldd /sbin/mke2fs
                  libext2fs.so.2 => /lib/libext2fs.so.2
                  libcom_err.so.2 => /lib/libcom_err.so.2
                  libuuid.so.1 => /lib/libuuid.so.1
                  libc.so.5 => /lib/libc.so.5



  O arquivo apresentado na coluna da direita é necessário, tendo-se em
  mente que as bibliotecas listadas podem ser ligações simbólicas.

  Em  /lib deve-se ainda incluir um carregador de bibliotecas.  ou ld-
  linux.so (para bibliotecas ELF).


  % file /lib/libc.so.5.4.33 /lib/libc.so.4.7.2
    /lib/libc.so.4.7.2: Linux/i386 demand-paged executable (QMAGIC), stripped
    /lib/libc.so.5.4.33: ELF 32-bit LSB shared object, Intel 386, version 1, stripped



  QMAGIC indica que 4.7.2 é para bibliotecas a.out, e ELF indica que
  5.4.33 é para ELF.

  Deve-se então copiar o(s) carregador(es) necessário(s) para o sistema
  de arquivos raiz em construção. Bibliotecas e carregadores devem ser
  checados _c_u_i_d_a_d_o_s_a_m_e_n_t_e com o binários incluídos. Caso o kernel não
  possa carregar a biblioteca necessária, normalmente haverá um
  travamento sem mensagens de erro.


  44..44..  MMóódduullooss

  Caso se tenha um kernel modular, deve-se considerar quais módulos
  devem ser carregados a partir do disco de inicialização após o início
  do sistema. Pode-se incluir os módulos ftape e zftape caso cópias de
  segurança tenham sido feitas em um fita, módulos para dispositivos
  SCSI caso eles estejam presentes, e módulos para suporte a PPP ou SLIP
  caso se queira acesso a rede em uma emergência.

  Estes módulos podem ser colocados em /lib/modules. Deve-se ainda
  incluir  insmod, rmmod e lsmod.

  Caso se deseje carregar os módulos automaticamente, pode-se incluir
  ainda modprobe, depmod e swapout.  E caso se use o kerneld, deve-se
  incluir ainda o  /etc/conf.modules.

  A principal vantagem de utilizar módulos reside no fato de poder mover
  módulos não essenciais para um disco de utilitários e carregá-los
  quando necessário, usando menos espaço no disco raiz. Porém, caso seja
  necessário lidar com muitos dispositivos diferentes, uma abordagem
  mais adequada pode  residir em construir um único kernel com diversos
  módulos integrados.

  _N_o_t_e _q_u_e _p_a_r_a _s_e _t_e_r _u_m _s_i_s_t_e_m_a _d_e _a_r_q_u_i_v_o_s _e_x_t_2 _c_o_m_p_a_c_t_a_d_o_, _é
  _o_b_r_i_g_a_t_ó_r_i_a _a _e_x_i_s_t_ê_n_c_i_a _d_e _s_u_p_o_r_t_e _a _d_i_s_c_o _e_m _m_e_m_ó_r_i_a _e  _s_i_s_t_e_m_a_s _d_e
  _a_r_q_u_i_v_o_s _e_x_t_2. Estes não podem ser disponibilizados como módulos.



  44..55..  AAllgguunnss ddeettaallhheess ffiinnaaiiss


  Alguns programas de sistema, como o  login, apresentam mensagem de
  advertência caso o arquivo /var/run/utmp e o diretório  /var/log não
  existam.


          mkdir -p /mnt/var/{log,run}
          touch /mnt/var/run/utmp



  Finalmente, após ter-se configurado todas as bibliotecas necessárias,
  deve-se executar o ldconfig  para gerar novamente o  /etc/ld.so.cache
  no sistema de arquivos raiz. O cache diz ao carregador onde encontrar
  as bibliotecas. Para reconstruir  o ld.so.cache, execute os seguintes
  comandos:


          chdir /mnt; chroot /mnt /sbin/ldconfig



  O comando chroot  é necessário porque  ldconfig  sempre gera o cache
  para o sistema de arquivos raiz.


  44..66..  EEmmppaaccoottaannddoo


  Uma vez concluída a construção do sistema de arquivos raiz, ele deve
  ser desmontado, copiado para um arquivo e compactado:


          umount /mnt
          dd if=DISPOSITIVO bs=1k | gzip -v9 > saraiz.gz



  Isso pode levar diversos minutos. Ao finalizar estará disponível um
  arquivo saraiz.gz  que é o sistema de arquivos raiz compactado. Deve-
  se verificar se o arquivo cabe em um disquete. Caso não caiba, deve-se
  retornar aos passos anteriores e eliminar alguns arquivos. A Seção
  ``Reduzindo o tamanho de um sistema de arquivos raiz'' fornece algumas
  dicas sobre a redução de tamanho do sistema de arquivos raiz.



  55..  EEssccoollhheennddoo uumm kkeerrnneell


  Neste ponto tem-se disponível um sistema de arquivos raiz compactado.
  O próximo passo é construir um kernel ou selecionar um kernel. Em
  muitos casos é possível copiar o kernel atual e inicializar o sistema
  a partir do disquete. Porém em muitos casos poderá ser necessário
  construir um em separado.

  Uma das razões é o tamanho. Caso se esteja construindo um único
  disquete de inicialização e raiz, o kernel será um dos maiores
  arquivos no disquete e será necessário reduzí-lo o máximo possível.
  Caso se esteja construindo dois discos (um de inicialização e um
  raiz), isso não será problema pois o kernel irá em um disquete
  separado.

  Para reduzir seu tamanho, deve-se construir um kernel com o mínimo de
  facilidades necessárias ao suporte do sistema desejado. Isso
  significa, deixar de lado tudo que não seja absolutamente necessário.
  Suporte a rede é um dos prováveis candidatos, assim como suporte a
  unidades de disco e outros dispositivos desnecessários durante o
  início do sistema. Conforme descrito anteriormente, o kernel  _d_e_v_e ter
  suporte a disco em memória e ext2 .

  Após incluir somente o mínimo necessário de facilidades no kernel,
  deve-se verificar o que deve retornar. Provavelmente um dos usos mais
  comuns a um disquete de inicialização e raiz é a restauração de
  sistemas de arquivos raiz com problemas, e para que isso seja possível
  é necessário suporte no kernel do sistema. Por exemplo, caso as cópias
  de segurança tenham sido efetuadas em fita, utilizando Ftape para
  acessar uma unidade de fita,  então será obrigatória a presença de
  suporte a dispositivos de fitas para efetuar uma restauração. Caso não
  esteja presente, poderá ser necessário reinstalar o Linux, copiar e
  reinstalar ftape, e então tentar  ler as cópias de segurança.

  O ponto aqui é, qualquer suporte a leitura e gravação que seja
  adicionado ao kernel para suportar cópias de segurança, deve também
  ser adicionado ao kernel de inicialização do sistema em disquete de
  emergência.


  O procedimento para construir um kernel é descrito na documentação que
  o acompanha. É relativamente simples, podendo-se verificar o conteúdo
  de  /usr/src/linux.  Note que caso se tenha problemas construindo um
  novo kernel, então provavelmente não se deve tentar construir um disco
  de inicialização. Deve-se lembrar de compactar o kernel  através do
  comando ``make zImage''.


  66..  CCoollooccaannddoo ttuuddoo jjuunnttoo:: CCoonnssttrruuiinnddoo oo((ss)) ddiissccoo((ss))


  Neste ponto, tem-se um kernel e um sistema de arquivos raiz. Caso se
  esteja construindo um único disco de inicialização e raiz, deve-se
  verificar o seu tamanho e estar seguro de que eles caberão em um único
  disco. Caso se esteja construindo dois discos, deve-se verificar se o
  sistema de arquivos cabe em um único disquete.

  Deve-se decidir pelo uso ou não do LILO no disquete de inicialização
  do kernel. A alternativa será copiar o kernel diretamente no disquete
  e iniciar o sistema sem o LILO.  A vantagem de utilizar o LILO reside
  na possibilidade de passagens de parâmetros para o kernel, o que pode
  ser necessário para inicializar algum equipamento (deve-se verificar o
  conteúdo do arquivo /etc/lilo.conf.  Caso exista alguma linha do tipo
  ``append=...'', provavelmente esta facilidade será necessária). A
  desvantagem de usar o LILO é que a construção do disco de
  inicialização torna-se mais complexa e  mais espaço é necessário.
  Deve-se construir um pequeno sistema de arquivos em separado, o qual
  nós denominamos ssiisstteemmaa ddee aarrqquuiivvooss ddoo kkeerrnneell, para onde se pode
  transferir o kernel e algumas outras coisas necessárias para o LILO.


  Caso se vá utilizar o LILO, siga adiante, caso contrário pode-se ir
  diretamente para a seção  ``Transferindo o kernel sem o LILO''.



  66..11..  TTrraannssffeerriinnddoo oo kkeerrnneell ccoomm oo  LLIILLOO


  O primeiro item que deve ser criado é um pequeno arquivo de
  configuração do LILO. Ele deve ser similar ao seguinte:


  ______________________________________________________________________
          boot      =/dev/fd0
          install   =/boot/boot.b
          map       =/boot/map
          read-write
          backup    =/dev/null
          compact
          image     = KERNEL
          label     = Disquete_Inic
          root      =/dev/fd0
  ______________________________________________________________________



  Para obter detalhes destes parâmetros, por favor verifique a
  documentação de usuário do LILO. Pode ser desejável ainda adicionar a
  linha append=...  copiada do arquivo /etc/lilo.conf existente em
  disco.

  Deve-se salvar o arquivo como  bdlilo.conf e a seguir criar um pequeno
  sistema de arquivos, o qual será denominado


  Inicialmente, deve-se verificar o tamanho que o sistema de arquivos
  terá. Verifique o tamanho do kernel em blocos (o tamanho é mostrado
  através do comando ``ls -l KERNEL''  dividido por 1024 e arredondado
  para cima) e acrescido de 50, referentes ao espaço necessário aos
  inodes e outros arquivos. Pode-se calcular o número exato ou
  simplesmente utilizar 50. Caso se esteja criando um conjunto com dois
  disquetes, pode-se superestimar o espaço usado pelo kernel.
  Denominaremos este número de NÚCLEO_BLOCOS.

  Deve-se colocar um disquete no dispositivo (para simplificar
  assumiremos que será em  /dev/fd0) e após criar um sistema de arquivos
  tipo ext2 para o kernel:


          mke2fs -i 8192 -m 0 /dev/fd0 NÚCLEO_BLOCOS




  O parâmetro ``-i 8192'' especifica que desejamos um inode para cada
  8192 bytes. Após, deve-se montar o sistema de arquivos, remover o
  diretório lost+found e criar os diretórios dev e boot para o  LILO:


          mount /dev/fd0 /mnt
          rm -rf /mnt/lost+found
          mkdir /mnt/{boot,dev}



  Após, deve-se criar os dispositivos /dev/null e /dev/fd0. Ao invés de
  procurar pelos números dos dispositivos, pode-se simplesmente copiá-lo
  do disco rígido utilizando-se -R:



          cp -R /dev/{null,fd0} /mnt/dev



  O LILO necessita de uma cópia de seu  carregador de inicialização,
  boot.b,  o qual pode ser encontrado no disco rígido, normalmente no
  diretório  /boot .


          cp /boot/boot.b /mnt/boot



  Finalmente, deve-se copiar os arquivos de configuração do LILO criado
  conforme a seção anterior, assim como o kernel. Ambos devem estar
  presentes no diretório raiz:


          cp bdlilo.conf KERNEL /mnt



  Todo o necessário para que o LILO possa ser executado está presente no
  sistema de arquivos do kernel. Deve-se então executar o   LILO com o
  parâmetro -r  para instalar o carregador de inicialização :


          lilo -v -C bdlilo.conf -r /mnt



  O LILO deverá ser executado sem erros, após o qual o sistema de
  arquivos do kernel deve ter a seguinte aparência:


  ______________________________________________________________________
  total 361
    1 -rw-r--r--   1 root     root          176 Jan 10 07:22 bdlilo.conf
    1 drwxr-xr-x   2 root     root         1024 Jan 10 07:23 boot/
    1 drwxr-xr-x   2 root     root         1024 Jan 10 07:22 dev/
  358 -rw-r--r--   1 root     root       362707 Jan 10 07:23 vmlinuz
  boot:
  total 8
    4 -rw-r--r--   1 root     root         3708 Jan 10 07:22 boot.b
    4 -rw-------   1 root     root         3584 Jan 10 07:23 map
  dev:
  total 0
    0 brw-r-----   1 root     root       2,   0 Jan 10 07:22 fd0
    0 crw-r--r--   1 root     root       1,   3 Jan 10 07:22 null
  ______________________________________________________________________



  Não há motivos para preocupação caso os tamanhos de arquivos sejam um
  pouco diferentes.

  Pode-se ir agora para a seção ``Configurando o disco em memória''.


  66..22..  TTrraannssffeerriinnddoo oo kkeerrnneell sseemm oo LLIILLOO


  Caso  _n_ã_o  se esteja utilizando o LILO, o kernel pode ser transferido
  para o disco de inicialização com o comando dd :


          % dd if=KERNEL of=/dev/fd0 bs=1k
          353+1 records in
          353+1 records out



  Neste exemplo, dd  gravou 353 registros completos e 1 parcialmente,
  concluindo-se que o kernel ocupou 354 blocos do disquete.
  Denominaremos este número como NÚCLEO_BLOCOS , o qual será utilizado
  na próxima seção.

  Finalmente, deve-se configurar o disquete como o dispositivo raiz e
  dar-lhe permissões de leitura e gravação:


          rdev /dev/fd0 /dev/fd0
          rdev -R /dev/fd0 0




  Deve-se ter o máximo cuidado ao usar o -R maiúsculo no comando  rdev .



  66..33..  CCoonnffiigguurraannddoo oo ddiissccoo eemm mmeemmóórriiaa


  Dentro da imagem do kernel está a  ppaallaavvrraa ((ddooiiss oouu mmaaiiss bbyytteess)) ddee
  ccoonnffiigguurraaççããoo ddoo ddiissccoo eemm mmeemmóórriiaa que especifica onde o sistema de
  arquivos raiz deve ser encontrado, em conjunto com as suas opções. A
  palavra  é definida em  /usr/src/linux/arch/i386/kernel/setup.c e é
  interpretada da seguinte forma:


  bits  0-10:     deslocamento para início da memória, em blocos de 1024 bytes
  bits 11-13:     sem utilização
  bit     14:     Indicador se o disco em memória deve ser carregado
  bit     15:     Indicador de prompt antes da carga do sistema de arquivos raiz



  Caso o bit 15 esteja configurado, no processo de inicialização será
  solicitada a inserção de um novo disquete na unidade. Isso é
  necessário no caso de conjuntos de dois disquetes de inicialização.

  Há dois casos, dependendo da construção de um único disquete ou de um
  conjunto de dois disquetes (inicialização e raiz).


  1. Caso se esteja construindo um único disco, o sistema de arquivos
     raiz será colocado exatamente após o kernel, sendo o deslocamento
     então igual ao primeiro bloco livre (o que deve ser igual a
     NÚCLEO_BLOCOS).  O bit 14 será configurado com 1 e o bit 15 com
     zero.

  2. Caso se esteja construindo um conjunto de dois disquetes, o sistema
     de arquivos raiz começará no bloco zero e o deslocamento será igual
     a zero. Bit 14 será igual a 1 e o bit 15 também será igual a 1.

     Após calcular cuidadosamente o valor da palavra de disco em
     memória, deve-se configurá-la com  rdev -r.


          rdev -r NÚCLEO_OU_UNIDADE_DE_DISQUETE

  Caso se esteja utilizando o LILO, a unidade de disquetes deve ser
  desmontada agora.


  66..44..  TTrraannssffeerriinnddoo oo ssiisstteemmaa ddee aarrqquuiivvooss rraaiizz


  O último passo é a transferência do sistema de arquivos raiz.


  ·  Caso o sistema de arquivos raiz seja colocado no  _m_e_s_m_o disco que o
     kernel, a transferência deve ser efetuada utilizando-se o comando
     dd com a opção seek,  a qual especifica quantos blocos devem ser
     ignorados até que a gravação tenha início:


             dd if=rootfs.gz of=/dev/fd0 bs=1k seek=BLOCOS_NÚCLEO



  ·  Caso o sistema de arquivos raiz seja colocado em um  _s_e_g_u_n_d_o disco,
     deve-se remover o primeiro disquete e colocar o segundo na unidade,
     transferindo-se o sistema de arquivos raiz:


             dd if=rootfs.gz of=/dev/fd0 bs=1k



  Parabéns, serviço concluído!

  DDEEVVEE--SSEE SSEEMMPPRREE TTEESSTTAARR UUMM DDIISSCCOO DDEE IINNIICCIIAALLIIZZAAÇÇÃÃOO AANNTTEESS DDEE GGUUAARRDDÁÁ--LLOO,,
  PPAARRAA UUSSOO EEMM UUMMAA EEMMEERRGGÊÊNNCCIIAA


  77..  PPrroobblleemmaass



  Na construção de discos de inicialização, as primeiras tentativas
  normalmente gerarão discos com problemas. A abordagem de construção de
  um disco raiz é montar seus componentes a partir de um sistema já
  existente e tentar construir um disquete baseado nele  que viabilize a
  carga do sistema até o momento em que mensagens possam ser
  apresentadas na console. Após esse passo, cabe verificar as mensagens
  e os erros apresentados, e ir corrigindo um a  um, de acordo com o
  apresentado no console. Caso o sistema simplesmente trave, sem maiores
  explicações, encontrar a causa será um pouco mais difícil. Para ter-se
  um sistema que possa chegar ao estágio de enviar mensagens para o
  console, são requeridos diversos componentes, que devem estar
  presentes e corretamente configurados. O procedimento recomendado na
  investigação de um problema onde o sistema não apresente a sua causa é
  o seguinte:

  ·  Verificar se o disco raiz contém realmente os diretórios
     necessários. É comum copiar de níveis errados e ter algo como
     /discoraiz/bin ao invés de  /bin no disquete.

  ·  Verificar se existe /lib/libc.so com a mesma ligação que aparece no
     diretório /lib do disco rígido.

  ·  Verificar se todas as  ligações simbólicas no diretório  /dev
     existem  no sistema de arquivos raiz do disquete, onde aquelas
     ligações devem ser para dispositivos que estão inclusos no disco
     raiz. Em particular, ligações para /dev/console são fundamentais em
     diversos casos.
  ·  Verificar se os arquivos /dev/tty1, /dev/null, /dev/zero, /dev/mem,
     /dev/ram e /dev/kmem foram incluídos.

  ·  Verificar se a configuração do kernel suporta todos os recursos
     requeridos até o momento de acesso ao sistema e se estão
     adicionados ao kernel de forma residente e não como módulos.
     _S_u_p_o_r_t_e _a _d_i_s_c_o_s _e_m _m_e_m_ó_r_i_a _e _e_x_t_2 _d_e_v_e_m _e_s_t_a_r _r_e_s_i_d_e_n_t_e_s.

  ·  Verificar se as configurações do dispositivo  raiz e do kernel e o
     disco em memória estão corretas.

  Alguns deste aspectos gerais são melhor detalhados a seguir:


  1. Esteja certo de que  init foi incluído como  /sbin/init ou
     /bin/init e  que tem permissão de execução.

  2. Execute  ldd init para checar as bibliotecas necessárias à execução
     do init. Normalmente é necessária somente libc.so. Esteja certo de
     que todas as bibliotecas e carregadores foram incluídos.

  3. Esteja certo de utilizar o carregador correto para as bibliotecas
     --- ld.so para a.out ou ld-linux.so para ELF.

  4. Verificar se o arquivo /etc/inittab no sistema de arquivos do
     disquete de inicialização, aponta para o programa getty (ou algum
     programa similar a  getty, como por exemplo agetty, mgetty ou
     getty_ps).

  5. Assim como realizado com  init, execute ldd em getty para verificar
     as dependências, esteja certo de que as bibliotecas necessárias e
     carregadores estão presentes no sistema de arquivos raiz.

  6. Esteja seguro de ter incluído um shell script (por exemplo, bash ou
     ash), capaz de executar todos os programas rc .

  7. Caso se tenha um arquivo  /etc/ld.so.cache no disco de emergência,
     refaça-o.


  Caso init comece, mas seja obtida a seguinte mensagem:

          Id xxx respawning too fast: disabled for 5 minutes



  ela é oriunda do init, normalmente indicando que  os programas getty
  ou login estão sendo encerrados imediatamente após o seu início.

  Caso ao se tentar executar algum programa, tal como  df,  presente no
  disco de emergência, e obtêm-se mensagens como: df: não encontrado,
  deve-se verificar: (1) o diretório que contém o comando está
  configurado na variável de ambiente PATH, e (2) todas as bibliotecas e
  carregadores necessários ao programa estão presentes.



  88..  DDiivveerrssooss



  88..11..  RReedduuzziinnddoo oo ttaammaannhhoo ddoo ssiisstteemmaa ddee aarrqquuiivvooss rraaiizz


  Algumas vezes o sistema de arquivos raiz é muito grande para caber em
  um disquete, mesmo após a sua compactação. Seguem algumas formas de
  reduzir seu tamanho, listadas em ordem decrescente de efetividade:



     AAuummeennttaarr aa ddeennssiiddaaddee ddoo ddiissccoo
        Por padrão, disquetes são formatados em 1400K, mas  formatos de
        maior densidade estão disponíveis. fdformat poderá formatar nos
        seguintes tamanhos: 1600, 1680, 1722, 1743, 1760, 1840, e 1920.
        Muitos dispositivos de 1440K suportarão  1722K, e é este que
        sempre usamos para disquetes de inicialização. A página de
        manual fdformat e  o arquivo
        /usr/src/linux/Documentation/devices.txt fornecem maiores
        informações sobre o tema.


     AAlltteerraarr oo iinntteerrpprreettaaddoorr ddee ccoommaannddooss
        Alguns dos mais populares interpretadores de comando para Linux,
        como  bash e tcsh, são grandes e requerem diversas bibliotecas.


     DDiimmiinnuuiirr aass bbiibblliiootteeccaass ee ooss bbiinnáárriiooss


                objcopy --strip-all FROM TO



     Ao copiar bibliotecas deve ser usado:


             objcopy --strip-debug FROM TO




     MMoovveerr aarrqquuiivvooss nnããoo ccrrííttiiccooss ppaarraa uumm ddiissccoo ddee uuttiilliittáárriiooss
        Caso alguns binários não sejam necessários durante a
        inicialização ou no acesso ao sistema, eles podem ser movidos
        para um disquete adicional. Veja a Seção ``Construindo um
        disquete de utilitários'' para maiores detalhes. Deve-se ainda
        considerar também a movimentação de módulos.



  88..22..  SSiisstteemmaass ddee aarrqquuiivvooss rraaiizz nnããoo rreessiiddeenntteess eemm ddiissccooss nnaa mmeemmóórriiaa



  A Seção ``Construindo um sistema de arquivos raiz'' apresenta
  instruções sobre como construir um sistema de arquivos raiz compactado
  o qual é carregado em um disco em memória quando o sistema é iniciado.
  Este método tem diversas vantagens e é o mais comumente utilizado. De
  qualquer forma, alguns sistemas com pouca memória podem não suportar
  toda a RAM necessária para isso; e nestes casos o sistema de arquivos
  raiz é montado diretamente ao invés de ser copiado para um disco em
  memória.

  Tais sistemas de arquivos são na verdade mais simples de serem
  construídos do que sistemas compactados, uma vez que eles podem ser
  construídos tanto em disquetes como em qualquer outro dispositivo, e
  não têm que ser compactados. Apresentaremos os procedimentos
  necessários e as suas diferenças em relação ao descrito até aqui. Caso
  seja esta a sua opção, deve-se ter em mente que se terá  _m_u_i_t_o _m_e_n_o_s
  _e_s_p_a_ç_o  disponível.


  1. Calcular o espaço disponível para os arquivos do sistema de
     arquivos raiz.

     Caso se esteja construindo um único disco de inicialização e raiz,
     todos os blocos do kernel mais os do sistema de arquivos raiz devem
     caber em um disquete.

  2. Utilizar o programa  mke2fs, para criar um sistema de arquivos raiz
     em um disquete com o tamanho apropriado.

  3. Incluir os arquivos do sistema de arquivos conforme descrito acima.

  4. Ao finalizar, desmontar o sistema de arquivos e transferi-lo para
     um arquivo de disco, _s_e_m _c_o_m_p_a_c_t_a_ç_ã_o.

  5. Transferir o kernel para um disquete, conforme descrito
     anteriormente. Ao calcular a palavra do disco em memória,
     ccoonnffiigguurraarr oo bbiitt 1144 ppaarraa zzeerroo, para indicar que o sistema de
     arquivos raiz não será carregado para um disco em memória. Executar
     o comando  rdev conforme descrito.

  6. Transferir o sistema de arquivos raiz conforme descrito
     anteriormente.

     Há diversos atalhos que podem ser executados. Caso se esteja
     construindo um conjunto de dois disquetes, pode-se construir o
     sistema de arquivos raiz diretamente no segundo disquete, não sendo
     necessário transferi-lo para o disco rígido e após para o disquete
     novamente. Ainda, caso se esteja construindo um único disquete de
     raiz e inicialização utilizando-se o LILO, pode-se construir  um
     _ú_n_i_c_o sistema de arquivos no disco inteiro, contendo o kernel,
     arquivos do LILO e do raiz, e simplesmente executar o LILO como o
     último passo.



  88..33..  CCoonnssttrruuiinnddoo uumm ddiissqquueettee ddee uuttiilliittáárriiooss



  Construir um disquete de utilitários é bastante simples, basta
  simplesmente criar um sistema de arquivos em um disquete formatado e
  copiar os arquivos para ele. Para usá-lo com o disco de inicialização,
  deve-se montá-lo manualmente após o sistema ser carregado.

  Conforme descrito anteriormente, o disquete de utilitários  pode ser
  montado como /usr.  Neste caso, os binários podem ser colocados no
  diretório /bin no disquete de utilitários, sendo que uma indicação a
  /usr/bin na variável de ambiente de caminho permitirá o acesso direto
  a eles. Bibliotecas adicionais podem ser colocadas no diretório  /lib
  no disquete de utilitários.

  Há vários pontos importantes  para atentar-se ao se construir um disco
  de utilitários, a saber:


  1. _N_ã_o colocar binários ou bibliotecas que sejam críticos para o
     início do sistema, uma vez que o disquete não será montado antes da
     inicialização do sistema.

  2. Não é possível acessar uma unidade de disquete e uma unidade de
     fita simultaneamente. Isso significa que caso se tenha uma unidade
     de fita, não será possível acessá-la enquanto o disco de
     utilitários estiver montado.


  3. O acesso aos arquivos no disco de utilitários será lento.


  Apêndice ``Listas de exemplo do conteúdo do disco de utilitários''
  mostra um lista de exemplo de arquivos em um disquete de utilitários.
  Aqui estão colocadas algumas idéias que podem ser úteis: programas
  para examinar e manipular discos ( (format, fdisk) e sistemas de
  arquivos (mke2fs, fsck, isofs.o), um editor de textos leve (elvis,
  jove), utilitários de compactação e arquivamento (gzip, tar, cpio,
  afio), utilitários para fitas (mt, tob, taper), comunicação (ppp.o,
  slip.o, minicom) e dispositivos (setserial, mknod).


  99..  CCoommoo ooss pprrooffiissssiioonnaaiiss ffaazzeemm iissssoo


  É possível perceber que os discos de inicialização das maiores
  distribuições, tais como Conectiva Linux, Red Hat, Slackware ou
  Debian, parecem ser mais sofisticados do que o descrito neste
  documento. Discos de inicialização de distribuições profissionais são
  baseados nos mesmos princípios aqui descritos, mas empregam alguns
  detalhes adicionais, uma vez que devem atender a um número maior de
  sistemas e situações. Inicialmente, eles devem ser capazes de
  funcionar com uma grande variedade de hardwares, sendo necessário
  então interagir com o usuário e carregar diversos arquivos de
  dispositivos. Segundo, eles devem ser preparados para trabalhar com
  diversas opções de instalação, com diferentes níveis de automação.
  Finalmente, distribuições normalmente combinam  funcionalidades de
  instalação e emergências.

  Alguns discos de inicialização contém uma funcionalidade chamada
  iinniittrrdd (ddiissccoo eemm mmeemmóórriiaa iinniicciiaall).
  <ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz>.

  As informações a seguir são um resumo dos discos de instalação de cada
  uma das distribuições, baseado na inspeção de seus sistemas de
  arquivos e dos códigos fontes. Não podemos garantir a exata acuidade
  das informações aqui descritas, ou se elas forem alteradas em novas
  versões.


  Slackware (v.3.1) usa uma inicialização similar a um LILO descrito na
  seção ``Transferindo o kernel com o  LILO''.  O disco de inicialização
  do Slackware apresenta uma mensagem (``Bem-vindo ao disco de
  inicialização do kernel do Slackware Linux!'') usando o parâmetro
  message do LILO. Após, o usuário é instruído a entrar com os
  parâmetros de inicialização, se necessários. Após a inicialização, um
  sistema de arquivos raiz é carregado de um segundo disco. O usuário
  executa o programa setup  que inicia a instalação. Ao invés de usar um
  kernel modular, Slackware provê uma série de diferentes kernels e
  depende do usuário a escolha do mais adequado aos seus requisitos de
  hardware.

  RedHat (v.4.0)  também utiliza a inicialização do LILO. Ele carrega um
  disco em memória compactado a partir do primeiro disco, o qual executa
  um programa  init customizado. Este programa solicita os arquivos de
  controle de dispositivos e carrega-os de um disco suplementar quando
  necessário.

  Debian (v.1.3) é provavelmente o mais sofisticado disco de instalação.
  Ele utiliza o carregador SYSLINUX para permitir várias opções de
  inicialização, usando então uma imagem do  initrd para guiar o usuário
  pelo processo de instalação. Aparenta usar tanto um  init quanto um
  interpretador customizados.


  1100..  LLiissttaa ddaass PPeerrgguunnttaass MMaaiiss FFrreeqquueenntteess ((FFAAQQ))


  QQ.. EEuu ccaarrrreeggoo mmeeuuss ddiissccooss ddee iinniicciiaalliizzaaççããoo ee rraaiizz ee nnaaddaa aaccoonntteeccee.. OO
  qquuee ppoossssoo ffaazzeerr??

  Veja a Seção ``Problemas''.

  QQ.. CCoommoo oo ddiissccoo ddee iinniicciiaalliizzaaççããoo ddaa CCoonneeccttiivvaa//RReedd HHaatt//SSllaacckkwwaarree//DDeebbiiaann
  ffuunncciioonnaamm??

  Veja a Seção ``Como os profisisonais fazem isso''.

  QQ.. CCoommoo eeuu ppoossssoo ccoonnssttrruuiirr uumm ddiissqquueettee ddee iinniicciiaalliizzaaççããoo ccoomm oo aarrqquuiivvoo
  ddee ccoonnttrroollee ddee ddiissppoossiittiivvooss XXYYZZ??

  A forma mais simples é obter um kernel do Slackware em um site espelho
  mais próximo. Os kernels do Slackware são genéricos e tentam incluir
  arquivos de controle para o maior número de dispositivos possível.
  Então caso se tenha uma controladora IDE ou SCSI, as chances são
  grandes de se ter um arquivo de controle para elas em um kernel do
  Slackware.  Vá para o diretório  a1  e selecione IDE ou SCSI
  dependendo do tipo de controladora que se tenha. Verifique o arquivo
  xxxxkern.cfg do kernel  selecionado para ver os arquivos de controle
  que foram incluídos neste kernel. Caso o dispositivo que se deseje
  instalar esteja incluído na lista, então o kernel correspondente deve
  inicializar o seu computador. Transfira o arquivo  xxxxkern.tgz e
  copie para o seu disquete de inicialização conforme descrito acima, na
  seção de construção de discos de inicialização.

  Deve-se checar o dispositivo raiz no kernel usando-se o comando rdev:

          rdev zImage



  rdev mostrará o dispositivo raiz atual do kernel. Caso este não seja o
  mesmo desejado, deve-se usar o  rdev para alterá-lo.  Por exemplo, um
  kernel testado apontava para /dev/sda2, porém a partição raiz SCSI era
  /dev/sda8. Para usar um disquete raiz, deve-se utilizar o comando:


          rdev zImage /dev/fd0



  Caso se queira saber como configurar um disquete de inicialização do
  Slackware, sugere-se verificar o Guia de Instalação Linux ou obter uma
  distribuição Slackware. Veja a seção denominada "Referências".

  QQ.. CCoommoo aattuuaalliizzaarr uumm ddiissccoo ddee iinniicciiaalliizzaaççããoo ccoomm uumm nnoovvoo kkeerrnneell??


  Simplesmente copie o novo kernel em um disquete de inicialização
  utilizando o comando dd para um disquete sem sistema de arquivos, ou
  através do comando cp para um disco de inicialização e raiz. Verifique
  a seção denominada "inicialização" para detalhes sobre a criação de um
  disquete de inicialização.  A descrição aplica-se perfeitamente à
  atualização do kernel em um disquete de inicialização.

  QQ.. CCoommoo aattuuaalliizzaarr oo ddiissqquueettee rraaiizz ccoomm nnoovvooss aarrqquuiivvooss??


  A maneira mais simples é copiar o sistema de arquivos do disco raiz de
  volta ao DISPOSITIVO utilizado, seção ``Criando um sistema de
  arquivos''. Após monte o sistema de arquivos e faça as alterações
  necessárias. Deve-se lembrar sempre onde o sistema de arquivos começa
  e quantos blocos ele ocupa:


  dd if=/dev/fd0 bs=1k skip=INÍCIO_RAIZ  count=BLOCOS | gunzip > DISPOSITIVO
  mount -t ext2 DISPOSITIVO /mnt



  Após as alterações serem concluídas, proceda de acordo com a Seção
  ``Empacotando'' e transfira o sistema de arquivos raiz de volta para o
  disco. Não se deve retransferir o kernel ou recalcular a palavra do
  disco em memória caso não tenha havido alterações do ponto de início
  do novo sistema de arquivos raiz.

  QQ.. CCoommoo rreemmoovveerr oo LLIILLOO ppaarraa sseerr ppoossssíívveell uuttiilliizzaarr aa iinniicciiaalliizzaaççããoo DDOOSS
  nnoovvaammeennttee??


  No Linux pode-se executar:



               /sbin/lilo -u




  Pode-se ainda usar o comando   dd para utilizar a cópia de segurança
  salva pelo LILO do setor de inicialização. Veja na documentação do
  LILO maiores informações.

  No DOS ou Windows pode-se executar o seguinte comando DOS:


               FDISK /MBR




  MBR significa Registro Mestre de Inicialização (Master Boot Record), e
  após o comando acima o setor de inicialização recebe registros DOS sem
  alterar a tabela de partições. Alguns puristas não concordam com essa
  abordagem, mas mesmo o autor do  LILO, Werner Almesberger, sugere
  isso, além de ser simples e funcional.

  QQ.. CCoommoo iinniicciiaalliizzaarr oo ssiisstteemmaa ssee oo kkeerrnneell _e oo ddiissccoo ddee iinniicciiaalliizzaaççããoo
  ffoorraamm ppeerrddiiddooss??

  Caso não se tenha um disco de inicialização extra, provavelmente o
  método mais simples será obter um kernel do Slackware para a sua
  controladora de discos ((IDE ou SCSI) conforme descrito anteriormente
  em "Como construir um disco de inicialização com o arquivo de controle
  de dispositivos XYZ?". Pode-se iniciar o sistema com esse kernel e
  procurar reparar o que estiver danificado.

  O kernel obtido pode não conter o tipo de disco e a partição que se
  deseje. Por exemplo, kernel genérico do Slackware para controladoras
  SCSI tem o dispositivo raiz configurado para /dev/sda2,  e
  eventualmente a partição raiz pode estar em  /dev/sda8. Neste caso o
  dispositivo raiz do kernel deve ser alterado.

  Pode-se mudar os parâmetros de dispositivo raiz e disco em memória no
  kernel, mesmo que tudo o que tenha seja um kernel ou mesmo a partir de
  outro sistema operacional, como por exemplo DOS.

  rdev altera o kernel através de alterações de valores de deslocamentos
  fixos do arquivo do kernel, então pode-se utilizar um editor em
  hexadecimal  em qualquer sistema disponível, como por exemplo o Editor
  de Disco de Utilitários Norton sob DOS. Deve-se checar se é necessário
  mudar os valores do kernel nos seguintes deslocamentos:



       HEX     DEC  DESCRIPTION
       0x01F8  504  Byte inferior da palavra do disco em memória
       0x01F9  505  Byte superior da palavra do disco em memória
       0x01FC  508  Número menor do dispositivo raiz - vide abaixo
       0X01FD  509  Número maior do dispositivo raiz - vide abaixo




  A interpretação da palavra do disco em memória está descrita na seção
  ``Configurando o disco em memória''.

  O número maior e menor do dispositivo devem ser configurados caso se
  deseje montar o sistema de arquivos raiz nele. Alguns valores
  importantes são:



       DISPOSITIVO      MAIOR MENOR
       /dev/fd0             2     0       primeira unidade de disquetes
       /dev/hda1            3     1       partição 1 no primeiro disco IDE
       /dev/sda1            8     1       partição 1 no primeiro disco SCSI
       /dev/sda8            8     8       partição 8 no primeiro disco SCSI




  Uma vez que estes valores estejam configurados, pode-se gravar o
  arquivo utilizando tanto o editor Norton, quanto um programa chamado
  rawrite.exe. Este programa é incluído em todas as distribuições, e é
  executado em ambientes DOS, sendo capaz de gravar os dados de forma
  direta, ao invés de gravar através do sistema de arquivos. Caso se
  utilize o Norton deve-se gravar o arquivo em um disco físico com
  início igual ao do disco de inicialização.

  QQ.. CCoommoo ffaazzeerr ccóóppiiaass aaddiicciioonnaaiiss ddooss ddiissqquueetteess ddee iinniicciiaalliizzaaççããoo ee rraaiizz??

  Como a mídia magnética pode deteriorar-se com o tempo, deve-se manter
  diversas cópias dos discos de emergência, para as situações em que o
  original não funcione.

  A forma mais simples de fazer cópias de qualquer disquete, inclusive
  disquetes que podem ser inicializados e disquetes de utilitários, é
  através da utilização do comando dd  para cópia do disquete original
  em um disco rígido e após o mesmo comando para copiar do disco rígido
  para os diversos disquetes.  Note que não se deve montar os disquetes,
  porque o comando  dd  utiliza o acesso direto ao dispositivo.

  Para copiar o disquete original, execute o comando:


               dd if=NOME_DISPOSITIVO of=NOME_ARQUIVO
               onde NOME_DISPOSITIVO é o nome da unidade de disquetes
               e NOME_ARQUIVO é o nome do arquivo de saída (no disco rígido)




  Omitindo-se o parâmetro  count  faz com que o comando copie todo o
  disquete (2880 blocos de alta densidade).

  Para copiar o arquivo resultante para um novo disquete, deve-se
  inserir o disquete na unidade e executar o comando:



               dd if=NOME_ARQUIVO of=NOME_DISPOSITIVO




  Note que o exemplo acima assume que se tenha somente uma unidade de
  gravação de disquetes. Caso se tenha duas de mesmo tipo, pode-se
  copiar o disquete usando-se o comando:



               dd if=/dev/fd0 of=/dev/fd1




  QQ.. CCoommoo iinniicciiaalliizzaarr oo ssiisstteemmaa sseemm tteerr qquuee ddiiggiittaarr ""aahhaaxxxxxxxx==nnnn,,nnnn,,nnnn""
  ttooddaa vveezz??


  Quando um dispositivo não pode ser detectado automáticamente, é
  necessário fornecer ao kernel os parâmetros através do comando de
  dispositivos, como por exemplo:


               aha152x=0x340,11,3,1




  Este parâmetro pode ser fornecido pelo LILO de diversas formas:


  ·  Informando o comando toda a vez que o sistema for inicializado via
     LILO. A opção  menos aconselhável.

  ·  Usando o parâmetro  ``lock'' para armazenar a linha de comando como
     a linha padrão de comando, fazendo com que o LILO use estas opções
     toda a vez que o sistema for carregado.

  ·  Utilizando o parâmetro  append= no arquivo de configuração do LILO.
     Note que o parâmetro deve estar entre aspas.

  Por exemplo, uma linha de comando usando os parâmetros acima poderia
  ser:


               zImage  aha152x=0x340,11,3,1 root=/dev/sda1 lock




  Este comando passa os parâmetros do dispositivo,  configura o
  dispositivo raiz em /dev/sda1 e salva todo o comando para reutilização
  futura.

  Um exemplo de comando append:

          \{append} = "aha152x=0x340,11,3,1"




  Note que o parâmetro não deve estar entre aspas na linha de comando,
  mas é obrigatório que assim esteja no comando append.

  Note ainda que  para que o parâmetro seja ativado, o kernel deve
  conter o módulo para o dispositivo assinalado. Caso contrário,  o
  comando não surtirá efeito algum e o kernel deverá ser reconstruído
  para incluir o módulo requerido. Para maiores detalhes sobre a
  reconstrução do kernel, mude o diretório  para /usr/src/linux e veja o
  arquivo README, e leia o FAQ e o tutorial de instalação.
  Alternativamente pode-se obter um kernel genérico e instalá-lo.

  É extremamente indicado a leitura da documentação LILO antes de se
  tentar instalá-lo. Usos indevidos do comando  BOOT podem causar danos
  às partições.

  QQ.. DDuurraannttee aa iinniicciiaalliizzaaççããoo  ooccoorrrreeuu oo eerrrroo  ""A: não pode executar B".
  Por quê?


  Há diversos casos em que nomes de programas encontram-se dentro do
  código de vários utilitários. Este casos não ocorrem em toda parte,
  mas pode ser uma explicação de porquê um executável aparentemente pode
  não ser encontrado, apesar de estar presente no sistema. Pode-se
  descobrir se um determinado programa tem o nome de outro dentro de seu
  código usando-se o comando strings e conectando sua saída com o
  comando grep.

  Exemplos conhecidos de localizações pré-definidas:

  ·  Shutdown em algumas versões tem o programa  /etc/reboot
     pré-definido, sendo que reboot deverá estar no diretório  /etc .

  ·  init pode causar alguns problemas, caso o kernel não consiga
     encontrá-lo em init.

  Para corrigir estes problemas, deve-se ou mover os programas para o
  diretório correto, ou mudar os arquivos de configuração (por exemplo
  inittab) para apontarem para o diretório correto. Em caso de dúvidas,
  ponha os programas no mesmo diretório em que eles estavam no disco
  rígido, e utilize os mesmos  inittab e  /etc/rc.d da forma como eles
  estão presentes.

  QQ.. MMeeuu kkeerrnneell tteemm ssuuppoorrttee aa ddiissccoo eemm mmeemmóórriiaa,, mmaass aappaarreeccee ccoomm 00 KKbb ddee
  eessppaaççoo..


  Quando isso ocorre, uma mensagem do kernel aparecerá durante a
  inicialização:


  Dispositivo de disco em memória inicializado:
  16 discos em memória com tamanho de 0K.


  Isso se deve provavelmente à definição do tamanho em zero através dos
  parâmetros de kernel em tempo de inicialização. Algo como:



       ramdisk=0

  Isso foi incluído como exemplo de configuração do LILO em algumas
  distribuições antigas, e foi colocado para sobrepor-se a parâmetros
  anteriores de configuração do kernel. Caso essa linha esteja presente,
  deve ser retirada.

  Note que ao se tentar utilizar um disco em memória com tamanho igual a
  zero, o comportamento do sistema é imprevisível, e pode resultar em
  travamentos do kernel.


  KK..  RReeccuurrssooss ee EEnnddeerreeççooss

  Nesta seção, _v_v_v é usado no lugar de versões dos nomes dos pacotes, a
  fim de evitar a referência a uma versão específica. Ao recuperar um
  pacote, deve-se procurar usar sempre a versão mais recente, a menos
  que haja alguma boa razão para fazer o contrário.


  KK..11..  DDiissccooss ddee IInniicciiaalliizzaaççããoo PPrréé--CCoonnffiigguurraaddooss


  Há diversas fontes de discos de distribuições.   _P_o_r _f_a_v_o_r _u_s_e _u_m _d_o_s
  _s_i_t_e_s _e_s_p_e_l_h_o_s _p_a_r_a _r_e_d_u_z_i_r _o _t_r_á_f_e_g_o _n_e_s_t_a_s _m_á_q_u_i_n_a_s_.

  ·  Discos de inicialização Slackware
     <http://sunsite.unc.edu/pub/Linux/distributions/slackware/bootdsks.144/>
     e Sites espelho Slackware
     <http://sunsite.unc.edu/pub/Linux/distributions/slackware/MIRRORS.TXT>

  ·  Discos de inicialização Red Hat
     <http://sunsite.unc.edu/pub/Linux/distributions/redhat/current/i386/images/>
     e Sites espelho Red Hat <http://www.redhat.com/ftp.html>

  ·  Discos de inicialização Debian
     <ftp://ftp.debian.org/pub/debian/stable/disks-i386> e Sites espelho
     Debian <ftp://ftp.debian.org/debian/README.mirrors>

  Em adição aos discos das distribuições, as seguintes imagens de discos
  de emergência estão disponíveis:


  ·  tomsrtbt, de Tom Oehser, é um único disco de inicialização e raiz,
     baseado no kernel 2.0.33, com uma grande lista de funcionalidades e
     programas de suporte. Suporta IDE, SCSI, fita, placas de rede,
     PCMCIA e mais. Mais de 100 utilitários e ferramentas estão inclusas
     para correção e restauração de discos. O pacote ainda inclui
     programas para desmontagem e reconstrução de imagens, permitindo
     que novos itens possam ser incluídos.

     <http://www.toms.net/~toehser/rb/tomsrtbt-current.tar.gz>

     <http://sunsite.unc.edu/pub/Linux/system/recovery/>


  ·  rescue02, de John Comyns, é um disco de emergência baseado no
     kernel 1.3.84, com suporte a IDE e  Adaptec 1542 e NCR53C7,8xx. Usa
     binários ELF, porém contém comandos suficientes para ser utilizado
     em qualquer sistema. Há módulos que podem ser carregados após a
     inicialização do sistema para todas as placas SCSI. Provavelmente
     não funcionará em sistemas com 4 Mb de RAM, uma vez que utiliza um
     disco de 3 Mb.

     <http://sunsite.unc.edu/pub/Linux/system/recovery/rescue02.zip>



  ·  resque_disk-2.0.22, de Sergei Viznyuk,  é um disco de inicialização
     e raiz baseado no kernel 2.0.22 com suporte a IDE, muitas
     controladoras SCSI e ELF/OUT. Inclui ainda diversos módulos e
     utilitários para reparar e restaurar discos rígidos.

     <http://sunsite.unc.edu/pub/Linux/system/recovery/resque_disk-
     vvv.tar.gz>


  ·  Imagens cramdisk baseado no kernel 2.0.33, disponível para máquinas
     com 4 e 8 Mb. Incluem emulador matemático e suporte à comunicação
     (PPP e programas de discagem, NE2000, 3C509), ou suporte a
     dispositivos ZIP paralelos. Estas imagens serão capazes de
     inicializar um 386 com 4 Mb de RAM. Suporte a MSDOS está incluso,
     podendo-se assim transmitir da Internet para uma partição DOS.

     <http://sunsite.unc.edu/pub/Linux/system/recovery/images/>



  KK..22..  DDiissccooss ddee EEmmeerrggêênncciiaa

  Diversos pacotes de criação de discos de emergência estão disponíveis
  em sunsite.unc.edu. Com estes pacotes pode-se especificar um conjunto
  de arquivos para inclusão e o software automatiza (em vários níveis) a
  criação do disco de inicialização. Veja
  <http://sunsite.unc.edu/pub/Linux/system/recovery/!INDEX.html> para
  maiores informações. VVeerriiffiiqquuee aass ddaattaass ddooss aarrqquuiivvooss ccuuiiddaaddoossaammeennttee
  --- alguns destes pacotes podem estar desatualizados há vários anos e
  podem não suportar a criação de sistemas de arquivos raiz compactados
  carregados em discos em memória. Até onde conhecemos Yard é o único
  pacote que poderá fazer isso.


  KK..33..  PPrrooggrraammaass ddee LLoottee ddee GGrraahhaamm CChhaappmmaann


  Graham Chapman  escreveu um conjunto de programas que podem ser
  bastante úteis como exemplos de criação de discos de inicialização. Em
  versões anteriores deste tutorial os programas apareciam como um
  apêndice, mas foram apagados deste documento e colocados em uma página
  web: <http://www.zeta.org.au/~grahamc/linux.html>

  Pode ser conveniente o uso destes programas, mas deve-se ler
  cuidadosamente as instruções -- por exemplo ao especificar uma área de
  troca incorreta, pode-se apagar o sistema de arquivos raiz
  definitivamente. Esteja seguro de que esteja bem configurado antes de
  usar os programas.


  KK..44..  LLIILLOO ------ OO ccaarrrreeggaaddoorr LLiinnuuxx


  Escrito por  Werner Almesberger.  Excelente carregador da
  inicialização do sistema, e a documentação inclui informações sobre o
  setor de inicialização e os estágios anteriores do processo de carga
  de um sistema.

  Ftp em
  <ftp://tsx-11.mit.edu/pub/linux/packages/lilo/lilo.vvv.tar.gz>.  Está
  também disponível no Sunsite e seus diversos sites espelhos.





  KK..55..  PPeerrgguunnttaass MMaaiiss FFrreeqqüüeenntteess ee CCoommoo FFaazzeerr

  Estão disponíveis em diversos locais. Pode-se verificar os grupos de
  notícias da Usenet em  news.answers e comp.os.linux.announce.

  Perguntas mais freqüentes em
  <http://sunsite.unc.edu/pub/Linux/docs/faqs/linux-faq> e Como Fazer em
  <http://sunsite.unc.edu/pub/Linux/docs/HOWTO>.

  Mais documentação sobre o Linux pode ser encontrada em  Página do
  Projeto de Documentação Linux <http://sunsite.unc.edu/LDP/>.

  Caso o problema seja seríssimo pode-se enviar uma mensagem em inglês
  para mail-server@rtfm.mit.edu com a palavra ``help'' na mensagem.


  KK..66..  UUssoo ddoo DDiissccoo eemm MMeemmóórriiaa

  Uma excelente descrição de como funciona o novo código de disco em
  memória pode ser encontrada com a documentação do kernel do Linux.
  Veja em  /usr/src/linux/Documentation/ramdisk.txt. Foi escrito por
  Paul Gortmaker e inclui uma seção sobre a criação de discos em memória
  compactados.



  KK..77..  OO pprroocceessssoo ddee iinniicciiaalliizzaaççããoo ddoo LLiinnuuxx


  Para maiores detalhes sobre o processo de inicialização do Linux,
  seguem algumas indicações:


  ·  O Guia de Administração do Sistema Linux contém uma seção sobre o
     processo. Veja em
     <http://sunsite.unc.edu/LDP/LDP/sag-0.5/node68.html>

  ·  Visão Geral do  LILO
     <http://sunsite.unc.edu/pub/Linux/system/boot/lilo/lilo-t-20.ps.gz>
     tem uma visão tecnicamente detalhada e definitiva sobre o processo
     de inicialização e como o kernel é carregado.

  ·  O código fonte é o último guia. Abaixo seguem alguns arquivos do
     kernel relacionados com o processo de inicialização. Caso se tenha
     à disposição os fontes do Linux, que podem ser encontrados em
     /usr/src/linux em sistemas Linux; ou alternativamente  Shigio
     Yamaguchi (shigio@wafu.netgate.net) tem um kernel em hipertexto em
     <http://wafu.netgate.net/linux/>.



     aarrcchh//ii338866//bboooott//bboooottsseecctt..SS,,sseettuupp..SS
        Contém o código Assembler para o setor de inicialização.


     aarrcchh//ii338866//bboooott//ccoommpprreesssseedd//mmiisscc..cc
        Contém o código para descompactar o kernel.


     aarrcchh//ii338866//kkeerrnneell//
        Diretório contendo o código de inicialização do kernel. setup.c
        contém a palavra de configuração do disco em memória.




     ddrriivveerrss//bblloocckk//rrdd..cc
        Contém o arquivo de controle do disco em memória. Os
        procedimentos rd_load e   rd_load_image carregam os blocos de um
        dispositivo em um disco em memória. O procedimento
        identify_ramdisk_image determina o tipo do sistema de arquivos
        encontrado e se ele é compactado.





  LL..  CCóóddiiggooss ddee EErrrrooss ddee IInniicciiaalliizzaaççããoo ddoo LLIILLOO

  Questões sobre esses códigos de erros, tem sido freqüentes na Usenet,
  sendo que incluímos aqui como um serviço público. Este sumário foi
  desenvolvido a partir da Documentação do Usuário LILO de Werner
  Almsberger, disponível em
  <ftp://lrcftp.epfl.ch:/pub/linux/local/lilo/lilo.u.19.ps.gz>.

  Quando o LILO carrega a si próprio, ele apresenta a palavra ``LILO''.
  Cada letra é apresentada antes da execução de algum processo, assim
  sendo as letras podem ser um indicador do estágio atingido e da origem
  do problema.


        Nenhuma parte do LILO foi carregada. LILO pode não estar
        instalado ou a partição no qual o setor de inicialização está
        localizado não está ativa.


     LL  O primeiro estágio do carregador foi iniciado e executado, mas
        não foi possível carregar o segundo estágio. Os códigos de erro
        com dois dígitos indicam o tipo de problema (Veja ainda "Códigos
        de Erros de Discos"). Esta condição indica normalmente a falha
        na mídia ou erro de geometria (por exemplo parâmetros de disco
        incorretos).


     LLII O primeiro estágio foi capaz de carregar o segundo, mas falhou
        na sua execução. Isso pode ser causado por erro de geometria ou
        pela movimentação do /boot/boot.b  sem a execução do instalador.


     LLIILL
        O segundo estágio conseguiu ser iniciado, mas não pode carregar
        a tabela de descritores do arquivo map. Isso normalmente é
        causado por falha na mídia ou erro de geometria.


     LLIILL??
        O segundo estágio do LILO foi carregado para um endereço
        incorreto. Isso é tipicamente causado por erros de geometria ou
        pela movimentação do arquivo /boot/boot.b sem a execução do
        instalador.


     LLIILL--
        A tabela de descritores está corrompida. Isso pode ser causado
        por erros de geometria ou pela movimentação do arquivo
        /boot/boot.b sem a execução do instalador.


     LLIILLOO
        Todas as partes do LILO foram carregadas.


  Caso o BIOS apresente algum erro quando o LILO estiver tentando
  carregar uma imagem de inicialização, o respectivo código de erro é
  apresentado. Estes códigos variam de 0x00 até 0xbb. Veja o Guia do
  Usuário LILO para uma maior explicação sobre este tema.



  MM..  LLiissttaass ddee eexxeemmpplloo ddoo ccoonntteeúúddoo ddoo ddiissccoo ddee iinniicciiaalliizzaaççããoo


  Aqui está o conteúdo dos disquetes raiz e utilitários de Graham. Estas
  listas são apresentadas como um exemplo dos arquivos incluídos em um
  sistema funcional. Graham adicionou algumas notas explicativas que
  parecem muito úteis.




















































  total 18
  drwxr-xr-x   2 root     root         1024 Jul 29 21:16 bin/
  drwxr-xr-x   2 root     root         9216 Jul 28 16:21 dev/
  drwxr-xr-x   3 root     root         1024 Jul 29 20:25 etc/
  drwxr-xr-x   2 root     root         1024 Jul 28 19:53 lib/
  drwxr-xr-x   2 root     root         1024 Jul 24 22:47 mnt/
  drwxr-xr-x   2 root     root         1024 Jul 24 22:47 proc/
  drwxr-xr-x   2 root     root         1024 Jul 28 19:07 sbin/
  drwxr-xr-x   2 root     root         1024 Jul 29 20:57 tmp/
  drwxr-xr-x   4 root     root         1024 Jul 29 21:35 usr/
  drwxr-xr-x   3 root     root         1024 Jul 28 19:52 var/

  /bin:
  total 713
  -rwxr-xr-x   1 root     bin          7737 Jul 24 22:16 cat*
  -rwxr-xr-x   1 root     bin          9232 Jul 24 22:48 chmod*
  -rwxr-xr-x   1 root     bin          8156 Jul 24 22:48 chown*
  -rwxr-xr-x   1 root     bin         19652 Jul 24 22:48 cp*
  -rwxr-xr-x   1 root     root         8313 Jul 29 21:16 cut*
  -rwxr-xr-x   1 root     bin         12136 Jul 24 22:48 dd*
  -rwxr-xr-x   1 root     bin          9308 Jul 24 22:48 df*
  -rwxr-xr-x   1 root     root         9036 Jul 29 20:24 dircolors*
  -rwxr-xr-x   1 root     bin          9064 Jul 24 22:48 du*
  -rwxr-x---   1 root     bin         69252 Jul 24 22:51 e2fsck*
  -rwxr-xr-x   1 root     bin          5361 Jul 24 22:48 echo*
  -rwxr-xr-x   1 root     bin          5696 Jul 24 22:16 hostname*
  -rwxr-xr-x   1 root     bin          6596 Jul 24 22:49 kill*
  -rwxr-xr-x   1 root     bin         10644 Jul 24 22:17 ln*
  -rwxr-xr-x   1 root     bin         13508 Jul 24 22:17 login*
  -rwxr-xr-x   1 root     bin         26976 Jul 24 22:17 ls*
  -rwxr-xr-x   1 root     bin          7416 Jul 24 22:49 mkdir*
  -rwxr-x---   1 root     bin         34596 Jul 24 22:51 mke2fs*
  -rwxr-xr-x   1 root     bin          6712 Jul 24 22:49 mknod*
  -rwxr-xr-x   1 root     bin         20304 Jul 24 22:17 more*
  -rwxr-xr-x   1 root     bin         24704 Jul 24 22:17 mount*
  -rwxr-xr-x   1 root     bin         12464 Jul 24 22:17 mv*
  -rwxr-xr-x   1 root     bin         20829 Jul 24 22:50 ps*
  -rwxr-xr-x   1 root     bin          9424 Jul 24 22:50 rm*
  -rwxr-xr-x   1 root     bin          4344 Jul 24 22:50 rmdir*
  -rwxr-xr-x   1 root     root       299649 Jul 27 14:12 sh*
  -rwxr-xr-x   1 root     bin          9853 Jul 24 22:17 su*
  -rwxr-xr-x   1 root     bin           380 Jul 27 14:12 sync*
  -rwxr-xr-x   1 root     bin         13620 Jul 24 22:17 umount*
  -rwxr-xr-x   1 root     root         5013 Jul 29 20:03 uname*

  /dev:
  total 0
  lrwxrwxrwx   1 root     root           10 Jul 24 22:34 cdrom -> /dev/sbpcd
  crw--w--w-   1 root     tty        4,   0 Jul 24 21:49 console
  brw-rw----   1 root     floppy     2,   0 Apr 28  1995 fd0
  lrwxrwxrwx   1 root     root            4 Jul 24 22:34 ftape -> rft0
  crw-rw-rw-   1 root     sys       10,   2 Jul 18  1994 inportbm
  crw-rw----   1 root     kmem       1,   2 Jul 28 16:21 kmem
  crw-rw----   1 root     kmem       1,   1 Jul 18  1994 mem
  lrwxrwxrwx   1 root     root            4 Jul 24 22:34 modem -> cua0
  lrwxrwxrwx   1 root     root            4 Jul 24 22:34 mouse -> cua1
  crw-rw-rw-   1 root     sys        1,   3 Jul 18  1994 null
  brw-rw----   1 root     disk       1,   1 Jul 18  1994 ram
  crw-rw----   1 root     disk      27,   0 Jul 18  1994 rft0
  brw-rw----   1 root     disk      25,   0 Jul 19  1994 sbpcd
  ***  Foram incluídos arquivos de dispositivos para as partições SCSI em uso
  ***  Caso sejam utilizados discos IDE, deve-se usar /dev/hdxx .
  brw-rw----   1 root     disk       8,   0 Apr 29  1995 sda
  brw-rw----   1 root     disk       8,   6 Apr 29  1995 sda6
  brw-rw----   1 root     disk       8,   7 Apr 29  1995 sda7
  brw-rw----   1 root     disk       8,   8 Apr 29  1995 sda8
  lrwxrwxrwx   1 root     root            7 Jul 28 12:56 systty -> console
  *** esta ligação de systty para a console é obrigatória
  crw-rw-rw-   1 root     tty        5,   0 Jul 18  1994 tty
  crw--w--w-   1 root     tty        4,   0 Jul 18  1994 tty0
  crw--w----   1 root     tty        4,   1 Jul 24 22:33 tty1
  crw--w----   1 root     tty        4,   2 Jul 24 22:34 tty2
  crw--w--w-   1 root     root       4,   3 Jul 24 21:49 tty3
  crw--w--w-   1 root     root       4,   4 Jul 24 21:49 tty4
  crw--w--w-   1 root     root       4,   5 Jul 24 21:49 tty5
  crw--w--w-   1 root     root       4,   6 Jul 24 21:49 tty6
  crw-rw-rw-   1 root     tty        4,   7 Jul 18  1994 tty7
  crw-rw-rw-   1 root     tty        4,   8 Jul 18  1994 tty8
  crw-rw-rw-   1 root     tty        4,   9 Jul 19  1994 tty9
  crw-rw-rw-   1 root     sys        1,   5 Jul 18  1994 zero

  /etc:
  total 20
  -rw-r--r--   1 root     root         2167 Jul 29 20:25 DIR_COLORS
  -rw-r--r--   1 root     root           20 Jul 28 12:37 HOSTNAME
  -rw-r--r--   1 root     root          109 Jul 24 22:57 fstab
  -rw-r--r--   1 root     root          271 Jul 24 22:21 group
  -rw-r--r--   1 root     root         2353 Jul 24 22:27 inittab
  -rw-r--r--   1 root     root            0 Jul 29 21:02 issue
  -rw-r--r--   1 root     root         2881 Jul 28 19:38 ld.so.cache
  *** Diversos erros ocorrem na inicialização se ld.so.cache não está presente,mas
  *** esteja seguro que  ldconfig está incluído e pode ser executado em rc.x para
  *** atualizá-lo.
  -rw-r--r--   1 root     root           12 Jul 24 22:22 motd
  -rw-r--r--   1 root     root          606 Jul 28 19:25 passwd
  -rw-r--r--   1 root     root         1065 Jul 24 22:21 profile
  drwxr-xr-x   2 root     root         1024 Jul 29 21:01 rc.d/
  -rw-r--r--   1 root     root           18 Jul 24 22:21 shells
  -rw-r--r--   1 root     root          774 Jul 28 13:43 termcap
  -rw-r--r--   1 root     root          126 Jul 28 13:44 ttys
  -rw-r--r--   1 root     root            0 Jul 24 22:47 utmp

  /etc/rc.d:
  total 5
  *** Não me importo muito com programas de encerramento do sistema -
  *** tudo é executado em um disco em memória, não havendo muitas coisas
  *** para finalizar.
  -rwxr-xr-x   1 root     root         1158 Jul 24 22:23 rc.K*
  -rwxr-xr-x   1 root     root         1151 Jul 28 19:08 rc.M*
  -rwxr-xr-x   1 root     root          507 Jul 29 20:25 rc.S*

  /lib:
  total 588
  *** Tenho um sistema ELF, tendo sido incluído o carregador loader ld-linux.so.
  ***  Caso se esteja ainda utilizando o  a.out, então deve-se incluir ld.so.
  *** Deve-se usar o comando file para verificar quais  bibliotecas devem ser incluídas.
  lrwxrwxrwx   1 root     root           17 Jul 24 23:36 ld-linux.so.1 -> ld-linux.so.1.7.3*
  -rwxr-xr-x   1 root     root        20722 Aug 15  1995 ld-linux.so.1.7.3*
  lrwxrwxrwx   1 root     root           13 Jul 24 23:36 libc.so.5 -> libc.so.5.0.9*
  -rwxr-xr-x   1 root     root       562683 May 19  1995 libc.so.5.0.9*
  ***  Deve-se incluir   libtermcap
  lrwxrwxrwx   1 root     root           19 Jul 28 19:53 libtermcap.so.2 -> libtermcap.so.2.0.0*
  -rwxr-xr-x   1 root     root        11360 May 19  1995 libtermcap.so.2.0.0*

  /mnt:
  total 0

  /proc:
  total 0

  /sbin:
  total 191
  ***  Utilizo Slackware, o qual usa  agetty. Muitos sistemas usam  getty.
  ***  Verifique em /etc/inittab para ver qual o necessário. Note que  (a)getty e login
  ***  são necessários para que se possa fazer algo no sistema.
  -rwxr-xr-x   1 root     bin         11309 Jul 24 22:54 agetty*
  -rwxr-xr-x   1 root     bin          5204 Jul 24 22:19 halt*
  ***  Obrigatório na inicialização do sistema
  -rwxr-xr-x   1 root     bin         20592 Jul 24 22:19 init*
  -rwxr-xr-x   1 root     root        86020 Jul 28 19:07 ldconfig*
  -rwxr-xr-x   1 root     bin          5329 Jul 27 14:10 mkswap*
  -rwxr-xr-x   1 root     root         5204 Jul 24 22:20 reboot*
  -rwxr-xr-x   1 root     root         6024 Jul 24 22:20 rdev*
  -rwxr-xr-x   1 root     bin         12340 Jul 24 22:20 shutdown*
  -rwxr-xr-x   1 root     root         5029 Jul 24 22:20 swapoff*
  -rwxr-xr-x   1 root     bin          5029 Jul 24 22:20 swapon*
  -rwxr-xr-x   1 root     root        20592 Jul 27 18:18 telinit*
  -rwxr-xr-x   1 root     root         7077 Jul 24 22:20 update*

  /tmp:
  total 0

  /usr:
  total 2
  drwxr-xr-x   2 root     root         1024 Jul 29 21:00 adm/
  drwxr-xr-x   2 root     root         1024 Jul 29 21:16 lib/

  /usr/adm:
  total 0

  /usr/lib:
  total 0

  /var:
  total 1
  ***  Muitos problemas ocorreram antes da inclusão do  /etc/rc.S
  ***  para inicializar o /var/run/utmp, mas talvez  isso não seja necessário
  *** em outros sistemas
  drwxr-xr-x   2 root     root         1024 Jul 28 19:52 run/

  /var/run:
  total 0





  NN..  LLiissttaass ddee eexxeemmpplloo ddoo ccoonntteeúúddoo ddoo ddiissccoo ddee uuttiilliittáárriiooss




















  total 579
  -rwxr-xr-x   1 root     root        42333 Jul 28 19:05 cpio*
  -rwxr-xr-x   1 root     root       103560 Jul 29 21:31 elvis*
  -rwxr-xr-x   1 root     root        56401 Jul 28 19:06 find*
  -rwxr-xr-x   1 root     root        29536 Jul 28 19:04 fdisk*
  -rw-r--r--   1 root     root       128254 Jul 28 19:03 ftape.o
  -rwxr-xr-x   1 root     root        17564 Jul 25 03:21 ftmt*
  -rwxr-xr-x   1 root     root        64161 Jul 29 20:47 grep*
  -rwxr-xr-x   1 root     root        45309 Jul 29 20:48 gzip*
  -rwxr-xr-x   1 root     root        23560 Jul 28 19:04 insmod*
  -rwxr-xr-x   1 root     root          118 Jul 28 19:04 lsmod*
  lrwxrwxrwx   1 root     root            5 Jul 28 19:04 mt -> mt-st*
  -rwxr-xr-x   1 root     root         9573 Jul 28 19:03 mt-st*
  lrwxrwxrwx   1 root     root            6 Jul 28 19:05 rmmod -> insmod*
  -rwxr-xr-x   1 root     root       104085 Jul 28 19:05 tar*
  lrwxrwxrwx   1 root     root            5 Jul 29 21:35 vi -> elvis*