2016-12-14 2 views
0

Im Blick auf einige Code für (sichere) Löschen von Festplatten. Ich bemerke, wenn ich auf die verschiedenen Methoden (Infosec 5, DoD 5220.22-M, usw.) schaue, las ich "Verifiziere das Schreiben".Was bedeutet "Prüft den Schreibvorgang" beim Löschen von Festplatten?

Beispiele:

https://www.lifewire.com/dod-5220-22-m-2625856

Durchlauf 3: ein zufälligen Charakter schreiben und überprüfen die Schreib

https://en.wikipedia.org/wiki/Infosec_Standard_5#cite_note-5

Unabhängig davon, welche Ebene verwendet wird, die Überprüfung ist benötigt, um sicherzustellen, , dass das Überschreiben erfolgreich war.

Meine Frage ist, was bedeutet es technische implizieren?

  1. Überprüfen Sie nur, wenn Sie einen Datenblock schreiben, wenn die geschriebenen Bytes gleich der Größe des Blocks sind (scheint schnell)?

  2. Liest du den Block, den du geschrieben hast und vergleiche (memcmp?), Wenn er genauso ist wie der geschriebene Datenblock?

  3. jede andere Lösung, die ich übersehen habe?

hier ein bisschen Codebeispiel meine Frage zu erläutern. Welche Lösung würde "Verify on write" anzeigen? Wenn Sie nur den Rückgabewert überprüfen (von write) können Sie sicher sein, so lange entspricht die Länge des Blocks, alle Bytes sind tatsächlich geschrieben?

// erasure example 
// erasure single block, start from 0 

// block size 
unsigned long block_size = 512; 

// data-block we will write 
char block[block_size]; 

// zero the block 
bzero(&block, block_size); 

// open device 
int fd = open('/dev/sdb', O_RDWR); 

// write 1st block 
int bytes_written = write(fd, &block, block_size); 

// verify option: A 
if (bytes_written == block_size) { 
    // all good 
} 

// verify option B 
// go back the number of bytes-wtitten from the current pos. 
lseek(fd, -1 * bytes_written); 
// read the same number of bytes 
int bytes_read = read(fd, &block, bytes_written); 

// should be same 
if (bytes_read == bytes_written) { 
    // here code to check i block indeed contains zero's  
    // use memcmp ? 
} 

Antwort

0

Was bedeutet „Prüft den Schreib“, wenn Festplatten zu löschen?

Von Here

Die write(...) Funktion versucht nBytes aus dem Puffer auf die Feilen mit Griff verbunden zu schreiben. Bei Textdateien wird jedes LF auf CR/LF erweitert.

Die Funktion gibt die Anzahl der in die Datei geschriebenen Bytes zurück. Ein Rückgabewert von -1 weist auf einen Fehler hin, wobei errno entsprechend festgelegt wurde.

So in Ihrem Beispiel int bytes_written = write(fd, &block, block_size); der Wert für bytes_written, wenn sie an die Blockgröße gleich, überprüft , dass alle Speicherplätze von Block geschrieben wurden.

Und in Antwort auf Ihre Fragen:

  • (1) überprüfen Sie immer den Rückgabewert einer Funktion nicht nichtig sowieso, und es gibt keine signifikante Effizienz oder Geschwindigkeitsverlust durch einfaches Durchführen eines Vergleich von zwei int Werte. Sie können es sogar in einem Schritt tun, aber ich bin mir nicht sicher, ob es ein Effizienzgewinn ist (sehen Sie sich die Montage an, um sicher zu sein). Also statt:

    // verify option: A
    if (bytes_written == block_size) { // all good }

    // Sie können den Vergleich in der gleichen Zeile tun:

    if(write(fd, &block, block_size) == block_size) { // all good }

  • (2) Optional .. Es bietet eine zusätzliche Überprüfung, dass der Speicherblock enthält den neuen Inhalt.

Sie können eine detailliertere Beschreibung des Schreib finden() in this Linux man page.

+0

danke, mein Punkt ist mehr, tut der Rückgabewert (wenn block_size == schreiben (...)), das innerhalb der Spezifikation des Löschens, als eine Überprüfung qualifiziert. – Roger

+0

@Rogier - Ja, beide Methoden, 'if (block_size == write (...))' oder 'if (bytes_written == block_size)' sind ein eindeutiger Hinweis (_validation_), dass _change_ gemacht wurde. Zusätzliche Schritte wie 'memcmp (...)' würden nur zusätzliche Verifizierung bereitstellen und sind für Ihren Zweck, IMO, völlig optional. Ich habe meine Antwort modifiziert, um diese Gedanken klarer zu machen. – ryyker

+0

@Rogier - Ich bin neugierig, ob dein Avatar-Bild von einem _ [Thunder Mustang] (http://www.thundermustang.com/) _ oder einem vollständigen WWII Flugzeug ist? – ryyker