如何从磁盘上的文件确定操作系统架构(32 位或 64 位)?

如何从磁盘上的文件确定操作系统架构(32 位或 64 位)?

遗憾的是我的主板坏了,我不得不从头开始组装一台新机器。我不记得我最初安装的是 32 位还是 64 位版本的操作系统 (K)ubuntu 14.04。

如果我安装现有的硬盘,是否有一个文件可以检查以确定操作系统架构?需要的不仅仅是 64 位可执行文件或库,因为这些不是确定正在运行的操作系统的可靠方法。

我无法运行,uname -a因为这是一个已安装的磁盘,而不是正在运行的操作系统。

答案1

通过运行以下命令可以轻松确定主机操作系统是否具有 32 位或 64 位内核:

uname --machine

输出i386表示 32 位,x86_64输出表示 64 位。

确定应用程序是否为 i386 或 amd64 架构编译不太简单,但仍然可行,但这些都不能表明内核的架构。即使检查/sbin/init在技术上也不够充分,因为 init 程序可以在启动时进行自定义。

确定内核架构的唯一万无一失的方法是实际启动它。幸运的是,这可以轻松使用 完成qemu

首先打开终端并导航到/boot硬盘上。您将找到一个或多个压缩的内核映像,格式如下:

vmlinuz-[版本]-[类型]

例如,我的机器上有vmlinuz-3.19.0-21-genericpresent 。现在,假设你有/bootqemu-系统-x86安装 qemu-system-x86包安装后,运行以下命令,在适当的位置替换文件名:

qemu-system-i386 -kernel <path_to_kernel>

如果您看到一长串文本滚动并最终崩溃(因为缺少根文件系统),则您安装的是 32 位内核。如果您收到类似于下面显示的错误,则您安装的是 64 位内核(无法在 x86 CPU 上启动)。

在此处输入图片描述

答案2

我同意,一般来说,仅仅存在某种可执行文件或库是没用的,因为可以安装多种体系结构的对象,但有些可执行文件只能拥有其中一种。 file /mnt/usr/bin/dpkg(替换/mnt为您安装文件系统的位置)将告诉您核心包管理器是 32 位还是 64 位,这是系统其余部分的准确指标,除非您正在从一个系统到另一个系统的就地迁移 - 您肯定会知道的!

答案3

查看旧硬盘根目录的目录组织,此方法类似于在 Windows 操作系统中查找“Program Files”和“Program Files (x86)”目录。

在 Linux 中,如果是 64 位,您将看到“lib32”和“lib64”目录,而如果是 32 位,您只会遇到 lib 目录(我现在不记得是否也会有 lib32 目录)。

如果您不信任建议的方法,或者需要更多保证,那么“file”命令看起来很有希望。查看@ColinWatson 的回答,我个人认为 /sbin/init 是更好的选择,但这些文件(dpkg 或 init)中的任何一个都会与内核架构匹配。

例如,执行file /sbin/init将提供如下输出:

/sbin/init: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24

只需将 /sbin/init 的路径替换为旧根分区的正确挂载点,如果是现在/media/oldroot,完整路径将变为/media/oldroot/sbin/init

相关内容