Wie kann ich die Betriebssystemarchitektur (32-Bit oder 64-Bit) anhand einer Datei auf einer Festplatte bestimmen?

Wie kann ich die Betriebssystemarchitektur (32-Bit oder 64-Bit) anhand einer Datei auf einer Festplatte bestimmen?

Leider ist mein Motherboard kaputt gegangen und ich muss eine neue Maschine von Grund auf bauen. Ich weiß nicht mehr, ob ich ursprünglich die 32- oder die 64-Bit-Version des Betriebssystems (K)ubuntu 14.04 geladen habe.

Wenn ich die vorhandene Festplatte mounte, gibt es dann eine Datei, mit der ich die Betriebssystemarchitektur ermitteln kann? Es muss mehr als nur eine 64-Bit-ausführbare Datei oder Bibliothek vorhanden sein, da dies keine zuverlässigen Methoden zur Ermittlung des laufenden Betriebssystems sind.

Ich kann es nicht ausführen uname -a, da es sich um eine gemountete Festplatte und nicht um ein laufendes Betriebssystem handelt.

Antwort1

Ob das Host-Betriebssystem einen 32-Bit- oder einen 64-Bit-Kernel hat, lässt sich ganz einfach ermitteln, indem Sie Folgendes ausführen:

uname --machine

Eine Ausgabe von i386bedeutet 32-Bit und x86_64bedeutet 64-Bit.

Weniger trivial, aber dennoch möglich ist es, festzustellen, ob eine Anwendung für die i386- oder amd64-Architektur kompiliert wurde. Keine dieser beiden Methoden gibt jedoch Aufschluss über die Architektur des Kernels. Selbst diese Überprüfung /sbin/initist technisch nicht ausreichend, da das Init-Programm beim Booten angepasst werden kann.

Die einzige narrensichere Methode, die Architektur des Kernels zu ermitteln, besteht darin, ihn tatsächlich zu booten. Glücklicherweise ist dies ganz einfach mit möglich qemu.

Öffnen Sie zunächst ein Terminal und navigieren Sie zu /bootauf der Festplatte. Sie finden dort ein oder mehrere komprimierte Kernel-Images in der Form:

vmlinuz-[Ausführung]-[Typ]

Ich habe beispielsweise auf meiner Maschine vmlinuz-3.19.0-21-genericvorhanden /boot. Angenommen, Sie haben dieqemu-system-x86Installieren Sie qemu-system-x86Paket installiert ist, führen Sie den folgenden Befehl aus und ersetzen Sie den Dateinamen, wo erforderlich:

qemu-system-i386 -kernel <path_to_kernel>

Wenn Sie eine Textwand vorbeiscrollen sehen und schließlich in Panik geraten (weil das Root-FS fehlt), haben Sie einen 32-Bit-Kernel installiert. Wenn Sie stattdessen einen Fehler ähnlich dem unten angezeigten erhalten, haben Sie einen 64-Bit-Kernel (der auf einer x86-CPU nicht bootet).

Bildbeschreibung hier eingeben

Antwort2

Ich stimme zu, dass die bloße Anwesenheit einer bestimmten Art von ausführbarer Datei oder Bibliothek im Allgemeinen nicht nützlich ist, da es möglich ist, Objekte von mehr als einer Architektur zu installieren. Es gibt jedoch einige ausführbare Dateien, von denen Sie nur eine haben können. file /mnt/usr/bin/dpkg(Ersetzen Sie „ /mntwo immer Sie Ihr Dateisystem gemountet haben“) zeigt Ihnen, ob der Kernpaket-Manager 32-Bit oder 64-Bit ist, was ein zuverlässiger Indikator für den Rest des Systems ist, es sei denn, Sie befinden sich gerade in einer direkten Migration von einem System zum anderen – dann wüssten Sie es mit Sicherheit!

Antwort3

Sehen Sie sich die Verzeichnisorganisation vom Stammverzeichnis Ihrer alten Festplatte an. Diese Methode entspricht der Suche nach den Verzeichnissen „Programme“ und „Programme (x86)“, wenn es sich um ein Windows-Betriebssystem handeln würde.

Unter Linux werden bei 64-Bit die Verzeichnisse „lib32“ und „lib64“ angezeigt, während bei 32-Bit nur das Verzeichnis „lib“ angezeigt wird (ich weiß nicht mehr, ob es auch ein Verzeichnis „lib32“ gibt).

Wenn Sie der vorgeschlagenen Methode nicht vertrauen oder mehr Garantien benötigen, sieht der Befehl „file“ vielversprechend aus. Wenn ich mir die Antwort von @ColinWatson anschaue, denke ich persönlich, dass /sbin/init ein besserer Kandidat ist, aber jede dieser Dateien (dpkg oder init) wird mit der Kernel-Architektur übereinstimmen.

Beispielsweise file /sbin/initerzeugt die Ausführung von eine Ausgabe wie diese:

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

Ersetzen Sie einfach den Pfad zu /sbin/init durch den richtigen Einhängepunkt Ihrer alten Root-Partition. Wenn dieser jetzt vorhanden ist /media/oldroot, lautet der vollständige Pfad/media/oldroot/sbin/init

verwandte Informationen