如何将32位安装切换为64位安装?
我有一个在64位硬件上运行的32位Ubuntu安装。 现在多拱已经实现 ,我想切换到64位而无需重新安装操作系统。
这是规范解决的用户故事之一:
Shawn使用32位版本的Ubuntu安装了他的系统,但他的硬件是64位,他想切换。 他手动安装ddkg和apt的amd64版本,替换i386版本并更改默认使用的架构; 然后他安装了amd64 ubuntu-minimal包; 然后他安装了amd64 ubuntu-desktop软件包。 随着时间的推移,剩余的i386软件包会在升级时自动更换。
但是,当试图按照那里的说明,我找不到任何64位版本的dpkg或apt。
这个用户故事是否在最终规范中以不同的方式实现了,还是我需要做一些不同的事情?
简而言之,如何将32位安装切换为64位?
这种方法非常复杂,并且不太可能导致您的所有软件包都是amd64
版本而不是i386
版本。 只有实际接收升级的软件包可能会在架构中发生变化,并且可能只有在没有其他未升级的软件包依赖于它们的i386
架构时才会发生变化。 由于某些软件包在Ubuntu发行版的整个支持周期内都不会收到任何更新,因此您可能永远不会使用这种技术的完整amd64
系统。 此外,这种方法当然没有官方支持。
建议您使用新的64位安装替换现有的Ubuntu系统。
但是,如果您希望尝试此技术,则必须手动下载dpkg
和apt
的.deb
文件。 您可以在Ubuntu的dpkg
中找到它们,并在Launchpad的Ubuntu页面中找到它们 – 展开标记为发布,安全性和/或更新的“The Oneiric Ocelot”下的最新版本(但您可能不需要版本仅标记建议和/或后退,如果有的话)。 然后下载标记为amd64
的.deb
文件。 具体来说,你想要的文件是: 这个用于dpkg
(以及其他列出的,如果你安装了这些软件包),以及这个和这个以及本和这个用于apt
。
在对这些文件执行任何操作之前,应确保备份已安装的Ubuntu系统中的所有重要文档以及任何其他重要文件(例如,音乐,电子书,video),因为尝试此技术很可能会适得其反并使您的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中安装了已安装的Ubuntu系统并执行了包管理和其他操作,但我没有尝试过这里建议的跨架构操作。)
-
在已安装的Ubuntu系统中,打开终端窗口( Ctrl + Alt + T )并运行
mount | grep ' on / '
mount | grep ' on / '
(通过将其粘贴到终端并按Enter键)。 你应该看/dev/sda2 on / type ext4 (rw,errors=remount-ro,commit=0)
。 您感兴趣的部分是之前的设备名称(在本例中,它是/dev/sda2
)。 请记住,或写下来。 -
第1步为您提供了
/
partition的设备名称。 如果你有一个单独的/boot
分区,那么你也需要知道它的设备名称。 所以在那种情况下,运行mount | grep ' on /boot '
mount | grep ' on /boot '
。 你会/dev/sda1 on /boot type ext2 (rw)
看到像/dev/sda1 on /boot type ext2 (rw)
这样的东西。 记住或写下来。 -
从Oneiric amd64(即64位)Live CD启动并选择“Try Ubuntu”而不是“Install Ubuntu”。
-
进入Web浏览器并确保Internet连接function完全正常。 如果不是,请进行设置。
-
打开终端窗口并运行
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
-
如果尚未为64位版本的
dpkg
和apt
安装.deb
文件,那么现在就这样做。 如果您确实安装了它们但是存在配置错误,请运行dpkg --configure -a
来修复它们。 (希望这样可行……最好等到安装它们直到你进入实时CD环境,以防在启动安装系统时安装64位dpkg
使dpkg
处于不可用状态。 ) -
安装了64位版本的
dpkg
和apt
,假设它们将自动安装64位软件包,您现在可以删除所有32位内核并安装64位内核。 要删除32位内核,请运行dpkg -l | grep linux-
dpkg -l | grep linux-
。 这列出了以linux-
开头的已安装软件包。 你更喜欢那些像linux-generic
,linux-image
,linux-server
和/或linux-headers
一样的软件包。 使用apt-get purge ...
删除这些文件apt-get purge ...
其中...
将替换为您要删除的包的空格分隔列表。 -
现在重新安装您删除的包。 (实际上,对于包名中包含版本号的包,例如
linux-image-3.0.0-13-generic
,您只需要安装最新的版本化软件包名称。)通过运行apt-get install ...
执行此操作apt-get install ...
where...
替换为您正在安装的软件包的空格分隔列表。 -
更新引导加载程序配置,卸载某些设备,然后离开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
),然后重新启动(或关闭)Live CD系统并启动到已安装的系统。 -
查看系统是否可用并运行64位内核(
uname -m
应该说架构是x86_64
)。
您可能需要安装其他软件包,例如ia32_libs
和/或64位版本的libc6
,以实现此目的。 对于其中一些,在尝试安装64位版本的dpkg
和/或apt
时,可能会通知您需要它们。 对于其他人,您可能不会被告知。
(以上关于chrooting和在chrooted环境中操作的说明在很大程度上基于这个相关但不同的程序以及我的一些Launchpad Answerspost,特别是#6 这里和#6 这里 。特别感谢Cesium指出64位dpkg
和apt
可执行文件不能在运行32位内核的系统上运行。)
如上所述,我做了:
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位用户空间。
虽然问题类似于是否可以从32位升级到64位安装? (如果您在我鼓励您尝试之前没有阅读过。答案提供的很好。)我还建议您阅读以下链接:
为了获得更好的性能,我应该安装32位还是64位?
如何将32位安装切换为64位安装?
32位和64位之间有什么区别,我应该选择哪个?
有可能:是的
这很简单:不!
如果您的问题是内存,那么您应该知道Ubuntu 32位可以读取超过4GB的RAM(最高64 GB)。 因此,使用最新的Ubuntu 32 Bit版本与具有32位或64位架构的计算机并放入更多RAM将不会成为问题。 它只会读取额外的RAM并工作。
这些答案有点过时了。 现在在Debian wiki上为Debian记录了交叉评分,但仍然不推荐。
现在,从不同的架构安装内核就像在那里描述的那样简单,但新的’apt’将无法识别以前架构中的软件包,因此它的所有前端都可能会报告大量已损坏的软件包。 这要么需要将所有依赖项更改为其他体系结构,要么将apt和dpkg恢复为32位。
因此,最好的方法可能是首先保存dpkg --get-selections
结果,从中删除:i386,并将每个依赖项的amd64包下载到缓存中:
apt-get --download-only install perl:amd64 python3:amd64 python3-gi:amd64 xorg:amd64...
充其量,解析依赖项可能会很慢且耗时。
这些指令使您的系统使用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”命令至关重要。 没有它,软件包系统不支持来自不同体系结构的软件包,请参阅Multiarch-HowTo
-
要查看
apt-get
将对您的系统执行什么操作,请使用选项-Vs
运行它,这将启用“详细模拟模式”。 这将打印要安装和删除的所有包。 -
使用新内核进行系统引导是否取决于
grub
配置。 以root用户身份运行update-grub
以进行grub更新并打印当前的引导配置。 列表中的第一个图像将作为默认值启动。 -
为了选择不同的内核映像,我从
/etc/default/grub
删除了行GRUB_HIDDEN_TIMEOUT=0
,并以root用户update-grub
。 在启动时,您现在可以选择一个不同的内核(您有10秒钟可以点击任何键,否则grub将继续使用默认内核)。 -
得票率最高的答案来自2011年,在我看来毫无希望地过时了。 Multiarch允许您在同一台计算机上安装来自多个体系结构的库包,而不需要太多麻烦。
也许,当我遇到同样的问题时,这将起作用,这是我打算做的事情:
获取64位版本的操作系统,安装到分区中,当完成从32位安装中复制文档和其他内容时,当一切都安全复制时,您可以格式化驱动器的其余部分并使用它。
是的,外部架构系列对于安装任何跨拱包非常重要。 但在那之后,像其他几个用户一样提到:
sudo apt-get update sudo apt-get install linux-image:amd64 sudo apt-get install linux-modules:amd64 sudo init 6 #reboot into new kernel sudo apt-get install apt:amd64 sudo apt-get install ubuntu-desktop:amd64
这应该就是这样做的……
我的Ubuntu 16.04 Xenial的配方,在新安装的32位Ubuntu VM上测试,带有标准系统和SSH服务器,但没有GUI:
sudo -s dpkg --get-selections > pkg1 dpkg --add-architecture amd64 apt update apt install linux-image-generic:amd64 thermald
(否则它将安装thermald:amd64并且无法在32位内核下重启它)
reboot
用64位内核重启后:
sudo -s unset LANG apt install apt:amd64 apt-utils:amd64
输入’是的,就像我说的那样!’ 当被问到时,这将是安全的
mkdir /tmp/upgrade cd /tmp/upgrade pkgs() { dpkg -l | awk '$4=="'$1'"{print $2}' | awk -F: '{print $1}' | sort -u } apt download $(comm -23 <(pkgs i386) <(pkgs amd64)) while ls *amd64*deb do dpkg -i *amd64*deb dpkg -l | awk '$1=="ii" && $4=="amd64" {print $2}' | awk -F: '{print $1}' | while read a do [ -f ${a}_*amd64*deb ] && rm ${a}_*amd64*deb done done
在上面的循环中,我们删除已成功安装的.deb文件,并在dpkg列表中获得“ii”状态。
我们需要重复dpkg -i
运行,因为从第一次尝试开始就没有成功
reboot
现在,对于64位内核和用户空间,可以删除剩余的i386软件包:
dpkg --purge $(dpkg -l | awk '$4=="i386"{print $2}')
您保存在pkgs1
文件中的列表可用于满足您的任何进一步需求。
好问题。 除了你引用的用户故事之外,我有一个搜索,我找不到任何有关如何执行此操作的详细信息。 所有文档都表明它仅适用于已经在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,然后按照之前引用的用户故事,ubuntu-minimal,ubuntu-desktop等进行操作。
在apt:amd64安装之后,我认为你可以删除外部架构线,因为你已经基本上切换了那一点。
免责声明:我没有32位系统可供测试,所以这都是猜测。 祝好运!
尚不支持交叉升级(升级到其他架构)。