Hallo Leute,
Bei einem Projekt, will ich Daten direkt auf einen USB Stick ablegen.
Dazu habe ich bereits folgende Seite gefunden:
https://www.vbforums.com/showthread.php?589818-physical-disk-raw-access
Nun stellt ich mir vorab die Frage:
Braucht der User zum ausführen des Programmes Admin Rechte (Wegen API
Zugriff)?
Ja, man braucht Admin-Rechte. Tools wie Rufus oder Win32 Disk Imager
brauchen das genau so.
Du musst deine Anwendung (.exe) so markieren, dass sie automatisch als
Admin gestartet wird. Das geht so: https://stackoverflow.com/a/2818776
Ist halt lästig, das bei jedem Programmstart bestätigen zu müssen,
besonders wenn der Admin-User ein separates Passwort braucht...
Alternative (zum Testen): cmd.exe als Admin ausführen, und von dort aus
dein Programm starten.
PS: Fragt sich natürlich, ob das unbedingt nötig ist. Gerade in
Unternehmenskontexten hat man oft gar keine Admin-Rechte. Das ist ein
echtes Hindernis. Daher sollte man genau überlegen ob man die Daten
nicht doch "normal" in Dateien ablegen kann. Auf einem Embedded-System
auf FAT zuzugreifen ist machbar...
Programmierer schrieb:> Daher sollte man genau überlegen ob man die Daten nicht doch> "normal" in Dateien ablegen kann. Auf einem Embedded-System> auf FAT zuzugreifen ist machbar...
"normal" in "" ist ein gutes Stichwort für einen Kompromiss :) Man nehme
einen USB-Stick, formatiere den ganz normal mit FAT und schreibe unter
Windows eine einzige große Datei drauf. Der Inhalt ist egal, er muss nur
definiert sein. Man könnte mit notepad lauter Sterne reinschreiben.
Auf dem Embedded-System wird diese Datei mit den Nutzdaten
überschrieben, und zwar nur die Datei selbst, die Metadaten bleiben
unverändert. Man braucht also keine FAT-lib, man muss nur den Anfang
dieser Datei suchen.
Für den Windows User ist das hinterher wieder (immer noch) eine ganz
normale Datei, nur das Datum ist veraltet. Wenn sie nicht vollständig
mit Nutzdaten gefüllt wird, stehen am Ende noch die Sterne.
Bauform B. schrieb:> Man braucht also keine FAT-lib, man muss nur den Anfang dieser Datei> suchen.
Der Anfang reicht nicht, die Datei kann über mehrere Cluster
fragmentiert sein. Das Anlegen der Datei ist aber auch nicht soo
kompliziert. Die FAT durchiterieren, freie Cluster finden, und voll
schreiben. Wenn die Dateigröße zu Beginn bekannt ist, ist es ziemlich
easy.
Programmierer schrieb:> Der Anfang reicht nicht, die Datei kann über mehrere Cluster> fragmentiert sein.
Kurz vor dem Absenden stand in meinem Text noch "da der Stick frisch
formatiert ist...". Wer hat das gelöscht?!
Bauform B. schrieb:> Kurz vor dem Absenden stand in meinem Text noch "da der Stick frisch> formatiert ist
Naja, auch dann gibt es keine Garantie dass die Datei am Stück liegt.
Ist also eher Pfusch sich darauf zu verlassen...
Programmierer schrieb:> Gerade in Unternehmenskontexten hat man oft gar keine Admin-Rechte
Oder sogar überhaupt keinen Zugriff auf wechselbare Datenträger mehr...
Daten DIREKT auf einen USB-Stick zu schreiben ist grundsätzlich immer
Gefährlich.
Du kannst nicht jedes Bit Kontrollieren. Und wenn der User den Stick
entfernt ist das Risiko hoch das dein Programm abkackt.
Ich persönlich würde die Daten auf der Platte ablegen. Dann eine
Übertragungsroutine auf den Stick schreiben. Und via File-Len o.ä.
abfragen ob die Datei vollständig übertragen wurde.
In der Zeit sieht der User hat ein Fenster "Daten werden zum Stick
übertragen".
Und File-Copy Befehle sind i.d.R. NICHT so kritisch wie Direkt-Zugriff.
Notfalls kann der User die Anweisung bekommen die Daten selbst von Hand
zu kopieren. Dann hat er entweder über den Explorer Zugriff oder halt
nicht und voll die Popo-Karte. ;)
Schlaumaier schrieb:> Dann hat er entweder über den Explorer Zugriff oder halt nicht und voll> die Popo-Karte. ;)
Und wie schreibt man im Explorer am Dateisystem vorbei direkt auf die
Karte? Richtig, gar nicht.
Schlaumaier schrieb:> Und via File-Len o.ä. abfragen ob die Datei vollständig übertragen> wurde.
Wenn man ohne Dateisystem arbeitet, gibt es auch keine Dateigröße.
Schlaumaier schrieb:> Daten DIREKT auf einen USB-Stick zu schreiben ist grundsätzlich immer> Gefährlich.>> Du kannst nicht jedes Bit Kontrollieren.
Warum nicht?
> Und wenn der User den Stick entfernt ist das Risiko hoch das dein> Programm abkackt.
Und warum sollte das bei einer regulären Datei anders sein? Da ist es
sogar noch zusätzlich so, dass das Dateisystem beschädigt werden kann.
Rolf M. schrieb:> Und warum sollte das bei einer regulären Datei anders sein? Da ist es> sogar noch zusätzlich so, dass das Dateisystem beschädigt werden kann.
Beim Stick ohne Dateisystem kann natürlich selbiges nicht beschädigt
werden. Dafür aber die Daten. Nur bmerkte man es dann ggf. gar nicht
ohne weiteres.
Es gibt noch einen Fallstrick beim Verwenden eines USB-Sticks ohne
Dateisystem: Sobald man den an einen PC anschließt, kommt (weil das
Mounten fehlschlägt) die Meldung (sinngemäß) "Dieser Datenträger muß vor
Verwendung formatiert werden" und das Formatieren wird praktischerweise
auch gleich per im Dialog angeboten. Da ist ein unerfahrener Benutzer
nur einen Mausklick von der Katastrophe entfernt...
Oder ein Kollege, der einen Stick sucht und diesen findet. Der denkt
sich "ah, der Stick ist unbenutzt, kann ich also nehmen und
formatieren..."
Wenn es denn unbedingt die schräge Verwendung ohne Dateisystem sein
soll, würde ich den Stick zumindest partitionieren. Dann ist vorne ein
normales Dateisystem drauf, das auch gleich eine README.txt mit
Hinweisen sowie die Zugriffs-Software für das Auslesen der RAW-Daten aus
dem Bereich hinter dieser Partition enthalten kann.
Die Startadresse des unpartitionierten Bereiches kann die Software, die
die RAW-Daten schreiben soll, aus der Partitionstabelle ermittelm.
Ist aber alles ziemlicher Pfusch, einen Datenträger ohne Dateisystem
nutzen zu wollen, da man ja auf irgendeine Weise zumindest rudimentär
die ein oder andere Funktion eines Dateisystems implementieren muss...
Zumindest sollte für das Auslesen irgendwie erkennbar sein, wieviele
Nutzdaten überhaupt geschrieben wurden...
Sonst liest man x GB (oder wie groß der Stick auch immer sein mag) an
RAW-Daten aus, nur um dann beim Auswerten festzustellen, dass nur das
erste KiloByte Daten enthält.
Ich vermute mal, daß die Daten von irgendeinem MicroController auf den
Stick geschrieben werden sollen und sich dessen Programmierer das
Dateisystem ersparen wollte...
Kann man aber auch das FatFS von Elm Chan verwenden, dann hat man ein
Dateisystem auf dem Stick. Das erspart einem einige Probleme und man
kann auch teilbeschriebebe Sticks zur Datenerfassung nutzen, ohne das
Risiko, Daten zu verlieren.
Thorsten S. schrieb:> Rolf M. schrieb:>> Und warum sollte das bei einer regulären Datei anders sein? Da ist es>> sogar noch zusätzlich so, dass das Dateisystem beschädigt werden kann.>> Beim Stick ohne Dateisystem kann natürlich selbiges nicht beschädigt> werden. Dafür aber die Daten.
Das können sie aber mit Dateisystem ganz genauso.
> Nur bmerkte man es dann ggf. gar nicht ohne weiteres.
Da kann eine CRC abhelfen.
> Es gibt noch einen Fallstrick beim Verwenden eines USB-Sticks ohne> Dateisystem: Sobald man den an einen PC anschließt, kommt (weil das> Mounten fehlschlägt) die Meldung (sinngemäß) "Dieser Datenträger muß vor> Verwendung formatiert werden" und das Formatieren wird praktischerweise> auch gleich per im Dialog angeboten. Da ist ein unerfahrener Benutzer> nur einen Mausklick von der Katastrophe entfernt...
Das ist ein Problem von Windows. Wenn es nicht weiß, was drauf ist,
bietet es dem Benutzer aktiv an, erst mal alles platt zu machen…
Konzeptfehler. Eine potenziell so gefährliche Aktion bietet man nicht
einfach so nebenher an.
> Oder ein Kollege, der einen Stick sucht und diesen findet. Der denkt> sich "ah, der Stick ist unbenutzt, kann ich also nehmen und> formatieren..."
Hast du solche Kollegen? Ich würde jemanden, der einfach so ohne zu
fragen von meinem Platz einen ihm unbekannten Stick wegnimmt und
formatiert, erst mal zur Sau machen.
> Wenn es denn unbedingt die schräge Verwendung ohne Dateisystem sein> soll, würde ich den Stick zumindest partitionieren. Dann ist vorne ein> normales Dateisystem drauf, das auch gleich eine README.txt mit> Hinweisen sowie die Zugriffs-Software für das Auslesen der RAW-Daten aus> dem Bereich hinter dieser Partition enthalten kann.
Das könnte man machen.
Rolf M. schrieb:> Das können sie aber mit Dateisystem ganz genauso.
Nicht wirklich.
Bei einen normalen Stick ist der Stick mit FAT-32 formatiert. Dieses
Dateisystem legt immer eine BACKUP-Datei an. Erst wenn das File-System
sagt "Schreiben beendet" wird das alte Fat-Backup gegen das
aktuelle_FAT_system ersetzt.
Es kennen vielleicht einige den Effekt aus alten Zeiten. Man kopiert
eine Datei auf den Stick und sie ist nicht da. Das liegt genau an diesen
Vorgang.
Weshalb MS in den höheren Versionen das File-Puffer-System für Externe
Datenträger abgeschaltet hat.
Das führt dazu das Windows zwar "Früher" + schneller schreibt. Aber bei
lahmen Sticks es trotzdem zu den Fehler kommen kann.
Ich habe ein Stick mit einer LED dran. Da sehe ich oft das die noch
flackert obwohl MS meldet alles OK. Und wehe ich ziehe den Stick ab,
bevor die LED aufhört zu flackern.
Schlaumaier schrieb:> Rolf M. schrieb:>> Das können sie aber mit Dateisystem ganz genauso.>> Nicht wirklich.
Doch, wirklich. Daten in Dateien können genauso fehlerhaft sein wie
Daten, die ohne Datei direkt auf dem Datenträger liegen.
> Bei einen normalen Stick ist der Stick mit FAT-32 formatiert. Dieses> Dateisystem legt immer eine BACKUP-Datei an.
Nein, so etwas tut es nicht. Es gibt aber einige Programme, die das tun,
um eben zu vermeiden, dass man nachher mit einer kaputten Datei da
steht.
Rolf M. schrieb:> Nein, so etwas tut es nicht.
Doch tut es. Aber NICHT von der Datei. Sondern von den FAT-System.
https://de.wikipedia.org/wiki/File_Allocation_Table
Zitat der Quelle :
Bootsektor
Der Bootsektor kann x86-Maschinencode (Bootloader) enthalten, der das
Betriebssystem laden soll. An anderen Stellen enthält er Informationen
über das FAT-Dateisystem.
Anzahl der FAT-Kopien (in der Regel: 2)
Wie schon gesagt. In der Praxis mehr als 1 x passiert, das ne Kopie
nicht wirklich da war. Weil die Fat-Tabelle nicht aktualisiert wurde.
Und ich habe auch einige Male so formatierte !!! Sticks wieder
hergestellt.
Schnellformatierung löscht nämlich nur die FAT und schreibt ne neue. Das
Backup (die Kopie) ist noch da.
Mit Bordmitteln von WIN oder LINUX geht da nichts.
Ich habe mal versucht, eine HD von einem Überwachungsmonitor auszulesen.
WIN sowieso nicht.
Unter LINUX alle möglichen Dateiformate, auch uralte, anzuwenden.
Half nichts.
Auch TV-Aufzeichnungen sind ähnlich.