Печально мой mobo разложился, и я должен создать новую машину с нуля. Я не вспоминаю, загрузил ли я первоначально 32 или версию на 64 бита ОС, (K) человечность 14.04.
Если я монтирую, что существующий жесткий диск является там файлом, который я могу исследовать для определения архитектуры ОС? Потребности быть чем-то большим чем присутствием исполняемого файла на 64 бита или библиотеки, поскольку это не надежные способы определить рабочую ОС.
Я не могу работать uname -a
поскольку это - смонтированный диск, не рабочая ОС.
Это тривиально, чтобы определить, имеет ли хостовая операционная система 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 , выполняет следующую команду, заменяя именем файла где соответствующий:
qemu-system-i386 -kernel <path_to_kernel>
, Если Вы видите стену текстовой прокрутки и в конечном счете паникуете (потому что корневой FS отсутствует), Вы установили 32-разрядное ядро. Вместо этого при получении ошибки, подобной той, отображенной ниже у Вас есть 64-разрядное ядро (который не загрузится на x86 ЦП).
Я соглашаюсь, что в целом простое присутствие определенного вида исполняемого файла или библиотеки не полезно, потому что возможно иметь объекты больше чем одной установленной архитектуры, но существуют некоторые исполняемые файлы, из которых у Вас может только быть один из. file /mnt/usr/bin/dpkg
(замена /mnt
с тем, везде, где Вы смонтировали свою файловую систему) скажет Вам, является ли базовый диспетчер пакетов 32-разрядным или 64-разрядным, который является точным индикатором остальной части системы, если Вы не посреди оперативной миграции от одного до другого - Вы, конечно, знали бы, были ли Вы!
Посмотрите на организацию каталогов от корня Вашего старого жесткого диска, этот метод походит, ищут каталоги "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