不幸的是我的主機板壞了,我必須從頭開始建造一台新機器。我不記得我最初加載的是 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-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