Где я могу найти целостность устройства хранения данных (запись-чтение) инструменты тестирования?

Я нашел ответ на этом руководстве по тому, как установить Oracle 11 г на CentOS 5.3. Я сделал некоторую незначительную тонкую настройку на init сценарии. Ради полноты я добавлю шаги здесь:

  • Править /etc/oratab и измените последнее N на конфигурационном файле к Y.

Как это:

orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N

К этому:

orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y
  • Создайте сценарий /etc/init.d/dbora.

Это должно иметь это содержание:

#!/bin/sh
# chkconfig: 345 99 10
# description: Oracle auto start-stop script.
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.

ORA_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORA_OWNER=oracle

if [ ! -f $ORA_HOME/bin/dbstart ]
then
        echo "Oracle startup: cannot start"
        exit
fi

case "$1" in

'start')

# Start the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"
;;

'stop')

# Stop the Oracle databases:
# The following command assumes that the oracle login
# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"
;;

esac
  • Затем измените разрешение сценария.

Как это:

chmod 750 /etc/init.d/dbora
  • Добавьте его к chkconfig

Как это:

chkconfig --level 345 dbora on

Протестируйте его с /etc/init.d/dbora start и /etc/init.d/dbora stop. Обязательно имейте корректный путь на dbora сценарий.

3
24.07.2012, 01:41
2 ответа

Следующий сценарий создает случайный файл (вокруг 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, сокращения, 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
2
27.01.2020, 21:29
  • 1
    Как это очень отличается, чем тест чтения-записи в badblocks? –  a CVn 24.07.2012, 11:54
  • 2
    Как это очень отличается, чем тест чтения-записи в badblocks? –  a CVn 24.07.2012, 11:54
  • 3
    Не слишком много, кроме Вас, может изменить его легко (удар по сравнению с C). Вы могли определить шаблон, добавить задержку испытания на светопрочность, сделайте несколько передач и т.д. Этот сценарий был бы похож на badblocks-s-w-t случайный/dev/xxx. Однако главной причиной отправить его был OP, который попросили сценария Bash. –  MV. 24.07.2012, 21:39

Следующий сценарий создает случайный файл (вокруг 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, сокращения, 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
2
27.01.2020, 21:29

Теги

Похожие вопросы