Come posso passare un'installazione a 32 bit a una a 64 bit?


54

Ho un'installazione Ubuntu a 32 bit in esecuzione su hardware a 64 bit. Ora che multi-arch è stato implementato , vorrei passare a 64 bit senza dover reinstallare il sistema operativo.

Questa è una delle storie utente affrontate dalla specifica :

Shawn ha installato il suo sistema usando la versione a 32 bit di Ubuntu, ma il suo hardware è a 64 bit e vuole passare. Installa manualmente le versioni amd64 di dpkg e apt, sostituendo le versioni i386 e modificando quale architettura viene utilizzata come predefinita; quindi installa il pacchetto ubuntu-minimal amd64; quindi installa il pacchetto ubuntu-desktop amd64. Nel tempo i pacchetti i386 rimanenti vengono sostituiti automaticamente durante l'aggiornamento.

Tuttavia, quando provo a seguire le istruzioni lì dentro, non riesco a trovare alcuna versione a 64 bit di dpkg o apt.

Questa user story è stata implementata in modo diverso nelle specifiche finali o devo fare qualcosa di diverso?

In breve, come posso passare la mia installazione a 32 bit a 64 bit?


3
Mi rendo conto che la domanda è già stata posta su askubuntu.com/questions/5018/… , ma era prima dell'implementazione del multi-arch, quindi la risposta dovrebbe essere diversa.
David Planella,

Risposte:


36

Un tale approccio è molto complicato ed è improbabile che tutti i pacchetti siano la amd64versione anziché la i386versione. Solo i pacchetti che effettivamente ricevono gli aggiornamenti verranno probabilmente modificati nell'architettura, e probabilmente solo se nessun altro pacchetto non aggiornato si affida al loro essere i386dell'architettura. Poiché alcuni pacchetti non riceveranno alcun aggiornamento durante l'intero ciclo di supporto della tua versione di Ubuntu, probabilmente non avrai mai un amd64sistema completo che utilizza tale tecnica. Inoltre, non esiste certamente alcun supporto ufficiale per tale approccio.

Si consiglia invece di sostituire il sistema Ubuntu esistente con una nuova installazione a 64 bit.

Tuttavia, se si desidera provare questa tecnica, è necessario scaricare manualmente i .debfile per dpkge apt. Puoi trovarli nelle pagine dpkgUbuntu e aptUbuntu su Launchpad: espandi l'ultima versione in "The Oneiric Ocelot" che è contrassegnata come versione, sicurezza e / o aggiornamenti (ma probabilmente non vuoi una versione contrassegnata solo proposti e / o backport, se mai ce n'è uno). Quindi scaricare i .debfile contrassegnati amd64. In particolare, i file che desideri sono: questo perdpkg (e anche gli altri elencati, se hai quei pacchetti installati) e questo e questo e questo e questoe questo per apt.

Prima di fare qualsiasi cosa con questi file, è necessario assicurarsi di eseguire il backup di tutti i documenti importanti nel sistema Ubuntu installato e di qualsiasi altro file importante (ad esempio musica, ebook, video), perché è piuttosto probabile che tentare questa tecnica si ritorcerà contro e lascia il tuo sistema Ubuntu completamente inutilizzabile.

Puoi installare tutti questi pacchetti inserendoli in una cartella che non contiene nient'altro (supponiamo che la cartella sia chiamata debse si trovi all'interno della tua Downloadsdirectory), e quindi eseguendo questo comando:

sudo dpkg -Ri ~/Downloads/debs

Naturalmente, una volta installati, non verranno effettivamente eseguiti, poiché i loro eseguibili sono a 64 bit e il sistema Ubuntu a 32 bit esegue un kernel a 32 bit (che eseguirà solo eseguibili a 32 bit). In effetti, potrebbero non finire nemmeno l'installazione, poiché potrebbero avere script post-installazione che invocano i loro eseguibili a 64 bit non eseguibili.

Esistono vari modi per tentare di installare un kernel a 64 bit su un sistema a 32 bit, ma sono tutti estremamente complicati, quindi raccomando invece di eseguire l'avvio da un CD live Oneiric a 64 bit (che a sua volta esegue un 64 bit kernel), chroot nel sistema Ubuntu installato e utilizzare il 64-bit recentemente installato apte dpkgper installare un kernel a 64-bit.

Ecco le istruzioni specifiche per farlo ... ma per favore non prendere questo per significare che sto dicendo che funzionerà. Non ci ho provato. (Ho eseguito il chroot nei sistemi Ubuntu installati da CD live e ho eseguito la gestione dei pacchetti e altre operazioni, ma non ho tentato le operazioni di architettura incrociata suggerite qui.)

  1. Nel tuo sistema Ubuntu installato, apri una finestra Terminale ( Ctrl+ Alt+ T) ed esegui mount | grep ' on / '(incollandolo nel Terminale e premendo invio). Dovresti vedere qualcosa del genere /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0). La parte che ti interessa è il nome del dispositivo prima on(in questo esempio, è /dev/sda2). Ricordalo o scrivilo.

  2. Il passaggio 1 ti ha dato il nome del dispositivo della /partizione. Se hai una /bootpartizione separata , dovrai conoscere anche il nome del dispositivo. Quindi, in quel caso, corri mount | grep ' on /boot '. Vedrai qualcosa del genere /dev/sda1 on /boot type ext2 (rw). Ricorda o scrivi anche questo.

  3. Eseguire l'avvio da un CD live di Oneiric amd64 (ovvero 64 bit) e selezionare "Prova Ubuntu" anziché "Installa Ubuntu".

  4. Accedi a un browser Web e assicurati che la connettività Internet sia perfettamente funzionante. In caso contrario, impostalo.

  5. Apri una finestra Terminale ed esegui sudo mount /dev/sda2 /mnt(sostituisci /dev/sda2con il nome del dispositivo ottenuto nel passaggio 1, se diverso).

  6. Se il tuo sistema installato ha una /bootpartizione separata , esegui sudo mount /dev/sda1 /mnt/boot(sostituisci /dev/sda1con il nome del dispositivo ottenuto al passaggio 2, se diverso).

  7. Ora, esegui questi comandi per chroot nel tuo sistema installato:

    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. Esegui ping -c 4 launchpad.netper vedere se la connettività Internet funziona completamente dall'interno del chroot. Stai sperando in qualcosa del genere:

    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, invece, non sei stato in grado di trasmettere o ricevere pacchetti, dovrai impostare la connettività Internet nel chroot. Per fare ciò, eseguire questi comandi (per lasciare il chroot, copiare i file di configurazione rilevanti dal sistema di live CD nel chroot e immettere nuovamente il 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
    

    Mentre in genere dovresti interrompere questo processo in caso di errore, non preoccuparti se il primo e / o il secondo di questi quattro comandi falliscono, a condizione che il modo specifico in cui fallisce sia dirti che /mnt/etc/resolv.conf(o /mnt/etc/hosts) non esiste .

    Il chroot torna e riprova:

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. Esegui questi comandi per rendere l'ambiente chroot completamente pronto per l'uso:

    export HOME=/root  
    export LC_ALL=C  
    
  11. Se non hai installato i .debfile per le versioni a 64 bit di dpkge apt, fallo ora. Se li hai installati ma ci sono stati errori di configurazione, esegui dpkg --configure -aper risolverli. (Speriamo che funzioni ... potrebbe essere meglio aspettare di tentare di installarli fino a quando non ci si trova nell'ambiente CD live, nel caso in cui l'installazione del 64-bit dpkgdurante l'avvio nel sistema installato lasci dpkguno stato inutilizzabile.)

  12. Con le versioni a 64 bit dpkge aptinstallate, supponendo che installeranno automaticamente pacchetti a 64 bit, ora puoi rimuovere tutti i tuoi kernel a 32 bit e installare un kernel a 64 bit. Per rimuovere i kernel a 32 bit, esegui dpkg -l | grep linux-. Questo elenca i pacchetti installati che iniziano con linux-. Sei più specificamente interessati a pacchetti che partono come linux-generic, linux-image, linux-server, e / o linux-headers. Rimuovi questi file apt-get purge ...dove ...viene sostituito con un elenco separato da spazi dei pacchetti che stai rimuovendo.

  13. Ora reinstalla i pacchetti che hai rimosso. (In realtà, per i pacchetti che contengono numeri di versione nel nome del pacchetto, come ad esempio linux-image-3.0.0-13-generic, è necessario installare solo i nomi dei pacchetti con versione più recente.) Eseguire eseguendo apt-get install ...dove ...viene sostituito con un elenco separato da spazi dei pacchetti che si stanno installando .

  14. Aggiorna la configurazione del boot loader, smonta alcuni dispositivi e lascia il chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
  15. Se hai eseguito sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.olde non ha funzionato, ora esegui sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf.

  16. Se hai eseguito sudo cp /mnt/etc/hosts /mnt/etc/hosts.olde non ha funzionato, ora esegui sudo cp /mnt/etc/hosts.old /mnt/etc/hosts.

  17. Se il tuo sistema installato ha una /bootpartizione separata , smonta che:sudo umount /mnt/boot

  18. Smonta la /partizione del sistema installato :sudo umount /mnt

  19. Lasciare la finestra del Terminale (eseguire exit), quindi riavviare (o arrestare) il sistema di live CD e avviare il sistema installato.

  20. Verifica se il sistema è utilizzabile e esegue un kernel a 64 bit ( uname -mdovresti dire che l'architettura lo è x86_64).

Potrebbero esserci dei pacchetti aggiuntivi che devi installare, come ia32_libse / o la versione a 64 bit di libc6, per farlo funzionare. Per alcuni di essi, potresti essere informato di averne bisogno quando tenti di installare la versione a 64 bit di dpkge / o apt. Per altri, potresti non essere informato.

(Le istruzioni di cui sopra per il chrooting e il funzionamento nell'ambiente chrooted si basano in parte significativa su questa procedura correlata ma diversa e anche su alcuni miei post di Launchpad Answers , in particolare il numero 6 qui e il numero 6. Qui . E un ringraziamento speciale a Cesio per la segnalazione che il 64 bit dpkge gli apteseguibili non funzioneranno su un sistema che esegue un kernel a 32 bit.)


2
Quei binari funzioneranno con un kernel a 32 bit, Eliah?
Cesio,

@Caesium Buona chiamata. Ovviamente no. Modificherei il mio post per indicare come far funzionare il kernel a 64 bit ... tranne per il fatto che non ho idea di come installare un pacchetto del kernel a 64 bit su un sistema Ubuntu a 32 bit (in esecuzione su hardware a 64 bit, ovviamente) quando apte dpkgsono ancora a 32 bit e (presumibilmente) rifiuteranno di installare un pacchetto kernel a 64 bit. (Costruire il kernel dal sorgente, e usare la compilazione incrociata, funzionerebbe, ma questo è molto complicato e non voglio raccomandarlo. Sono sicuro che c'è un modo migliore e più semplice. Se lo conosci, sentiti libero per modificare il mio o il tuo post o commentarlo.)
Eliah Kagan,

@Caesium In realtà, penso di sapere come installare il kernel a 64 bit. Modificherò il mio post a breve per riflettere questo. Una volta fatto, se ritieni che la mia tecnica proposta funzionerebbe, sentiti libero di copiarlo e / o parafrasarlo nella tua risposta ... o, in alternativa, purché entrambe le informazioni nella tua risposta non siano nella mia e le informazioni nella mia risposta che non è nella tua sono conservate, potresti combinare le nostre risposte in un'unica risposta. (Potrebbe essere la tua risposta - va bene per me. Hai postato un po 'prima di me. Poi eliminerei la mia risposta.)
Eliah Kagan,

@Caesium Modifiche completate; Attendo con ansia i tuoi commenti.
Eliah Kagan,

Caspita, bel lavoro :) A questo punto hai fatto molti più sforzi di me, quindi non mi sognerei di copiare la mia risposta, la tua dovrebbe rimanere per il merito. Si allontana dall'obiettivo originale di utilizzare la tecnologia multiarch, ma sarò interessato a sapere se funziona comunque :) Suppongo che dovremo aspettare il poster originale :)
Cesio

25

Come indicato sopra, ho fatto:

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

Ha funzionato. Sono in grado di eseguire la mia area utente a 32 bit con kernel a 64 bit, in Ubuntu 12.04.


5
Questa risposta è formidabile. Posso confermare che funziona ancora con impertinente. L'unica differenza è che la procedura di aggiunta di un'architettura è cambiata: usare sudo dpkg --add-architecture amd64invece. Ti urlerà se lo fai nell'altro modo. Ho dovuto farlo in modo da poter eseguire il chroot in un'installazione a 64 bit da una (in precedenza) a 32 bit e ha funzionato esattamente come previsto senza intoppi.
Wug

Ho provato questo su Mint, ma sto avendo dei problemi, hai fatto qualcos'altro? Dettagli: superuser.com/q/927830/150718
dr Hannibal Lecter,

Oltre alla modifica di Wug, è necessario utilizzare anche linux-image-generic:amd64su Ubuntu 16.04. Ha funzionato bene anche senza gli ultimi due comandi.
qznc,

6

Sebbene la domanda sia simile a È possibile "aggiornare" da un'installazione a 32 bit a un'installazione a 64 bit? (Se non l'hai letto prima ti incoraggio a provarlo. La risposta fornita è buona.) Raccomando anche di leggere i seguenti link:

Per prestazioni migliori devo installare 32-bit o 64-bit?

Come posso passare un'installazione a 32 bit a una a 64 bit?

Quali sono le differenze tra 32 e 64 bit e quale dovrei scegliere?

È possibile: Sì

È facile: NO!

Se il tuo problema è con la memoria, dovresti sapere che Ubuntu 32 Bit può leggere più di 4 GB di RAM (fino a 64 GB). Quindi utilizzare l'ultima versione di Ubuntu a 32 bit con un computer con architettura a 32 o 64 bit e inserire più RAM non sarà un problema. Leggerà semplicemente la RAM aggiuntiva e funzionerà.


5

Queste risposte sono in qualche modo obsolete. Il cross-grading è ora documentato per Debian sul wiki Debian , ma non è ancora raccomandato.

Installare un kernel da un'architettura diversa è ora facile come descritto qui, ma il nuovo 'apt' non riconoscerà i pacchetti da un'architettura precedente, e quindi tutti i suoi front-end potrebbero riportare molti pacchetti rotti. Ciò richiede la modifica di tutte le dipendenze nell'altra architettura o il ripristino di apt e dpkg a 32 bit.

Quindi l'approccio migliore potrebbe essere prima di salvare i risultati di dpkg --get-selections, rimuovere: i386 da quello e scaricare un pacchetto amd64 per ciascuna delle dipendenze nella cache:

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

Nella migliore delle ipotesi è probabile che sia lento e dispendioso in termini di tempo nel risolvere le dipendenze.


5

Queste istruzioni avviano il tuo sistema con un kernel a 64 bit ma non modificano la maggior parte dei programmi utente.

Dopo aver aggiornato il mio sistema con CPU a 64 bit, volevo anche installare un kernel a 64 bit sul mio Ubuntu 14.04.2 a 32 bit (nome in codice: Trusty). Per fare ciò ho inserito i seguenti comandi come utente root :

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

Appunti:

  1. Questo potrebbe rimuovere il kernel a 32 bit come affidabile - per impostazione predefinita - viene fornito con un kernel aggiornato (il kernel da utopic), vedere le Note di rilascio 14.04 . In questo caso il kernel corrente è in conflitto con il kernel a 64 bit da installare e quindi viene rimosso. Se questa idea non ti piace, potresti provare il vecchio pacchetto del kernel a 64 bit "linux-generic-lts-trusty: amd64".

  2. Il comando "--add-architecure" è essenziale. Senza di essa, il sistema di pacchetti non supporta pacchetti di architetture diverse, vedere Multiarch-HowTo

  3. Per vedere cosa apt-getfarà al tuo sistema, eseguilo con le opzioni -Vsche abilitano la "modalità di simulazione dettagliata". Questo stamperà tutti i pacchetti da installare e rimuovere.

  4. Se il tuo sistema si avvia usando il nuovo kernel dipende dalla grubconfigurazione. Come utente root , esegui update-grubper effettuare l'aggiornamento di grub e stampare la configurazione di avvio corrente. La prima immagine nell'elenco verrà avviata come impostazione predefinita.

  5. Per selezionare un'immagine del kernel diverso, ho rimosso la linea GRUB_HIDDEN_TIMEOUT=0da /etc/default/grube corse come utente root update-grub . Al momento dell'avvio, ora puoi selezionare un kernel diverso (hai 10 secondi per premere qualsiasi tasto altrimenti grub continuerà con il kernel predefinito).

  6. La risposta con il maggior numero di voti è del 2011 ed è irrimediabilmente obsoleta secondo me. Multiarch consente di installare pacchetti di librerie da più architetture sullo stesso computer senza troppi problemi.


Questo è un bel consiglio semplice che ha funzionato quasi per me il 14.10 (Utopic) (comunque l'ho fatto, il apt-get install linux-generic:amd64che non deve essere molto importante per l'esperimento)! Se eseguo l'opzione di avvio "salvataggio", il sistema funziona, ma X non utilizza nouveaudriver video e altro. Se avvio normalmente, l'avvio si interrompe a un certo punto e il sistema si riavvia. (Ma la prima volta, sono stato in grado di avviarlo con successo.) Non sono sicuro che il problema riguardi il driver video durante l'avvio "normale" o qualcos'altro.
imz - Ivan Zakharyaschev,

Il driver video e X si sono rivelati non (statisticamente) correlati ai miei arresti anomali / riavvii con il kernel amd64. Per ora è solo un mistero: bugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116 .
imz - Ivan Zakharyaschev,

2

Forse, dato che sto affrontando lo stesso problema, questo funzionerà, è quello che stavo pianificando di fare:

Ottieni una versione a 64 bit del sistema operativo, installa in una partizione, quando completa copia i documenti e altre cose dall'installazione a 32 bit, quando tutto viene copiato in modo sicuro puoi formattare il resto dell'unità e usarlo.


2

Sì, la linea di architettura straniera è sicuramente vitale per l'installazione di QUALSIASI pacchetto cross-arch. Ma dopo, fai come molti altri utenti hanno menzionato:

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

Questo dovrebbe quasi farlo ...


Hai provato? non funziona davvero, ho problemi quando inizia a sostituire dpkg e perl con le loro controparti amd64
Janus Troelsen,

2

La mia ricetta per Ubuntu 16.04 Xenial, testata su una macchina virtuale Ubuntu a 32 bit appena installata con sistema standard e server SSH ma senza GUI:

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

(altrimenti installerebbe thermald: amd64 e non lo riavvierebbe nel kernel a 32 bit)

reboot

dopo il riavvio con kernel a 64 bit:

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

digita "Sì, fai come dico io!" quando richiesto, sarà al sicuro

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

nel ciclo sopra, rimuoviamo i file .deb che sono stati installati con successo e hanno ottenuto lo stato 'ii' nell'elenco dpkg.

dobbiamo ripetere le dpkg -iesecuzioni, poiché non riesce dal primo tentativo

reboot

ora, sia con kernel a 64 bit sia con userspace, i pacchetti i386 rimanenti possono essere rimossi:

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

l'elenco che hai salvato nel pkgs1file che puoi utilizzare per qualsiasi ulteriore esigenza.


È un po 'magico, ma mi ha aiutato a fare una transizione da 32 a 64 bit tramite SSH sul PC remoto.
user271872

1

Buona domanda. Ho avuto una caccia in giro e a parte la storia dell'utente che citi, non riesco a trovare alcun dettaglio su come farlo. Tutta la documentazione indica che è solo per l'esecuzione di applicazioni a 32 bit su un sistema operativo già a 64 bit.

Tuttavia, se sei disposto a sperimentare, puoi provare quanto segue (derivato dal mio link in [1])

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

Penso che dovrai iniziare con un kernel amd64, poiché quello a 32 bit non sarà in grado di eseguire binari a 64 bit. Tuttavia, quello a 64 bit dovrebbe eseguire binari a 32 bit (se è installato ia32-libs?).

Se ottieni il kernel a 64 bit installato e avviato, puoi andare da lì per installare apt: amd64, quindi seguire la storia dell'utente come precedentemente citato, ubuntu-minimal, ubuntu-desktop, ecc.

Dopo aver installato apt: amd64 è installato, penso che tu possa rimuovere la linea di architettura straniera dal momento che sostanzialmente sei passato a quel punto.

Dichiarazione di non responsabilità: non ho un sistema a 32 bit da testare, quindi è tutta una supposizione. In bocca al lupo!

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


1

Il crossgrading (aggiornamento a un'architettura diversa) non è ancora supportato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.