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

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

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

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

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

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

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

12 ответов

Решение

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

Рекомендуется заменить существующую систему Ubuntu новой 64-битной установкой.

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

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

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

sudo dpkg -Ri ~/Downloads/debs

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

Существуют различные способы установки 64-разрядного ядра в 32-разрядную систему, но все они чрезвычайно сложны, поэтому вместо этого я рекомендую загружаться с 64-разрядного Live CD Oneiric (который сам работает на 64-разрядной версии). ядро), загрузитесь в установленную систему 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. Загрузитесь с живого компакт-диска Oneiric amd64 (т.е. 64-разрядного) и выберите "Try Ubuntu", а не "Install 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, скопируйте соответствующие файлы конфигурации из системы live 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) не существует.

    Вернитесь к chroot и попробуйте снова:

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

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

(Вышеприведенные инструкции для chroot и работы в среде chrooted в значительной степени основаны на этой связанной, но другой процедуре, а также на некоторых моих постах Ответов на Launchpad, особенно № 6 здесь и № 6 здесь. И особая благодарность Caesium за указание что 64-битный dpkg а также apt исполняемые файлы не будут работать в системе с 32-битным ядром.)

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

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.

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

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

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

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

Возможно ли это: да

Это легко: НЕТ!

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

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

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

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

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

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

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

После обновления моей системы с 64-разрядным процессором, я также хотел установить 64-разрядное ядро ​​на свою 32-разрядную версию Ubuntu 14.04.2 (кодовое имя: 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 позволяет устанавливать библиотечные пакеты из нескольких архитектур на одном компьютере без лишних сложностей.

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

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

(иначе он установит thermald: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 '$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

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

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

reboot

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

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

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

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

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

Да, линейка сторонней архитектуры очень важна для установки ЛЮБОГО кросс-арочного пакета. Но после этого сделайте так, как упомянули несколько других пользователей:

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

Это должно вот-вот сделать...

Хороший вопрос. У меня была охота, и кроме пользовательской истории, которую вы цитируете, я не могу найти подробностей о том, как это сделать. Во всей документации указано, что она предназначена только для запуска 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] https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Beta1

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

Чтобы добавить к отличному ответу @Wladimir Mutel, единственному разумному и рабочему ответу. Я пытался сделать это с Linux Mint, но получил ошибку неудовлетворенных зависимостей на этапе установки apt. Таким образом, процесс заключался в том, чтобы сначала преобразовать его в Ubuntu, а затем обновить до следующего выпуска Ubuntu в моем случае.

Затем все прошло гладко с меткой установкой. Но самое главное, у меня были ошибки на этапе удаления старых пакетов. В частности, я не мог удалить (и его зависимости).

      Preparing to unpack .../dash_0.5.8-2.10_amd64.deb ...
Ignoring request to remove shared diversion 'diversion of /bin/sh to /bin/sh.distrib by dash'.
dpkg-divert: error: 'diversion of /bin/sh to /bin/sh.distrib by bash' clashes with 'diversion of /bin/sh to /bin/sh.distrib by dash'
dash.preinst: dpkg-divert exited with status 2
dpkg: error processing archive /var/cache/apt/archives/dash_0.5.8-2.10_amd64.deb (--unpack):
 new dash:i386 package pre-installation script subprocess returned error exit status 1
Errors were encountered while processing:
 /var/cache/apt/archives/dash_0.5.8-2.10_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Чтобы решить эту проблему, я сначала удалил /bin/shа также /bin/sh.distrib(обе символические ссылки /bin/dash, но вы можете сделать резервную копию, чтобы быть уверенным). затем dash:i386смог нормально удалить. Но APT спотыкалась из-за отсутствия sh. Так я временно сделал link /bin/bash /bin/sh(перенаправление sh на bash).Мне также нужно было выполнить следующее:

      dpkg-divert --remove "/usr/share/man/man1/sh.1.gz"
dpkg-divert --remove "/bin/sh"

С этим я смог сделать apt install dashчтобы, наконец, установить его, он самостоятельно исправил отклонения и правильно сделал правильные символические ссылки. Затем я смог возобновить очистку пакетов i386 и завершил преобразование Ubuntu 18.04 LTS в систему x64.

Надеюсь, это поможет кому-то в будущем, кто вынужден делать это, а не просто переустанавливать.

Существует инструмент, способный автоматизировать такие перекрестные оценки. Надеюсь, это поможет:https://blog.rimuhosting.com/2018/03/21/32-to-64-bit-distro-crossgrades/

Он называется distrorejuve и может помочь в процессе кроссгрейда (пока он еще находится в стадии бета-тестирования). --to-64bitпереключатель делает это; видеть --helpподробности

Другие вопросы по тегам