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

52

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.

Questo è uno dei storie utente indirizzate dalle specifiche :

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 cambiando quale architettura viene utilizzata come predefinita; quindi installa il pacchetto amd64 ubuntu-minimal; quindi installa il pacchetto ubuntu-desktop amd64. Nel tempo i restanti pacchetti i386 vengono sostituiti automaticamente all'aggiornamento.

Tuttavia, quando provo a seguire le istruzioni qui, non riesco a trovare nessuna 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 l'installazione a 32 bit a 64 bit?

    
posta David Planella 22.11.2011 - 20:34
fonte

10 risposte

35

Un approccio del genere è molto complicato ed è improbabile che il risultato sia che tutti i tuoi pacchetti siano la versione amd64 invece della versione i386 . Solo i pacchetti che ricevono effettivamente gli aggiornamenti saranno probabilmente modificati in architettura e probabilmente solo se nessun altro pacchetto non viene aggiornato sulla base dell'architettura i386 . Dal momento che alcuni pacchetti non riceveranno nessun aggiornamento durante l'intero ciclo di supporto della tua versione di Ubuntu, probabilmente non avrai mai un sistema completamente amd64 utilizzando tale tecnica. Inoltre, non esiste un supporto ufficiale per un simile approccio.

Ti consigliamo di sostituire il tuo sistema Ubuntu esistente con una nuova installazione a 64 bit.

Tuttavia, se desideri provare questa tecnica, dovrai manualmente scaricare i file .deb per dpkg e apt . Puoi trovarli all'indirizzo dpkg in Ubuntu e apt nelle pagine di Ubuntu su Launchpad - espandi l'ultima versione in" The Oneiric Ocelot "che è contrassegnata come release, sicurezza e / o aggiornamenti (ma probabilmente non lo fai) Voglio una versione contrassegnata solo proposta e / o backport, se mai ce n'è uno). Quindi scarica i file .deb contrassegnati amd64 . Nello specifico, i file desiderati sono: questo per dpkg (e anche gli altri elencati, se sono installati quei pacchetti) e questo e questo e questo e questo e questo per apt .

Prima di fare qualsiasi cosa con questi file, dovresti assicurarti di eseguire il backup di tutti i documenti importanti nel tuo sistema Ubuntu installato e qualsiasi altro file importante (ad es. musica, ebook, video), perché è piuttosto probabile che si provi questa tecnica si ritorcerà male e lascerà 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 debs e si trovi nella tua directory Downloads ), quindi eseguendo questo comando:

sudo dpkg -Ri ~/Downloads/debs

Ovviamente, una volta installati, non verranno 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) ). Infatti, potrebbero non finire l'installazione, poiché potrebbero avere script di post-installazione che richiamano i loro eseguibili a 64 bit non cancellabili.

Ci sono vari modi per tentare di installare un kernel a 64-bit su un sistema a 32-bit, ma sono tutti estremamente complicati, quindi ti consiglio di avviarti da un Live CD Oneiric a 64 bit (che a sua volta esegue un Kernel a 64-bit), chroot nel sistema Ubuntu installato, e usa il co_de% a 64-bit di recente installato e apt per installare un kernel a 64 bit.

Ecco le istruzioni specifiche per farlo ... ma per favore non prendi questo per dire che sto dicendo che funzionerà. Non ho tentato questo. (Ho fatto 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 cross-architecture suggerite qui.)

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

  2. Il passaggio 1 ti ha dato il nome del dispositivo della partizione /dev/sda2 . Se hai una partizione / separata, dovrai conoscere anche il nome del dispositivo. In tal caso, esegui /boot . Vedrai qualcosa come mount | grep ' on /boot ' . Ricorda o scrivi anche questo.

  3. Avvia da un CD live Oneiric amd64 (cioè 64-bit) e seleziona "Prova Ubuntu" piuttosto che "Installa Ubuntu".

  4. Accedi a un browser web e assicurati che la connettività Internet sia completamente funzionante. Se non lo è, configuralo.

  5. Apri una finestra di Terminale ed esegui /dev/sda1 on /boot type ext2 (rw) (sostituisci sudo mount /dev/sda2 /mnt con il nome del dispositivo che hai ottenuto nel passaggio 1, se diverso).

  6. Se il tuo sistema installato ha una partizione /dev/sda2 separata, esegui /boot (sostituisci sudo mount /dev/sda1 /mnt/boot con il nome del dispositivo che hai ottenuto nel passaggio 2, se diverso).

  7. Ora, esegui questi comandi su 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 /dev/sda1 per vedere se la connettività Internet funziona completamente da chroot. Stai sperando in qualcosa di simile:

    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 si è in grado di trasmettere o ricevere pacchetti, sarà necessario configurare la connettività Internet in chroot. Per farlo, esegui questi comandi (per lasciare il chroot, copia i file di configurazione rilevanti dal sistema di CD live nel chroot e reinserisci 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
    

    Generalmente dovresti interrompere questo processo se c'è un errore, non ti preoccupare se il primo e / o il secondo di questi quattro comandi falliscono, a condizione che il modo specifico in cui fallisce sia dicendo che ping -c 4 launchpad.net (o /mnt/etc/resolv.conf ) non esiste.

    Torna il chroot 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 file /mnt/etc/hosts per le versioni a 64 bit di .deb e dpkg , fallo ora. Se li hai installati ma ci sono stati errori di configurazione, esegui apt per risolverli. (Speriamo che funzionerà ... potrebbe essere meglio aspettare di tentare di installarli finché non ci si trova nell'ambiente live del CD, nel caso in cui l'installazione di dpkg --configure -a a 64 bit durante l'avvio nel sistema installato lasci dpkg in uno stato inutilizzabile.)

  12. Con le versioni a 64 bit di dpkg e dpkg installate, 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 tuoi kernel a 32 bit, esegui apt . Questo elenca i pacchetti installati che iniziano con dpkg -l | grep linux- . Sei più interessato ai pacchetti che iniziano come linux- , linux-generic , linux-image e / o linux-server . Rimuovi questi file con linux-headers dove apt-get purge ... 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 ... , devi solo installare i nomi dei pacchetti con versione più recente.) Esegui eseguendo linux-image-3.0.0-13-generic dove apt-get install ... è sostituito con uno spazio- elenco separato dei pacchetti che stai 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 ... e non ha avuto esito negativo, esegui ora sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old .

  16. Se hai eseguito sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf e non ha avuto esito negativo, esegui ora sudo cp /mnt/etc/hosts /mnt/etc/hosts.old .

  17. Se il tuo sistema installato ha una partizione sudo cp /mnt/etc/hosts.old /mnt/etc/hosts separata, smonta: /boot

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

  19. Lascia la finestra di Terminale (esegui sudo umount /mnt ), quindi riavvia (o spegni) il sistema di CD live e avvia il sistema installato.

  20. Verifica se il sistema è utilizzabile e sta eseguendo un kernel a 64 bit ( exit dovrebbe dire che l'architettura è uname -m ).

Potrebbero esserci altri pacchetti da installare, come x86_64 e / o la versione a 64 bit di ia32_libs , perché funzioni. Per alcuni di essi, potresti essere informato che ne hai bisogno quando tenti di installare la versione a 64 bit di libc6 e / o dpkg . Per gli altri, potresti non essere informato.

(Le istruzioni di cui sopra per il chroot e il funzionamento nell'ambiente chroot si basano in parte significativa su questa procedura correlata ma diversa e anche su alcuni Launchpad Answers dei miei post, in particolare # 6 qui e # 6 qui . Un ringraziamento speciale a Cesium per aver segnalato che gli eseguibili apt e dpkg a 64 bit non verrà eseguito su un sistema su cui è in esecuzione un kernel a 32 bit.)

    
risposta data Eliah Kagan 22.11.2011 - 20:53
fonte
24

Come detto sopra, l'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 il mio userland a 32 bit con kernel a 64 bit, in Ubuntu 12.04.

    
risposta data VJ- 19.06.2012 - 02:05
fonte
6

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

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

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

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

È possibile: Sì

È facile: NO!

Se il tuo problema riguarda la memoria, allora 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 bit o 64 bit e inserire più RAM non sarà un problema. Semplicemente leggerà la RAM extra e funzionerà.

    
risposta data Luis Alvarado 25.03.2013 - 03:29
fonte
5

Queste risposte sono alquanto obsolete. Il cross-grading è ora documentato per Debian su la wiki di 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 danneggiati. 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 quello di salvare prima i risultati di dpkg --get-selections , strip: 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...

Al massimo è probabile che sia lento e richiede molto tempo per risolvere le dipendenze.

    
risposta data Cedric Knight 31.05.2017 - 19:43
fonte
4

Queste istruzioni fanno avviare il sistema con un kernel a 64 bit, ma non cambiano la maggior parte dei programmi userland.

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

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

Note:

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

  2. Il comando "--add-architecure" è essenziale. Senza di esso, il sistema del pacchetto non supporta pacchetti di architetture diverse, vedi Multiarch-HowTo

  3. Per vedere cosa farà apt-get sul tuo sistema, eseguilo con le opzioni -Vs che abilita la "modalità di simulazione dettagliata". Questo stamperà tutti i pacchetti da installare e rimuovere.

  4. Se il sistema si avvia utilizzando il nuovo kernel dipende dalla configurazione grub . Come utente root , esegui update-grub per fare l'aggiornamento di grub e stampare la configurazione di avvio corrente. La prima immagine dell'elenco verrà avviata come predefinita.

  5. Per selezionare un'immagine del kernel diversa, ho rimosso la riga GRUB_HIDDEN_TIMEOUT=0 da /etc/default/grub e ho eseguito 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 superata secondo me. Multiarch ti consente di installare pacchetti di libreria da più architetture sulla stessa macchina senza troppi problemi.

risposta data Daniel K. 12.06.2015 - 23:45
fonte
2

Il cross-through (l'aggiornamento a un'architettura diversa) non è ancora supportato.

    
risposta data tumbleweed 06.01.2012 - 10:53
fonte
2

Forse, visto che ho lo stesso problema, funzionerà, è quello che stavo progettando di fare:

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

    
risposta data ubuntufan 20.06.2012 - 13:10
fonte
2

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

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 solo farlo ...

    
risposta data strawn_04 04.04.2013 - 08:19
fonte
2

La mia ricetta per Ubuntu 16.04 Xenial, testata su Ubuntu VM appena installata a 32 bit 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 riuscirà a riavviarlo sotto il kernel a 32-bit)

reboot

dopo il riavvio con il kernel a 64-bit:

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

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

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

nel ciclo precedente, rimuoviamo i file .deb che sono stati installati con successo e hanno lo stato 'ii' nella lista di dpkg.

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

reboot

ora, con sia il kernel a 64 bit che lo spazio utente, i restanti pacchetti i386 possono essere rimossi:

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

l'elenco che hai salvato in pkgs1 file che puoi utilizzare per le tue ulteriori esigenze.

    
risposta data Wladimir Mutel 18.01.2018 - 15:18
fonte
1

Buona domanda. Ho fatto una caccia in giro e oltre alla user story che hai citato, non riesco a trovare dettagli su come farlo. Tutta la documentazione indica che è solo per l'esecuzione di applicazioni a 32 bit su un sistema operativo a 64 bit.

Tuttavia, se sei disposto a sperimentare, puoi provare quanto segue (derivato dal mio collegamento su [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 i binari a 32 bit (se ia32-libs è installato?).

Se si installa e si avvia il kernel a 64 bit, si può andare da lì per installare apt: amd64, quindi seguire lo story-story come precedentemente citato, ubuntu-minimal, ubuntu-desktop, ecc.

Dopo apt: amd64 è installato, penso che sia possibile rimuovere la linea di architettura esterna poiché in quel momento si è sostanzialmente passati.

Dichiarazione di non responsabilità: non ho un sistema a 32 bit da testare, quindi questa è una supposizione. Buona fortuna!

[1] link

    
risposta data Caesium 22.11.2011 - 20:52
fonte

Leggi altre domande sui tag