Bem, como eu prometi, vou documentar o que eu tentei usar para clonar partições, muitas vezes indo contra os conselhos da internet, por teimosia, hehehe.
Aos poucos vou tentando encontrar os links de páginas que me ajudaram, e às vezes de coisas novas que resumem bem o assunto.
Os dois links abaixo explicam sobre o robocopy
http://serverfault.com/questions/409991/on-windows-is-it-safe-to-do-a-robocopy-in-order-to-clone-the-system
http://www.ijdens.com/home/usingrobocopytobackupallfilesfromadisk
Mas a página que eu usei mesmo como referência foi esta aqui:
http://winhlp.com/node/66
Analisei as opções do robocopy e vi o que seria necessário fazer além da cópia dos arquivos. Achei razoável e comecei os trabalhos.
Um exemplo de comando que usei foi:
robocopy d:\Windows c:\Windows /e /copy:datsou /r:3 /w:2 /zb /np /xj /log:robocopy_windows.log
(o exemplo acima é só para a pasta Windows, eu fui fazendo aos poucos para testar)
Embora haja ótimo suporte para copiar atributos, permissões e proprietários (/copy:datsou), o máximo de suporte a symbolic links e junctions é ignorá-los durante a cópia (/xj no exemplo acima, e também o /sl). Senão há o risco de fazer cópias infinitas recursivamente. Como uma instalação do Windows faz pouco uso desses recursos do sistema de arquivos, recriei as junctions e symbolic links de “Users” e “Program Files” manualmente usando uns poucos scripts.
Infelizmente esqueci dos hard links, e são milhares na pasta do Windows. Acabei ficando com uma cópia onde os arquivos hardemente linkados ficaram duplicados de verdade… Tentei corrigir com alguns scripts, procurando e recriando os links. Aprendi VbScript para complementar os scripts .bat, já que escrever muita lógica em .bat é muito sofrimento (e VbScript também está disponível no ambiente de recuperação iniciado pelo DVD de instalação do Windows, olha só). Acho que poderia ter sido JScript, que é quase igual a JavaScript, mas resolvi usar VbScript porque não precisaria duplicar todas as barras invertidas nas strings (VbScript aceita \ normalmente, JScript tem aqueles escapes precisaria trocar tudo por \\) e também para mexer em algo diferente. Consegui recriar alguns links mas ocorreram erros de permissão em alguns outros. Aprendi então uns comandos interessantes para alterar permissões de alguma pasta:
takeown /F alguma_pasta /R
icacls alguma_pasta /grant:r todos:f /T
Pois é, no Windows não basta você ser administrador e estar executando fora do sistema operacional cujos arquivos você quer copiar: ainda assim é necessário apropriar-se dos arquivos com takeown e alterar as permissões com icacls! No caso do robocopy, o tal “modo backup” da opção /zb deve ter dado uma ajudada para diminuir o sofrimento com permissões. Ah, e sim, o “todos” aparece no comando traduzido para a língua do sistema. A dica que eu segui dizia para usar everyone mas comigo o que funcionou foi o todos mesmo. Bizarro. O formato todo dos comandos é curioso, aliás: cada um tem seu jeito de indicar ação recursiva (/R e /T)…
No fim, mais ou menos neste instante, tendo alterado as permissões de toda a pasta Windows (a cópia), sem ter certeza quais hard links tinham sido corrigidos e quais faltavam no meu script, e sem saber como restauraria as permissões depois, decidi mudar a estratégia e fazer um clone da partição, apesar da cópia anterior ter resultado numa instalação do Windows funcional no novo disco rígido. Usei as ferramentas gráficas de edição de partições do Linux para criar um backup da partição original e restaurá-la por cima de outra. Mais especificamente, usei o gerenciador de partições do KDE, mas imagino que as capacidades não seriam muito diferentes se usasse o Gnome Disks que também tenho instalado (ainda estava seguindo a ideia de evitar instalar coisas novas…).
Não foi nenhum problema restaurar uma partição NTFS menor para uma maior em outro disco. A ferramenta suportou essa situação sem dificuldade. Exceto pelo setor de boot… O resultado era o tal do “blinking cursor”, o cursor piscante que não prossegue para o sistema operacional mas também não dá nenhuma mensagem de erro.
A descrição mais próxima do problema que me aconteceu eu encontrei aqui:
http://reboot.pro/topic/8233-problem-with-booting-cloned-xp-from-a-hdd-solved/
(o problema é identificado na mensagem #11)
Ou seja, o setor de boot dentro da partição inclui alguns valores de geometria de disco que estavam corretos logo após a formatação mas ficaram inválidos ao copiar outra partição por cima. No tópico é sugerido usar um tal de testdisk (no fim eu resolvi com o partclone.ntfsfixboot presente no Clonezilla).
Se tiver curiosidade sobre o Volume Boot Record de uma partição NTFS do Windows, encontrei este link: http://thestarman.narod.ru/asm/mbr/VistaVBR.htm
Se tiver curiosidade também sobre o MBR (Master Boot Record), aquele que fica fora das partições do disco, tem também esta página: http://thestarman.pcministry.com/asm/mbr/VistaMBR.htm
Já sobre particionamento GPT eu não aprendi nada nesta empreitada porque meu sistema não usa e eu já estava com atividades suficientes.
Sei que não seria impossível consertar byte-a-byte do VBR e gravá-lo com dd ou alguma ferramenta do tipo (já fiz algo parecido), mas não era exatamente o que eu tinha em mente. Eu queria limitar o número de programas usados, mas também não precisa ser tudo tão artesanal.
O problema ocorrido me surpreendeu porque eu imaginava que ou
- o programa de copiar partições faria isso corretamente ou simplesmente indicaria que tal tipo de cópia não era suportado; ou
- que qualquer ferramenta de correção de boot presente no próprio Windows consertaria isso
No fim, a verdade é que nenhum desses é capaz de corrigir isso. No Windows eu testei o bootsect.exe, bootrec.exe e o bcdboot.exe e a operação ou tinha sucesso mas não resolvia, ou não reconhecia o disco como bootável.
Mencionei na postagem anterior que era possível configurar o Grub para fazer boot da nova instalação a partir do boot loader do Windows, ignorando o boot record. Aprendi isso numa página como esta (não sei se foi exatamente esta):
https://ubuntuforums.org/showthread.php?t=2230300
e o conceito é relativamente simples: trocar o
chainloader +1
por
ntldr ($root)/bootmgr
Os outros comandos que vêm antes são basicamente carregamento de módulos para poder usar essa funcionalidade:
insmod part_msdos
insmod ntfs
insmod ntldr
e busca pela partição que será a variável $root
search .......
set root=........
Não copiei o script exato do Grub aqui porque os detalhes do funcionamento e a necessidade de tantos comando me deixaram confuso. No modo interativo do Grub bastou setar o root e chamar o chainloader ou ntldr, mas imagino que para rodar automaticamente o Grub tenha que se precaver e tentar mais de uma estratégia para encontrar a partição certa… Não facilita nada o fato de todos os sistemas operacionais e BIOS concordarem quem é o /dev/sda ou drive C: enquanto só o Grub atribuiu o outro disco para o hd0…
Claro, mexer nessas configurações só funciona se você quiser continuar usando o Grub e não for apagar sua instalação do Linux. Para mim estava OK (consegui passar por toda essa aventura sem perder nenhuma partição! \o/), mas eu ainda queria encontrar uma solução que eu pudesse aplicar em outros computadores, caso viesse a ser necessário.
Foi aí que tentei o Clonezilla. Se termina com zilla deve ser bom, foi o que pensei, hahaha. Bem, o resultado da experiência com ele já foi descrita na postagem anterior, então nem precisa explicar muito mais do que já foi dito. A cópia não foi muito melhor que a tentativa anterior (exceto pela velocidade, que foi melhor), deu o mesmo cursor piscante (será que esqueci de marcar alguma opção?), mas esta FAQ resolveu, ao indicar o uso do partclone.ntfsfixboot:
http://drbl.org/faq/fine-print.php?path=./2_System/23_Missing_OS.faq#23_Missing_OS.faq
E esse é o fim da história. Fiz a cópia e não usei; mas não perdi nada e aprendi algumas coisas. Até editei as configurações do Grub para ocultar a partição copiada, que agora já está com o Windows desatualizado. De qualquer jeito estou escrevendo isto no Linux e faz um tempinho que não abro o Windows… Só não apaguei a cópia porque não estou precisando do espaço e serve como backup.