我在 64 位硬件上运行了 32 位 Ubuntu 安装。现在已实现多架构,我想切换到 64 位,而不必重新安装操作系统。
这是规范中提到的用户故事:
Shawn 使用 32 位版本的 Ubuntu 安装了他的系统,但他的硬件是 64 位的,他想切换。他手动安装了 amd64 版本的 dpkg 和 apt,替换了 i386 版本并更改了默认使用的体系结构;然后他安装了 amd64 ubuntu-minimal 包;然后他安装了 amd64 ubuntu-desktop 包。随着时间的推移,其余的 i386 包会在升级时自动替换。
但是,当尝试按照其中的说明进行操作时,我找不到任何 64 位版本的 dpkg 或 apt。
这个用户故事是否在最终规范中以不同的方式实现,或者我需要做一些不同的事情?
简而言之,如何将我的 32 位安装切换到 64 位?
答案1
这种方法非常复杂,并且不太可能导致所有软件包都是版本amd64
而不是版本i386
。只有实际收到升级的软件包才有可能在体系结构上发生变化,并且可能只有在没有其他未升级的软件包依赖于它们属于该体系结构的情况下才会发生更改i386
。由于某些软件包不会收到任何在整个 Ubuntu 版本支持周期内,您可能永远不会拥有amd64
使用此类技术的完整系统。此外,这种方法肯定没有官方支持。
建议您用新的 64 位安装替换现有的 Ubuntu 系统。
然而,如果你确实想尝试这种技术,你必须手动下载和的.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 位 Oneiric Live CD 启动(它本身运行 64 位内核),chroot进入安装好的Ubuntu系统,使用刚刚安装的64位apt
,并dpkg
安装64位内核。
以下是具体操作说明...但请不要认为我说它会起作用。我还没有尝试过。(我已从 Live CD chroot 到已安装的 Ubuntu 系统并执行了包管理和其他操作,但我没有尝试过此处建议的跨架构操作。)
在已安装的 Ubuntu 系统中,打开终端窗口 ( Ctrl+ Alt+ T) 并运行
mount | grep ' on / '
(将其粘贴到终端并按 Enter)。您应该会看到类似 的内容/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 位)实时 CD 启动并选择“试用 Ubuntu”而不是“安装 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 中设置 Internet 连接。为此,请运行以下命令(离开 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
运行以下命令,让您的 chrooted 环境完全可以使用:
export HOME=/root export LC_ALL=C
如果您尚未安装
.deb
64 位版本的文件dpkg
和apt
,请立即安装。如果您已安装它们但存在配置错误,请运行以修复它们。(希望这会起作用……最好等到您进入实时 CD 环境后再尝试安装它们,以防在启动到已安装的系统时dpkg --configure -a
安装 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 ...
其中...
替换为要删除的软件包的空格分隔列表。现在重新安装您删除的软件包。(实际上,对于软件包名称中包含版本号的软件包,例如,您只需安装最新版本的软件包名称。)通过运行where替换为您正在安装的软件包的空格分隔列表来
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
),然后重新启动(或关闭)实时 CD 系统并启动到已安装的系统。查看系统是否可用并运行 64 位内核(
uname -m
应该说架构是x86_64
)。
您可能需要安装其他软件包,例如ia32_libs
和/或 的 64 位版本libc6
,才能使其正常工作。对于其中一些软件包,您可能会在尝试安装 64 位版本的dpkg
和/或时被告知需要它们apt
。对于其他软件包,您可能不会被告知。
(以上关于 chroot 和在 chroot 环境中操作的说明很大程度上基于这一相关但不同的程序以及一些Launchpad 答案我的帖子,特别是#6这里和 #6这里. 特别感谢铯指出 64 位dpkg
和apt
可执行文件无法在运行 32 位内核的系统上运行。)
答案2
如上所述,我做了:
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
成功了。我能够在 Ubuntu 12.04 中运行带有 64 位内核的 32 位用户空间。
答案3
尽管问题类似于是否可以从 32 位安装“升级”到 64 位安装?(如果您之前没有读过,我鼓励您尝试一下。那里提供的答案很好。)我还建议阅读以下链接:
是否可能:是的
这容易吗:不!
如果您的问题与内存有关,那么您应该知道 Ubuntu 32 位可以读取超过 4GB 的 RAM(最高 64 GB)。因此,在具有 32 位或 64 位架构的计算机上使用最新的 Ubuntu 32 位版本并放入更多 RAM 不会有问题。它只会读取额外的 RAM 并工作。
答案4
这些指令使您的系统以 64 位内核启动,但不会改变大多数用户程序。
在将我的系统升级为 64 位 CPU 后,我还想在我的 32 位 14.04.2 Ubuntu(代号:Trusty)上安装 64 位内核。为此,我输入了以下命令: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”命令必不可少。如果没有它,软件包系统将不支持来自不同体系结构的软件包,请参阅多架构指南
要查看
apt-get
对您的系统有何影响,请使用启用“详细模拟模式”的选项运行它-Vs
。这将打印所有要安装和删除的软件包。您的系统是否使用新内核启动取决于
grub
配置。root 用户,运行update-grub
make grub update 并打印当前的启动配置。列表中的第一个映像将作为默认启动。要选择不同的内核映像,我删除了该行
GRUB_HIDDEN_TIMEOUT=0
并/etc/default/grub
运行root 用户update-grub
。在启动时,您现在可以选择不同的内核(您有 10 秒钟的时间按任意键,否则 grub 将继续使用默认内核)。得票最多的答案是 2011 年的,在我看来已经过时了。Multiarch 可让您在同一台机器上轻松安装来自多个架构的库包。