Как переключить 32-разрядную установку на 64-разрядную?

51

У меня есть 32-разрядная установка Ubuntu, работающая на 64-битном оборудовании. Теперь, когда была реализована multi-arch , я хотел бы перейти на 64-разрядную версию без необходимости переустановки ОС.

Это один из рассказов пользователей, рассмотренных в спецификации :

Шон установил свою систему, используя 32-разрядную версию Ubuntu, но его аппаратное обеспечение - 64-битное, и он хочет переключиться. Он вручную устанавливает версии dpkg и apt amd64, заменяя версии i386 и изменяя, какая архитектура используется по умолчанию; затем он устанавливает пакет amd64 ubuntu-минимальный; затем он устанавливает пакет amd64 ubuntu-desktop. Со временем остальные обновления i386 автоматически заменяются при обновлении.

Однако, пытаясь следовать инструкциям там, я не могу найти 64-разрядную версию dpkg или apt.

Разве эта история пользователя была реализована по-другому в финальной спецификации, или мне нужно сделать что-то по-другому?

Короче говоря, как я могу переключить 32-разрядную установку на 64-разрядную?

    
задан David Planella 22.11.2011 в 20:34
источник

10 ответов

35

Такой подход очень сложный и вряд ли когда-либо приведет к тому, что все ваши пакеты будут версией amd64 вместо версии i386 . Вероятно, только пакеты, которые фактически получают обновления, будут изменены в архитектуре, и, вероятно, только в том случае, если никакие другие пакеты, не обновляемые, не будут полагаться на их архитектуру i386 . Поскольку некоторые пакеты не получат обновления any на протяжении всего цикла поддержки вашей версии Ubuntu, у вас, вероятно, никогда не будет полностью amd64 , использующей такую ​​технику. Более того, официальная поддержка такого подхода, безусловно, отсутствует.

Вам будет рекомендовано вместо вашей существующей системы Ubuntu заменить новую 64-битную установку.

Однако, если вы хотите попробовать эту технику, вам придется вручную загрузить файлы .deb для dpkg и apt . Вы можете найти их в dpkg в Ubuntu и apt в Ubuntu на Launchpad - разверните последнюю версию в разделе« Oneiric Ocelot », которая отмечена как выпуск, безопасность и / или обновления (но вы, вероятно, t хотите версию, помеченную только предлагаемыми и / или backports, если она когда-либо есть). Затем загрузите .deb файлов, помеченных как amd64 . В частности, файлы, которые вам нужны, следующие: этот для dpkg (и другие перечисленные, если у вас установлены эти пакеты) и это и это и this и this и this для apt .

Прежде чем что-либо делать с этими файлами, вы должны сделать резервную копию всех важных документов в вашей установленной системе Ubuntu и любых других важных файлах (например, музыке, ebooks, видео), поскольку, скорее всего, попытка этой техники будет плохо реагировать на неприятные последствия и полностью отключить вашу систему Ubuntu.

Вы можете установить все эти пакеты, поместив их в папку, которая не содержит ничего (предположим, что папка называется debs и находится внутри вашего каталога Downloads ), а затем выполните следующую команду:

sudo dpkg -Ri ~/Downloads/debs

Конечно, как только вы их установили, они фактически не будут запускаться, потому что их исполняемые файлы являются 64-разрядными, а ваша 32-разрядная система Ubuntu работает с 32-разрядным ядром (в котором будут работать только 32-разрядные исполняемые файлы ). Фактически, они могут даже не закончить установку, поскольку у них могут быть сценарии после установки, которые вызывают их неиспользуемые 64-разрядные исполняемые файлы.

Существуют различные способы установки 64-разрядного ядра в 32-разрядную систему, но все они чрезвычайно сложны, поэтому я рекомендую вам загрузиться с 64-битного Live-CD Oneiric (который сам запускает 64-битное ядро), chroot в установленную систему Ubuntu и использовать недавно установленные 64-бит apt и dpkg для установки 64-битного ядра.

Вот конкретные инструкции для этого ... но, пожалуйста, не думайте, что это означает, что я говорю, что это сработает. Я этого не делал. (Я запустил в установленные системы Ubuntu с живых компакт-дисков и выполнил управление пакетами и другие операции, но я не пытался предлагать здесь кросс-архитектуру.)

  1. В установленной системе Ubuntu откройте окно терминала ( Ctrl + Alt + T ) и запустите mount | grep ' on / ' ( путем вставки его в терминал и нажатия клавиши ввода). Вы должны увидеть что-то вроде /dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0) . Интересующая вас часть - это имя устройства до on (в этом примере это /dev/sda2 ). Помните это или записывайте его.

  2. Шаг 1 дал вам имя устройства раздела / . Если у вас есть отдельный раздел /boot , вам также нужно знать имя устройства для этого. Поэтому в этом случае запустите mount | grep ' on /boot ' . Вы увидите что-то вроде /dev/sda1 on /boot type ext2 (rw) . Помните или пишите это также.

  3. Загрузите Live-диск Oneiric amd64 (то есть, 64-разрядный) и выберите «Попробовать Ubuntu», а не «Установить Ubuntu».

  4. Перейдите в веб-браузер и убедитесь, что подключение к Интернету полностью работоспособно. Если это не так, настройте его.

  5. Откройте окно терминала и запустите sudo mount /dev/sda2 /mnt (замените /dev/sda2 на имя устройства, которое вы получили на шаге 1, если оно отличается).

  6. Если ваша установленная система имеет отдельный раздел /boot , запустите sudo mount /dev/sda1 /mnt/boot (замените /dev/sda1 на имя устройства, которое вы получили на шаге 2, если оно отличается).

  7. Теперь запустите эти команды для chroot в вашей установленной системе:

    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. Запустите ping -c 4 launchpad.net , чтобы убедиться, что интернет-соединение работает полностью внутри chroot. Вы надеетесь на что-то вроде этого:

    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. Если вместо этого вы не смогли передать или получить пакеты, вам нужно настроить подключение к Интернету в chroot. Для этого запустите эти команды (чтобы оставить chroot, скопируйте соответствующие файлы конфигурации из живой CD-системы в chroot и снова введите 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
    

    Как правило, вы должны остановить этот процесс, если есть ошибка, не волнуйтесь, если первая и / или вторая из этих четырех команд выходят из строя, при условии, что конкретный способ ее отказа - сообщить вам, что /mnt/etc/resolv.conf (или /mnt/etc/hosts ) не существует.

    Хроат возвращается и повторите попытку:

    sudo chroot /mnt  
    ping -c 4 launchpad.net  
    
  10. Запустите эти команды, чтобы сделать вашу chrooted среду полностью готовой к использованию:

    export HOME=/root  
    export LC_ALL=C  
    
  11. Если вы не установили файлы .deb для 64-разрядных версий dpkg и apt , то сделайте это сейчас. Если вы их установили, но были ошибки конфигурации, запустите dpkg --configure -a , чтобы исправить их. (Надеюсь, что это сработает ... может быть, лучше подождать, чтобы попытаться установить их до тех пор, пока вы не окажетесь в живой среде компакт-диска, в случае, если установка 64-бит dpkg при загрузке в установленную систему оставляет dpkg в непригодное состояние.)

  12. Установив 64-битные версии dpkg и apt , предположив, что они будут автоматически устанавливать 64-разрядные пакеты, теперь вы можете удалить все свои 32-разрядные ядра и установить 64-битное ядро , Чтобы удалить 32-разрядные ядра, запустите dpkg -l | grep linux- . В этом списке указаны установленные пакеты, начинающиеся с linux- . Вас больше интересуют пакеты, которые начинаются как linux-generic , linux-image , linux-server и / или linux-headers . Удалите эти файлы с помощью apt-get purge ... , где ... заменяется списком удаленных пакетов, разделенным пробелом.

  13. Теперь переустановите удаленные вами пакеты. (На самом деле, для пакетов, содержащих номера версий в имени пакета, например, linux-image-3.0.0-13-generic , вам нужно установить только последние версии имен пакетов.) Сделайте это, запустив apt-get install ... , где ... заменяется пробелом, разделенный список пакетов, которые вы устанавливаете.

  14. Обновите конфигурацию загрузчика, отключите некоторые устройства и оставьте chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
  15. Если вы запустили sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old , и это не сработало, то теперь запустите sudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf .

  16. Если вы запустили sudo cp /mnt/etc/hosts /mnt/etc/hosts.old , и это не сработало, то теперь запустите sudo cp /mnt/etc/hosts.old /mnt/etc/hosts .

  17. Если ваша установленная система имеет отдельный раздел /boot , отключите это: sudo umount /mnt/boot

  18. Отсоедините раздел / установленной системы: sudo umount /mnt

  19. Оставьте окно терминала (запустите exit ), затем перезагрузите (или выключите) систему Live CD и загрузитесь в установленную систему.

  20. Посмотрите, доступна ли система и работает ли 64-разрядное ядро ​​( uname -m должно сказать, что архитектура x86_64 ).

Для этого могут потребоваться дополнительные пакеты, например, ia32_libs и / или 64-разрядная версия libc6 . Для некоторых из них вы можете быть проинформированы о необходимости их использования при попытке установить 64-битную версию dpkg и / или apt . Для других вы можете быть не в курсе.

(приведенные выше инструкции для chrooting и работы в chrooted среде в значительной степени основаны на этой связанной, но другой процедуре а также на некоторых Launchpad Answers моих сообщений, особенно # 6 здесь и # 6 здесь и особая благодарность Цезия за то, что 64-битные dpkg и apt исполняемых файлов не будет работать в системе с 32-разрядным ядром.)

    
ответ дан Eliah Kagan 22.11.2011 в 20:53
источник
23

Как указано выше, я сделал:

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

Это сработало. Я могу запустить свой 32-разрядный пользовательский интерфейс с 64-битным ядром в Ubuntu 12.04.

    
ответ дан VJ- 19.06.2012 в 02:05
6

Хотя вопрос похож на Можно ли" обновить "с 32-битной до 64-битной установки? (Если вы еще не прочитали ее, прежде чем я попрошу вас попробовать, ответ будет предоставлен.) Я также рекомендую прочитав следующие ссылки:

Для лучшей производительности следует ли установить 32-разрядную или 64-разрядную версию?

Как переключить 32-разрядную установку на 64-разрядную?

В чем разница между 32-битным и 64-битным, и какой должен выбрать?

Возможно ли: Да

Легко ли это: НЕТ!

Если ваша проблема связана с памятью, вы должны знать, что 32-битный Ubuntu может читать более 4 ГБ оперативной памяти (до 64 ГБ). Таким образом, использование последней версии 32-битного Ubuntu с компьютером с архитектурой 32 бит или 64 бит и добавлением большего объема оперативной памяти не будет проблемой. Он просто прочитает дополнительную оперативную память и будет работать.

    
ответ дан Luis Alvarado 25.03.2013 в 03:29
4

Эти инструкции заставляют вашу систему загружаться с 64-битным ядром, но не меняют большинство программ пользовательской программы.

После обновления моей системы с 64-разрядным процессором я также хотел установить 64-битное ядро ​​на своем 32-разрядном 14.04.2 Ubuntu (кодовое имя: Trusty). Для этого я ввел следующие команды в качестве пользователя root :

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

Примечания:

  1. Это может привести к тому, что ваше 32-битное ядро ​​станет надежным - по умолчанию - поставляется с обновленным ядром (ядро из utopic), см. 14.04 Примечания к выпуску . В этом случае ваше текущее ядро ​​конфликтует с установленным 64-битным ядром и, следовательно, удаляется. Если вам не нравится эта идея, вы можете попробовать старый 64-разрядный пакет ядра «linux-generic-lts-trusty: amd64».

  2. Команда «-add-architecure» необходима. Без него система пакетов не поддерживает пакеты из разных архитектур, см. Multiarch-HowTo

  3. Чтобы узнать, что apt-get будет делать в вашей системе, запустите его с параметрами -Vs , который позволяет «режим подробного моделирования». Это напечатает все пакеты, которые будут установлены и удалены.

  4. Если система загружается с использованием нового ядра, зависит от конфигурации grub . Как пользователь root запустите update-grub , чтобы выполнить обновление grub и распечатать текущую конфигурацию загрузки. Первое изображение в списке будет загружено по умолчанию.

  5. Чтобы выбрать другое изображение ядра, я удалил строку GRUB_HIDDEN_TIMEOUT=0 из /etc/default/grub и побежал как пользователь root update-grub . Во время загрузки вы можете выбрать другое ядро ​​(у вас есть 10 секунд, чтобы нажать любую клавишу, иначе grub продолжит ядро ​​по умолчанию).

  6. Ответ с высшим большинством голосов - с 2011 года и, на мой взгляд, безнадежно устарел. Multiarch позволяет устанавливать пакеты библиотек из нескольких архитектур на одном компьютере без особого шума.

ответ дан Daniel K. 12.06.2015 в 23:45
3

Эти ответы несколько устарели. Перекрестная сортировка теперь документирована для Debian на вики-странице Debian , но она по-прежнему не рекомендуется.

Установка ядра из другой архитектуры теперь так же прост, как описано здесь, но новый «apt» не будет распознавать пакеты из предыдущей архитектуры, и поэтому все его интерфейсы могут сообщать много разбитых пакетов. Это либо требует изменения всех зависимостей для другой архитектуры, либо возврата apt и dpkg в 32-разрядный.

Таким образом, лучший подход может состоять в том, чтобы сначала сохранить результаты dpkg --get-selections , strip: i386 и загрузить пакет amd64 для каждой из зависимостей в кеше:

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

В лучшем случае это может быть медленным и трудоемким решением зависимостей.

    
ответ дан Cedric Knight 31.05.2017 в 19:43
2

Скрещивание (обновление до другой архитектуры) еще не поддерживается.

    
ответ дан tumbleweed 06.01.2012 в 10:53
2

Возможно, поскольку я столкнулся с одной и той же проблемой, это сработает, это то, что я планировал сделать:

Получите 64-разрядную версию ОС, установите ее в раздел, когда вы полностью скопируете документы и другие материалы из 32-разрядной установки, когда все будет безопасно скопировано, вы можете отформатировать остальную часть диска и использовать его.     

ответ дан ubuntufan 20.06.2012 в 13:10
2

Да, линия внешней архитектуры наиболее важна для установки любых кросс-аркадных пакетов. Но после этого сделайте, как упомянули несколько других пользователей:

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

Это должно было сделать это ...

    
ответ дан strawn_04 04.04.2013 в 08:19
1
Хороший вопрос. У меня была охота вокруг и за исключением истории пользователя, которую вы цитируете, я не могу найти никаких подробностей о том, как это сделать. Вся документация указывает, что она предназначена только для запуска 32-разрядных приложений на уже 64-разрядной ОС.

Однако, если вы готовы экспериментировать, вы можете попробовать следующее (полученное из моей ссылки в [1])

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

Я думаю, вам нужно будет начать с ядра amd64, так как 32-битный не сможет запускать любые 64-битные двоичные файлы. Однако 64-разрядный должен запускать 32-битные двоичные файлы (если установлена ​​ia32-libs?).

Если вы установили и загрузили 64-битное ядро, вы можете пойти оттуда, чтобы установить apt: amd64, а затем следовать пользовательской истории, как было указано ранее, ubuntu-minimal, ubuntu-desktop и т. д.

После того, как apt: amd64 установлен, я думаю, что вы можете удалить линию внешней архитектуры, поскольку вы по существу переключились в этой точке.

Отказ от ответственности: у меня нет 32-битной системы для тестирования, так что это все догадки. Удачи!

[1] Ссылка

    
ответ дан Caesium 22.11.2011 в 20:52
1

Мой рецепт для Ubuntu 16.04 Xenial, протестированный на недавно установленной 32-разрядной виртуальной машине Ubuntu со стандартной системой и SSH-сервером, но без GUI:

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

(иначе он установит heatd: amd64 и не сможет перезапустить его под 32-разрядным ядром)

reboot

после перезагрузки с 64-битным ядром:

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

введите «Да, делайте, как я говорю!» когда его спросят, это будет безопасно

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

в цикле выше, мы удаляем файлы .deb, которые были успешно установлены и получили статус «ii» в списке dpkg.

нам нужно повторить dpkg -i run, так как это не удается с первой попытки

reboot

теперь, как с 64-битным ядром, так и с пользовательским пространством, оставшиеся пакеты i386 можно удалить:

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

список, который вы сохранили в файле pkgs1 , который вы можете использовать для любых ваших дальнейших потребностей.

    
ответ дан Wladimir Mutel 18.01.2018 в 15:18