Как я могу переключить 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 с живых компакт-дисков и выполнил управление пакетами и другие операции, но я не пытался выполнять операции меж архитектурой, предложенные здесь.)
В установленной системе Ubuntu откройте окно терминала (Ctrl + Alt + T) и запустите
mount | grep ' on / '
(вставив его в терминал и нажав ввод). Вы должны увидеть что-то вроде/dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0)
, Интересующая вас часть - это имя устройстваon
(в этом примере это/dev/sda2
). Помните это или запишите это.Шаг 1 дал вам имя устройства
/
раздел. Если у вас есть отдельный/boot
раздел, то вам также нужно знать имя устройства для этого. Так что в этом случае запуститьmount | grep ' on /boot '
, Вы увидите что-то вроде/dev/sda1 on /boot type ext2 (rw)
, Запомните или запишите это.Загрузитесь с живого компакт-диска Oneiric amd64 (т.е. 64-разрядного) и выберите "Try Ubuntu", а не "Install Ubuntu".
Зайдите в веб-браузер и убедитесь, что подключение к Интернету полностью функционально. Если это не так, настройте его.
Откройте окно терминала и запустите
sudo mount /dev/sda2 /mnt
(заменить/dev/sda2
с именем устройства, которое вы получили в шаге 1, если отличается).Если ваша установленная система имеет отдельный
/boot
раздел, запуститьsudo mount /dev/sda1 /mnt/boot
(заменить/dev/sda1
с именем устройства, которое вы получили в шаге 2, если отличается).Теперь, запустите эти команды для 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
Бежать
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
Если вместо этого вы не можете передавать или получать пакеты, то вам придется настроить подключение к Интернету в 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
Запустите эти команды, чтобы ваша среда chroot была полностью готова к использованию:
export HOME=/root export LC_ALL=C
Если вы еще не установили
.deb
файлы для 64-битных версийdpkg
а такжеapt
так что делай сейчас. Если вы установили их, но были ошибки конфигурации, запуститеdpkg --configure -a
чтобы исправить их. (Надеюсь, это сработает... может быть лучше подождать, чтобы попытаться установить их, пока вы не окажетесь в среде live CD, в случае установки 64-битнойdpkg
при загрузке в установленную систему уходитdpkg
в непригодном состоянии.)С 64-битными версиями
dpkg
а такжеapt
установлено, предполагая, что они автоматически установят 64-битные пакеты, теперь вы можете удалить все 32-битные ядра и установить 64-битное ядро. Чтобы удалить 32-битные ядра, запуститеdpkg -l | grep linux-
, Это список установленных пакетов, которые начинаются сlinux-
, Вы более конкретно заинтересованы в пакетах, которые начинаются какlinux-generic
,linux-image
,linux-server
и / илиlinux-headers
, Удалить эти файлы сapt-get purge ...
где...
заменяется разделенным пробелами списком пакетов, которые вы удаляете.Теперь переустановите пакеты, которые вы удалили. (На самом деле, для пакетов, которые содержат номера версий в имени пакета, как, например,
linux-image-3.0.0-13-generic
, вам нужно только установить последние версии пакетов имен.) Сделайте это, запустивapt-get install ...
где...
заменяется разделенным пробелами списком устанавливаемых вами пакетов.Обновите конфигурацию загрузчика, размонтируйте некоторые устройства и оставьте chroot:
update-grub umount /proc || umount -lf /proc umount /sys umount /dev/pts exit sudo umount mnt/dev
Если ты побежал
sudo cp /mnt/etc/resolv.conf /mnt/etc/resolv.conf.old
и это не подвело, то теперь бегиsudo cp /mnt/etc/resolv.conf.old /mnt/etc/resolv.conf
,Если ты побежал
sudo cp /mnt/etc/hosts /mnt/etc/hosts.old
и это не подвело, то теперь бегиsudo cp /mnt/etc/hosts.old /mnt/etc/hosts
,Если ваша установленная система имеет отдельный
/boot
раздел, размонтируйте что:sudo umount /mnt/boot
Размонтируйте установленную систему
/
раздел:sudo umount /mnt
Оставьте окно терминала (запустите
exit
), затем перезагрузите (или выключите) систему live CD и загрузитесь в установленную систему.Посмотрите, работоспособна ли система и работает ли 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
Заметки:
Это может удалить ваше 32-битное ядро как надежное - по умолчанию - поставляется с обновленным ядром (ядро из utopic), см. 14.04 Замечания к выпуску. В этом случае ваше текущее ядро конфликтует с 64-битным ядром, которое будет установлено, и, следовательно, будет удалено. Если вам не нравится эта идея, вы можете попробовать использовать более старый 64-битный пакет ядра "linux-generic-lts-trusty:amd64".
Команда "--add-architecure" очень важна. Без этого система пакетов не поддерживает пакеты из разных архитектур, см. Multiarch-HowTo
Чтобы увидеть, что
apt-get
будет делать с вашей системой, запустите его с параметрами-Vs
который включает "режим подробного моделирования". Это напечатает все пакеты, которые будут установлены и удалены.Загрузка системы с использованием нового ядра зависит от
grub
конфигурации. От имени пользователя root запуститеupdate-grub
сделать обновление grub и распечатать текущую конфигурацию загрузки. Первое изображение в списке будет загружено по умолчанию.Чтобы выбрать другой образ ядра, я удалил строку
GRUB_HIDDEN_TIMEOUT=0
от/etc/default/grub
и побежал от имени пользователя rootupdate-grub
, Во время загрузки вы можете выбрать другое ядро (у вас есть 10 секунд, чтобы нажать любую клавишу, иначе grub продолжит работу с ядром по умолчанию).Ответ, набравший наибольшее количество голосов, относится к 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
подробности