Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Festplatte: Per LBA adressierte Blöcke lesen

  1. #1
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665

    Festplatte: Per LBA adressierte Blöcke lesen

    Welchen Weg nutzt man normalerweise, um direkt von einer IDE-Festplatte Daten zu lesen (root-Rechte vorhanden, Adressangabe der Daten über LBA)?

    Nutzt man da am besten irgendeine BIOS-Funktion (z.B. Interrupt 13h) oder gibt es bessere Möglichkeiten?

    Wie sieht das bei SATA-Festplatten aus?

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    z.B.
    Code:
    dd if=/dev/hda of=daten bs=512 count=10 seek=1000
    Oder in C
    Code:
    FILE* hdd = open("/dev/hda","rb")
    fseek(hdd, ABSOLUTE_ADRESSE_IN_BYTES)
    fread(hdd,daten,...)

  3. #3
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Danke, aber das ist beides auf viel zu hohem Level...

    Ich suche mehr eine Lowlevel-Lösung.

  4. #4
    Registrierter Benutzer
    Registriert seit
    27.07.2000
    Ort
    D-77797
    Beiträge
    120
    Zitat Zitat von BLUESCREEN3D
    Danke, aber das ist beides auf viel zu hohem Level...

    Ich suche mehr eine Lowlevel-Lösung.
    ??? willst du den kopf selbst an eine stelle schieben und das bit dort lesen?

    gruesse

  5. #5
    Registrierter Benutzer
    Registriert seit
    26.11.2004
    Ort
    Fulda
    Beiträge
    70
    hi

    ich glaube er sucht eher was in der tiefe von kernel programmiereung

    mfg

    gsus
    C > Java oder wie ?

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.07.2004
    Beiträge
    456
    Zitat Zitat von pucki
    ??? willst du den kopf selbst an eine stelle schieben und das bit dort lesen?

    gruesse
    Das wäre 'ne interessante Idee, Kopf verschieben. Hab letzt 'n Video gesehen, wo einer mit 'nem Scannerschlitten ein Lied gespielt hat. War 'n HP ScanJet. Der hat da 'nen extra Befehl im Befehlssatz. Aber es müsste über Steuerbefehle eigentlich mit jeder Hardware möglich sein, die mechanisch präzise Bewegungen ermöglicht. Eventuell ist der Kopf der Platte allerdings nicht schnell genug, um eine hörbare Frequenz zu erzeugen.

  7. #7
    Registrierter Benutzer
    Registriert seit
    11.04.2003
    Ort
    Schlema
    Beiträge
    10
    Zitat Zitat von 7.e.Q
    Eventuell ist der Kopf der Platte allerdings nicht schnell genug, um eine hörbare Frequenz zu erzeugen.
    Du kannst ihn doch aufsetzen lassen. Das gibt ordentlich Musik.

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Wie, hat der neue ATAPI-Standard schon einen Befehl zum Erzeugen eines Vakuums?

    An den Originalposter: beschreib mal bitte genauer, was du willst. Du willst direkt Sektor, Kopf und Zylinder übergeben?

    (Aus diesen Daten könntest du natürlich auch "von Hand" den Offset berechnen, und dann mit fseek dorthin springen)

  9. #9
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von Joghurt
    Du willst direkt Sektor, Kopf und Zylinder übergeben?
    Nein, das wäre ja die veraltete Adressierung mit CHS... Stattdessen will ich die LBA-Adresse, also einfach eine Blocknummer, angeben.

    Zitat Zitat von Joghurt
    (Aus diesen Daten könntest du natürlich auch "von Hand" den Offset berechnen, und dann mit fseek dorthin springen)
    Die Blocknummer könnte ich auch in eine Bytenummer umrechnen und dann mit fseek dahinspringen, aber das will ich ja nicht
    Ich will den direkten "Lese-Block"-Befehl und suche die übliche Implementierung von sowas... Z.B. ob das über BIOS-Funktionen gemacht wird oder irgendwie anders (hab schon öfter gelesen, dass die BIOS-Funktionen bei sowas garnicht gebraucht werden).

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Lese Block ist bei Linux als read implementiert.

    Willst du das direkte IDE Kommando senden, oder wie? Die BIOS-Funktionen nützen dir im Protected Mode nichts. Schau mal im Kernelquellcode an, wie der ide-driver implementiert ist, vielleicht hilft dir das weiter.

    Musst du irgendein Problem lösen oder bist du nur neugierig?

  11. #11
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von Joghurt
    Die BIOS-Funktionen nützen dir im Protected Mode nichts.
    Irgendwie hatte ich das befürchtet...

    Zitat Zitat von Joghurt
    Willst du das direkte IDE Kommando senden, oder wie? (...) Schau mal im Kernelquellcode an, wie der ide-driver implementiert ist, vielleicht hilft dir das weiter.
    Von mir aus das IDE-Kommando. Anscheinend wird das im Kernel über IO-Ports gemacht (mit outb() usw.). Muss ich mir nochmal genauer angucken...

    Zitat Zitat von Joghurt
    Musst du irgendein Problem lösen oder bist du nur neugierig?
    Bin neugierig und wüsste außerdem gerne, wie defekt die Daten in defekten Blöcken wirklich sind. Deshalb wollte ich prüfen, ob man mit entsprechende Lowlevel-Funktionen an die defekten Daten kommt, oder ob Festplatten die überhaupt nicht rausrücken (es sind keine Daten zu retten, sondern ich wollte das nur ausprobieren).

  12. #12
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von BLUESCREEN3D
    Deshalb wollte ich prüfen, ob man mit entsprechende Lowlevel-Funktionen an die defekten Daten kommt, oder ob Festplatten die überhaupt nicht rausrücken (es sind keine Daten zu retten, sondern ich wollte das nur ausprobieren).
    Falls die Platte dich an die Sektoren lässt, kannst du ganz einfach mit fseek dorthingehen, fseek macht auf blockdevices wirklich genau das, was du willst.

    Wer sagt denn, dass der Sektor defekt ist? Das Dateisystem oder die Platte?
    Heutige Festplatten ersetzen nämlich automatisch defekte Sektoren durch andere, auf die von der Platte als defekt markierten kommst du nicht mehr ran, da das die Firmware schon verhindert.

    (Z.B. gab/gibt es ein "nettes" kleines DOS-Assemblerprogramm, welches Sektor 0 als defekt markiert. Die Platte ist danach hin)

  13. #13
    Registrierter Benutzer Avatar von BLUESCREEN3D
    Registriert seit
    08.11.2002
    Beiträge
    665
    Zitat Zitat von Joghurt
    Falls die Platte dich an die Sektoren lässt, kannst du ganz einfach mit fseek dorthingehen, fseek macht auf blockdevices wirklich genau das, was du willst.
    AFAIK kriegt man auf dem Weg keine Daten, wenn die HDD die als fehlerhaft deklariert. Oder fread() gibt einem die nur nicht und genau deshalb wollte ich das anders machen...

    Zitat Zitat von Joghurt
    Wer sagt denn, dass der Sektor defekt ist? Das Dateisystem oder die Platte?
    Heutige Festplatten ersetzen nämlich automatisch defekte Sektoren durch andere, auf die von der Platte als defekt markierten kommst du nicht mehr ran, da das die Firmware schon verhindert.
    Es geht in dem Fall wirklich um von der Platte aus defekte Blöcke, die noch nicht neu zugeteilt wurden. Hab noch eine Platte mit defekten, noch nicht neu zugeordneten Blöcken rumliegen - daran wird es also nicht mangeln

    Zitat Zitat von Joghurt
    (Z.B. gab/gibt es ein "nettes" kleines DOS-Assemblerprogramm, welches Sektor 0 als defekt markiert. Die Platte ist danach hin)
    Das Programm kann der Festplatte vorschreiben, dass sie den auf Hardwareebene als defekt markieren soll?

  14. #14
    Registrierter Benutzer
    Registriert seit
    25.10.2004
    Beiträge
    819
    Zitat Zitat von BLUESCREEN3D
    Das Programm kann der Festplatte vorschreiben, dass sie den auf Hardwareebene als defekt markieren soll?
    Ging früher (low-level format). Bei manchen alten Platten konnte man sogar den Motor ausschalten und dann den Kopf schön hin und herfahren lassen, um das richtige Plattenscrathfeeling zu bekommen

    Angeblich hatte ein BIOS einer Platte auch mal eine Bug, und man konnte auf Zylinder 1024 (0-1023) zugreifen, was dann dazu führte, dass der Lesekopf aus der Führungschiene fiel. Das ist aber nur Hörensagen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •