我有一个在 64 位硬件上运行的 32 位 Ubuntu 安装。既然已经实现了多架构,我想切换到 64 位,而不必重新安装操作系统。
Shawn 使用 32 位版本的 Ubuntu 安装了他的系统,但他的硬件是 64 位的,他想切换。他手动安装了amd64版本的dpkg和apt,替换了i386版本,更改了默认使用的架构;然后他安装了 amd64 ubuntu-minimal 包;然后他安装 amd64 ubuntu-desktop 包。随着时间的推移,剩余的 i386 软件包会在升级时自动替换。
但是,当尝试按照那里的说明进行操作时,我找不到任何 dpkg 或 apt 的 64 位版本。
这个用户故事是在最终规范中以不同的方式实现的,还是我需要做一些不同的事情?
简而言之,如何将我的 32 位安装切换到 64 位?
Eli*_*gan 40
这种方法非常复杂,并且不太可能导致您的所有包都是amd64
版本而不是i386
版本。只有实际接收升级的包可能会在架构中发生变化,并且可能只有在没有其他未升级的包依赖于它们的i386
架构时。由于某些软件包在您的 Ubuntu 版本的整个支持周期中不会收到任何更新,因此您可能永远不会拥有amd64
使用这种技术的完整系统。此外,这种方法当然没有官方支持。
建议您使用新的 64 位安装替换现有的 Ubuntu 系统。
但是,如果你想尝试这种技术,你将不得不手动下载.deb
文件dpkg
和apt
。您可以dpkg
在 Ubuntu和Launchpad 的apt
Ubuntu页面中找到它们——在标记为发布、安全和/或更新的“The Oneiric Ocelot”下展开最新版本(但您可能不想要一个仅标记为提议和/或向后移植,如果有的话)。然后下载.deb
标记为的文件amd64
。具体来说,您需要的文件是:这个用于dpkg
(以及列出的其他文件,如果您安装了这些软件包)以及这个和这个以及这个和这个而这对于apt
。
在你对这些文件做任何事情之前,你应该确保备份你安装的 Ubuntu 系统中的所有重要文件和任何其他重要文件(例如,音乐、电子书、视频),因为尝试这种技术很可能会适得其反并让您的 Ubuntu 系统完全无法使用。
您可以通过将所有这些包放在一个不包含任何其他内容的文件夹中来安装所有这些包(假设该文件夹被调用debs
并且位于您的Downloads
目录中),然后运行以下命令:
sudo dpkg -Ri ~/Downloads/debs
Run Code Online (Sandbox Code Playgroud)
当然,一旦您安装了它们,它们就不会实际运行,因为它们的可执行文件是 64 位的,而您的 32 位 Ubuntu 系统正在运行 32 位内核(它将只运行 32 位可执行文件)。事实上,他们甚至可能还没有完成安装,因为他们可能有安装后脚本来调用他们无法运行的 64 位可执行文件。
有多种方法可以尝试将 64 位内核安装到 32 位系统上,但它们都非常复杂,因此我建议您从 64 位 Oneiric live CD(它本身运行 64 位kernel),chroot进入安装好的Ubuntu系统,使用最近安装的64位apt
并dpkg
安装64位内核。
以下是执行此操作的具体说明......但请不要认为这意味着我说它会起作用。我没有尝试过这个。(我已经从 live CD 进入已安装的 Ubuntu 系统并执行包管理和其他操作,但我没有尝试这里建议的跨架构操作。)
在你安装Ubuntu系统,打开一个终端窗口(Ctrl+ Alt+ T)和run 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 位)live CD 启动并选择“Try Ubuntu”而不是“Install Ubuntu”。
进入 Web 浏览器并确保 Internet 连接功能齐全。如果不是,请设置它。
打开终端窗口并运行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
Run Code Online (Sandbox Code Playgroud)ping -c 4 launchpad.net
在 chroot 中运行以查看 Internet 连接是否完全正常。你希望这样的事情:
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
Run Code Online (Sandbox Code Playgroud)相反,如果您无法传输或接收数据包,则必须在 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
Run Code Online (Sandbox Code Playgroud)
通常,如果出现错误,您应该停止此过程,但如果这四个命令中的第一个和/或第二个命令失败,请不要担心,前提是它失败的具体方式是告诉您/mnt/etc/resolv.conf
(或/mnt/etc/hosts
) 不存在.
chroot 重新进入并重试:
sudo chroot /mnt
ping -c 4 launchpad.net
Run Code Online (Sandbox Code Playgroud)运行这些命令使您的 chroot 环境完全可以使用:
export HOME=/root
export LC_ALL=C
Run Code Online (Sandbox Code Playgroud)如果您尚未安装.deb
64 位版本dpkg
和 的文件apt
,请立即安装。如果您确实安装了它们但存在配置错误,请运行dpkg --configure -a
以修复它们。(希望这会起作用……最好等到您进入 live CD 环境后再尝试安装它们,以防dpkg
在引导到已安装系统时安装 64 位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 ...
where ...
is 替换为您正在安装的包的空格分隔列表来执行此操作.
更新引导加载程序配置,卸载一些设备,并离开 chroot:
update-grub
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo umount mnt/dev
Run Code Online (Sandbox Code Playgroud)如果您运行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环境,并在chroot环境运行上面的说明基于在显著部分此相关但不同的程序,也对一些Launchpad的答案我的帖子,特别是6号在这里和#6在这里,特别感谢铯的指出64 位dpkg
和apt
可执行文件不会在运行 32 位内核的系统上运行。)
VJ-*_*VJ- 26
如上所述,我做了:
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
Run Code Online (Sandbox Code Playgroud)
有效。我能够在 Ubuntu 12.04 中使用 64 位内核运行我的 32 位用户空间。
尽管问题类似于是否可以从 32 位“升级”到 64 位安装?(如果您之前没有阅读过,我鼓励您尝试一下。那里提供的答案很好。)我还建议您阅读以下链接:
是否可能:是
容易吗:不!
如果您的问题与内存有关,那么您应该知道 Ubuntu 32 位可以读取超过 4GB 的 RAM(最高 64GB)。因此,在具有 32 位或 64 位架构的计算机上使用最新的 Ubuntu 32 位版本并放入更多 RAM 将不是问题。它只会读取额外的 RAM 并工作。
这些指令使您的系统以 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
Run Code Online (Sandbox Code Playgroud)
笔记:
这可能会删除您的 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
和跑了作为根用户 update-grub
。在启动时,您现在可以选择一个不同的内核(您有 10 秒的时间敲击任意键,否则 grub 将继续使用默认内核)。
得票最多的答案来自 2011 年,在我看来已经过时了。Multiarch 允许您在同一台机器上安装来自多个架构的库包,而无需多费心思。
这些答案有些过时了。现在在 Debian wiki上记录了 Debian 的交叉分级,但仍然不推荐这样做。
从不同的架构安装内核现在就像那里描述的一样简单,但新的“apt”不会识别来自以前架构的包,因此它的所有前端可能会报告大量损坏的包。这要么需要将所有依赖项更改为其他架构,要么将 apt 和 dpkg 恢复为 32 位。
因此,最好的方法可能是首先保存dpkg --get-selections
, strip :i386 的结果,然后将每个依赖项的 amd64 包下载到缓存中:
apt-get --download-only install perl:amd64 python3:amd64 python3-gi:amd64 xorg:amd64...
Run Code Online (Sandbox Code Playgroud)
充其量,解决依赖关系可能会很慢且耗时。
归档时间: |
|
查看次数: |
126323 次 |
最近记录: |