Zle sa mi odpojil exFAT 12TB disk so zálohami, tak sme ho opravili s GPT AI. Ak niekto zháň obdobný skript, už nehľadajte, tu je:

Zle sa mi odpojil exFAT 12TB disk so zálohami, tak sme ho opravili s GPT AI. Ak niekto zháň obdobný skript, už nehľadajte, tu je:
#!/bin/bash

# ============================================================
# macOS EXFAT DIAGNOSTIKA + OPRAVA
# ============================================================
# Bezpečný nástroj pre externé exFAT disky.
#
# Funkcie:
#   1. Nájde volume "Expansion"
#   2. Zistí disk/partíciu
#   3. Zobrazí základnú diagnostiku
#   4. Odpojí volume
#   5. Spustí fsck_exfat -n (iba kontrola)
#   6. Ponúkne opravu fsck_exfat -y
#   7. Znovu pripojí volume
#   8. Urobí základnú kontrolu po oprave
#   9. Vytvorí log
#
# NIKDY:
#   - neformátuje disk
#   - nemaže súbory
#   - nepoužíva dd
#   - neprepíše iný disk
# ============================================================

set -u

VOLUME_NAME="Expansion"
LOG_DIR="$HOME/Desktop"
DATE="$(date '+%Y-%m-%d_%H-%M-%S')"
LOG_FILE="$LOG_DIR/exfat_diagnostika_$DATE.log"

# ------------------------------------------------------------
# Farby
# ------------------------------------------------------------

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m'

# ------------------------------------------------------------
# Logovanie
# ------------------------------------------------------------

exec > >(tee -a "$LOG_FILE") 2>&1

echo
echo "============================================================"
echo " macOS EXFAT DIAGNOSTIKA A OPRAVA"
echo "============================================================"
echo
echo "Dátum: $(date)"
echo "Mac: $(scutil --get ComputerName 2>/dev/null || echo unknown)"
echo "macOS: $(sw_vers -productVersion)"
echo "Log: $LOG_FILE"
echo

# ------------------------------------------------------------
# Kontrola root
# ------------------------------------------------------------

if [ "$EUID" -ne 0 ]; then
    echo -e "${YELLOW}Skript potrebuje administrátorské práva.${NC}"
    echo "Spúšťam sudo..."
    exec sudo "$0" "$@"
fi

# ------------------------------------------------------------
# Kontrola nástrojov
# ------------------------------------------------------------

for CMD in diskutil fsck_exfat ioreg system_profiler; do
    if ! command -v "$CMD" >/dev/null 2>&1; then
        echo -e "${RED}Chýba príkaz: $CMD${NC}"
        exit 1
    fi
done

# ------------------------------------------------------------
# Nájdeme volume
# ------------------------------------------------------------

echo
echo "------------------------------------------------------------"
echo "1. HĽADÁM VOLUME: $VOLUME_NAME"
echo "------------------------------------------------------------"

DISK_INFO="$(diskutil list)"

echo "$DISK_INFO"

DISK_IDENTIFIER="$(
    diskutil info "$VOLUME_NAME" 2>/dev/null |
    awk -F': ' '/Device Identifier/ {print $2; exit}'
)"

if [ -z "${DISK_IDENTIFIER:-}" ]; then
    echo
    echo -e "${RED}Volume '$VOLUME_NAME' sa nenašlo.${NC}"
    echo
    echo "Dostupné disky:"
    diskutil list
    exit 1
fi

DISK_NODE="/dev/$DISK_IDENTIFIER"

echo
echo -e "${GREEN}Nájdené:${NC} $DISK_NODE"

# ------------------------------------------------------------
# Základné informácie
# ------------------------------------------------------------

echo
echo "------------------------------------------------------------"
echo "2. INFORMÁCIE O VOLUME"
echo "------------------------------------------------------------"

diskutil info "$DISK_NODE"

# ------------------------------------------------------------
# Určenie parent disku
# ------------------------------------------------------------

PARENT_DISK="$(
    diskutil info "$DISK_NODE" |
    awk -F': ' '/Part of Whole/ {print $2; exit}'
)"

if [ -z "${PARENT_DISK:-}" ]; then
    echo -e "${YELLOW}Nepodarilo sa určiť parent disk.${NC}"
else
    echo
    echo -e "${CYAN}Celý disk:${NC} /dev/$PARENT_DISK"
fi

# ------------------------------------------------------------
# USB diagnostika
# ------------------------------------------------------------

echo
echo "------------------------------------------------------------"
echo "3. USB DIAGNOSTIKA"
echo "------------------------------------------------------------"

ioreg -p IOUSB -l -w 0 |
grep -A 35 -B 5 "$VOLUME_NAME" || true

# ------------------------------------------------------------
# SMART
# ------------------------------------------------------------

echo
echo "------------------------------------------------------------"
echo "4. SMART / DISK INFO"
echo "------------------------------------------------------------"

if [ -n "${PARENT_DISK:-}" ]; then
    diskutil info "/dev/$PARENT_DISK" |
    grep -E \
    "Device Identifier|Device / Media Name|Disk Size|Protocol|SMART Status|Read-Only|Solid State|Device Location" \
    || true
fi

echo
echo -e "${YELLOW}Poznámka:${NC}"
echo "USB externé Seagate disky často neposkytujú SMART informácie"
echo "cez USB bridge. 'SMART Status: Not Supported' preto samo"
echo "o sebe ešte neznamená poruchu."

# ------------------------------------------------------------
# Stav pripojenia
# ------------------------------------------------------------

echo
echo "------------------------------------------------------------"
echo "5. STAV PRIPOJENIA"
echo "------------------------------------------------------------"

diskutil info "$DISK_NODE" |
grep -E \
"Mounted|Mount Point|File System|Volume Name|Volume Total|Volume Free|Read-Only" \
|| true

# ------------------------------------------------------------
# Príprava na fsck
# ------------------------------------------------------------

echo
echo "============================================================"
echo "6. PRÍPRAVA NA KONTROLU EXFAT"
echo "============================================================"

echo
echo -e "${YELLOW}Volume bude teraz odmontované.${NC}"
echo "Žiadne súbory sa nevymažú."

read -r -p "Pokračovať? [a/N]: " ANSWER

if [[ ! "$ANSWER" =~ ^[AaYy]$ ]]; then
    echo "Ukončené používateľom."
    exit 0
fi

# ------------------------------------------------------------
# Unmount
# ------------------------------------------------------------

echo
echo "Odpájam volume..."

if ! diskutil unmount "$DISK_NODE"; then
    echo
    echo -e "${RED}Nepodarilo sa odmontovať volume.${NC}"
    echo "Skontroluj, či ho nepoužíva Finder alebo nejaká aplikácia."
    exit 1
fi

echo -e "${GREEN}Volume úspešne odmontované.${NC}"

# ------------------------------------------------------------
# RAW DEVICE
# ------------------------------------------------------------

RAW_DISK="/dev/r${DISK_IDENTIFIER}"

echo
echo "RAW zariadenie: $RAW_DISK"

# ------------------------------------------------------------
# FSCK - READ ONLY
# ------------------------------------------------------------

echo
echo "============================================================"
echo "7. EXFAT KONTROLA — BEZ ZÁPISU"
echo "============================================================"

echo
echo "Spúšťam:"
echo
echo "    fsck_exfat -n $RAW_DISK"
echo

FSCK_CHECK=0

fsck_exfat -n "$RAW_DISK" || FSCK_CHECK=$?

echo
echo "Návratový kód kontroly: $FSCK_CHECK"

# ------------------------------------------------------------
# Výsledok
# ------------------------------------------------------------

echo
echo "============================================================"
echo "8. VYHODNOTENIE"
echo "============================================================"

if [ "$FSCK_CHECK" -eq 0 ]; then

    echo -e "${GREEN}"
    echo "Filesystem sa javí ako OK."
    echo -e "${NC}"

    REPAIR_NEEDED="NO"

else

    echo -e "${YELLOW}"
    echo "Filesystem hlási problém."
    echo -e "${NC}"

    REPAIR_NEEDED="YES"

fi

# ------------------------------------------------------------
# Oprava
# ------------------------------------------------------------

if [ "$REPAIR_NEEDED" = "YES" ]; then

    echo
    echo "------------------------------------------------------------"
    echo "OPRAVA EXFAT"
    echo "------------------------------------------------------------"

    echo
    echo -e "${YELLOW}Pozor:${NC}"
    echo "fsck_exfat -y bude zapisovať zmeny do súborového systému."
    echo
    echo "Disk NEBUDE formátovaný."
    echo "Používateľské súbory sa priamo nemažú."
    echo
    read -r -p "Naozaj spustiť opravu? [a/N]: " REPAIR

    if [[ "$REPAIR" =~ ^[AaYy]$ ]]; then

        echo
        echo "Spúšťam opravu:"
        echo
        echo "    fsck_exfat -y $RAW_DISK"
        echo

        fsck_exfat -y "$RAW_DISK"

        REPAIR_CODE=$?

        echo
        echo "Návratový kód opravy: $REPAIR_CODE"

        if [ "$REPAIR_CODE" -eq 0 ]; then
            echo -e "${GREEN}Oprava bola dokončená.${NC}"
        else
            echo -e "${RED}Oprava skončila s chybovým kódom.${NC}"
        fi

    else

        echo
        echo "Oprava bola preskočená."

    fi

else

    echo
    echo "Oprava nie je potrebná."

fi

# ------------------------------------------------------------
# Mount
# ------------------------------------------------------------

echo
echo "============================================================"
echo "9. OPÄTOVNÉ PRIPOJENIE"
echo "============================================================"

if diskutil mount "$DISK_NODE"; then

    echo
    echo -e "${GREEN}Volume bolo úspešne pripojené.${NC}"

else

    echo
    echo -e "${RED}Volume sa nepodarilo pripojiť.${NC}"

fi

# ------------------------------------------------------------
# Záverečná diagnostika
# ------------------------------------------------------------

echo
echo "============================================================"
echo "10. ZÁVEREČNÁ DIAGNOSTIKA"
echo "============================================================"

diskutil info "$DISK_NODE" |
grep -E \
"Device Identifier|Device / Media Name|Volume Name|Mounted|File System|Volume Total|Volume Free|Read-Only|SMART Status" \
|| true

# ------------------------------------------------------------
# Test čítania adresára
# ------------------------------------------------------------

echo
echo "------------------------------------------------------------"
echo "TEST ČÍTANIA"
echo "------------------------------------------------------------"

MOUNT_POINT="/Volumes/$VOLUME_NAME"

if [ -d "$MOUNT_POINT" ]; then

    echo
    echo "Prvé položky na disku:"
    ls -lah "$MOUNT_POINT" | head -30

    echo
    echo -e "${GREEN}Finder volume je čitateľné.${NC}"

else

    echo
    echo -e "${RED}Mount point neexistuje.${NC}"

fi

# ------------------------------------------------------------
# Záver
# ------------------------------------------------------------

echo
echo "============================================================"
echo " HOTOVO"
echo "============================================================"
echo
echo "Log bol uložený do:"
echo
echo "$LOG_FILE"
echo

echo -e "${YELLOW}Dôležité:${NC}"
echo "Ak sa počas fsck objavili 'Input/output error',"
echo "filesystem môže byť opravený, ale disk môže mať"
echo "fyzické problémy alebo problémy s USB prenosom."
echo
echo "Ak disk znovu začne výrazne cvakať/škrkať,"
echo "zastav používanie disku a prioritou je záchrana dát."
echo
echo "============================================================"

Výsledok:

[lesnavevericka@Mac-mini-uzivatela-Lesna ~ % sudo fsck_exfat -y /dev/rdisk4s2
Password:
** Checking volume.
** Checking main boot region.
** Checking system files.
** Volume name is Expansion.
** Checking upper case translation table.
** Checking file system hierarchy.
** Checking active bitmap.
** Rechecking main boot region.
** Rechecking alternate boot region.
** The volume Expansion appears to be OK.
[lesnavevericka@Mac-mini-uzivatela-Lesna ~ % diskutil mount /dev/disk4s2
Volume Expansion on /dev/disk4s2 mounted

Author: AarNoma

The first Slovak cyborg 1 system

Comments “Zle sa mi odpojil exFAT 12TB disk so zálohami, tak sme ho opravili s GPT AI. Ak niekto zháň obdobný skript, už nehľadajte, tu je:”