algusev20
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день! Напишите пожалуйста, нет ли в этом скрипте копирования, перемешения файлов, шпионских или иных вредоносных функций. С уважением, Александр Вот скрипт #!/bin/bash # safe-vendor-check.sh # Безопасная проверка доступности скрытых (vendor) ATA-команд (ТОЛЬКО ЧТЕНИЕ) # Использует: hdparm, smartctl, hddsupertool (если есть), lsblk, lspci (опционально) # Риск: минимальный (команды только для чтения). Ни одна команда не изменяет диск. set -euo pipefail usage() { cat <<EOF Использование: sudo ./safe-vendor-check.sh /dev/sdX [OUTPUT_DIR] Пример: sudo ./safe-vendor-check.sh /dev/sda /root/reports Если OUTPUT_DIR не указан — отчёт сохранится в ./report_<дата>/ EOF exit 1 } if [ $# -lt 1 ] || [ "${1:-}" = "-h" ]; then usage fi DISK="$1" OUTDIR="${2:-./report_$(date +%Y%m%d_%H%M%S)}" # Проверки if [ "$EUID" -ne 0 ]; then echo "Запустите как root: sudo $0 $*" exit 2 fi if [ ! -b "$DISK" ]; then echo "Устройство $DISK не найдено (не block device)." exit 3 fi mkdir -p "$OUTDIR" echo "Отчёт будет записан в: $OUTDIR" LOG="$OUTDIR/check.log" exec > >(tee -a "$LOG") 2>&1 echo "=== SAFE VENDOR-ATA CHECK ===" echo "Диск: $DISK" echo "Дата: $(date)" echo # Инструменты: проверяем доступность command -v hdparm >/dev/null 2>&1 || echo "Внимание: hdparm не установлен — некоторые проверки будут пропущены." command -v smartctl >/dev/null 2>&1 || echo "Внимание: smartctl (smartmontools) не установлен — некоторые проверки будут пропущены." command -v ./hddsupertool >/dev/null 2>&1 || command -v hddsupertool >/dev/null 2>&1 || echo "hddsupertool не найден в текущем каталоге — пропущу специфичные проверки." echo "1) Список блочных устройств (lsblk)" lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,LABEL || true echo echo "2) Базовая информация (hdparm -I) — это чтение" if command -v hdparm >/dev/null 2>&1; then echo ">>> hdparm -I $DISK" hdparm -I "$DISK" || true echo else echo "hdparm отсутствует" fi echo "3) Security / Frozen / HPA (hdparm --security-status, --dco-identify) — чтение" if command -v hdparm >/dev/null 2>&1; then echo ">>> hdparm --security-status $DISK" hdparm --security-status "$DISK" || true echo echo ">>> hdparm --dco-identify $DISK (если поддерживается)" hdparm --dco-identify "$DISK" || true echo else echo "hdparm отсутствует (пропуск)" fi echo "4) SMART + расширённая информация (smartctl -x)" if command -v smartctl >/dev/null 2>&1; then echo ">>> smartctl -i -x $DISK (идентификация и расширённые данные)" smartctl -i -x "$DISK" || true echo echo ">>> smartctl --scan" smartctl --scan || true echo else echo "smartctl отсутствует" fi echo "5) Проверка отклика на vendor/test-features (hddsupertool safe calls) — только если hddsupertool доступен" # Попытаемся вызвать безопасные команды HDDSuperTool: identify, read-native-max, testfeatures (если есть) HDDST="" if [ -x "./hddsupertool" ]; then HDDST="./hddsupertool" elif command -v hddsupertool >/dev/null 2>&1; then HDDST="hddsupertool" fi if [ -n "$HDDST" ]; then echo "Используем hddsupertool: $HDDST" echo ">>> $HDDST $DISK --command identify" $HDDST "$DISK" --command identify || true echo echo ">>> $HDDST $DISK --command read-native-max" $HDDST "$DISK" --command read-native-max || true echo # Некоторые сборки HDDSuperTool/Clone имеют тестfeatures или testcommands, попробуем безопасно echo ">>> Проверяю наличие testfeatures/testcommands у hddsupertool" if $HDDST "$DISK" --help 2>&1 | grep -iq "test"; then echo "Команда testfeatures/testcommands обнаружена — выполню безопасную проверку" # попробуем сначала --command testfeatures, потом --command testcommands $HDDST "$DISK" --command testfeatures || true $HDDST "$DISK" --command testcommands || true else echo "testfeatures / testcommands не найдены в --help (пропуск)" fi else echo "hddsupertool не найден — пропускаем шаг с ним" fi echo echo "6) Попытка прочитать часть идентифицирующих секторов (чтение LBA 0, MBR) — чтение" echo ">>> hexdump -C -n 512 /dev/${DISK#/dev/} (внимание: будет читать сектор 0)" # Используем dd с bs=512 count=1 dd if="$DISK" of="$OUTDIR/sector0.bin" bs=512 count=1 conv=sync,noerror 2>/dev/null || true echo "Сохранён: $OUTDIR/sector0.bin (hexdump ниже)" hexdump -C "$OUTDIR/sector0.bin" | sed -n '1,20p' || true echo echo "7) Лог dmesg (последние 200 строк) — поиск ошибок диска" dmesg | egrep -i 'sd[a-z]|ata|sgx|scsi|disk' | tail -n 200 || true echo echo "8) PCI/контроллеры (опционально)" if command -v lspci >/dev/null 2>&1; then echo ">>> lspci -nn | egrep -i 'sata|raid|storage|nvme|eth|usb' " lspci -nn | egrep -i 'sata|raid|storage|nvme|usb' || true fi echo echo "=== FINISH ===" echo "Отчёт сохранён: $LOG" echo "Доп. файлы: $OUTDIR/sector0.bin" echo echo "ВАЖНО:" echo "- Этот скрипт НЕ выполняет запись на диск." echo "- Ни одна выполненная команда не изменяет SA/HPA/DCO/firmware." echo "- Если вы захотите запустить vendor-команды или любые команды записи — сначала сделайте образ и проконсультируйтесь." |