¿Cómo puedo determinar la arquitectura del sistema operativo (32 bits o 64 bits) a partir de un archivo en un disco?

¿Cómo puedo determinar la arquitectura del sistema operativo (32 bits o 64 bits) a partir de un archivo en un disco?

Lamentablemente mi mobo se estropeó y tengo que construir una nueva máquina desde cero. No recuerdo si cargué originalmente la versión de 32 o 64 bits del sistema operativo, (K)ubuntu 14.04.

Si monto el disco duro existente, ¿hay algún archivo que pueda examinar para determinar la arquitectura del sistema operativo? Debe ser algo más que la presencia de un ejecutable o una biblioteca de 64 bits, ya que estas no son formas confiables de determinar el sistema operativo en ejecución.

No puedo ejecutarlo uname -aporque se trata de un disco montado, no de un sistema operativo en ejecución.

Respuesta1

Es trivial determinar si el sistema operativo host tiene un kernel de 32 o 64 bits ejecutando:

uname --machine

Una salida de i386significa 32 bits y x86_64significa 64 bits.

Es menos trivial, pero aún así factible, determinar si una aplicación está compilada para la arquitectura i386 o amd64, pero ninguna de ellas indicará la arquitectura del núcleo. Incluso la verificación /sbin/initno es técnicamente suficiente ya que el programa init se puede personalizar en el momento del arranque.

La única manera infalible de determinar la arquitectura del kernel es arrancarlo. Afortunadamente, esto se puede hacer fácilmente usando qemu.

Comience abriendo una terminal y navegando hasta /bootel disco duro. Encontrará una o más imágenes del kernel comprimidas en el formato:

vmlinuz-[versión]-[tipo]

Por ejemplo, tengo vmlinuz-3.19.0-21-genericpresente en /bootmi máquina. Ahora, suponiendo que tengas lasistema-qemu-x86Instalar qemu-system-x86paquete instalado, ejecute el siguiente comando, sustituyendo el nombre del archivo cuando corresponda:

qemu-system-i386 -kernel <path_to_kernel>

Si ve una pared de texto que se desplaza y eventualmente entra en pánico (porque falta el FS raíz), ha instalado un kernel de 32 bits. Si, en cambio, recibe un error similar al que se muestra a continuación, tiene un kernel de 64 bits (que no arrancará en una CPU x86).

ingrese la descripción de la imagen aquí

Respuesta2

Estoy de acuerdo en que, en general, la mera presencia de un determinado tipo de ejecutable o biblioteca no es útil porque es posible tener objetos de más de una arquitectura instalados, pero hay algunos ejecutables de los que sólo se puede tener uno. file /mnt/usr/bin/dpkg(reemplazando /mntcon el lugar donde montó su sistema de archivos) le indicará si el administrador de paquetes principal es de 32 bits o de 64 bits, lo cual es un indicador preciso del resto del sistema a menos que esté en medio de una migración local. de uno a otro: ¡seguramente lo sabrías si lo fueras!

Respuesta3

Mire la organización de directorios desde la raíz de su antiguo disco duro, este método es análogo a buscar los directorios "Archivos de programa" y "Archivos de programa (x86)" si se trata de un sistema operativo Windows.

En Linux, si es de 64 bits, verá los directorios "lib32" y "lib64", mientras que si es de 32 bits solo encontrará el directorio lib (ahora no recuerdo si habría un directorio lib32 también).

Si no confía en el método sugerido o necesita más garantías, el comando "archivo" parece prometedor. Mirando la respuesta de @ColinWatson, personalmente, creo que /sbin/init es un mejor candidato, pero cualquiera de esos archivos (dpkg o init) coincidirá con el arco del Kernel.

Por ejemplo, la ejecución de file /sbin/initproporcionará un resultado como este:

/sbin/init: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24

Simplemente reemplace la ruta a /sbin/init con el punto de montaje adecuado de su antigua partición raíz; si lo es ahora /media/oldroot, la ruta completa se convierte en/media/oldroot/sbin/init

información relacionada