我在64位硬件上安装了32位Ubuntu。现在多体系结构已经实现,我想切换到 64 位,而无需重新安装操作系统。
这是规范所涉及的用户问题之一:
*肖恩使用32位版的Ubuntu安装了系统,但他的硬件是64位的,他想切换到64位。他手动安装了 dpkg 和 apt 的 amd64 版本,替换了 i386 版本,并更改了默认使用的架构;然后安装了 amd64 ubuntu-minimal 软件包;接着又安装了 amd64 ubuntu-desktop 软件包。随着时间的推移,其余的 i386 软件包会在升级时被自动替换。
然而,当我试图按照其中的说明进行操作时,却找不到任何 64 位版本的 dpkg 或 apt。
是这个用户故事在最终规范中以不同的方式实现了,还是我需要做一些不同的事情?
简而言之,我怎样才能将 32 位安装切换到 64 位?
这种方法非常复杂,而且不太可能导致所有软件包都是 amd64
版本而不是 i386
版本。只有真正接受升级的软件包才有可能在架构上发生变化,而且很可能只有在没有其他未升级的软件包依赖于它们的 i386
架构时才会发生变化。由于有些软件包在Ubuntu发布的整个支持周期内都不会收到任何更新,因此使用这种技术很可能永远也不会有一个完全的 "amd64 "系统。此外,官方肯定也不支持这种方法。
您最好还是将现有的 Ubuntu 系统更换为新的 64 位安装程序。
不过,如果你确实想尝试这种技术,就必须手动下载dpkg
和apt
的.deb
文件。你可以在 Launchpad 上的 dpkg
in Ubuntu 和 apt
in Ubuntu 页面找到它们--在"The Oneiric Ocelot"下展开标记为发布、安全和/或更新的最新版本(但你可能不想要只标记为建议和/或回溯的版本,如果有的话)。然后下载标记为amd64
的.deb
文件。具体来说,你需要的文件是这个是 dpkg
文件(如果你安装了其他软件包,也可以下载其他文件),这个和这个和这个和这个和这个是 apt
文件。
在使用这些文件之前,你应该确保备份已安装的 Ubuntu 系统中的所有重要文件以及任何其他重要文件(如音乐、电子书、视频),因为尝试这种方法很可能会适得其反,使你的 Ubuntu 系统完全无法使用。
你可以把这些软件包放在一个不包含任何其他内容的文件夹中(假设该文件夹名为 "debs",位于你的 "Downloads "目录下),然后运行以下命令来安装它们:
sudo dpkg -Ri ~/Downloads/debs
当然,一旦你安装了它们,它们实际上并不能运行,因为它们的可执行文件是64位的,而你的32位Ubuntu系统运行的是32位内核(只能运行32位可执行文件)。事实上,它们甚至可能无法完成安装,因为它们可能有安装后脚本来调用无法运行的 64 位可执行文件。
在32位系统上尝试安装64位内核有多种方法,但都非常复杂,所以我建议你从64位Oneiric Live CD(它本身就运行64位内核)启动,chroot到已安装的Ubuntu系统,然后使用最近安装的64位apt
和dpkg
来安装64位内核。
这里有具体的操作说明......但请不要认为我说的就是可行的。我还没有尝试过。(我曾从 Live CD's 引导到已安装的 Ubuntu 系统,并执行过软件包管理和其他操作,但没有尝试过这里建议的跨体系结构操作)。
1.在已安装的 Ubuntu 系统中,打开终端窗口(Ctrl+Alt+T)并运行mount | grep ' on / '
(将其粘贴到终端并按回车键)。你应该会看到类似"/dev/sda2 on / type ext4 (rw,error=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位)Live CD启动,选择"尝试Ubuntu",而不是"安装Ubuntu"。
4.4. 进入网页浏览器,确保互联网连接完全正常。如果没有,请进行设置。
5.打开终端窗口,运行 "sudo mount /dev/sda2 /mnt"(将"/dev/sda2 "替换为步骤 1 中获得的设备名称,如果不同的话)。
6.如果安装的系统有单独的 /boot
分区,请运行 sudo mount /dev/sda1 /mnt/boot
(如果与步骤 2 中获得的设备名称不同,请将 /dev/sda1
替换为设备名称)。
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) 字节数据。
来自 launchpad-net.banana.canonical.com (91.189.89.223) 的 64 字节:icmp_req=1 ttl=41 time=141 ms
来自 launchpad-net.banana.canonical.com (91.189.89.223) 的 64 个字节:icmp_req=2 ttl=41 time=143 ms
来自 launchpad-net.banana.canonical.com (91.189.89.223) 的 64 个字节:icmp_req=3 ttl=41 time=142 ms
来自 launchpad-net.banana.canonical.com (91.189.89.223) 的 64 个字节:icmp_req=4 ttl=41 time=140 ms
--- launchpad.net ping 统计 ---
传输 4 个数据包,接收 4 个数据包,0% 丢包,时间 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.如果你还没有安装 64 位版本的 dpkg
和 apt
的 .deb
文件,现在就安装吧。如果已经安装,但出现了配置错误,请运行 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:
更新-grub
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
退出
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.
19.离开终端窗口(运行 exit
),然后重启(或关闭)Live CD 系统并启动到已安装的系统。
20.查看系统是否可用并运行 64 位内核("uname -m "应显示架构为 "x86_64")。
你可能需要安装一些额外的软件包,如 ia32_libs
和/或 64 位版本的 libc6
,这样才能正常工作。对于其中一些软件包,你可能会在尝试安装 64 位版本的 dpkg
和/或 apt
时被告知需要它们。而对于其他系统,则可能不会被告知。
(以上关于chroot 和在chroot 环境中运行的说明在很大程度上基于这个相关但不同的程序以及我的一些Launchpad 答案帖子,尤其是 #6 这里 和 #6 这里。特别感谢 Caesium 指出 64 位的 dpkg
和 apt
可执行文件无法在运行 32 位内核的系统上运行。)
问得好。我四处打听了一下,除了你引用的用户故事外,我找不到任何关于如何做到这一点的细节。所有文档都表明,它只能在已经是 64 位的操作系统上运行 32 位应用程序。
不过,如果你愿意尝试,可以试试下面的方法(源自我在 [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,然后按照前面引述的 user-story、ubuntu-minimal、ubuntu-desktop 等进行安装。
安装完 apt:amd64 后,我想你就可以移除 foreign-architecture 这一行了,因为这时你基本上已经切换了。
免责声明:我没有 32 位系统可以测试,所以这都是猜测。祝你好运