Ultima attività 1 day ago

SSD Repair Script (ext4/auto) - Proxmox Edition (Final)

urocibg ha revisionato questo gist 1 day ago. Vai alla revisione

1 file changed, 2 insertions, 2 deletions

repair-ssd.sh

@@ -3,8 +3,8 @@
3 3 # =============================================================
4 4 # SSD Repair Script (ext4/auto) - Proxmox Edition (Final)
5 5 # =============================================================
6 - ## 🔙 Обратно към статията
7 - https://itpraktika.com/proxmox-ssd-read-only-fix/
6 + # 🔙 Обратно към статията:
7 + # https://itpraktika.com/proxmox-ssd-read-only-fix/
8 8
9 9 MOUNT_POINT="/mnt/backup"
10 10 DEVICE="/dev/sda1"

urocibg ha revisionato questo gist 1 day ago. Vai alla revisione

1 file changed, 2 insertions

repair-ssd.sh

@@ -3,6 +3,8 @@
3 3 # =============================================================
4 4 # SSD Repair Script (ext4/auto) - Proxmox Edition (Final)
5 5 # =============================================================
6 + ## 🔙 Обратно към статията
7 + https://itpraktika.com/proxmox-ssd-read-only-fix/
6 8
7 9 MOUNT_POINT="/mnt/backup"
8 10 DEVICE="/dev/sda1"

urocibg ha revisionato questo gist 1 day ago. Vai alla revisione

1 file changed, 129 insertions

repair-ssd.sh(file creato)

@@ -0,0 +1,129 @@
1 + #!/bin/bash
2 +
3 + # =============================================================
4 + # SSD Repair Script (ext4/auto) - Proxmox Edition (Final)
5 + # =============================================================
6 +
7 + MOUNT_POINT="/mnt/backup"
8 + DEVICE="/dev/sda1"
9 + LOG_FILE="repair.log"
10 +
11 + # Цветове
12 + RED="\e[31m"
13 + GREEN="\e[32m"
14 + YELLOW="\e[33m"
15 + CYAN="\e[36m"
16 + RESET="\e[0m"
17 +
18 + # Проверка за root
19 + if [ "$EUID" -ne 0 ]; then
20 + echo -e "${RED}❌ Стартирай скрипта като root (sudo)!${RESET}"
21 + exit 1
22 + fi
23 +
24 + # Подобрена лог функция (с разделител за по-добра четимост)
25 + log_message() {
26 + echo -e "$1"
27 + # Записваме в лога без цветови кодове (за чист текст)
28 + local clean_msg=$(echo -e "$2" | sed 's/\x1b\[[0-9;]*m//g')
29 + echo "$(date '+%Y-%m-%d %H:%M:%S') - $clean_msg" >> "$LOG_FILE"
30 + }
31 +
32 + clear
33 + echo -e "${CYAN}==========================================${RESET}"
34 + echo -e "${CYAN} SSD REPAIR TOOL - СИСТЕМА ЗА БЕКЪПИ ${RESET}"
35 + echo -e "${CYAN}==========================================${RESET}"
36 + echo -e "Лог файл: ${YELLOW}$LOG_FILE${RESET}"
37 + echo ""
38 +
39 + # Потвърждение
40 + echo -e "${YELLOW}ВНИМАНИЕ: Скриптът ще извърши fsck върху $DEVICE.${RESET}"
41 + read -p "Сигурен ли си? (y/n): " confirm
42 +
43 + if [[ $confirm != [yY] ]]; then
44 + echo -e "${RED}❌ Операцията е отменена.${RESET}"
45 + exit 0
46 + fi
47 +
48 + # Добавяме празен ред в лога за разделител между отделните пускания
49 + echo "----------------------------------------------------------" >> "$LOG_FILE"
50 + log_message "${CYAN}===> Старт на операция за $DEVICE${RESET}" "STARTING NEW SESSION"
51 +
52 + # 1. Проверка mount point
53 + if [ ! -d "$MOUNT_POINT" ]; then
54 + log_message "${RED}❌ Липсва mount point: $MOUNT_POINT${RESET}" "ERROR: Missing mount point directory"
55 + exit 1
56 + fi
57 +
58 + # 2. Проверка дали е монтиран и unmount
59 + if mountpoint -q "$MOUNT_POINT"; then
60 + log_message "${YELLOW}⚠️ Дискът е монтиран.${RESET}" "Status: Mounted"
61 +
62 + # Показваме кои процеси пречат
63 + BUSY_PIDS=$(fuser -m "$MOUNT_POINT" 2>/dev/null)
64 + if [ -n "$BUSY_PIDS" ]; then
65 + echo -e "${CYAN}Процеси използващи диска (PIDs):${RESET} $BUSY_PIDS"
66 + read -p "Да бъдат ли спрени процесите автоматично? (y/n): " kill_confirm
67 + if [[ $kill_confirm == [yY] ]]; then
68 + log_message "${YELLOW}⚠️ Спиране на процеси...${RESET}" "Action: Killing processes $BUSY_PIDS"
69 + fuser -km "$MOUNT_POINT" 2>/dev/null
70 + sleep 2
71 + fi
72 + fi
73 +
74 + echo -e "${CYAN}Опит за unmount...${RESET}"
75 + umount -l "$MOUNT_POINT" # Добавено -l за по-сигурен unmount
76 +
77 + if mountpoint -q "$MOUNT_POINT"; then
78 + log_message "${RED}❌ Unmount неуспешен!${RESET}" "ERROR: Umount failed"
79 + exit 1
80 + else
81 + log_message "${GREEN}✅ Успешен unmount${RESET}" "Status: Unmount OK"
82 + fi
83 + else
84 + log_message "${GREEN}✅ Вече е unmounted${RESET}" "Status: Already unmounted"
85 + fi
86 +
87 + # 3. fsck (Най-важната част)
88 + log_message "${CYAN}===> Стартиране на fsck...${RESET}" "Action: Running fsck"
89 + fsck -fvy "$DEVICE"
90 + FSCK_RET=$?
91 +
92 + if [ $FSCK_RET -lt 4 ]; then
93 + log_message "${GREEN}✅ fsck OK (код: $FSCK_RET)${RESET}" "Result: fsck Success"
94 + else
95 + log_message "${RED}❌ fsck проблем (код: $FSCK_RET)${RESET}" "Result: fsck Critical Failure"
96 + exit 1
97 + fi
98 +
99 + # 4. mount обратно
100 + log_message "${CYAN}===> Монтиране...${RESET}" "Action: Remounting"
101 + mount "$DEVICE" "$MOUNT_POINT"
102 +
103 + if [ $? -ne 0 ]; then
104 + log_message "${RED}❌ mount грешка${RESET}" "Result: Mount Failed"
105 + exit 1
106 + else
107 + log_message "${GREEN}✅ mount OK${RESET}" "Result: Mount Success"
108 + fi
109 +
110 + # 5. Тест за запис
111 + TEST_FILE="$MOUNT_POINT/repair_test_$(date +%s).tmp"
112 + if touch "$TEST_FILE" 2>/dev/null; then
113 + rm "$TEST_FILE"
114 + log_message "${GREEN}✅ WRITE TEST OK${RESET}" "Write Test: PASSED"
115 + else
116 + log_message "${RED}❌ WRITE TEST FAIL (Read-Only?)${RESET}" "Write Test: FAILED"
117 + fi
118 +
119 + # 6. SMART и Kernel logs (само на екрана, за да не пълним лог файла с излишно инфо)
120 + echo -e "\n${CYAN}===> Последни kernel съобщения:${RESET}"
121 + dmesg | tail -n 15
122 +
123 + PARENT_DISK=$(lsblk -no PKNAME "$DEVICE")
124 + if [ -n "$PARENT_DISK" ] && command -v smartctl >/dev/null 2>&1; then
125 + echo -e "\n${CYAN}===> SMART статус (/dev/$PARENT_DISK):${RESET}"
126 + smartctl -H "/dev/$PARENT_DISK" | grep -iE "result|status|health"
127 + fi
128 +
129 + log_message "${GREEN}===> ВСИЧКО ЗАВЪРШИ УСПЕШНО${RESET}" "SESSION FINISHED SUCCESSFULLY"
Più nuovi Più vecchi