ISO / RAW Image von Laufwerken erzeugen

Code-Stücke können hier veröffentlicht werden.
Antworten
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Hiho,

hier ein kleines RAW Imaging Beispiel ... kann man z.b. ISO's von CDs erstellen. Zeigt u.a. das öffnen von RAW devices unter windows.

Code ist absichtlich möglichst ausführlich gehalten.
IOErrors werden auch nicht behandelt, da es mir darum ging, zu zeigen wie es im prinzip funktioniert.

Code: Alles auswählen

E:\sw>makeiso.py
Which drive to create iso from? e.g. D: - (Blank to exit) : f:
enter destination file (Blank to exit) : e:\test.iso
Creating image e:\test.iso  . . . . . . . . . . . . . . . . . . . . . Done
Created Image with 662231040 bytes successfully!



Und hier der source:

Code: Alles auswählen

import sys


BLOCK_SIZE = 32 * 1024 * 1024

def get_drive():
    """
    Ask for the drive letter
    """
    drive_letter = None
    while not drive_letter:
        drive_letter = raw_input("Which drive to create iso from? e.g. D: - (Blank to exit) : ")
        if len(drive_letter) == 2 and drive_letter[1] == ":" and drive_letter[0].isalpha():
            return drive_letter
        elif drive_letter == "":
            sys.exit(2)
        else:
            drive_letter = None

def get_dest():
    """
    Ask for the destination .iso file
    """
    dest = None
    while not dest:
        dest = raw_input("enter destination file (Blank to exit) : ")
        if dest == "":
            sys.exit(2)
        try:
            f = file(dest, 'wb')
            f.close()
            return dest
        except Exception, e:
            print "unable to open destination - reason: %s" %e
            dest = None

def copy_data(drive, dest):
    """
    Copy raw data over to dest file
    """
    fi = file(r'\\.\%s' %drive, 'rb', BLOCK_SIZE)
    fo = file(dest, 'wb', BLOCK_SIZE)

    print "Creating image %s " %dest ,
    while True:
        buff = fi.read(BLOCK_SIZE)
        fo.write(buff)
        print ".",
        if len(buff) == 0:
            fo.flush()
            print "Done"
            break

    print "Created Image with %d bytes successfully!" %fo.tell()
    fi.close()
    fo.close()
    

if __name__ == '__main__':
    copy_data(get_drive(), get_dest())
Antworten