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 i386
bedeutet 32-Bit und x86_64
bedeutet 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/init
ist 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 /boot
auf 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-generic
vorhanden /boot
. Angenommen, Sie haben dieqemu-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).
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 „ /mnt
wo 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/init
erzeugt 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