Skip to content

Instantly share code, notes, and snippets.

@phpclub
Created August 17, 2025 21:40
Show Gist options
  • Select an option

  • Save phpclub/835a1895949e9fa831ef136535202c85 to your computer and use it in GitHub Desktop.

Select an option

Save phpclub/835a1895949e9fa831ef136535202c85 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Скрипт для тестирования скорости диска
# Автор: Тест производительности дисков
# Использование: ./disk_test.sh
# Получаем имя хоста
HOSTNAME=$(hostname)
echo "=== ТЕСТ СКОРОСТИ ДИСКА НА СЕРВЕРЕ: $HOSTNAME ==="
echo "Дата и время: $(date)"
echo "Операционная система: $(uname -a)"
echo "Свободное место на диске:"
df -h | grep -E "/$|/tmp"
echo ""
# Создаем временную директорию для тестов
TEST_DIR="/tmp/disk_speed_test_$$"
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
# Размер файла для теста (1GB)
TEST_SIZE="1G"
BLOCK_SIZE="1M"
echo "=== РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ==="
echo "Сервер: $HOSTNAME"
echo "Размер тестового файла: $TEST_SIZE"
echo ""
# Тест 1: Запись с помощью dd
echo "1. Тест записи (dd):"
WRITE_RESULT=$(dd if=/dev/zero of=testfile bs=$BLOCK_SIZE count=1024 oflag=direct 2>&1 | tail -n 1)
echo "$WRITE_RESULT"
WRITE_SPEED=$(echo "$WRITE_RESULT" | grep -oE '[0-9,.]+ [MG]B/s' | tail -n 1)
echo "Скорость записи: $WRITE_SPEED"
echo ""
# Очищаем кеш
sync
echo 3 | sudo tee /proc/sys/vm/drop_caches > /dev/null 2>&1 || echo "Не удалось очистить кеш (нужны права root)"
# Тест 2: Чтение с помощью dd
echo "2. Тест чтения (dd):"
READ_RESULT=$(dd if=testfile of=/dev/null bs=$BLOCK_SIZE iflag=direct 2>&1 | tail -n 1)
echo "$READ_RESULT"
READ_SPEED=$(echo "$READ_RESULT" | grep -oE '[0-9,.]+ [MG]B/s' | tail -n 1)
echo "Скорость чтения: $READ_SPEED"
echo ""
# Тест 3: Случайная запись и чтение (если доступен fio)
if command -v fio &> /dev/null; then
echo "3. Тест случайного доступа (fio):"
# Тест случайной записи
echo "Случайная запись 4K:"
FIO_RANDWRITE=$(fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite --bs=4k --direct=1 --size=512M --numjobs=1 --runtime=30 --group_reporting --filename=fio_test_file 2>/dev/null | grep -E "write.*IOPS|write.*BW")
echo "$FIO_RANDWRITE"
# Тест случайного чтения
echo "Случайное чтение 4K:"
FIO_RANDREAD=$(fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread --bs=4k --direct=1 --size=512M --numjobs=1 --runtime=30 --group_reporting --filename=fio_test_file 2>/dev/null | grep -E "read.*IOPS|read.*BW")
echo "$FIO_RANDREAD"
rm -f fio_test_file
else
echo "3. fio не установлен, пропускаем тест случайного доступа"
echo "Для установки fio: sudo apt-get install fio (Ubuntu/Debian) или sudo yum install fio (CentOS/RHEL)"
fi
echo ""
# Тест 4: Латентность диска
echo "4. Тест латентности (ioping, если доступен):"
if command -v ioping &> /dev/null; then
LATENCY_RESULT=$(ioping -c 10 -s 4k . 2>/dev/null | tail -n 1)
echo "$LATENCY_RESULT"
else
echo "ioping не установлен, измеряем латентность с помощью dd"
START_TIME=$(date +%s.%N)
dd if=/dev/zero of=small_test bs=4k count=1 oflag=direct 2>/dev/null
END_TIME=$(date +%s.%N)
LATENCY=$(echo "$END_TIME - $START_TIME" | bc 2>/dev/null || python3 -c "print(f'{$END_TIME - $START_TIME:.3f}')" 2>/dev/null || echo "N/A")
echo "Время записи 4KB: ${LATENCY} секунд"
rm -f small_test
fi
echo ""
# Информация о дисках
echo "5. Информация о дисках:"
echo "Смонтированные файловые системы:"
df -Th | grep -v tmpfs | head -n 10
echo ""
echo "Информация о блочных устройствах:"
lsblk 2>/dev/null || echo "lsblk недоступен"
# Очистка
cd /
rm -rf "$TEST_DIR"
echo ""
echo "=== СВОДКА ДЛЯ СЕРВЕРА $HOSTNAME ==="
echo "Запись (dd): $WRITE_SPEED"
echo "Чтение (dd): $READ_SPEED"
echo "Тест завершен: $(date)"
echo "=========================="
echo ""
# Форматированный вывод для парсинга
echo "PARSED_RESULTS_START"
echo "Server: $HOSTNAME"
echo "Write_Speed: $WRITE_SPEED"
echo "Read_Speed: $READ_SPEED"
echo "Test_Date: $(date '+%Y-%m-%d %H:%M:%S')"
echo "PARSED_RESULTS_END"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment