Substituindo o disco sem precisar reinstalar todo o sistema

Trocar o disco onde o seu sistema está instalado pode ser divertido, mas é um pouco trabalhoso então embora não haja riscos de se realizar este procedimento – desde que ele seja bem feito -, pode valer mais apena reinstalar tudo do zero.Algumas semanas atrás eu relatei a minha saga por causa da compra de um novo HD SATA de 500GB, no “causo” eu fiz uma crítica as vendedores que não sabiam nem o que estavam vendendo, mas a compra foi realizada e a idéia era substituir o meu antigo HD de 120GB por um novo de 500GB já que essa história de ripar DVDs e CDs,  fazer downloads e mais download de tudo quanto é tipo acabaram me deixando sem espaço – claro que poderia apagar os downloads e depois baixá-los novamente quando precisasse, mas pra que fazer isso quando um disco deste tamanho está com preço lá em baixo?

Um pouco de teoria chata

Você pode pular esta parte se quiser, mas vai perder o melhor da história 😉

Em uma máquina desktop comum, tal  como a minha não possui suporte a Hotswap[1] para HDs, logo, para instalar qualquer disco é necessário desligar o equipamento, conectar o disco e só depois ligar a máquina denovo. Procedimento este que requer apenas um pouco de prática para abrir o gabinete com uma chave philips, ligar os cabos e fechar novamente.

O problema é que no Linux os discos em geral são reconhecidos e identificados pela nomenclatura sd[a-z], onde [a-z] pode ser qualquer letra do alfabeto e normalmente seguindo a ordem em que são reconhecidos e tendo seus drivers carregados. Quando os discos eram apenas IDE a ordem era definida pelo canal do disco: Por exemplo:

  • hda – disco mestre da controladora primária,
  • hdb – disco escravo da controladora primária,
  • hdc – disco mestre da controladora secundária e
  • hdd – disco escravo da controladora secundária

Mas com a chegada dos dispositivos USB, SATA, SAS e outros as coisas foram modificadas e agora o primeiro disco detectado será o sda, o segundo será o sdb e por vai. O resultado é se o seu sistema poderá a qualquer momento trocar a nomenclatura dos discos sem te avisar nada sobre isso.

Quer uma prova disso? Conecte dois dispositivos USB no seu computador e veja com o comando “df” qual foi o nome dado à eles. Se o seu HD é o sda, certamente eles serão nomeados como sdb e sdd. Experimente desmontar os dois dispositivos e conecte-os novamente em ordem diferente. Você verá que o que era sdb, passa a ser sdc e vice-versa.

Isto ocorre em também com discos rígidos e eu até já passei alguns sustos com um mp3player conectado a porta USB e o PC não iniciar porque por algum motivo quando o sistema ia carregar os drivers ele mapeava o meu aparelhinho como sda e meu hd principal como sdb. Bastava remover o dispositivo da USB e a máquina dava boot normalmente.

Com o UUID – Identificador Universal Único – seus problemas acabaram

Algumas semanas atras eu postei algo a respeito do UUID que é um número hexadecimal gigante e que serve para identificar qualquer coisa no seu sistema.

Se você identificar os seus discos a partir do UUID, ao invés do nome do dispositivo que o Linux detecta então você pode conectar os discos em qualquer ordem que eles serão sempre montados da forma como você espera e sem sustos.

Preparando o sistema para receber o novo disco

Sabendo das questões acima basta nós descobrirmos o UUID de cada partição do nosso disco e aplica-las nos arquivos /boot/grub/menu.lst (onde estão as definições do menu de boot) e no /etc/fstab (onde define que partições são montadas e onde).

Descobrindo o UUID das partições

Antes então de ligar o novo dispositivo, você deverá usar o comando blkid pela linha de comandos para retornar algo assim:

wbraga@welingtondesktop:~$ blkid
/dev/sdb1: UUID=”4c533b0f-ca7d-4d0f-bdbf-c29ce8ef1b75″ TYPE=”reiserfs”
/dev/sda1: UUID=”1E26572836A05F77″ TYPE=”ntfs”
/dev/sda2: LABEL=”BOOT” UUID=”0006fecc-4d34-44db-b945-f82f1e2ac335″ TYPE=”ext3″
/dev/sda5: UUID=”2s9Zk4-oQ1Q-J9Jx-Drn0-B4Bg-GrpM-qh11u2″ TYPE=”lvm2pv”
/dev/sda6: UUID=”4a65c533-8bc3-4c3b-8809-d3b1713a577c” TYPE=”reiserfs”
/dev/sda7: TYPE=”swap” UUID=”32d69750-b61a-4398-b51f-fac997fc5ba7″
/dev/sda8: UUID=”a789b4a1-992d-4abc-8da8-de6e65e52ec0″ TYPE=”reiserfs”
wbraga@welingtondesktop:~$

Alterando as configurações de boot (menu do grub)

Assim eu consegui o UUID de todos os dispositivos montados, de uma só vez. Agora podemos editar o arquivo de configuração do grub da seginte forma:

title        Ubuntu 9.04, kernel 2.6.28-14-generic
root       (hd0,0)
kernel        /vmlinuz-2.6.28-14-generic root=/dev/sda6 ro locale=pt_BR quiet splash
initrd        /initrd.img-2.6.28-14-generic
quiet

E mudar para:

title        Ubuntu 9.04, kernel 2.6.28-14-generic
uuid        0006fecc-4d34-44db-b945-f82f1e2ac335
kernel        /vmlinuz-2.6.28-14-generic root=UUID=4a65c533-8bc3-4c3b-8809-d3b1713a577c ro locale=pt_BR quiet splash
initrd        /initrd.img-2.6.28-14-generic
quiet

Onde o UUID indicado na linha “uuid” (após o title) é o identficador da partição /boot (caso não tenha uma partição /boot) use da partição “/”, já o UUID da linha do kernel é sempre o identificador da partição “/”.

DICA 1: Se você não estiver seguro do que está fazendo, você pode copiar a primeira configuração do seu menu e apenas alterar as duas linhas citadas. Desta forma se algo der errado e seu sistema não iniciar, basta dar outro boot e escolher a opção original (que deverá ser a segunda, por exemplo).

DICA 2: Se quiser você pode dar um boot no sistema após salvar estas alterações para confirmar se está tudo OK e então dar prosseguimento.

DICA 3: você pode usar um editor de textos visual como o gedit, kedit etc para que seja possível copiar e colar os números assim fica menor o risco de digitar os identificadores errados, só lembre-se que para alterar este arquivo é preciso ter privilégios administrativos, então você deverá abrir um console e digitar, por exemplo:

sudo gedit /boot/grub/menu.lst

ou então

su -c “gedit /boot/grub/menu.lst”

Mais rápido e mais fácil (Atualização 22-10-2009)

Embora o procedimento apresentado funcione bem, é preciso tomar um certo cuidado para não errar nos números, o que ocasionaria em seu sistema não dar mais boot. Além deste, outro inconveniente chato é que em toda atualização do kernel o sistema vai sugerir o UUID errado ou vai tirar as especificações de UUID substituindo-as pelo nome do dispositivo em /dev, o que vai gerar um esforço em modificar o menu.lst manualmente a cada atualização do kernel em seu sistema.

Após pesquisar um bom tempo e perguntar em algumas listas eu encontrei a solução. Ao invés de editar cada entrada de Kernel no menu.lst você deve procurar pelo parâmetro “kopt” dentro desta arquivo. Em geral ela está comentada com um “#” e você não deve descomentar. Originalmente ela deveria estar assim:

# kopt=root=/dev/sda6 ro

Mude-a para que fique assim:

# kopt=root=UUID=4a65c533-8bc3-4c3b-8809-d3b1713a577c

Observe que eu substitui a entrada correspondente a minha partição “/” pelo seu UUID. Procedimento similar à este deve ser feito no parâmetro “groot”, que corresponde a sua partição “/boot”. Originalmente ele deve constar assim:

# groot=(hd0,0)

Você deverá modifica-lo para:

# groot=0006fecc-4d34-44db-b945-f82f1e2ac335

Neste caso o UUID corresponde ao identificador da sua partição “/boot”, a não ser no caso de você não ter uma partição /boot, então você usuaria o UUID da partição “/”.

Uma vez alterados estes parâmetros bastaria salvar o arquivo e pela linha de comandos usar o comando update-grub para que as alterações sejam feitas em todas as entradas de kernel (só por garantia, faça uma cópia do arquivo /boot/menu.lst antes das mudanças para que em caso de problemas você não fique agonizando e me xingando).

root@welingtondesktop:/boot/grub# update-grub 
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ... found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping ...
Found kernel: /vmlinuz-2.6.28-16-generic
Found kernel: /vmlinuz-2.6.28-15-generic
Found kernel: /memtest86+.bin
Replacing config file /var/run/grub/menu.lst with new version
Updating /boot/grub/menu.lst ... done

root@welingtondesktop:/boot/grub#

Se quiser, você pode editar o arquivo novamente, só para dar uma conferida se as alterações ocorreram mesmo.

Alterando a tabela de mapeamento de partições (fstab)

Veja que até aqui, nos ainda não colocamos o novo disco no PC, visto que ainda estamos preparando para que ele não fique perdido. Se até aqui está tudo ok, nós vamos modificar o nosso arquivo de mapeamento de partições, o /etc/fstab para que as montagens de disco também sejam feitas da forma correta quando conectarmos o novo HD.

Da mesma forma como fizemos com o menu.lst, nós substituiremos os”/dev/sdx?” por “UUID=blablabla”. Edite o arquivo com oseu editor de texto preferido (levando em consideração a dica 3 – acima). E o que era:

proc            /proc           proc    defaults        0       0

/dev/sda2    /boot    ext3    relatime        0       2
/dev/sda6    /    reiserfs    relatime 0       1
/dev/sda8    /home    reiserfs    relatime        0       2
/dev/sda7    none    swap    0    0

/dev/scd1       /media/cdrom0   udf,iso9660 user,noauto,exec,utf8 0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

Passará a ser:

proc            /proc           proc    defaults        0       0

UUID=0006fecc-4d34-44db-b945-f82f1e2ac335    /boot    ext3    relatime        0       2
UUID=4a65c533-8bc3-4c3b-8809-d3b1713a577c    /    reiserfs    relatime 0       1
UUID=a789b4a1-992d-4abc-8da8-de6e65e52ec0    /home    reiserfs    relatime        0       2
UUID=32d69750-b61a-4398-b51f-fac997fc5ba7    none    swap    0    0

/dev/scd1       /media/cdrom0   udf,iso9660 user,noauto,exec,utf8 0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto,exec,utf8 0       0

Feito isso você pode e deve rebootar o sistema para testar se está tudo OK. Se o boot falhar, existem várias maneiras de se recuperar o sistema, mas a que eu recomendo mesmo é utilizando um LiveCD, onde você deverá dar boot na máquina, montar a partição raiz e editar novamente o arquivo acima pra corrigi-lo. Feitas as correções reinicie o sistema novamente para testar.

Se o sistema iniciar normalmente então meus parabéns, nós agora podemos encerrar novamente o sistema e colocar o novo disco despreocupados com a forma como ele será  identificado.

Encerrando a primeira parte

Se você chegou até aqui pode conectar o novo disco sem susto e ligar o PC que ele deverá iniciar na boa. Até aqui o que mostrei foi como preparar o sistema para receber o novo disco n próxima parte eu vou mostrar como transferir os dados e o sistema de um disco para outro sem precisar parar de jogar Frozzen Bubble ou Tetris para isso, nem reinstalar nada.

Uma consideração importante a ser feita aqui é que algumas distribuições Linux já vem com todas as partições configuradas com o UUID ao invés do nome dos dispositivos. O Ubuntu Linux é uma delas, então verifique se o seu sistema já está preparado e seja feliz sem fazer esforço.

Referências

Wikipedia. HotSwapping – http://pt.wikipedia.org/wiki/Hot_swapping

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.