如何将 32 位安装切换到 64 位安装?

Dav*_*lla 57 multiarch

我有一个在 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文件dpkgapt。您可以dpkg在 Ubuntu和Launchpad 的aptUbuntu页面中找到它们——在标记为发布、安全和/或更新的“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位aptdpkg安装64位内核。

以下是执行此操作的具体说明......但请不要认为这意味着我说它会起作用。我没有尝试过这个。(我已经从 live CD 进入已安装的 Ubuntu 系统并执行包管理和其他操作,但我没有尝试这里建议的跨架构操作。)

  1. 在你安装Ubuntu系统,打开一个终端窗口(Ctrl+ Alt+ T)和run mount | grep ' on / '(通过将其粘贴到终端并按下回车)。您应该会看到类似/dev/sda2 on / type ext4 (rw,errors=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 启动并选择“Try Ubuntu”而不是“Install Ubuntu”。

  4. 进入 Web 浏览器并确保 Internet 连接功能齐全。如果不是,请设置它。

  5. 打开终端窗口并运行sudo mount /dev/sda2 /mnt/dev/sda2如果不同,请替换为您在步骤 1 中获得的设备名称)。

  6. 如果您安装的系统有一个单独的/boot分区,请运行sudo mount /dev/sda1 /mnt/boot/dev/sda1如果不同,请替换为您在步骤 2 中获得的设备名称)。

  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  
    
    Run Code Online (Sandbox Code Playgroud)
  8. 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)
  9. 相反,如果您无法传输或接收数据包,则必须在 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)
  10. 运行这些命令使您的 chroot 环境完全可以使用:

    export HOME=/root  
    export LC_ALL=C  
    
    Run Code Online (Sandbox Code Playgroud)
  11. 如果您尚未安装.deb64 位版本dpkg和 的文件apt,请立即安装。如果您确实安装了它们但存在配置错误,请运行dpkg --configure -a以修复它们。(希望这会起作用……最好等到您进入 live CD 环境后再尝试安装它们,以防dpkg在引导到已安装系统时安装 64 位dpkg导致无法使用状态。)

  12. 随着64位版本dpkgapt安装,假定它们会自动安装64位软件包,您现在可以卸下所有的32位内核,并安装64位内核。要删除 32 位内核,请运行dpkg -l | grep linux-. 这列出了以linux-. 你在开始喜欢包更特别感兴趣linux-genericlinux-imagelinux-server,和/或linux-headers。删除这些文件,apt-get purge ...其中 where...替换为要删除的包的空格分隔列表。

  13. 现在重新安装您删除的软件包。(实际上,对于包名称中包含版本号的包,例如linux-image-3.0.0-13-generic,您只需要安装最新版本的包名称。)通过运行apt-get install ...where ...is 替换为您正在安装的包的空格分隔列表来执行此操作.

  14. 更新引导加载程序配置,卸载一些设备,并离开 chroot:

    update-grub  
    umount /proc || umount -lf /proc  
    umount /sys  
    umount /dev/pts  
    exit  
    sudo umount mnt/dev  
    
    Run Code Online (Sandbox Code Playgroud)
  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. 离开终端窗口(运行exit),然后重新启动(或关闭)live CD 系统并引导到已安装的系统。

  20. 查看系统是否可用并运行 64 位内核(uname -m应该说架构是x86_64)。

您可能需要安装其他软件包,例如ia32_libs和/或 的 64 位版本libc6,才能使其正常工作。对于其中一些,您可能会在尝试安装 64 位版本dpkg和/或apt. 对于其他人,您可能不会被告知。

(对于Chroot环境,并在chroot环境运行上面的说明基于在显著部分此相关但不同的程序,也对一些Launchpad的答案我的帖子,特别是6号在这里和#6在这里,特别感谢的指出64 位dpkgapt可执行文件不会在运行 32 位内核的系统上运行。)

  • Eliah,这些二进制文件会在 32 位内核下运行吗? (2认同)

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 位用户空间。

  • 这个答案很震撼。我可以确认它仍然适用于俏皮。一个区别是添加架构的过程已经改变:改用`sudo dpkg --add-architecture amd64`。如果你反其道而行之,它会冲你大喊大叫。我需要这样做,以便我可以从(以前的)32 位安装 chroot 到 64 位安装,并且它完全按预期工作,没有任何故障。 (6认同)

Lui*_*ado 6

尽管问题类似于是否可以从 32 位“升级”到 64 位安装?(如果您之前没有阅读过,我鼓励您尝试一下。那里提供的答案很好。)我还建议您阅读以下链接:

为了获得更好的性能,我应该安装 32 位还是 64 位?

如何将 32 位安装切换到 64 位安装?

32位和64位有什么区别,我应该选择哪个?

是否可能:是

容易吗:不!

如果您的问题与内存有关,那么您应该知道 Ubuntu 32 位可以读取超过 4GB 的 RAM(最高 64GB)。因此,在具有 32 位或 64 位架构的计算机上使用最新的 Ubuntu 32 位版本并放入更多 RAM 将不是问题。它只会读取额外的 RAM 并工作。


Dan*_* K. 5

这些指令使您的系统以 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)

笔记:

  1. 这可能会删除您的 32 位内核,因为它是可信赖的 - 默认情况下 - 随附更新的内核(来自 utopic 的内核),请参阅14.04 发行说明。在这种情况下,您当前的内核与要安装的 64 位内核冲突,因此会被删除。如果您不喜欢这个想法,您可能想尝试使用较旧的 64 位内核包“linux-generic-lts-trusty:amd64”。

  2. “--add-architecure”命令是必不可少的。没有它,包系统不支持来自不同架构的包,参见Multiarch-HowTo

  3. 要查看apt-get对您的系统有何影响,请使用-Vs启用“详细模拟模式”的选项运行它。这将打印所有要安装和删除的包。

  4. 系统是否使用新内核引导取决于grub配置。以root 用户update-grub身份运行以进行 grub 更新并打印当前启动配置。列表中的第一个映像将默认启动。

  5. 以选择不同的内核映像,我除去线GRUB_HIDDEN_TIMEOUT=0/etc/default/grub和跑了作为根用户 update-grub。在启动时,您现在可以选择一个不同的内核(您有 10 秒的时间敲击任意键,否则 grub 将继续使用默认内核)。

  6. 得票最多的答案来自 2011 年,在我看来已经过时了。Multiarch 允许您在同一台机器上安装来自多个架构的库包,而无需多费心思。


Ced*_*ght 5

这些答案有些过时了。现在在 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 次

最近记录:

4 年,3 月 前