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