PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript zum Ermitteln der Rootpartition



ReaTh
25.09.02, 14:21
Joahr mal wieder ne Scripting Frage:

Wie kann ich das am besten Regeln wenn ich die Rootpartition eines unbekannten Systems ermitteln möchte?

Man stelle sich vor, man startet ein Rescue System (Minix etc) und möchte die Rootpartition des Systems ermitteln.

Es sollte dann also am besten ermittelt werden welche Devices in Frage kommen könten, also welche sind überhaupt verfügbar.

Dann müsste man ja theoretisch alle derartigen Devices erstmal mounten (Schleife??)

Mit der Suche ob im gemounteten Dir nun /etc/ vorhanden ist sollte man ja eigentlich die Rootpartition ermittelt haben gell?

Meine Frage nun wie würdet ihr das realisieren?

fork
25.09.02, 16:50
ROOT=$(mount|grep \\W/\\W | cut -d" " -f1)

ReaTh
25.09.02, 17:59
Original geschrieben von fork

ROOT=$(mount|grep \\W/\\W | cut -d" " -f1)

Danke, hmm könntest Du mir vielleicht erklären was da genau passiert damit ich darauf später mal alleine komme *gg* ??

Nicolas
25.09.02, 18:54
Das ist ganz einfach.
Mit "mount" wird ausgegeben, welche Partitionen gemountet sind. Dann wird die Ausgabe zu "grep" weitergeleitet. Durch diesen Befehl wird die Partition gezeigt, die auf / gemountet ist, bzw. es wird die Zeile ausgegeben, in der Leerzeichen Slash Leerzeichen vorkommt, und mit cut wird dann die erste Spalte angezeigt, also die Partition.

Nicolas

panzi
25.09.02, 19:58
Das setzt jedoch voraus das das System, von welchem ich die root-Partiton ermitteln will, gerade läuft, was von einen Rescue System wohl ne Ramdisk, ein Floppy-Drive oder ein CD-Drive ausspucken würde!

Wie währ's mit jede Partition mounten, nach eine /etc/fstab suchen und diese dann auswerten?
kA ob das die beste Methode ist, denl da müsst's was besseres geben...

ReaTh
25.09.02, 20:44
Original geschrieben von panzi
Das setzt jedoch voraus das das System, von welchem ich die root-Partiton ermitteln will, gerade läuft, was von einen Rescue System wohl ne Ramdisk, ein Floppy-Drive oder ein CD-Drive ausspucken würde!

Wie währ's mit jede Partition mounten, nach eine /etc/fstab suchen und diese dann auswerten?
kA ob das die beste Methode ist, denl da müsst's was besseres geben...

Jo genau an sowas hatte gedacht! Denn auf meinem Rescuesystem sind ja die Partitionen nicht gemounted, da es ja sozusagen autark ist.

Alle Partitionen mounten und dann die fstab auswerten macht demnach Sinn. Wobei man davon ausgehen kann das die Partition die die fstab enthält meist schon die root Partition ist, es sei denn man hat für /etc eine eigene Partition.

Für meine Zwecke wäre es aber völlig okay, da ich ja Zugriff auf /etc haben will mehr eigentlich nicht!

Also wenn jemand eine komfortable Möglichkeit fürs mounten aller Partitionen und dann das Ermitteln dieser welche /etc enthält
hat bitte posten.

Danke im voraus.

fork
25.09.02, 21:23
Habe deine Frage nicht genau gelesen!

Ein grob umrissenes Skript:

Aufruf: getroot <Festplatte z. B. /dev/hda>

# Partitionen auslesen
disk=$1
PARTITIONS=$(fdisk -l $disk| grep dev| awk '{print $1}')

# Alle Partitionen durchprobieren:
for PART in $PARTITIONS
do
# versuchen zu mounten
if mount $PART /mnt
then
# Schauen ob's eine fstab gibt
if [ -f /mnt/etc/fstab ]
then ROOT=$(cat /mnt/etc/fstab|grep \\W/\\W | awk '{print $1}')
echo "Root-Partition gefunden : $ROOT"
fi
umount /mnt
fi
done


Wenn Du wissen willst was diese Hyroglyphen bedeuten, musst Du etwas Zeit investieren um Shellscripting zu lernen. Gute Links in meiner Signatur.

Jasper
26.09.02, 07:52
Original geschrieben von ReaTh
Meine Frage nun wie würdet ihr das realisieren?

ich würde 'rdev' nehmen.

-j

ReaTh
26.09.02, 09:45
@ jasper hier hast Du aber doch das Problem das Du deine aktuell gemountete Rootpartition geliefert bekommst.

@fork genau das wollte ich haben vielen Dank.

Anbei ja ich habe vor das zu lernen und genau dahr habe ich diese Frage gestellt weil ich mir was vorgenommen habe und dies als Shellscript umsetzen wollte, sozusagen als erster Einstiegspunkt zum learning by doing.

Könntest Du trotzdem nochmal im Groben erläutern was passiert in welchem Schritt, damit ich mit meinen persönlichen Nachforschungen eine Übereinstimmung finde??? Wäre echt supinett ;)

Die Befehle sind mir alle klar nur die Syntax der Variablen Zuweisung nicht.

P.S: ich code sonst Java

Jasper
26.09.02, 10:02
Original geschrieben von ReaTh
@ jasper hier hast Du aber doch das Problem das Du deine aktuell gemountete Rootpartition geliefert bekommst.


jetzt hats bei mir geklingelt :)

hätte ein paar kleine verbesserungen:

#PARTITIONS=$(fdisk -l $disk| grep dev| awk '{print $1}')
PARTITIONS=$(fdisk -l $disk| awk ' /^\/dev/ {print $1}')

#then ROOT=$(cat /mnt/etc/fstab|grep \\W/\\W | awk '{print $1}')
then ROOT=$(awk '/^\// {if( $2 == "/" ) { print $1; exit}}' /mnt/etc/fstab)

-j