스토리지 무결성(쓰기/읽기) 테스트 도구는 어디에서 찾을 수 있나요?

스토리지 무결성(쓰기/읽기) 테스트 도구는 어디에서 찾을 수 있나요?

로컬 하드 드라이브, 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

아래 스크립트는 공유 메모리에 임의의 파일(~100M)을 생성하고 해당 파일의 체크섬을 계산한 다음 이를 지정된 블록 장치에 여러 번 복사하여 이를 읽고 다시 계산하는 동안 전체 장치를 임의 데이터의 복사본으로 채웁니다. 원래 값과 일치하는지 확인합니다.

다음과 같은 출력이 생성됩니다.

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

관련 정보