К сожалению, моя материнская плата сломалась, и мне пришлось собирать новую машину с нуля. Я не помню, какую версию ОС я изначально загрузил — 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
present /boot
на моей машине. Теперь, предположим, у вас естьqemu-система-x86пакет установлен, выполните следующую команду, заменив имя файла там, где это необходимо:
qemu-system-i386 -kernel <path_to_kernel>
Если вы видите стену текста, прокручивающуюся мимо, и в конце концов впадаете в панику (потому что корневая файловая система отсутствует), вы установили 32-битное ядро. Если вместо этого вы получаете ошибку, похожую на показанную ниже, у вас 64-битное ядро (которое не загрузится на процессоре x86).
решение2
Я согласен, что в целом само по себе наличие определенного вида исполняемого файла или библиотеки бесполезно, поскольку можно установить объекты более чем одной архитектуры, но есть некоторые исполняемые файлы, из которых можно установить только один. file /mnt/usr/bin/dpkg
(заменив /mnt
на то место, куда вы смонтировали свою файловую систему) вы узнаете, является ли основной менеджер пакетов 32- или 64-разрядным, что является точным индикатором остальной части системы, если только вы не находитесь в процессе миграции с одного на другой на месте — вы бы наверняка это знали, если бы это было так!
решение3
Посмотрите на структуру каталогов в корне вашего старого жесткого диска. Этот метод аналогичен поиску каталогов «Program Files» и «Program Files (x86)», если это ОС Windows.
В 64-разрядной версии Linux вы увидите каталоги «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