dd (Festplatte auslesen und kopieren)



  • Ist es möglich mit Hilfe von java die gesamte festplatte auszulesen und zu kopieren?

    ich möchte aus spass einmal versuchen einen dd-klon zu schreiben
    hab aber keine ahnung wie ich da vorgehen sollte...

    kann mir einer einen tipp geben oder link?

    EDIT durch Gregor: Hab den Titel mal etwas erweitert.





  • wie man Dateien rekursiv kopiert ist für mich kein Thema mehr, denk ich

    eher solche sachen wie:

    wenn ich eine 1:1 kopie einer festplatte erstellen möchte...

    gibts da dateien die mir möglicherweise irgendwie unterschlagen werden?
    wenn ich schließlich einfach alle ordner von einem windows kopiere,
    ist diese platte schließlich auch noch nicht eine 1:1 kopie
    und schli9eßlich hat dd ja so einiges an optionen, die ich teils nicht mal verstehe.

    Oder nochmal kurz gefragt:

    Wenn ich jetz alle Dateien einer Windows-Partition rekursiv kopiere,
    kann ich als Ergebnis ein bootfähiges Abbild erhalten?



  • ich weiß die Frage ist bescheuert, aber kann doch jemand antworten?



  • ^^dazu müssteste auf das medium sektorweise zugreifen. ich glaub' nicht, dass in der riesigen java-library dafür schon was fertiges existiert.
    🙂



  • Wenn ich jetz alle Dateien einer Windows-Partition rekursiv kopiere,
    kann ich als Ergebnis ein bootfähiges Abbild erhalten?

    Nein, dd kopiert die Festplatte byteweise/sektorweise. Dazu wird man ziemlich "hardware-nahen" Zugriff brauchen (der z.B. bei Linux durch die device-Dateien angeboten wird).
    Auf anderen Systemen wirst du da vermutlich Probleme bekommen, ohne Vorhandensein einer entsprechenden API. Nur mit Java Mitteln wird es zu 99% nicht gehen (kenne mich mit java nicht gross aus, das Konzept der Plattformunabhaengigkeit duerfte dem aber widersprechen). Du wirst also auf betriebssystemspezifisches, falls vorhanden, zugreifen muessen.



  • hmm bei Linux könnte es also klappen?
    Ich hab leider im Moment nicht die Möglichkeiten es zu testen, aber ich bin für jeden Link oder so dankbar...

    Was mich zu einem anderen Thema führt:

    In C++ könnte ich es doch dann theoretisch verwirklichen?

    Kann ich ein Programm in einem C++/Java Gemisch schreiben?
    womit ich jetzt "echtes" C++ meine ohne JNI.
    Ich würde gerne Programmiersprachen mischen (DLLs sind ja auch manchmal gemischt soviel ich weiß)
    und immer die Sprache pro Problem nehmen, in der ich ein Problem am schnellsten lösen kann.

    Nur finde ich für sowas nirgendwo etwas.

    Was ich mir konkret vorstellen könnte um ein Beispiel zu nennen:

    Eine Swing-Applikation Taschenrechner, die bei Berechnungen statt den umständlichen BigDecimals einfach Python aufruft, wo long viel komfortabler ist



  • Dagobert Duck schrieb:

    hmm bei Linux könnte es also klappen?

    Ja, einfach /dev/sda (erste Festplatte) so öffnen als wäre es eine Datei und dann auslesen.

    Auf http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx steht das es sowas auch unter Windows gibt mit den Namen "\.\PhysicalDiskX"

    Dagobert Duck schrieb:

    Kann ich ein Programm in einem C++/Java Gemisch schreiben?
    womit ich jetzt "echtes" C++ meine ohne JNI.
    Ich würde gerne Programmiersprachen mischen (DLLs sind ja auch manchmal gemischt soviel ich weiß)
    und immer die Sprache pro Problem nehmen, in der ich ein Problem am schnellsten lösen kann.
    ...

    Nativer Code kann nur über JNI aufgerufen werden. Die Java VM führt sonst nur Bytecode aus. Dieser kann aber auch in verschiedenen Sprachen geschrieben sein. Es gibt z.B. mit Jython eine Python Umsetzung die direkt in Bytecode compiliert.



  • ok damit komm ich recht gut klar

    vorerst nur noch eine Frage:

    wie kann ich ich die Größe der Festplatte oder Partition bestimmen?

    File x = new File("/dev/sda");
    println(x.length());

    klappt dafür leider nicht.

    getUsableSpace oder ähnliches schon, aber ich würde gern die Gesamte Größe bestimmen



  • Dagobert Duck schrieb:

    wie kann ich ich die Größe der Festplatte oder Partition bestimmen?

    Die Partitionen könntest du direkt aus der Partitionstabelle ( http://de.wikipedia.org/wiki/Partitionstabelle) auslesen. Bei der kompletten Größe der Festplatte fällt mir grad keine allgemeine Lösung ein.



  • Eine allgemeine Loesung gibt es auch nicht (im Sinne von Systemunabhaenig).
    Aber unter Linux kannst du einfach die Dateien in /proc auslesen. Dort ist, ueber die Dateien verteilt, die gesammte Systeminterformation enthalten. Z.B, in /proc/partitions stehen die Partitionen.

    Oder in /dev stehen die ganzen Devices drinner.


Anmelden zum Antworten