Beschädigte Daten nach Übertragung auf neue Festplatte

ich würde gerne einfach das Problem ausschließen das die Festplatte falsch formatiert wurde.

Denn genau dadurch kann es zu Datenverlust kommen.
Den wir ja vorliegen haben … und genau 20 Jahre heist das MBR noch aktiv im Kopf sein kann und seit 10 Jahren eigentlich abgelöst gehört bei größeren Festplatten … -> GPT

das hat nichts mit NTFS zu tun … gab schon genügend "Probleme" gerade bei emulierten 4k am Ende.

Zwar wird geschrieben das nicht mehr als 2 TB gehen … aber oft ging doch mehr zu adressieren und dann kam es zu Datenverlust.

Es sagt ja keiner das es mit xxx Festplatten nicht gut ging … aber einmal nen Fehler eingebaut und den nicht erkannt dann bist du später wieder da wenn es der gleiche wieder wird.

Und 20 Jahre keine Probleme heist mit der Info das du nicht MBR/GPT kennst das du an dem Thema glücklich vorbeigeschifft bist.

Einfach Get-Disk in der PowerShell eingeben und das Bild hier anzeigen reicht ja … wie in dem Verlinkten Text steht da ja dann die Partition Style mit bei und wir sind safe.
 
  • Gefällt mir
Reaktionen: Jubeldibub
xxMuahdibxx schrieb:
Einfach Get-Disk in der PowerShell eingeben und das Bild hier anzeigen reicht ja … wie in dem Verlinkten Text steht da ja dann die Partition Style mit bei und wir sind safe.
Alles klar, das habe ich gemacht. Der Screenshot ist anbei.

Noch ein Hinweis: Wenn ich es richtig verstehe, entstehen der von dir beschriebene Fehler dann, wenn man quasi mehr auf die Platte lädt, als sie eigentlich ab kann (dann würde sozusagen der "überschüssige Teil" den bereits geschriebenen Teil wieder überdecken). Wenn das gemeint ist, halte ich das bei der Platte für unwahrscheinlich. Sie ist mit 5 TB (bzw. 4.55 TB) ausgezeichnet, befüllt war sie aber maximal mit ca. 500 GB. So abweichend von der Größenbeschreibung sind hoffentlich nie irgendwelche Platten gewesen.
 

Anhänge

  • 1.jpeg
    1.jpeg
    43,7 KB · Aufrufe: 262
Es geht nicht darum wieviele Daten drauf sind sondern wo sie geschrieben wurden ... das kannst du am wenigsten beeinflussen ... daher können dabei Datein überschrieben werden und dann hast du halt Null Inhalt ...

daher kann es bei einer MBR Formatierung halt zu Datenausfall führen egal wieviele Daten man drauf schmeisst. Speziell bei 4k Sektoren über Emulation.

Was "normal" dabei ist ... einfach alle Datenträger GPT Formatieren die größer 2 TB sind dann umgeht man einige Probleme.

Bei realen 4K Sektoren wäre vielleicht auch nichts passiert ... da die 2 TB ja nur bei 512 Byte Sektoren gelten ... bei Emulation kann man doof dastehen da gibts diese Probleme halt öfters... das auf einmal Daten weg sind.
Verschiebt die Grenze aber ja auch nur auf 16 TB .... also am besten jetzt umgewöhnen.

Alles ab Windows Vista kann GPT lesen ... und per UEFI booten geht auch.

Ansonsten sind wohl deine Daten auf anderen Festplatten auch gefährdet falls die Datenträger auch größer 2 TB sind und MBR formatiert.

Umstellen MBR zu GPT geht aber dafür muss die Platte leer sein.

Das der Datenverlust auch durch eine Defekte Platte selber kommen kann bezweife ich da sie ja keine Fehler aufzeigt über SMART ... und auch das Kopieren perfekt lief... sooo viel NULL kann damit nicht erzeugt werden.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Jubeldibub
xxMuahdibxx schrieb:
Ansonsten sind wohl deine Daten auf anderen Festplatten auch gefährdet falls die Datenträger auch größer 2 TB sind und MBR formatiert
Woher nimmst du diese Gewissheit? Sowas lese ich zum ersten mal. Hab selber schon einige 3 TB und 4 TB USB Platten mit MBR Partirionierung mit Daten befüllt. Selbstverständlich ohne Datenverlust. Deswegen wundert mich diese Aussage etwas.
 
du kannst aber mit mbr nur 2tb partitionieren. ergo auch nur diese 2tb befüllen.
weil mit mbr ist jede platte größer 2tb eben nur mehr 2tb.
 
xxMuahdibxx schrieb:
Umstellen MBR zu GPT geht aber dafür muss die Platte leer sein.
Gut zu wissen, aber wie macht man das denn? Wenn ich in Windows 10 eine Platte formatiere, wird mir NTFS, ExFat etc. angeboten, aber nicht GPT.
 
natürlich ned.
mbr und gpt, das sind die schemas, nach denen partitionen abgelegt werden. dazu klickst du in der datenträgerverwaltung ganz links, auf die platte, mit rechter maustaste, da wo "datenträger x" steht.
und in dem kontexmenu taucht bei einer mbr initialisierter platte dann "in gpt datenträger konvertieren" auf.
ist die platte garned initialisiert, hast die wahl.

mbr und gpt sind die hülse um die partitionen herum, und gpt kann mehr als mbr. diverse limits fallen, die 2tb grenze, die anzahl primärer partitionen, etc... https://de.wikipedia.org/wiki/GUID_Partition_Table

innerhalb legst du dann wie gewohnt partitionen an. aber du siehst nix von gpt bei den partitionen. die schauen wie gewohnt aus. und die dateisysteme, die angeboten werden, sind auch wie immer.
 
Jubeldibub schrieb:
Mal ganz blöde gefragt: Gibt es denn kein Windows-Tool, was ein Image eines Laufwerks erstellt? Dann bräuchte ich nicht auf Linux umsatteln, um dort ein Image zu erstellen, um das dann wiederum in Windows zu mounten.
Das ist keine so gute Idee. Weil mit einem "Tool" unter einem "normalen" Windows immer die Gefahr und sogar die Wahrscheinlichkeit besteht, dass im Hintergrund Schreibzugriffe auf den betroffenen Datenspeicher stattfinden. Da reicht es beispielsweise schon aus, dass automatisch versteckte Dateien und Ordner, z.B. "System Volume Information", erstellt werden. Oder es wird von Windows angeboten, CHKDSK auszuführen, etc.

Sowas muss auf jeden Fall vermieden werden. Und genau dazu gibt es eben sehr spezielle Forensik-Software wie hier auf Basis des genannten Caine Live. Da sind alle Datenspeicher nur Read-Only, Schreibzugriff müsste man hingegen erst separat freischalten. Bedeutet: Es liegt hier die genau gegensätzliche Voraussetzung zu einem "Standard-Windows" vor, und genau diese bessere Voraussetzung (unter Caine) ist auch zwingend erforderlich.

Spezielle "Notlagen" erfordern halt den Einsatz spezieller "Werkzeuge" und in der Regel eben keine "Standard-Tools", wie sie der Laie kennt und gern verwendet.

Was Du mit dem Tool unter einem laufenden Windows vor hast, ist im übertragenden Sinne nichts anderes, als hättest Du ein kleines Kästchen mit filigranem, wertvollem Inhalt, das nur mit einem T3 (Torx) zu öffnen ist. Weil Du aber keinen hast, oder die Anschaffung scheust, möchtest Du stattdessen lieber Hammer und Meißel verwenden, um das kleine Kästchen zu öffnen.

Die Antwort ist also: Ja, das geht freilich, nur halt unter Zerstörungsgefahr dessen, was Du eigentlich retten möchtest.
 
MBR kann auch mehr als 2 TB aber dann müssen die Sektoren 4k groß sein ...

wie das bei Emulierten dann ausschaut -> kann doof enden ... speziell wenn man die Festplatte dann aus dem Gehäuse nimmt und an einem anderen Controller nutzt.

Das Thema ist leider schon "alt" und daher auch wenig auf dem Schirm von einigen.

Aber mir noch so in erinnerung das ich hier schon das Thema hatte.
 
  • Gefällt mir
Reaktionen: Xonical
Dr. McCoy schrieb:
Weil mit einem "Tool" unter einem "normalen" Windows...
Gute Ausführungen 👍 So ein Tool müsste müsste wenn schon einen eigenen Filtertreiber installieren um die Festplatte für Windows erst gar nicht sichtbar zu machen. Dann könnte man ohne Schreibzugriff damit arbeiten.
Da nimmt man gerne eine kostenlose Alternative, welche bereits funktionsfähig ist. ;)
xxMuahdibxx schrieb:
wie das bei Emulierten dann ausschaut -> kann doof enden ... speziell wenn man die Festplatte dann aus dem Gehäuse nimmt und an einem anderen Controller nutzt.
Kann sein wenn man Platten zwischen solchen Controllern tauscht. Mir ging es aber nur um die grundsätzliche Funktion solcher 4K emulierten Gehäuse.
Und da habe ich noch keinerlei solcher Fehler erlebt.
xxMuahdibxx schrieb:
Das Thema ist leider schon "alt"
Deswegen bin ich echt verwundert, dass es solche Gehäuse immer noch gibt. Das Problem hat man ja dann auch mit USB Docking Stations, wenn man da nicht aufpasst.
 
So, erste Version steht.
Gebrauchsanweisung:

Ich davon aus, dass du kein Python installiert hast.

Ich empfehle WinPython, da das recht easy ist:

Für das kleine Script reichen diese Versionen:

WinPython64-3.8.7.0dot = Python 3.8 64bit only
WinPython32-3.8.7.0dot = Python 3.8 32bit only

Du benutzt vermutlich ein 64bit-System, dann kannst du ruhig die Version nehmen. Wenn du dir nicht sicher bist, dann nimm die 32bit-Version.

Download unter:
https://github.com/winpython/winpython/releases/tag/3.0.202011219

Falls Windows mal wieder herummuckt, auf "Weitere Informationen" und dann auf "Trotzdem ausführen" klicken.


1610602532338.png



Du kannst es ruhig auf "C:\" entpacken.

1610602923407.png


Doppelklick auf "WinPython Command Prompt.exe":
1610603154591.png


Das Script aufrufen (den Übergabepfad musst du natürlich auf deinen Bedarf anpassen):
1610603274301.png


Zugucken, abwarten und Tee trinken:
1610606974387.png

usw....

Je nachdem auf wie vielen Bytes die Prüfung stattfindet und wie viele Dateien geprüft werden, kann das durchaus dauern.

Die Dauer hängt unter anderem davon ab, auf welche Länge an Bytes, die Anzahl der zu prüfenden Dateien und dem Typ der Festplatte ab.

Kleiner Benchmark (mit 1024 Bytes Prüfblock) bei mir:
Laufwerk: 260 GB an Daten, SSD, sehr viele Dateien (etwa 1.4 Millionen) -> etwa 90 Minuten

1610611867351.png



1610612459524.png


Das Script kannst du gern anpassen. Kaputt machen kannst du da nicht viel. Nur nicht os.remove auf dem Datenträger ausführen. ;)

Da das Script (Lizenz: "THE BEER-WARE LICENSE") kleiner als 100 Zeilen ist, stelle ich das dann doch hier hinein.

Wenn es Fragen gibt, kannst du mich gern per PN kontaktieren. Das hält den Thread sauber. Vielleicht findest du ja Gefallen, dir bei Bardarf auch kleine Helferchen zu scripten.

Relevante Variablen für dich im Script sind :

Zeile 4: "number_of_bytes = 1024" Es wird ein Muster (pattern) von 1024 "leeren" Bytes erstellt mit dem dann die ersten 1024 Bytes einer zu prüfenden Datei verglichen werden.

Zeile 6: "p = Path(r'E:\\')". Hier den Laufwerksbuchstaben oder Ordner anpassen, falls es nicht passen sollte. In dem Fall prüft er die komplette Partition E.



Python:
import sys, os
from pathlib import Path
# Number of first bytes from a file that we are compare
number_of_bytes = 1024
# Path that we will examine
p = Path(r'E:\\')
# Create pattern of \x00
pattern = b''
for _i in range(number_of_bytes):
    pattern += b'\x00'
# Report files
filename_null_character = str("NullCharacterFiles.txt")
filename_not_null_character = str("NotNullCharacterFiles.txt")
filename_exceptions = str("ExceptionFiles.txt")
# Remember exception files and print it at the end of the process
list_of_exception_files = []
# Delete files, if they are exists to begin fresh files
if os.path.isfile(filename_null_character):
    os.remove(filename_null_character)
if os.path.isfile(filename_not_null_character):
    os.remove(filename_not_null_character)
if os.path.isfile(filename_exceptions):
    os.remove(filename_exceptions)
# Traverse path
for file_name in p.glob('**/*'):
    # Don't compare symbolic links
    if os.path.islink(file_name):
        continue
    # Don't check direcories (doesn't have a "size")
    if os.path.isdir(file_name):
        print(str("Pruefe Verzeichnis: ") + str(file_name))
        continue
    try:
        with open(file_name, 'rb') as f:
            first_bytes_block = f.read(number_of_bytes)
            # Compare if the first block of the file matchs the pattern
            if first_bytes_block == pattern:
                with open(filename_null_character, "a", encoding ="utf-8") as file_object:
                    line = str(file_name) + "\n"
                    file_object.write(line)
                    #print(str('Startblock besteht ausschliesslich aus \\x00: ') + str(file_name))
            else:
                with open(filename_not_null_character, "a", encoding ="utf-8") as file_object:
                    line = str(file_name) + "\n"
                    file_object.write(line)
                    #print(str('Startblock besteht ausschliesslich nicht nur aus \\x00: ') + str(file_name))
    except:
        exception_string = str("Ausnahme: ") + str(file_name).encode('utf-8', 'replace').decode()
        list_of_exception_files.append(exception_string)
        with open(filename_exceptions, "a", encoding ="utf-8") as file_object:
                line = str(file_name.as_uri) + "\n"
                file_object.write(line)
        #print(exception_string)

print("===============================================")
print(*list_of_exception_files, sep = "\n")
print("===============================================")
print("Prozess durchgelaufen")
print(str(filename_null_character) + ", " + str(filename_exceptions) + " und " + str(filename_not_null_character) + " je nach Fall erstellt.")

Info:
Viele ISO-Dateien und andere Images enthalten am Anfang sehr viele Nullbytes. Warum auch immer. :)
Ist mir aufgefallen.

Nimm im Zweifel einen Hex-Editor wie diesen hier:
https://github.com/echo-devim/fhex

Das Script ist auch als Upload angehängt. Da keine Pythondateien erlaubt sind, musst du nach dem Download die Dateiendung auf *.py ändern.
 

Anhänge

  • NullReporter.txt
    2,7 KB · Aufrufe: 254
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: HumbleDiscovery und Jubeldibub
Fusionator schrieb:
Deswegen bin ich echt verwundert, dass es solche Gehäuse immer noch gibt. Das Problem hat man ja dann auch mit USB Docking Stations, wenn man da nicht aufpasst.

Ja und da genau rühren die meisten Fehler her ... die man auch noch im Forum so findet.

am besten nen Bogen machen um emulierte Platten und gleich auf GPT setzen ..
 
Xonical schrieb:
So, erste Version steht.
Hi, vielen Dank! Das hat perfekt funktioniert und hilft mir sehr, die unbeschädigten Dateien zu identifizieren.

Eine Frage hätte ich noch: Wäre es ein großer Aufwand, wenn du den Script so erweiterst, dass alle unbeschädigten Dateien nicht nur identifiziert werden, sondern auch automatisch in einen vorher definierten Pfad kopiert werden? Dann könnte ich mir das manuelle heraussortieren aus den Unterordnern sparen.
 
Jubeldibub schrieb:
Wäre es ein großer Aufwand, wenn du den Script so erweiterst, dass alle unbeschädigten Dateien nicht nur identifiziert werden, sondern auch automatisch in einen vorher definierten Pfad kopiert werden?
Alle in einen Pfad? Was wenn die Datei existiert? Automatisch umbennen? xxx,yy zu xxx(2).yy?

Ich gebe ja immer gerne Hilfe zur Selbsthilfe (da war doch mal was mit dem Fisch und der Lehre des Fischens).

Versuche es mal selber hinbekommen. Am Ende kannst du stolz auf dich sein und du hast einiges gelernt.
Eine Programmiersprache und das Ökosystem welches dazu gehört ist eine mächtige Toolbox aus der du dich bedienen kannst. Der Anfang ist schwer, klar. Aber man kommt rein. Musste da ja auch durch (durch den Anfang).;)

Wobei ich natürlich auch nicht behaupten kann, ausgelernt zu haben. Dazu bietet einem die Welt zu viele Wege die man gehen kann.:p

Tipps wie du vorgehen kannst:

https://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python
https://datatofish.com/copy-file-python/
https://medium.com/@oluwabukunmige/...e-folder-to-another-using-python-346ad1f500fa

Python hat den Vorteil, dass es ganz viele Beispiele im Netz gibt. Das sollte man gerade als Einsteiger stets beachten, wenn man die "Ersten Schritte" unternimmt.

Ansetzen musst du in dem Else-Block:

Python:
            else:
                with open(filename_not_null_character, "a", encoding ="utf-8") as file_object:
                    line = str(file_name) + "\n"
                    file_object.write(line)

Diesen einfach erweitern, so dass nicht nur in die Datei geschrieben wird (file_object.write(line)), sondern auch die Datei kopiert wird. Der komplette Dateiname e:\aaa\bbb\ccc.dd steht in der Variablen file_name (insodern du str darauf anwendest, str ist ein Befehl daraus eine Zeichenkette zu erstellen). Aber auch die Variable selber bietet dir viele Optionen an.

1610692473821.png


Eine IDE oder ein guter Editor wie Visual Studio Code bietet sich zur Unterstützung an.

Probiere es auch erst einmal im Kleinem. Einfach eine Datei mit 4 bis 5 Zeilen oder weniger zu kopieren.

Ich möchte zumindest sehen, dass du es probierst. Wie dem auch sei. Ich habe erst am Wochenende wieder richtig Zeit.

Schreib mir eine PN. So halten wir den Thread sauber. Zudem hat sich das Problem ja auch vom Threadtitel zu einem anderem hin gewandelt.

Viel Erfolg! Notfalls helfe ich am Wochenende. Aber erst dann. Jetzt bist du erst einmal am Zug.

P.S.
Der für dich, meiner Meinung nach einfachste Weg ist der hier:

# In Windows
os.system('copy source.txt destination.txt')

Steht unter: https://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python

Wenn du über cmd (die Konsole) copy aufrufen kannst, geht das auch über os.system.

https://www.windows-commandline.com/windows-copy-command-syntax-examples/
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: HumbleDiscovery und Jubeldibub
Xonical schrieb:
Alle in einen Pfad? Was wenn die Datei existiert? Automatisch umbennen? xxx,yy zu xxx(2).yy?
Sorry, ich habe mich missverständlich ausgedrückt.
Ich meinte, dass man einen Pfad angibt (z.B. D:\Datensicherung\) bzw. diesen vorher im Script definiert und dahin dann alle nicht beschädigten Dateien in ihrer vorherigen Verzeichnisstruktur kopiert werden. Also wie ein Abbild der Festplatte, allerdings nur mit den nicht beschädigten Daten.

Da ich bis zum Montag noch einige wichtige Dinge für die Arbeit zu erledigen habe, werde ich auf keinen Fall dazu kommen, mich da groß hineinzulesen. Ich kann danach mal schauen.

Danke in jedem Fall für die Hilfe und die vielen Beispiele, um mich der Sache zu nähern.
 
Zurück
Oben