如何從磁碟上的檔案確定作業系統架構(32 位元或 64 位元)?

如何從磁碟上的檔案確定作業系統架構(32 位元或 64 位元)?

不幸的是我的主機板壞了,我必須從頭開始建造一台新機器。我不記得我最初加載的是 32 位元還是 64 位元版本的作業系統 (K)ubuntu 14.04。

如果我安裝現有的 HDD,是否有一個檔案可以檢查以確定作業系統架構?需要的不僅僅是 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-generic有。/boot現在,假設您有qemu-系統-x86安裝 qemu-system-x86安裝軟體包後,執行以下命令,在適當的位置替換檔案名稱:

qemu-system-i386 -kernel <path_to_kernel>

如果您看到一堵文字滾動並最終出現恐慌(因為根 FS 丟失),則您已經安裝了 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

相關內容