Migrating between architectures (Русский)
На этой странице описаны два возможных способа миграции установленных систем с 64-разрядных (32-разрядных) на x86_64 (64-разрядные) архитектуры. Методы избегают «полной» переустановки (т. е. очистки жесткого диска). Один метод использует liveCD, другой изменяет систему изнутри.
Contents
Общая подготовка
Проверить 64-битную архитектуру
Для запуска 64-разрядного программного обеспечения у вас должен быть 64-разрядный процессор. Большинство современных процессоров способны запускать 64-битное программное обеспечение. Вы можете проверить свой процессор с помощью следующей команды:
# grep --color -w lm /proc/cpuinfo
Для процессоров, поддерживающих x86_64, это вернет lm
flag (“long mode”). Остерегайтесь того, что 'lahf_lm' - это другой флаг и не указывает на 64-битные возможности.
Дисковое пространство
Вы должны быть готовы к увеличению размера /var/cache/pacman/pkg
примерно в два раза. Предполагается, что в кеше находятся только установленные в данный момент, как будто “pacman -Sc” (clean) был недавно запущен. Увеличение дискового пространства связано с дублированием каждого пакета для версии i686 и x86_64.
Если у вас недостаточно диска, используйте GParted, чтобы изменить размер соответствующего раздела или установить другой раздел в /var/cache/pacman
.
Не удаляйте пакеты старой архитектуры из кеша, пока система не будет полностью работать в новой архитектуре. Снятие пакетов слишком рано может оставить вас неспособными отступить и вернуть изменения.
Источник питания
Миграция может занять значительное количество времени, и было бы неудобно прерывать процесс. Вы должны планировать как минимум час, в зависимости от количества и размера установленных пакетов и скорости интернет-соединения (хотя вы можете загрузить все, прежде чем запускать критическую часть). Убедитесь, что вы подключены к стабильному источнику питания, предпочтительно с какой-либо отказоустойчивостью или резервным аккумулятором.
Пакеты резервных копий
Если миграция завершилась неудачно, есть пакеты, которые могут помочь разобраться в ситуации, но они должны быть установлены до переноса основных пакетов. Подробнее об использовании их в разделе #Устранение проблем ниже.
Один пакет busybox, который можно использовать для возврата изменений. Он статически связан и не зависит от каких-либо библиотек. Должна быть установлена 32-разрядная версия (i686).
Другой пакет lib32-glibc, из Multilib x86_64 репозитория, может пригодиться только при миграции с 32 бит. Вы можете безопасно пропустить этот пакет, а для запуска 32-битных программ явно вызывать /lib/ld-linux.so.2
.
Метод 1: с использованием Arch LiveCD
- Скачайте и запишите свежий образ Arch Linux ISO.
- Загрузите Arch LiveCD в режиме x86_64.
- Настройте доступ к сети.
- Примонтируйте текущую установку. Например:
mount /dev/sda1 /mnt
. - Отредактируйте репозитории LiveCD
/etc/pacman.conf
для соответствия текущим репозиториям/mnt/etc/pacman.conf
. - Обновите базу pacman и очистите кэш при помощи команд:
# pacman --root /mnt -Syy # pacman --root /mnt -Scc
- 6. Сначала попробуйте переустановить только группу base, затем каждый пакет, при установке которого возникла ошибка. Найти эти пакеты можно при помощи
pacman --root /mnt -Qo <error file>
. Затем повторяйте установку группы base до тех пор, пока установка не закончится без ошибок.
# pacman --root /mnt -S base
- 7. Получить список всех установленных пакетов и переустановить их можно при помощи команды:
# pacman --root /mnt -Qnq | pacman --root /mnt -S -
- 8. Команду следует запускать дважды, потому что при первом запуске многие пакеты не смогут выполнить пост-установочные скрипты из-за неверной архитектуры. К примеру, sed, grep, perl и другие. Либо вы можете записать пакеты, установка которых завершилась ошибкой, а затем вернуться к ним после окончания миграции и переустановить. Если же при установке закончилось свободное место, вы можете отфильтровать пакеты по алфавиту и обновлять их группами. Например, сначала
...| grep '^[a-k]' |...
, затем'^l'
и в конце'^[m-z]'
. Также не забывайте запускать после каждой установкиpacman --root /mnt -Scc
для освобождения места. Или, так как весь пакет загружается в LiveCD ramfs, Вы также можете смонтировать этот раздел или создать символьную ссылку на/var/cache/pacman/pkg
:
ln -s /mnt/var/cache/pacman/pkg /var/cache/pacman/pkg
- 9. И в конце запустите
# arch-chroot /mnt # mkinitcpio -p linux
- 10. Также обратите внимание на загрузчик, который тоже может потребовать миграции. К примеру:
# grub-install --recheck /dev/sda
- 11. После перезагрузки в новую 64-битную систему отредактируйте
/etc/makepkg.conf.pacnew
и переместите в/etc/makepkg.conf
для подготовки к миграции на новую архитектуру сторонних пакетов, включая AUR. Затем их необходимо пересобрать.
- Перед пересборкой может потребоваться удаление orphaned пакетов. Для поиска 32-битных пакетов воспользуйтесь:
$ pacman -Qo `find /usr/bin -type f -exec bash -c 'file "{}" | grep 32-bit' \; | cut -d':' -f1` | cut -d' ' -f5 | sort | uniq | tee list
Метод 2: из работающей системы
Убедитесь, что ваша система полностью обновлена и работоспособна.
# pacman -Syu
Подготовка пакетов
Кеширование старых пакетов
Если у вас нет в кэше всех установленных пакетов, загрузите их (для старой архитектуры) для возможности восстановления.
# pacman -Qqn | pacman -Sw -
или используйте bacman из pacman.
Установка busybox
Если вы мигрируете с 32 бит на 64 бита, самое время установить 32-битный busybox
# pacman -S busybox
Изменение архитектуры Pacman
Отредактируйте /etc/pacman.conf
и измените Architecture с auto
на x86_64
.
Убедитесь, что в списках серверов в /etc/pacman.conf
и /etc/pacman.d/mirrorlist
используется $arch
вместо принудительно заданных i686
или x86_64
. Затем принудительно синхронизируйте Pacman с репозиториями:
# pacman -Syy # принудительная синхронизация с новой архитектурой
Скачайте новые пакеты
Скачайте для всех установленных пакетов версию для новой архитектуры:
# pacman -Sw $(pacman -Qqn|sed '/^lib32-/ d') # скачать пакеты для новой архитектуры
Установка пакетов
Установка ядра (64-bit)
Обновить ядро до 64-битного (x86_64) просто и безопасно: 32-битные и 64-битные приложения работают с 64-битным ядром одинаково хорошо.
Установите пакет linux.
# pacman -S linux
Установка lib32-glibc
Установите lib32-glibc на всякий случай. Для этого может потребоваться включить репозиторий multilib в /etc/pacman.conf
, если вы еще не сделали это ранее.
# pacman -S lib32-glibc
Перезагрузка
После перезагрузки убедитесь, что работаете в архитектуре x86_64:
$ uname -m
x86_64
Переключение в консольный терминал
Для продолжения по возможности переключитесь в текстовую виртуальную консоль (напр. при помощи Ctrl+Alt+F1). Если при использовании первой консоли возникают проблемы, используйте вместо нее вторую (Ctrl-Alt+F2). Псевдо-терминалы вроде SSH должны работать, но в целях предосторожности рекомендуется прямой доступ. В процессе миграции некоторые пакеты будут заменены, что может сказаться на X11 и загрузить систему будет невозможно.
Установка Pacman
Воспользуйтесь pactree для установки Pacman и всех его зависимостей:
# pactree -l pacman | pacman -S -
В процессе могут возникать ошибки, но они не страшны пока Pacman продолжает работать.
Установка остальных пакетов
Установите все предварительно скачанные пакеты для новой архитектуры. (Сварите кофе и намажьте пару бутербродов красной икрой, это небыстрый процесс)
# pacman -Qqn | pacman -S -
Если при установке каких-либо пакетов возникнут проблемы, их необходимо переустановить вручную. Если вам лень, то можно просто перезапускать эту команду до успешного завершения.
После этого этапа миграция будет окончена, можно безопасно перезагузить систему.
Однако если были установлены пакеты из AUR, необходимо их переустановить отдельно. Список можно получить командой:
$ pacman -Qqm
Очистка
Теперь можно безопасно удалить busybox и lib32-glibc.
Флаги компиляции Makepkg
При обновлении новая версия /etc/makepkg.conf
может быть сохранена как /etc/makepkg.conf.pacnew
. Если это произошло, то необходимо заменить прежнюю версию на новую или отредактировать ее для сборки при помощи makepkg в будущем.
# mv /etc/makepkg.conf /etc/makepkg.conf.backup && mv /etc/makepkg.conf.pacnew /etc/makepkg.conf
Неплохо бы было проверить вообще все "new" файлы в /etc
при помощи:
# find /etc/ -type f -name \*.pac\*
Устранение проблем
При замене glibc на версию для новой архитектуры в процессе обновления многие приложения для старой архитектуры могут не запуститься. Проблему можно решить при помощи busybox и lib32-glibc.
Busybox
В Arch Busybox статически связан. Он может быть запущен без библиотек и предоставить вам массу команд. Например, для извлечения i686-версии Pacman из пакета в кеше можно воспользоваться:
# busybox tar xf /var/cache/pacman/pkg/pacman-3.3.2-1-i686.pkg.tar.gz -C <some folder>
Lib32-glibc
Пример запуска 32-битного /bin/ls
:
# /lib/ld-linux.so.2 /bin/ls
KDE не запускается после миграции с 32-bit на 64-bit
KDE будет падать после перехода с 32-bit на 64-bit из-за некоторых 32-битных пакетов в /var/tmp. Для решения проблемы достаточно удалить все папки с кешем.
# rm -rf /var/tmp/kdecache-*
Проблемы Mutt при включенном кеше
Если после завершения миграции Mutt зависает на открытии папок, попробуйте переименовать папку с кешем. Если это решит проблему - переименованную папку можно удалить, Mutt сам создаст новую.