Как я могу определить архитектуру ОС (32-разрядный или 64-разрядный) из файла на диске?

Печально мой mobo разложился, и я должен создать новую машину с нуля. Я не вспоминаю, загрузил ли я первоначально 32 или версию на 64 бита ОС, (K) человечность 14.04.

Если я монтирую, что существующий жесткий диск является там файлом, который я могу исследовать для определения архитектуры ОС? Потребности быть чем-то большим чем присутствием исполняемого файла на 64 бита или библиотеки, поскольку это не надежные способы определить рабочую ОС.

Я не могу работать uname -a поскольку это - смонтированный диск, не рабочая ОС.

5
задан 24 June 2015 в 01:30

3 ответа

Это тривиально, чтобы определить, имеет ли хостовая операционная система 32-разрядное или 64-разрядное ядро путем выполнения:

uname --machine

вывод i386 32-разрядное средство и x86_64 означает 64-разрядный.

Это менее тривиально, но все еще выполнимо определить, компилируется ли приложение для i386 или amd64 архитектуры, но ни один из них не укажет на архитектуру ядра. Даже проверка /sbin/init не технически достаточна, так как init программа может быть настроена во время начальной загрузки.

единственный надежный способ определить архитектуру ядра состоит в том, чтобы на самом деле загрузить его. К счастью это может легко быть сделано с помощью qemu.

Начинаются путем открытия терминала и навигации к /boot на жестком диске. Вы найдете одно или несколько сжатых изображений ядра в форме:

vmlinuz-[version]-[type]

, Например, я имею vmlinuz-3.19.0-21-generic существующий в /boot на моей машине. Теперь, принятие Вас имеет установленный пакет qemu-system-x86 Install qemu-system-x86 , выполняет следующую команду, заменяя именем файла где соответствующий:

qemu-system-i386 -kernel <path_to_kernel>

, Если Вы видите стену текстовой прокрутки и в конечном счете паникуете (потому что корневой FS отсутствует), Вы установили 32-разрядное ядро. Вместо этого при получении ошибки, подобной той, отображенной ниже у Вас есть 64-разрядное ядро (который не загрузится на x86 ЦП).

enter image description here

12
ответ дан 23 November 2019 в 08:41

Я соглашаюсь, что в целом простое присутствие определенного вида исполняемого файла или библиотеки не полезно, потому что возможно иметь объекты больше чем одной установленной архитектуры, но существуют некоторые исполняемые файлы, из которых у Вас может только быть один из. file /mnt/usr/bin/dpkg (замена /mnt с тем, везде, где Вы смонтировали свою файловую систему) скажет Вам, является ли базовый диспетчер пакетов 32-разрядным или 64-разрядным, который является точным индикатором остальной части системы, если Вы не посреди оперативной миграции от одного до другого - Вы, конечно, знали бы, были ли Вы!

4
ответ дан 23 November 2019 в 08:41

Посмотрите на организацию каталогов от корня Вашего старого жесткого диска, этот метод походит, ищут каталоги "Program Files" и "Program Files (x86)" если это где Windows OS.

В Linux, если 64 бита, Вы будете видеть "lib32" и "lib64" каталоги, в то время как, если бы 32 бита Вы только встретитесь с каталогом lib (я не помню теперь, был ли lib32 каталог также).

, Если Вы не доверяете предложенному методу, или нуждаться в большем количестве гарантий, команда "файла" выглядит многообещающей. Смотря @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

1
ответ дан 23 November 2019 в 08:41

Другие вопросы по тегам:

Похожие вопросы: