Leeren Sie ungenutzten Speicherplatz auf einer Festplatte

In Vorbereitung auf die Erstellung komprimierter Disk-Images einer Reihe von Festplatten suche ich nach Software, die unbenutzte Teile der Festplatte mit Nullen füllt (lange Folgen von Nullen lassen sich recht gut komprimieren).

Anforderungen:

  • Läuft unter Linux oder Windows 98.
  • Unterstützt die Festplattenformate NTFS und FAT32.
  • Setzt so viel wie möglich auf Null (leerer Speicherplatz sowohl nicht zugewiesen als auch innerhalb von Zuweisungen, nicht verwendete Verzeichniseinträge usw.)
  • Frei

Schön zu haben:

  • Unterstützung für ext2- und ext3-Festplattenformate.
Win98? Hat das jemals NTFS unterstützt?
SysInternals SDelete , wenn Sie sich mindestens Windows XP leisten können.
Die Wahrheit ist, dass Win 98 + NTFS ein Oxymoron sein könnte ... wahrscheinlich gibt es einige externe Dienstprogramme, um NTFS zu lesen ... aber wen interessiert das tote Betriebssystem?
@Thomas, auf einem der Computer, auf denen ich ein Image erstellen werde, ist Win98 installiert und er ist zu langsam, um WinXP auszuführen. Wenn ich dies mit einem einzigen Programm tun möchte, muss es entweder Win98 sein (um vom installierten Betriebssystem dieses Computers ausgeführt zu werden) oder Linux (um von einer Kombination aus Boot-Diskette und Netzwerkdateisystem ausgeführt zu werden).

Antworten (5)

Sie können WipeFreeSpace verwenden , das unter Linux läuft. Unterstützt verschiedene Dateisysteme einschließlich FAT32 (Win98). Sie müssen den manuellen Erstellungsprozess durchlaufen, da es keine Binärdatei gibt ...

Oder Sie können das Hacker-Tool THC-SecureDelete verwenden .

Für den ersten Versuch empfehle ich Ihnen, zuerst alle Daten zu sichern, daher ist das Tarieren der Daten auf eine andere Festplatte und das Löschen der gesamten Festplatte und Zurücktarieren eine akzeptable Option, wenn Sie dies nur einmal tun.

Aktualisiert: SysInternals SDelete für mindestens Windows XP, wie Thomas im oberen Kommentar erwähnt hat, ist nur eine kostenlose Windows-Lösung.

Ich würde vorschlagen, von einem Linux-USB-Stick zu booten, der Lese-/Schreibzugriff auf das Laufwerk gibt, das Sie auf Null setzen möchten, und ein Python-Skript zu verwenden (die meisten Linux-Installationen enthalten Python), um Folgendes zu tun:

import os

def DoIt(drive_path):
    """ Fill a drive with zeros then delete them """    
    info = os.statvfs(drive_path)  # Get a the file system info. NOT AVAILABLE ON WINDOWS!
    zerodir = os.path.join(drive_path, 'ZerosDir')  # Create a directory name
    os.makedirs(zerodir)  # And the directory
    filename_pattern = os.path.join(zerodir, 'Z%07d.000')  # File name pattern
    bsize = max(info.f_bsize, info.f_frsize)  # Decide the block size
    zeros = "\x00" * bsize  # Create a block of zeros that size

    try:  # We don't wish to abort the whole script on an error
        for n in xrange(info.f_files):  # For the max number of files allowed
            with open(filename_pattern % n, 'wb') as zf:  # Open a file
                zf.write(zeros)  # write the file
                zf.flush()  # Make sure it is written
                os.fsync(zf)  # REALLY Sure
    except IOError, e:
        pass # Carry on to the end of the script even if there is a problem
    print 'Finished Creating Files'

    for n in xrange(info.f_files):  # For the max number of files allowed
       try:  # Don't wish to abort even if there is a file we can't delete
           os.os.remove(filename_pattern % n) # Remove the file
       except OSError, e:  # In case of problems
           print e  # Print the problem but carry on
    os.rmdir(zerodir)
    print 'Done!'

if __name__ == "__main__":
    import sys
    if len(sys.argv) < 2:
        print "Please supply the path(s) to the drive(s) to fill with zeros"
    for arg in sys.argv[1:]:
        DoIt(arg)

Wichtiger Hinweis

Das Obige ist zu 100 % ungetestet. Nutzung auf eigene Gefahr

Es sieht nicht so aus, als würde es den Pufferspeicher in FAT32 und anderen Cluster-basierten Dateisystemen auf Null setzen, und es berührt nicht einmal unbenutzte Verzeichniseinträge.

Historisch gesehen wäre meine Lösung, wie Sie es beschrieben haben, das Quelldateisystem zu mounten und den Befehl dd zu verwenden, um eine Datei mit Nullfüllung zu erstellen und dann die temporäre Datei zu löschen:

$ mount /dev/source_hard_drive /mnt
$ cd /mnt
$ dd if=/dev/zero of=some_random_temp_file bs=1M ; rm some_random_temp_file
Dadurch wird der Pufferspeicher teilweise genutzter Sektoren nicht auf Null gesetzt.
Würde das Ausführen von defrag first bei diesem Problem helfen?
Nein. Die Defragmentierung packt nicht mehrere Dateien in einen einzigen Sektor, wenn das Dateisystem nicht dafür ausgelegt ist, und ich glaube nicht, dass eines der Dateisysteme, an denen ich interessiert bin, dies unterstützt.

Erwägen Sie die Verwendung von Partclone , anstatt ungenutzten Speicherplatz auf Ihrer Festplatte zu löschen. Partclone ist kostenlose Software und unterstützt NTFS-, FAT32- und EXT2- und EXT3-Festplattenformate sowie viele andere Formate.

Anstatt ungenutzten Speicherplatz auf Null zu setzen, kann Partclone so konfiguriert werden, dass nur die verwendeten Blöcke kopiert werden, die auf der Festplatte vorhanden sind . Es kann eine sogenannte Domänendatei generieren , die angibt, welche Blöcke auf der Festplatte tatsächlich verwendet werden. Dies spart Ihnen Zeit und ermöglicht eine zerstörungsfreie Kopie Ihrer Quelldaten.

Setzt so viel wie möglich auf Null (leerer Speicherplatz sowohl nicht zugewiesen als auch innerhalb von Zuweisungen, nicht verwendete Verzeichniseinträge usw.)

ntfswipefunktionierte gut unter Linux. Es kann alle ungenutzten Bits abrufen, z. B. Wiederherstellungsinformationen und gelöschte Dateien, nicht nur freien Speicherplatz.

Unterstützung für ext2- und ext3-Festplattenformate.

Dafür können Sie verwenden zerofree.

Das sind drei von vier abgedeckten Formaten. Haben Sie auch einen Vorschlag für FAT32?
@mark nein, sorry, das sind nur die, die ich beim Versuch gefunden habe, dasselbe zu tun