Wie kann ich Bezeichnung bzw. Seriennummer des Datenträgers anzeigen?



  • Bin am verzweifeln, ich soll einen Projekt der unter WIN läuft auch für LINUX anpassen ...

    So weit ist alles i.o.
    ... jedoch habe ein Problem, das Prog. fragt beim Starten nach dem „Bezeichnung und Seriennummer des Datenträgers“ ...
    diese Funktion die dafür benutzt wird heißt GetVolumeInformation also liefert gleiche Informationen wie WIN-DOS Befehl VOL [Laufwerk:] zurück.

    Jetzt kommen die fragen:
    1. wie lautet solche Funktion unter LINUX?
    2. wie kann ich die Informationen unter Eingabeauforderung abfragen?

    mfg.
    christine.



  • Ich denke diese Infos können mit tune2fs ausgelesen werden, soweit ich weis kann das unter den meisten Distris nur root, da dieser Befehl vorrangig zum verändern des Einstellungen des Dateisystems verwand werden kann. Ausserdem ist es unter Linux so oder so unüblich Label für Dateisysteme zu vergeben und ob es für die komische FAT-ID eine Entsprechung gibt ist mir auch nicht klar. Ich denke aber man kann sich die Notwendigen Zeilen aus dem Quellcode von Tune2fs kopieren um einen Befehl zu schreiben der eine ähnliche Ausschrift gibt.

    Joe



  • WIN Szenario:
    das Prog. (C/C++) lässt sich nur auf Registrierten Rechner ausführen – also bevor das Programm Startet wird das Seriennummer der Festplatte abgefragt.
    Die abfrage ist mit WIN-API Funktion (GetVolumeInformation()) bewerkstelligt s. Beispiel:

    GetVolumeInformation("C:/", volumeName, 
                         sizeof(volumeName), &serialNumber, 
                         NULL, NULL, NULL, NULL); 
    
    printf("VolumeName: %s\n", volumeName); 
    printf("Serial    : %i (0x%X)\n\n", serialNumber, serialNumber);
    

    jetzt kommt die Aufgabe die ich lösen soll, ich muss die Sicherheitsabfrage für ein LINUX System anpassen ...
    es muss irgend wie möglich sein an die Hardware Informationen unten LINUX zu kommen, es gibt bestimmt eine vergleichbare Funktion (unter Windows wie man sieht ganz einfache Angelegenheit)

    Kann jemand helfen???
    Vielleicht andere Idee???

    mfg. christine
    PS: ich kann mich nicht einlogen



  • Hi,
    kommt auf Deine HW an ^^
    zb Für ide primäry bus dev 1 wäre die Syntax
    hdparm -i /dev/hda|grep erial|cut -f4 -d"="
    Mfg reini



  • oder eifach nen simplen einzeiler als linux-command execudieren ^^
    for a in `lvmdiskscan|grep '/dev/'|cut -f2- -d"/"|cut -f1 -d" "|cut -c-7`;do hdparm -i /$a|grep erial|cut -f4 -d"=";done|sort -u
    Zumidest unter redhat past die Zeile .... kann sein das unter zb suse oder anderen etwas modifikation nötig ist ^^
    Mƒg Reini



  • Leider glaube ich nicht das es so funktioniert. Denn erstens funktioniert hdparm nur bei IDE Platten soweit mir bekannt und zweitens und das ist viel wichtiger ist die von hdparm ausgegebene Serialnummer nicht die selbe die vol ausgibt. Diese Nummer ist Windows spezifisch und man müsste eigentlich Erkunden wie sie generiert wird. Es ist unwahrscheinlich das es eine Funktion unter Linux gibt die diese Nummer genauso generiert wie Windows da die Philosophie unter Linux um einiges anders ist als die unter Windows. Somit bleibt halt nur die Hardware Seriennummer unter Linux und die kann man meines Wissens nach nur mit hdparm auslesen und das geht definitiv nicht mit SCSI platten. Ich würde mir aber am besten mal den Sourcecode von hdparm ansehen und dort schauen wie die Nummer ausgelesen wird.

    Joe



  • 1.

    hdparm –i/dev/hda1
    

    unter Konsole funktioniert bei mir nicht ... kann jemand sagen was mache ich da falsch?

    2. mit

    sbin/lspci –v
    

    bekomme ich verschiedene Hardware Informationen wie: PCI, ISA USB usw. aber keine HD Info ...

    3. eine Frage zur Konsole: was ist mit [vendor:] gemeint?

    Mit freundlichen Grüßen.

    christine.
    PS: ich benutze zur zeit eine KNOPIX 3.1 Bootfähige CD



  • christine30_ schrieb:

    1.

    hdparm –i/dev/hda1
    

    unter Konsole funktioniert bei mir nicht ... kann jemand sagen was mache ich da falsch?

    So wie du es geschrieben hast kann es erst mal nicht gehen da zwischen -i und /dev/hda1 ein Lehrzeichen sein muss. Selbst wenn du das richtig gemacht hast kann es natürlich auch sein das hdparm nicht bei Koppix dabei ist (unwahrscheinlich). Totzdem hier mal ein Link zum Quellcode -> http://www.ibiblio.org/pub/Linux/system/hardware/

    christine30_ schrieb:

    2. mit

    sbin/lspci –v
    

    bekomme ich verschiedene Hardware Informationen wie: PCI, ISA USB usw. aber keine HD Info ...

    Das hat ja auch niemand behauptet. Wenn überhaupt kommst du nur mit Festplatten oder Partionierer-Tools an deine Infos, obwohl ich es immer noch sehr sehr bezweifle das du irgendwo die selbe Nummer findest wie unter Windows. Da die Windowsnummer ja auch von Partitionspezifisch ist hat sie mit der wirklichen ID der Platte nur insofern was zu tun das dieses wahrscheinlich mit hineingerechet wurde.

    Joe



  • christine30_ schrieb:

    1.

    hdparm –i/dev/hda1
    

    unter Konsole funktioniert bei mir nicht ... kann jemand sagen was mache ich da falsch?

    Kommt drauf an in wiefern es nicht funktioniert 😉
    Kannst es ja mal, ohne die 1 versuchen...(so gings bei mir jedenfalls...)



  • OK. Ich bedanke mich erst mal

    Kleine Zusammenfassung:
    - für hdparm – braucht man root rechte, z.B. KNOPIX 3.1 (bootfähige CD) erlaubt keine abfrage obwohl er hdparm ver. 4.5 implementiert
    - VOL – abfrage unter WIN liefert nur die Informationen die bei Formatieren des Datenträger jedes Mal neu vergeben werden (Datum + Uhrzeit in verschlüsselter form)

    Also so wie ich sehe brauche ich einen C++/Assembler Lösung – um an die Festplatten Informationen zu gelangen, dann sollen die Seriennummer unter WIN bzw. LINUX eindeutig dasselbe sein.

    christine.



  • Hallo,

    vieleicht hilft dir folgendes:

    #!/bin/bash
    
    bsize=2048 
    bskip=16 
    dev=${1:-/dev/cdrom} 
    n=/dev/null 
    t=/tmp/iso.$$
    
    function die { echo $*; exit 1; }
    test -b $dev || die "no such device: $dev"
    dd if=$dev bs=$bsize count=1 skip=$bskip of=$t 2>$n || die "read failure"
    
    echo "id             : "`dd if=$t bs=1 skip=1  count=6 2>$n`
    echo "system id      : "`dd if=$t bs=1 skip=8  count=32 2>$n`
    echo "volume id      : "`dd if=$t bs=1 skip=40 count=32 2>$n`
    echo "volume set id  : "`dd if=$t bs=1 skip=190 count=128 2>$n`
    echo "publisher id   : "`dd if=$t bs=1 skip=318 count=128 2>$n`
    echo "preparer id    : "`dd if=$t bs=1 skip=446 count=128 2>$n`
    echo "application id : "`dd if=$t bs=1 skip=574 count=128 2>$n`
    rm $t
    

Anmelden zum Antworten