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

54

У меня установлена ​​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-битную?

Дэвид Планелла
источник
3
Я понимаю, что вопрос уже задавался на askubuntu.com/questions/5018/… , но это было до того, как была реализована многоархитектура , поэтому ответ должен быть другим.
Дэвид Планелла

Ответы:

36

Такой подход очень сложен и вряд ли когда-нибудь приведет к тому, что все ваши пакеты будут 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 здесь . И особая благодарность Cesium за указание что 64-битные dpkgи aptисполняемые файлы не будут работать в системе с 32-битным ядром.)

Элия ​​Каган
источник
2
Будут ли эти двоичные файлы работать под 32-битным ядром, Элия?
Цезий
@ Caeese Good Call. Конечно, нет. Я бы отредактировал свой пост, чтобы указать, как запустить 64-битное ядро ​​... за исключением того, что я понятия не имею, как установить пакет 64-битного ядра в 32-битную систему Ubuntu (работает на 64-битном оборудовании, конечно) когда aptи dpkgвсе еще 32-битные и (предположительно) откажутся устанавливать 64-битный пакет ядра. (Сборка ядра из исходного кода и использование кросс-компиляции работали бы, но это очень сложно, и я не хочу рекомендовать его. Я уверен, что есть лучший, более простой способ. Если вы знаете это, пожалуйста, не стесняйтесь отредактировать мой или ваш пост или комментарий об этом.)
Eliah Kagan
@ Caeesium На самом деле, я думаю, что знаю, как установить 64-битное ядро. Я отредактирую свой пост в ближайшее время, чтобы отразить это. Как только я это сделаю, если вы считаете, что предложенный мной метод сработает, пожалуйста, не стесняйтесь копировать и / или перефразировать его в свой ответ ... или, альтернативно, до тех пор, пока информация в вашем ответе отсутствует в моем, и информация в моем ответе, который не в вашем, сохранены, вы можете объединить наши ответы в один ответ. (Это может быть ваш ответ - это нормально для меня. Вы сделали сообщение немного раньше, чем я. Тогда я удалил свой ответ.)
Элия ​​Каган
Редактирование цезия завершено; Я с нетерпением жду ваших комментариев.
Элия ​​Каган
Ничего себе, хорошая работа :) На данный момент вы приложили гораздо больше усилий, чем я, поэтому я бы не мечтал скопировать в мой ответ, ваш должен остаться за кредит. Это отходит от первоначальной цели использования технологии multiarch, но мне будет интересно узнать, работает ли она, тем не менее :) Думаю, нам придется дождаться оригинального плаката :)
Цезий,
25

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

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-
источник
5
Этот ответ ошеломляет. Я могу подтвердить, что это все еще работает с дерзким. Единственное отличие состоит в том, что процедура добавления архитектуры изменилась: используйте sudo dpkg --add-architecture amd64вместо этого. Он будет кричать на тебя, если ты сделаешь это по-другому. Мне нужно было сделать это, чтобы я мог получить доступ к 64-битной установке с (ранее) 32-битной, и она работала точно так, как ожидалось, без заминок.
Wug
Я попробовал это на монетном дворе, но у меня возникли некоторые проблемы, ты делал что-нибудь еще? Подробности: superuser.com/q/927830/150718
доктор Ганнибал Лектер
В дополнение к изменению Wug, вы также должны использовать linux-image-generic:amd64в Ubuntu 16.04. Это работало нормально даже без последних двух команд.
qznc
6

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

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

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

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

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

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

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

Луис Альварадо
источник
5

Эти ответы несколько устарели. Кросс-градация теперь задокументирована для 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...

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

Седрик Найт
источник
5

Эти инструкции заставляют вашу систему загружаться с 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конфигурации. Как суперпользователь , бегите , update-grubчтобы сделать потайное обновление и распечатать текущую конфигурацию загрузки. Первое изображение в списке будет загружено по умолчанию.

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

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

Даниэль К.
источник
Это хороший простой совет, который почти сработал для меня 14.10 (Utopic) (однако я сделал, apt-get install linux-generic:amd64что не должно быть очень важным для эксперимента)! Если я пройду через опцию «rescue», система запустится, но X не использует nouveauвидеодрайвер и все такое. Если я загружаюсь нормально, запуск в какой-то момент прерывается, и система перезагружается. (Но в самый первый раз я смог успешно загрузиться.) Я не уверен, что проблема с видео драйвером во время «нормальной» загрузки или что-то еще.
imz - Иван Захарящев
Оказалось, что видеодрайвер и X не связаны (статистически) с моими сбоями / перезагрузками с ядром amd64. Пока это просто загадка - bugs.launchpad.net/ubuntu/+source/upstart/+bug/1495116 .
imz - Иван Захарящев
2

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

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

ubuntufan
источник
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

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

realkstrawn93
источник
ты пробовал это? на самом деле это не работает, у меня возникают проблемы, когда он начинает заменять dpkg и perl их аналогами amd64
Янус Троелсен
2

Мой рецепт для 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файле, который вы можете использовать для любых ваших дальнейших нужд.

Владимир Мутель
источник
Это своего рода волшебство, но это помогло мне выполнить 32-64-битный переход через SSH на удаленном компьютере.
user271872
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] https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Beta1#Improved_handling_of_32-bit_compatibility_on_amd64_systems

цезий
источник
1

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

перекати-поле
источник