Created
August 17, 2025 21:40
-
-
Save phpclub/835a1895949e9fa831ef136535202c85 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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