У меня есть 32-битная система, которая работает на 64-битном процессоре. Как мне преобразовать его в полностью 64-битную версию без переустановки? Я видел где-то, что это выполнимо в результате новой платформы Multiarch .
У меня есть 32-битная система, которая работает на 64-битном процессоре. Как мне преобразовать его в полностью 64-битную версию без переустановки? Я видел где-то, что это выполнимо в результате новой платформы Multiarch .
Ответы:
TL; DR: это выполнимо, но сложно. Я обрисовал альтернативу внизу.
Теперь длинное описание , и возьмите его с крошкой соли, поскольку я, возможно, не выбрал лучший маршрут:
Это возможно, и вот что я делал последние две ночи: есть запись в вики, описывающая способ старой школы без поддержки мультиархии. Это полезно для исправления сломанных пакетов.
Чтобы перенести вашу базовую систему, сделайте это :
$ dpkg --print-architecture
i386
# dpkg --add-architecture amd64
$ dpkg --print-foreign-architectures
amd64
# apt-get update
# apt-get download gcc-4.6-base:amd64 libgcc1:amd64 libc6:amd64 \
libselinux1:amd64 zlib1g:amd64 libbz2-1.0:amd64 dpkg:amd64
# dpkg -i gcc-4.6-base*.deb libgcc*.deb libc*.deb libselinux*.deb \
libbz2*.deb zlib*.deb dpkg*.deb
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386
Некоторые из ваших пакетов тогда amd64, но большинство останется i386. apt-get upgrade
позаботится о некоторых пакетах, apt-get -f install
исправит некоторые ошибки, но большинство пакетов останется i386. Если вы хотите с этим справиться, то пропустите хитрую часть;)
Использование dpkg --get-selections | grep :i386
вернет все ваши пакеты, которые вам все равно придется перенести.
Моей следующей идеей было сделать:
# apt-get install `dpkg --get-selections \
| grep i386 \
| awk {'gsub(/:i386/, ":amd64"); print $1'}`
Но это оказалось плохой идеей: некоторые пакеты недоступны в amd64 (например, libc6-i686), apt-get будет сбит с толку, и в обеих версиях будет установлено много пакетов. Много ручной работы в способности должно быть сделано.
Больше трудностей: некоторые важные пакеты можно заменить, так что у вас всегда будут установлены двоичные файлы для установки, но некоторые пакеты придется удалить и установить снова, например, у меня была эта проблема с tar. Я собрал пакеты в другой системе, извлек пакеты через ar p package.deb data.tar.gz | tar zx
и затем отредактировал scp
извлеченные файлы через scp -r ./* root@other_computer:/
, так что двоичные файлы снова доступны. Промойте и повторите, и scp
редактируемые файлы будут перезаписаны.
Что бы я сделал вместо
Когда я переключал системы, я делал следующее:
Резервное копирование /home
, /etc
(и , возможно /var
, /usr/local
некоторые другие файлы , которые вы изменили, /root
..., YMMV).
Получите список установленных пакетов dpkg --get-selections > packagelist
и скопируйте полученный файл packagelist
.
Затем выполните чистую переустановку Debian, снова создайте всех пользователей, возможно, роли и т. Д.
Переустановите все пакеты с помощью dpkg --set-selections < packagelist; apt-get -f install
.
Скопируйте резервные копии каталогов, файлов, и вы в основном сделали.
Недостаток этого подхода: все ваши пакеты, включая библиотеки, будут помечены как установленные вручную, поэтому они не будут удалены, если от них больше не зависит ни один пакет.
apt-mark showauto
для экспорта автоматически установленного списка и apt-mark auto
пометить их в новой установке.
x86_64
, и мне все равно, не будут ли мои системные пакеты оптимально использовать 64-битный процессор? ? Я также использую 32-битную ОС. Я думаю, я думал, что мой процессор был 32-разрядным, когда я впервые сделал установку :(
Другие ответы здесь показывают, что, хотя это теоретически возможно, это очень сложно и, вероятно, не стоит усилий. Вы можете, однако, сделать чистую установку и сделать процесс относительно безболезненным, если вы продолжите $HOME
.
Общий процесс будет
Сделайте резервную копию вашего списка установленных пакетов и списка автоматически установленных пакетов.
dpkg --get-selections '*' > package.list
apt-mark showauto >auto.list
Обратите внимание, что вы также можете удалить архитектуру из любых имен пакетов, установленных с помощью multiarch :
dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
Если у вас /home
отдельный раздел, просто не форматируйте его во время процесса установки. Если он не находится в отдельном разделе, создайте резервную копию, которую можно восстановить позже:
tar cvzf home_backup.tgz $HOME/
После того, как вы установили новую систему, установите недостающие пакеты
sudo dpkg --set-selections < package.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-mark auto $(cat auto.list)
Восстановите свой $ HOME. Скопируйте файл tgz и распакуйте его в каталог $ HOME:
tar xvzf home_backup.tgz
Вы также можете взглянуть на инструменты, которые предоставляет Mint, чтобы сделать это проще. Все они должны быть установлены на Ubuntu.
Теоретически это возможно, но, вероятно, предательски. В настоящее время многоархивация Debian поддерживает многоархивовые библиотеки, но не двоичные файлы. Вот и все.
Система в первую очередь понимает свою собственную архитектуру dpkg-architecture
(которая на самом деле является сценарием Perl, но она извлекает информацию об архитектуре и отображает ее), которая также утверждает, что может устанавливать архитектуру.
Грубый процесс будет:
libgcc1
)dpkg-architecture -aamd64
для сдвига вашей арки (обратите внимание, он может жаловаться на GCC)dpkg
и зависимостейapt-get
и ядра (обратите внимание, что может появиться много)apt-get
Эти шаги основаны на том, что я знаю о дизайне Debian, который использовал его почти исключительно в дистрибутивах Linux за последние 12 лет (в том числе и debtakeover
раньше), и о подходе, который я выбрал бы. Так что обдумайте это на свой страх и риск . Ваша система может стать непригодной для использования в любое время после выполнения шага 4. Может быть альтернативой шагам 4 и 5 debbootstrap
.
Самое главное, я настоятельно рекомендую попробовать это на ВМ, прежде чем делать это на чем-либо, что вас волнует.
Удачи, и да пребудет с тобой Сила .
Не ответ на вопрос, но может быть сложно обновить все пакеты с x86 до amd64, но вы можете, по крайней мере, легко установить пакет ядра amd64, который по крайней мере позволит вам запускать 64-битные приложения, а также виртуальные машины и контейнеры ( чего может хватить на то что нужно).
Просто установите пакет amd64 linux-image с помощью dpkg -i --force-architecture
.
--force-architecture
не требуется, и ядро amd64 можно установить через apt на i386.
Существует немало руководств, но вряд ли можно увидеть, чего на самом деле ожидать. Я пишу это на ноутбуке Debian Wheezy, который я только что закончил обновлять с 32-разрядной до 64-й версии, и он действительно работает.
Я следовал этим инструкциям, и они были очень точны в том, с чем вы столкнетесь:
http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html
Рекомендуется поддерживать работу системы в течение всего процесса, не перезагружаться, если вы не уверены, что перенесли все и что все удаленное было установлено снова (особенно необходимые пакеты), иначе вы не запустите систему снова.
Следуя идее использования awk , я использовал:
dpkg --get-selections \ # get the list
| grep -v deinstall \ # throw away deselected packages
| grep ':i386' \ # get the i386 arch packages
| sed 's/install//g' \ # drop 'install' to get list
| sed 's/:i386/:amd64/g' \ # replace i386 with amd64
| while read package; do \ # iterate over the result
apt-get -yf install $package; \ # install each one and fix dependencies
done
Я должен был запустить его несколько раз. dpkg --get-selections
это просто алфавитный список, поэтому пакеты вверху, для которых требуются пакеты внизу, будут пропущены. Если вы хотите посмотреть, сколько из них устанавливается, сделайте это dpkg --get-selections | grep amd64 | wc -l
внутри while
цикла.
У меня мало опыта в этом вопросе, но я верю, что вы правы, когда говорите, что конвертация с 32 на 64 должна быть возможна с использованием нескольких арок. Я буду осторожен с тем, насколько хорошо поддерживается эта новая система.
Вот один из документов, которые я прочитал, в которых обсуждался этот вопрос, возможно, это вам поможет: https://wiki.ubuntu.com/MultiarchSpec
Обратите внимание на третьи истории пользователей. Вот еще одна ссылка на ту же тему: https://help.ubuntu.com/community/MultiArch
Даже если между Debian и Ubunutu это может немного отличаться, это ключевая особенность. Я полагаю, что Ubuntu и Debian будут тесно сотрудничать, чтобы заставить эту структуру функционировать на месте, прежде чем Ubuntu отойдет и сделает что-то по своему вкусу.
Удачи!