Como posso determinar a arquitetura do sistema operacional (32 bits ou 64 bits) de um arquivo em um disco?

5

Infelizmente meu mobo foi ruim e eu tenho que construir uma nova máquina a partir do zero. Não me lembro se carreguei originalmente a versão 32 ou 64 bits do sistema operacional, (K) o Ubuntu 14.04.

Se eu montar o disco rígido existente, há um arquivo que eu possa examinar para determinar a arquitetura do sistema operacional? Precisa ser algo mais do que a presença de um executável ou biblioteca de 64 bits, pois não são formas confiáveis de determinar o sistema operacional em execução.

Não consigo executar uname -a , pois este é um disco montado, não um sistema operacional em execução.

    
por brad12s 24.06.2015 / 00:27

3 respostas

12

É trivial determinar se o sistema operacional do host possui um kernel de 32 ou 64 bits executando:

uname --machine

Uma saída de i386 significa 32 bits e x86_64 significa 64 bits.

É menos trivial, mas ainda possível determinar se um aplicativo é compilado para a arquitetura i386 ou amd64, mas nenhuma delas indicará a arquitetura do kernel. Mesmo a verificação de /sbin/init não é tecnicamente suficiente, já que o programa init pode ser personalizado no momento da inicialização.

A única maneira infalível de determinar a arquitetura do kernel é realmente inicializá-lo. Felizmente isso pode ser feito facilmente usando qemu .

Comece abrindo um terminal e navegando para /boot no disco rígido. Você encontrará uma ou mais imagens de kernel compactadas no formulário:

vmlinuz-[version]-[type]

Por exemplo, tenho vmlinuz-3.19.0-21-generic presente em /boot na minha máquina. Agora, supondo que você tenha o qemu-system-x86 instalado, execute o seguinte comando, substituindo o nome do arquivo onde apropriado:

qemu-system-i386 -kernel <path_to_kernel>

Se você ver uma parede de texto rolar e eventualmente entrar em pânico (porque o FS raiz está ausente), você instalou um kernel de 32 bits. Se, em vez disso, você receber um erro semelhante ao exibido abaixo, você terá um kernel de 64 bits (que não inicializará em uma CPU x86).

    
por Nathan Osman 24.06.2015 / 01:58
4

Concordo que, em geral, a mera presença de um determinado tipo de executável ou biblioteca não é útil porque é possível ter objetos de mais de uma arquitetura instalada, mas existem alguns executáveis que você só pode ter um. file /mnt/usr/bin/dpkg (substituindo /mnt por onde quer que você montou seu sistema de arquivos) informará se o gerenciador de pacotes principal é de 32 ou 64 bits, o que é um indicador preciso do resto do sistema, a menos que você esteja no meio de uma migração in-loco de um para o outro - você certamente saberia se você fosse!

    
por Colin Watson 24.06.2015 / 01:07
1

Olhe para a organização de diretórios da raiz do seu disco rígido antigo, este método é análogo para procurar os diretórios "Arquivos de Programas" e "Arquivos de Programas (x86)" se for um sistema operacional Windows.

No Linux, se for 64 bits, você verá os diretórios "lib32" e "lib64", enquanto que, se for 32 bits, você encontrará apenas o diretório lib (não lembro agora se também haveria um diretório lib32).

Se você não confia no método sugerido, ou precisa de mais garantias, o comando "file" parece promissor. Olhando para a resposta do @ColinWatson, pessoalmente, acho que o / sbin / init é um candidato melhor, mas qualquer um desses arquivos (dpkg ou init) corresponderá ao arco do Kernel.

Por exemplo, a execução de file /sbin/init fornecerá uma saída assim:

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

Basta substituir o caminho para / sbin / init pelo ponto de montagem adequado da sua antiga partição raiz. Se for agora /media/oldroot , o caminho completo se tornará /media/oldroot/sbin/init

    
por Hatoru Hansou 24.06.2015 / 03:42