2016-12-14 21 views
0

私は(安全な)消去ハードドライブのためのいくつかのコードを見ています。私は異なった方法(Infosec 5,DoD 5220.22-M、など)を見ると、私は "書き込みを確認する"を読むことに気づきます。hddの消去時に "書き込みを確認する"とはどういう意味ですか?

例:

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

パス3:かかわらず、レベルが使用された、検証はランダムな文字を書き込み、書き込み

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

を検証を確保する必要があるは上書きが成功したことを示します。

私の質問は、何ですか?テクニカルを意味しますか?

  1. 書き込まれたバイトがブロックのサイズと等しい(高速のように見える)場合は、ブロックを書き込むときにチェックしますか?

  2. 書き込んだブロックと(memcmp?)のデータブロックが完全に同じであればそれを読み返しますか?

  3. 私が見落とした解決策はありますか?ここで

私の質問を説明するためサンプルコードのビット。どのソリューションが「書き込みでベリファイする」ことを示すでしょうか?戻り値(write)を確認するだけの場合を確認することができます、長さはブロックの長さと一致しますすべてバイトが実際に書き込まれていますか?

// 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 ? 
} 

答えて

0

hddの消去時に「書き込みを検証する」とはどういう意味ですか?

Here

からwrite(...)機能は、ハンドルに関連付けられ ファイルにバッファからnバイトを書き込もう。テキストファイルでは、各LFを CR/LFに展開します。

この関数は、ファイルに書き込まれたバイト数を返します。戻り値 の値が-1の場合、errnoが適切に設定されていることを示します。

ブロックサイズに等しいのであれば、あなたの例では、bytes_writtenためint bytes_written = write(fd, &block, block_size); 値は、は、ブロックのすべてのメモリ位置が書き込まれたことを確認し

そして、あなたの他の質問への答えで:

  • (1)常に、とにかく非void型関数の戻り値をチェックして、単にの比較を行うことで有意な効率やスピードの損失がありません2つのint値。あなたは1つのステップでそれを行うこともできますが、それが効率の向上であるかどうかはわかりません(アセンブリが確かに分かるように)。だから、代わりに:

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

    //あなたが同じ行の比較を行うことができます。

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

  • (2)オプションが...それは、メモリブロックという追加の検証を提供新しい内容が含まれています。

あなたはthis Linux man pageでの書き込み()のより詳細な説明を見つけることができます。

+0

ありがとうございました、私のポイントはもっとですが、戻り値(block_size == write(...)の場合)は、消去の仕様の範囲内で、ベリファイの対象となります。 – Roger

+0

@Rogier - はい、いずれかのメソッド、if(block_size == write(...))またはif(bytes_written == block_size)は_change_が行われたことを示す明確な指示(_validation_)です。 'memcmp(...) 'のような追加のステップは、追加の検証を提供するだけであり、あなたの目的のために完全にオプションです(IMO)。私はこれらの考えをより明確にするために、私の答えを修正しました。 – ryyker

+0

@Rogier - あなたのアバター画像が_ [Thunder Mustang](http://www.thundermustang.com/)_、または大規模なWWII飛行機の画像であるかどうか不思議ですか? – ryyker

関連する問題