ストレージの整合性(書き込み/読み取り)テストツールはどこにありますか?

ストレージの整合性(書き込み/読み取り)テストツールはどこにありますか?

ローカルハードドライブ、USBドライブなどのデータの整合性を確認するためのツールが必要です。

私は有名人のような解決策を探しています。www.heise.de/download/h2testwそれとも、少なくともリポジトリでよく見られるものです。 (h2testwは、特定のデータ文字列をメディアに繰り返し記録し、再度読み取って正しく記録されていることを確認し、書き込み/読み取り時間/速度を表示します。)

私は探していません

dd if=/dev/random of=/dev/sdx bs=1k && dd if=/dev/sdx of=/dev/null bs=1k

すべてが正しく書かれていることを確認していないからです。これは、デバイスが正常に読み書きできるかどうかをテストするためのものです。

これまではあまり満足できません。

badblocks -w -v /dev/sdx1

これは、遅いようで正確に何を書くのか、フラッシュメディアの摩耗レベリングを検討しているのか分からないからです。

F3というプログラムがあります。http://oss.digirati.com.br/f3/コンパイルが必要です。 h2testwの後に設計された概念は興味深いようです。私は事前にパッケージ化されたバイナリである方が良いと思います。

ベストアンサー1

以下のスクリプトは、共有メモリにランダムファイル(〜100 M)を作成し、そのファイルのチェックサムを計算し、それを指定されたブロックデバイスに複数回コピーし、それを読み取り、再計算しながらデバイス全体をランダムデータのコピーで埋めます。元の値と一致することを確認してください。

次の出力が生成されます。

We will create a test data file /dev/shm/testsource with size 100000000.
We will fill the device /dev/sdb (of size 16001036288) with this data (in 160 blocks) and then will check if the data is not corrupted.
This will erase all data in /dev/sdb.
Do you want to continue?
1) yes
2) no
#? 1
Creating test source file... (100000000)
Calculating source checksum...
9f4c31858b3bb1122974a5c9d8ec28c6f71b3367
Writing block 0 ...
Checking block 0 ... ok
Writing block 1 ...
Checking block 1 ... ok
Writing block 2 ...
Checking block 2 ... ok

dd、blockdev、cut、sha1sum、/dev/urandom、および/dev/shmが必要です。デバイス(通常はルート)へのアクセスが必要です。これはLinux 2.6.3xでテストされました。非常に遅いです。複数のパスを実行するか、すべての書き込みを実行し、すべての確認を実行または確認する前にしばらく待つように変更できます(「フェード」テスト)。

#!/bin/bash
TARGETDEVICE=$1
TESTFILE="/dev/shm/testsource"
BLOCKSIZE="100000000"
if [ -b "$1" ]; then
    TARGETSIZE=$(blockdev --getsize64 $TARGETDEVICE)
    if [ "$TARGETSIZE" -gt 0 ] ; then
      let "BLOCKS=$TARGETSIZE / $BLOCKSIZE"
      if [ "$BLOCKS" -lt 2 ] ; then
        BLOCKSIZE=$TARGETSIZE
        BLOCKS=1
      fi
    fi
    echo "We will create a test data file $TESTFILE with size $BLOCKSIZE."
    echo "We will fill the device $TARGETDEVICE (of size $TARGETSIZE) with this data (in $BLOCKS blocks) and then will check if the data is not corrupted."
    echo "This will erase all data in $TARGETDEVICE."
    echo "Do you want to continue?"
    select choice in yes no ; do
      if [ "$choice" == "yes" ] ; then

        echo "Creating test source file... ($BLOCKSIZE)"
        dd if=/dev/urandom of=$TESTFILE bs=$BLOCKSIZE count=1 status=noxfer 2> /dev/null

        echo "Calculating source checksum..."
        CHECKSUM=$(sha1sum $TESTFILE | cut -d " " -f 1)
        echo $CHECKSUM

        for ((y=0 ; y<$BLOCKS ; y++)) ; do
          echo "Writing block $y ..."
          dd if=$TESTFILE of=$TARGETDEVICE bs=$BLOCKSIZE count=1 seek=$y status=noxfer 2> /dev/null
          echo -n "Checking block $y ... "
          TESTCHECKSUM=$(dd if=$TARGETDEVICE bs=$BLOCKSIZE count=1 skip=$y status=noxfer 2> /dev/null | sha1sum | cut -d " " -f 1)
          if [ "$CHECKSUM" == "$TESTCHECKSUM" ] ; then
            echo "ok"
          else
            echo "MISMATCH"
            echo "(found $TESTCHECKSUM)"
          fi
        done
        rm -f $TESTFILE
        break

      fi
      if [ "$choice" == "no" ] ; then
        echo
        echo "Operation cancelled"
        echo
        break
      fi

    done

else 
    echo
    echo "Missing or wrong target device"
    echo "Usage: $0 /dev/device"
    echo
fi

おすすめ記事