Como posso mudar uma instalação de 32 bits para uma de 64 bits?

54

Eu tenho uma instalação do Ubuntu de 32 bits em execução no hardware de 64 bits. Agora que o multi-arco foi implementado , eu gostaria de mudar para 64 bits sem precisar reinstalar o sistema operacional.

Esta é uma das histórias de usuário abordadas pelas especificações :

Shawn instalou seu sistema usando a versão de 32 bits do Ubuntu, mas seu hardware é de 64 bits e ele deseja mudar. Ele instala manualmente as versões amd64 do dpkg e apt, substituindo as versões do i386 e alterando a arquitetura usada como padrão; então ele instala o pacote amd64 ubuntu-minimal; então ele instala o pacote amd64 ubuntu-desktop. Com o tempo, os pacotes i386 restantes são substituídos automaticamente na atualização.

No entanto, ao tentar seguir as instruções, não consigo encontrar nenhuma versão de 64 bits do dpkg ou apt.

Essa história de usuário foi implementada de uma maneira diferente na especificação final ou preciso fazer algo diferente?

Em resumo, como posso mudar minha instalação de 32 bits para 64 bits?

David Planella
fonte
3
Sei que a pergunta já foi feita em askubuntu.com/questions/5018/… , mas isso foi antes da implementação do multi-arch, então a resposta deveria ser diferente.
David Planella

Respostas:

36

Essa abordagem é muito complicada e dificilmente resultará em todos os seus pacotes sendo a amd64versão em vez da i386versão. Apenas os pacotes que realmente receberem atualizações provavelmente serão alterados na arquitetura, e provavelmente apenas se nenhum outro pacote que não estiver sendo atualizado depender da sua i386arquitetura. Uma vez que alguns pacotes não receberá quaisquer atualizações ao longo de todo o ciclo de suporte de sua versão do Ubuntu, você provavelmente nunca ter um totalmente amd64sistema usando essa técnica. Além disso, certamente não há apoio oficial para essa abordagem.

Recomenda-se substituir o sistema Ubuntu existente por uma nova instalação de 64 bits.

No entanto, se você deseja tentar esta técnica, precisará baixar manualmente os .debarquivos para dpkge apt. Você pode encontrá-los nas páginas do dpkgUbuntu e aptdo Ubuntu no Launchpad - expanda a versão mais recente em "The Oneiric Ocelot" que está marcada como release, segurança e / ou atualizações (mas você provavelmente não quer uma versão marcada apenas proposto e / ou backports, se houver). Em seguida, baixe os .debarquivos marcados amd64. Especificamente, os arquivos que você deseja são: este paradpkg (e os outros listados também, se você tiver esses pacotes instalados) e isso e isso e isso e isso e issoe isso para apt.

Antes de fazer qualquer coisa com esses arquivos, você deve fazer backup de todos os documentos importantes no sistema Ubuntu instalado e de outros arquivos importantes (por exemplo, músicas, ebooks, vídeos), porque é bem provável que a tentativa dessa técnica seja um tiro pela culatra. e deixe seu sistema Ubuntu completamente inutilizável.

Você pode instalar todos esses pacotes colocando-os em uma pasta que não contém mais nada (suponha que a pasta seja chamada debse esteja dentro do seu Downloadsdiretório) e depois execute este comando:

sudo dpkg -Ri ~/Downloads/debs

Obviamente, depois de instalá-los, eles não serão executados, porque seus executáveis ​​são de 64 bits e seu sistema Ubuntu de 32 bits está executando um kernel de 32 bits (que executará apenas executáveis ​​de 32 bits). De fato, eles podem nem concluir a instalação, pois podem ter scripts de pós-instalação que invocam seus executáveis ​​de 64 bits.

Existem várias maneiras de tentar instalar um kernel de 64 bits em um sistema de 32 bits, mas todos são extremamente complicados; portanto, recomendo que você inicialize a partir de um live CD Oneiric de 64 bits (que executa um sistema de 64 bits). kroot), faça chroot no sistema Ubuntu instalado e use o recentemente instalado de 64 bits apte dpkgpara instalar um kernel de 64 bits.

Aqui estão instruções específicas para fazer isso ... mas, por favor, não entenda que estou dizendo que funcionará. Eu não tentei isso. (Entrei em sistemas Ubuntu instalados a partir de CD's ao vivo e realizei o gerenciamento de pacotes e outras operações, mas não tentei as operações de arquitetura cruzada sugeridas aqui.)

  1. No sistema Ubuntu instalado, abra uma janela do Terminal ( Ctrl+ Alt+ T) e execute mount | grep ' on / '(colando-a no Terminal e pressionando enter). Você deve ver algo como /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0). A parte que você está interessado é o nome do dispositivo antes on(neste exemplo, é /dev/sda2). Lembre-se disso ou escreva-o.

  2. A etapa 1 forneceu o nome do dispositivo da /partição. Se você tiver uma /bootpartição separada , também precisará saber o nome do dispositivo. Então, nesse caso, corra mount | grep ' on /boot '. Você verá algo como /dev/sda1 on /boot type ext2 (rw). Lembre-se ou escreva isso também.

  3. Inicialize a partir de um CD ao vivo Oneiric amd64 (ou seja, 64 bits) e selecione "Experimente o Ubuntu" em vez de "Instalar o Ubuntu".

  4. Entre em um navegador da web e verifique se a conectividade com a Internet está totalmente funcional. Se não estiver, configure-o.

  5. Abra uma janela do Terminal e execute sudo mount /dev/sda2 /mnt(substitua /dev/sda2pelo nome do dispositivo que você obteve na etapa 1, se diferente).

  6. Se o sistema instalado tiver uma /bootpartição separada , execute sudo mount /dev/sda1 /mnt/boot(substitua /dev/sda1pelo nome do dispositivo que você obteve na etapa 2, se diferente).

  7. Agora, execute estes comandos para fazer chroot no seu sistema instalado:

    sudo mount --bind /dev /mnt/dev  
    sudo chroot /mnt  
    mount -t proc none /proc  
    mount -t sysfs none /sys  
    mount -t devpts none /dev/pts  
    
  8. Corra ping -c 4 launchpad.netpara ver se a conectividade com a Internet funciona totalmente de dentro do chroot. Você está esperando algo assim:

    PING launchpad.net (91.189.89.223) 56(84) bytes of data.
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=1 ttl=41 time=141 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=2 ttl=41 time=143 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=3 ttl=41 time=142 ms
    64 bytes from launchpad-net.banana.canonical.com (91.189.89.223): icmp_req=4 ttl=41 time=140 ms
    
    --- launchpad.net ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3003ms
    
  9. Se, em vez disso, você não conseguir transmitir ou receber pacotes, precisará configurar a conectividade com a Internet no chroot. Para fazer isso, execute estes comandos (para sair do chroot, copie os arquivos de configuração relevantes do sistema de CD ao vivo no chroot e digite novamente o chroot):

    sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old  
    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old  
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf  
    sudo cp /etc/hosts /mnt/etc/hosts
    

    Embora geralmente você deva interromper esse processo se houver um erro, não se preocupe se o primeiro e / ou o segundo desses quatro comandos falharem, desde que a maneira específica pela qual ele falhe seja informando que /mnt/etc/resolv.conf(ou /mnt/etc/hosts) não existe .

    O chroot volta e tenta novamente:

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. Execute estes comandos para deixar seu ambiente chrootado totalmente pronto para uso:

    export HOME=/root  
    export LC_ALL=C  
    
  11. Se você não instalou os .debarquivos para as versões de 64 bits do dpkge apt, faça-o agora. Se você os instalou, mas houve erros de configuração, execute dpkg --configure -apara corrigi-los. (Espero que isso funcione ... talvez seja melhor esperar para tentar instalá-los até que você esteja no ambiente do live CD, caso a instalação de 64 bits dpkgenquanto inicializada no sistema instalado saia dpkgem um estado inutilizável.)

  12. Com as versões de 64 bits dpkge aptinstaladas, supondo que eles instalem automaticamente pacotes de 64 bits, agora você pode remover todos os seus kernels de 32 bits e instalar um kernel de 64 bits. Para remover seus kernels de 32 bits, execute dpkg -l | grep linux-. Isso lista os pacotes instalados que começam com linux-. Você está interessado mais especificamente em pacotes que começam como linux-generic, linux-image, linux-server, e / ou linux-headers. Remova esses arquivos com apt-get purge ...where ...é substituído por uma lista separada por espaço dos pacotes que você está removendo.

  13. Agora reinstale os pacotes que você removeu. (Na verdade, para pacotes que contêm números de versão no nome do pacote, como por exemplo linux-image-3.0.0-13-generic, você só precisa instalar os nomes dos pacotes com versão mais recente.) Faça isso executando apt-get install ...onde ...é substituído por uma lista separada por espaço dos pacotes que você está instalando .

  14. Atualize a configuração do carregador de inicialização, desmonte alguns dispositivos e deixe o chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
  15. Se você executou sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.olde não falhou, execute agora sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf.

  16. Se você executou sudo cp /mnt/etc/hosts /mnt/etc/hosts.olde não falhou, execute agora sudo cp /mnt/etc/hosts.old /mnt/etc/hosts.

  17. Se o seu sistema instalado tiver uma /bootpartição separada , desmonte que:sudo umount /mnt/boot

  18. Desmonte a /partição do sistema instalado :sudo umount /mnt

  19. Deixe a janela Terminal (execução exit), depois reinicie (ou desligue) o sistema do Live CD e inicialize no sistema instalado.

  20. Veja se o sistema é utilizável e está executando um kernel de 64 bits ( uname -mdeve-se dizer que a arquitetura é x86_64).

Pode haver pacotes adicionais que você precisa instalar, como ia32_libse / ou a versão de 64 bits libc6, para que isso funcione. Para alguns deles, você pode ser informado de que precisa deles ao tentar instalar a versão de 64 bits dpkge / ou apt. Para outros, você pode não ser informado.

(As instruções acima para fazer chroot e operar no ambiente chroot são baseadas em parte significativa nesse procedimento relacionado, mas diferente, e também em algumas postagens das Respostas do Launchpad , especialmente # 6 aqui e # 6 aqui . E agradecimentos especiais a Cesium por apontar que a 64-bit dpkge aptexecutáveis não será executado em um sistema executando um kernel de 32 bits.)

Eliah Kagan
fonte
2
Esses binários rodarão sob um kernel de 32 bits, Eliah?
Cesium
@ Caesium Good call. Claro que não. Eu editaria minha postagem para indicar como colocar o kernel de 64 bits em execução ... exceto que não tenho idéia de como instalar um pacote de kernel de 64 bits em um sistema Ubuntu de 32 bits (executando em hardware de 64 bits, é claro) quando apte dpkgainda tiver 32 bits e (presumivelmente) se recusará a instalar um pacote de kernel de 64 bits. (Construir o kernel a partir do código-fonte e usar a compilação cruzada funcionaria, mas isso é muito complicado e não quero recomendá-lo. Tenho certeza de que há uma maneira melhor e mais fácil. Se você o conhece, sinta-se à vontade para editar o meu ou o seu post ou comentário sobre isso).
Elias Kagan
@ Caesium Na verdade, acho que sei como instalar o kernel de 64 bits. Em breve, editarei minha postagem para refletir isso. Quando o fizer, se você achar que minha técnica proposta funcionaria, sinta-se à vontade para copiá-la e / ou parafrasear em sua resposta ... ou, alternativamente, desde que as informações contidas na sua resposta não sejam as minhas e as informações na minha resposta que não está na sua, você pode preservar as respostas em uma única resposta. (Poderia ser a sua resposta. - Isso é bom para mim Você se postar um pouco antes de mim Então eu apagar a minha resposta..)
Elias Kagan
Edições do Caesium concluídas; Aguardo seus comentários.
Eliah Kagan
Uau, bom trabalho :) Neste ponto, você se esforçou muito mais do que eu para não sonhar em copiar a minha resposta, a sua deve permanecer pelo crédito. Ele se afasta do objetivo original de usar a tecnologia multiarca, mas eu vou estar interessado em saber se funciona mesmo assim :) Acho que teremos que esperar pelo pôster original :) #
1178
25

Como mencionado acima, eu fiz:

echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install gcc-multilib
sudo update-grub

Funcionou. Sou capaz de executar minha terra de usuário de 32 bits com o kernel de 64 bits, no Ubuntu 12.04.

VJ-
fonte
5
Essa resposta é demais. Posso confirmar que ainda funciona com atrevido. A única diferença é que o procedimento para adicionar uma arquitetura mudou: use em sudo dpkg --add-architecture amd64vez disso. Gritará com você se você fizer o contrário. Eu precisava fazer isso para poder executar uma instalação de 64 bits a partir de uma instalação de 32 bits (anteriormente) e funcionou exatamente como o esperado, sem problemas.
Wug
Eu tentei isso no Mint, mas estou tendo alguns problemas, você fez mais alguma coisa? Detalhes: superuser.com/q/927830/150718
dr Hannibal Lecter
Além da alteração do Wug, você também precisa usar o linux-image-generic:amd64Ubuntu 16.04. Funcionou bem, mesmo sem os dois últimos comandos.
Qznc 17/03/19
6

Embora a pergunta seja semelhante a É possível "atualizar" de uma instalação de 32 bits para uma de 64 bits? (Se você ainda não leu antes, sugiro que tente. A resposta fornecida é boa.) Também recomendo a leitura dos seguintes links:

Para um melhor desempenho, devo instalar 32 ou 64 bits?

Como posso mudar uma instalação de 32 bits para uma de 64 bits?

Quais são as diferenças entre 32 e 64 bits e qual devo escolher?

É possível: Sim

É fácil: NÃO!

Se o seu problema for com memória, você deve saber que o Ubuntu 32 Bit pode ler mais de 4 GB de RAM (até 64 GB). Portanto, usar a versão mais recente do Ubuntu 32 bits em um computador com arquitetura de 32 bits ou 64 bits e colocar mais RAM não será um problema. Simplesmente lerá a RAM extra e funcionará.

Luis Alvarado
fonte
5

Essas respostas estão um pouco desatualizadas. A classificação cruzada agora está documentada para o Debian no wiki do Debian , mas ainda não é recomendada.

Instalar um kernel a partir de uma arquitetura diferente agora é tão fácil como descrito lá, mas o novo 'apt' não reconhece pacotes de uma arquitetura anterior e, portanto, todos os seus front-ends podem relatar muitos pacotes quebrados. Isso requer a alteração de todas as dependências para a outra arquitetura ou a reversão do apt e do dpkg para 32 bits.

Portanto, a melhor abordagem pode ser primeiro salvar os resultados de dpkg --get-selections, strip: i386 e baixar um pacote amd64 para cada uma das dependências do cache:

apt-get --download-only install perl:amd64 python3:amd64 python3-gi:amd64 xorg:amd64...

Na melhor das hipóteses, é provável que seja lento e demorado resolver as dependências.

Cedric Knight
fonte
5

Essas instruções fazem o sistema inicializar com um kernel de 64 bits, mas não altera a maioria dos programas da terra do usuário.

Depois de atualizar meu sistema com CPU de 64 bits, eu também queria instalar um kernel de 64 bits no meu Ubuntu 14.04.2 de 32 bits (codinome: Trusty). Para fazer isso, digitei os seguintes comandos como usuário root :

dpkg --add-architecture amd64   
apt-get update
apt-get install linux-generic-lts-utopic:amd64

Notas:

  1. Isso pode remover seu kernel de 32 bits como confiável - por padrão - é fornecido com um kernel atualizado (o kernel do utopic), consulte as Notas da versão 14.04 . Nesse caso, seu kernel atual entra em conflito com o kernel de 64 bits a ser instalado e, portanto, é removido. Se você não gostou dessa idéia, pode tentar o pacote mais antigo do kernel de 64 bits "linux-generic-lts-trusty: amd64".

  2. O comando "--add-architecure" é essencial. Sem ele, o sistema de pacotes não suporta pacotes de arquiteturas diferentes, consulte Multiarch-HowTo

  3. Para ver o que apt-getfará com o seu sistema, execute-o com as opções -Vsque ativam o "modo de simulação detalhado". Isso imprimirá todos os pacotes a serem instalados e removidos.

  4. A inicialização do sistema usando o novo kernel depende da grubconfiguração. Como usuário root , execute update-grubpara atualizar o grub e imprimir a configuração de inicialização atual. A primeira imagem da lista será inicializada como padrão.

  5. Para selecionar uma imagem de kernel diferente, tirei a linha GRUB_HIDDEN_TIMEOUT=0de /etc/default/grube correu como usuário root update-grub . No momento da inicialização, agora você pode selecionar um kernel diferente (você tem 10 segundos para pressionar qualquer tecla, caso contrário, o grub continuará com o kernel padrão).

  6. A resposta com o maior número de votos é de 2011 e está irremediavelmente desatualizada na minha opinião. O Multiarch permite instalar pacotes de bibliotecas de várias arquiteturas na mesma máquina sem muito barulho.

Daniel K.
fonte
Esse é um conselho simples e agradável que quase funcionou para mim em 14.10 (Utopic) (no entanto, fiz o apt-get install linux-generic:amd64que não deve ser muito importante para o experimento)! Se eu passar pela opção de inicialização "resgate", o sistema será executado, mas o X não usa nouveaudriver de vídeo e outras coisas. Se eu inicializar normalmente, a inicialização será interrompida em algum momento e o sistema será reiniciado. (Mas, na primeira vez, consegui inicializar com êxito.) Não tenho certeza se o problema está no driver de vídeo durante a inicialização "normal" ou em outra coisa.
imz - Ivan Zakharyaschev 09/09
O driver de vídeo e o X revelaram-se não estatisticamente relacionados às minhas falhas / reinicializações com o kernel amd64. É apenas um mistério, por enquanto - bugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116 .
imz - Ivan Zakharyaschev 12/09
2

Talvez, ao enfrentar o mesmo problema, isso funcione, seja o que eu estava planejando fazer:

Obtenha uma versão de 64 bits do sistema operacional, instale em uma partição; quando concluir, copie os documentos e outros itens da instalação de 32 bits; quando tudo for copiado com segurança, você poderá formatar o restante da unidade e usá-lo.

ubuntufan
fonte
2

Sim, a linha de arquitetura estrangeira é definitivamente vital para a instalação de QUALQUER pacote cross-arch. Mas depois disso, faça o que vários outros usuários mencionaram:

sudo apt-get update
sudo apt-get install linux-image:amd64
sudo apt-get install linux-modules:amd64
sudo init 6 #reboot into new kernel
sudo apt-get install apt:amd64
sudo apt-get install ubuntu-desktop:amd64

Isso deveria fazê-lo ...

realkstrawn93
fonte
você tentou? ele realmente não trabalho, eu recebo problemas uma vez que começa substituindo dpkg e perl por suas contrapartes amd64
Janus Troelsen
2

Minha receita para o Ubuntu 16.04 Xenial, testada na Ubuntu VM de 32 bits recém-instalada com sistema padrão e servidor SSH, mas sem a GUI:

sudo -s
dpkg --get-selections > pkg1
dpkg --add-architecture amd64
apt update
apt install linux-image-generic:amd64 thermald 

(caso contrário, ele instalaria o thermald: amd64 e falharia ao reiniciá-lo no kernel de 32 bits)

reboot

após a reinicialização com o kernel de 64 bits:

sudo -s
unset LANG
apt install apt:amd64 apt-utils:amd64

digite 'Sim, faça o que eu digo!' quando solicitado, será seguro

mkdir /tmp/upgrade 
cd /tmp/upgrade
pkgs() { dpkg -l | awk '$4=="'$1'"{print $2}' | awk -F: '{print $1}' | sort -u
}
apt download $(comm -23 <(pkgs i386) <(pkgs amd64))
while ls *amd64*deb
do dpkg -i *amd64*deb
   dpkg -l | awk '$1=="ii" && $4=="amd64" {print $2}' | awk -F: '{print $1}' |
   while read a
   do [ -f ${a}_*amd64*deb ] && rm ${a}_*amd64*deb
   done
done

no loop acima, removemos os arquivos .deb que foram instalados com êxito e obtiveram o status 'ii' na lista do dpkg.

precisamos repetir dpkg -iexecuções, pois não obtém sucesso desde a primeira tentativa

reboot

agora, com o kernel de 64 bits e o espaço do usuário, os pacotes i386 restantes podem ser removidos:

dpkg --purge $(dpkg -l | awk '$4=="i386"{print $2}')

a lista que você salvou no pkgs1arquivo que você pode usar para quaisquer outras necessidades.

Wladimir Mutel
fonte
Isso é meio mágico, mas me ajudou a fazer a transição de 32 a 64 bits via SSH no PC remoto.
user271872
1

Boa pergunta. Eu tive uma caçada por aí e, além da história do usuário que você cita, não consigo encontrar detalhes sobre como fazer isso. Toda a documentação indica que é apenas para executar aplicativos de 32 bits em um sistema operacional de 64 bits.

No entanto, se você estiver disposto a experimentar, tente o seguinte (derivado do meu link em [1])

 echo foreign-architecture amd64 | sudo tee /etc/dpkg/dpkg.cfg.d/multiarch
 sudo apt-get install linux-image:amd64

Eu acho que você terá que começar com um kernel amd64, pois o de 32 bits não poderá executar binários de 64 bits. No entanto, o de 64 bits deve executar binários de 32 bits (se o ia32-libs estiver instalado?).

Se você instalar e inicializar o kernel de 64 bits, poderá instalar o apt: amd64 e seguir a história do usuário conforme citado anteriormente, ubuntu-minimal, ubuntu-desktop, etc.

Após o apt: amd64 estar instalado, acho que você pode remover a linha de arquitetura estrangeira, pois você mudou essencialmente nesse ponto.

Disclaimer: Eu não tenho um sistema de 32 bits para testar, então isso é tudo adivinhação. Boa sorte!

[1] https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Beta1#Improved_handling_of_32-bit_compatibility_on_amd64_systems

Césio
fonte
1

A atualização (atualização para uma arquitetura diferente) ainda não é suportada.

tumbleweed
fonte