Linux gir02.nhanhoa.com 4.18.0-513.9.1.lve.el8.x86_64 #1 SMP Mon Dec 4 15:01:22 UTC 2023 x86_64
LiteSpeed
Server IP : 103.124.95.33 & Your IP : 216.73.217.104
Domains :
Cant Read [ /etc/named.conf ]
User : nhsacmvr
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
opt /
nhanhoa /
checkdisk2 /
Delete
Unzip
Name
Size
Permission
Date
Action
json
[ DIR ]
drwxr-xr-x
2026-07-26 09:09
check.sh
38.53
KB
-rwxr-xr-x
2026-07-26 09:09
disks.html
58.16
KB
-rw-r--r--
2026-07-26 09:09
history.db
5
KB
-rw-r--r--
2026-07-26 09:09
storcli.log
1.2
MB
-rw-r--r--
2026-08-07 02:04
storcli64
8.18
MB
-rwxr-xr-x
2026-07-26 08:56
Save
Rename
<!DOCTYPE html> <html lang="vi"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>checkdisk2 · Disk Fleet Dashboard</title> <style> :root{ --bg:#10131c; --panel:#171b28; --panel2:#1d2334; --line:#262d42; --txt:#e8ebf4; --dim:#8b93ad; --faint:#5a627e; --ok:#39d0c3; --warn:#ffb454; --crit:#ff5470; --err:#9aa0b5; --ok-bg:rgba(57,208,195,.10); --warn-bg:rgba(255,180,84,.12); --crit-bg:rgba(255,84,112,.12); --mono:ui-monospace,'Cascadia Code','JetBrains Mono',Menlo,Consolas,monospace; --sans:'Segoe UI',system-ui,-apple-system,Roboto,sans-serif; } *{box-sizing:border-box;margin:0;padding:0} html{scrollbar-color:#333c58 var(--bg)} body{background:var(--bg);color:var(--txt);font-family:var(--sans);font-size:14px;line-height:1.5;min-height:100vh} a{color:inherit} button{font:inherit;color:inherit;background:none;border:none;cursor:pointer} :focus-visible{outline:2px solid var(--ok);outline-offset:2px;border-radius:4px} /* ===== Topbar ===== */ .topbar{position:sticky;top:0;z-index:20;background:rgba(16,19,28,.92);backdrop-filter:blur(8px); border-bottom:1px solid var(--line);padding:14px 22px;display:flex;flex-wrap:wrap;gap:14px;align-items:center} .brand{display:flex;align-items:baseline;gap:10px} .brand h1{font-size:17px;font-weight:700;letter-spacing:.4px} .brand h1 em{font-style:normal;color:var(--ok)} .brand .gen{font-family:var(--mono);font-size:11px;color:var(--faint)} .spacer{flex:1} .search{background:var(--panel);border:1px solid var(--line);border-radius:8px;color:var(--txt); padding:7px 12px;font-family:var(--mono);font-size:12.5px;width:250px} .search::placeholder{color:var(--faint)} .fchip{padding:6px 13px;border-radius:20px;border:1px solid var(--line);font-size:12.5px;color:var(--dim)} .fchip.on{color:var(--txt);border-color:currentColor} .fchip.on.f-crit{color:var(--crit);background:var(--crit-bg)} .fchip.on.f-warn{color:var(--warn);background:var(--warn-bg)} .fchip.on.f-all{color:var(--ok);background:var(--ok-bg)} /* ===== Stats ===== */ .wrap{max-width:1280px;margin:0 auto;padding:22px} .stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:20px} .stat{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px} .stat .n{font-family:var(--mono);font-size:26px;font-weight:700;line-height:1.1} .stat .l{font-size:11.5px;color:var(--dim);text-transform:uppercase;letter-spacing:.8px;margin-top:3px} .stat.s-crit .n{color:var(--crit)} .stat.s-warn .n{color:var(--warn)} .stat.s-ok .n{color:var(--ok)} .stat.s-err .n{color:var(--err)} /* ===== Problem strip ===== */ .problems{background:linear-gradient(180deg,var(--panel2),var(--panel));border:1px solid var(--line); border-left:3px solid var(--crit);border-radius:12px;padding:14px 18px;margin-bottom:24px} .problems h2{font-size:12px;color:var(--dim);text-transform:uppercase;letter-spacing:1px;margin-bottom:10px} .pitem{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:baseline;padding:7px 10px;margin:0 -10px; border-radius:8px;width:calc(100% + 20px);text-align:left} .pitem:hover{background:rgba(255,255,255,.04)} .pitem .st{font-family:var(--mono);font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:4px} .st.CRITICAL{color:var(--crit);background:var(--crit-bg)} .st.WARNING{color:var(--warn);background:var(--warn-bg)} .st.OK{color:var(--ok);background:var(--ok-bg)} .pitem .h{font-family:var(--mono);font-weight:600} .pitem .d{font-family:var(--mono);color:var(--ok)} .pitem .w{color:var(--dim);font-size:12.5px} .allok{border-left-color:var(--ok);color:var(--dim)} .allok b{color:var(--ok)} /* ===== Server cards + drive bays (signature) ===== */ .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(380px,1fr));gap:16px} .server{background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden; transition:border-color .15s} .server:hover{border-color:#354063} .shead{display:flex;align-items:center;gap:10px;padding:13px 16px;border-bottom:1px solid var(--line); background:linear-gradient(180deg,var(--panel2),transparent)} .dot{width:9px;height:9px;border-radius:50%;flex:none} .dot.OK{background:var(--ok);box-shadow:0 0 8px var(--ok)} .dot.WARNING{background:var(--warn);box-shadow:0 0 8px var(--warn)} .dot.CRITICAL{background:var(--crit);box-shadow:0 0 9px var(--crit)} .shead .ip{font-family:var(--mono);font-size:14.5px;font-weight:700} .shead .meta{margin-left:auto;font-family:var(--mono);font-size:10.5px;color:var(--faint);text-align:right} .bays{display:flex;flex-wrap:wrap;gap:9px;padding:15px 16px} /* Mỗi ổ = 1 "khay" như mặt trước máy chủ */ .bay{width:104px;background:var(--panel2);border:1px solid var(--line);border-radius:8px; padding:9px 9px 7px;text-align:left;position:relative;transition:transform .12s,border-color .12s} .bay:hover{transform:translateY(-2px)} .bay.OK{border-bottom:3px solid var(--ok)} .bay.WARNING{border-bottom:3px solid var(--warn);background:linear-gradient(180deg,var(--panel2),rgba(255,180,84,.05))} .bay.CRITICAL{border-bottom:3px solid var(--crit);background:linear-gradient(180deg,var(--panel2),rgba(255,84,112,.07))} .bay .led{position:absolute;top:8px;right:8px;width:6px;height:6px;border-radius:50%} .bay.OK .led{background:var(--ok)} .bay.WARNING .led{background:var(--warn)} .bay.CRITICAL .led{background:var(--crit);animation:blink 1s steps(2,start) infinite} @keyframes blink{to{visibility:hidden}} @media (prefers-reduced-motion:reduce){.bay .led{animation:none!important}.bay:hover{transform:none}} .bay svg{width:20px;height:20px;display:block;margin-bottom:5px;color:var(--dim)} .bay.WARNING svg{color:var(--warn)} .bay.CRITICAL svg{color:var(--crit)} .bay .dv{font-family:var(--mono);font-size:12px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .bay .cap{font-family:var(--mono);font-size:10.5px;color:var(--dim)} .bay .mnt{font-family:var(--mono);font-size:10px;color:var(--faint);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px} .bay.hide{display:none} .server.hide{display:none} .host-errs{margin-top:22px;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--err); border-radius:12px;padding:14px 18px} .host-errs h2{font-size:12px;color:var(--dim);text-transform:uppercase;letter-spacing:1px;margin-bottom:8px} .host-errs div{font-family:var(--mono);font-size:12.5px;color:var(--dim);padding:3px 0} .host-errs b{color:var(--txt)} .empty{color:var(--faint);text-align:center;padding:60px 0;font-family:var(--mono)} /* ===== Modal ===== */ .overlay{position:fixed;inset:0;background:rgba(8,10,16,.72);backdrop-filter:blur(3px);z-index:50; display:none;align-items:flex-start;justify-content:center;padding:5vh 16px;overflow-y:auto} .overlay.open{display:flex} .modal{background:var(--panel);border:1px solid #313a58;border-radius:16px;max-width:860px;width:100%; box-shadow:0 24px 70px rgba(0,0,0,.55)} .mhead{display:flex;align-items:center;gap:12px;padding:16px 20px;border-bottom:1px solid var(--line)} .mhead svg{width:26px;height:26px;color:var(--dim);flex:none} .mhead .t{font-family:var(--mono);font-size:16px;font-weight:700} .mhead .s{font-family:var(--mono);font-size:11.5px;color:var(--dim)} .mclose{margin-left:auto;font-size:22px;color:var(--dim);padding:2px 10px;border-radius:8px} .mclose:hover{color:var(--txt);background:var(--panel2)} .mbody{padding:18px 20px 22px} .msec{margin-bottom:18px} .msec h3{font-size:11.5px;color:var(--dim);text-transform:uppercase;letter-spacing:1px;margin-bottom:9px; padding-bottom:5px;border-bottom:1px dashed var(--line)} .kv{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:6px 20px} .kv .row{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:3px 0} .kv .k{color:var(--dim)} .kv .v{font-family:var(--mono);text-align:right;word-break:break-all} .kv .v.bad{color:var(--crit);font-weight:700} .kv .v.warnv{color:var(--warn);font-weight:700} .wlist li{list-style:none;font-size:13px;color:var(--warn);padding:4px 0 4px 20px;position:relative} .wlist li::before{content:"⚠";position:absolute;left:0} .wlist li.crit{color:var(--crit)} details.raw{background:var(--bg);border:1px solid var(--line);border-radius:10px} details.raw summary{cursor:pointer;padding:10px 14px;font-family:var(--mono);font-size:12px;color:var(--dim)} details.raw pre{padding:0 14px 14px;font-family:var(--mono);font-size:11.5px;line-height:1.55; color:#b9c2dd;overflow-x:auto;max-height:420px;overflow-y:auto;white-space:pre-wrap;word-break:break-all} /* ===== Charts (lich su theo thoi gian) ===== */ .mchips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px} .mchip{padding:4px 11px;border-radius:14px;border:1px solid var(--line);font-family:var(--mono); font-size:11px;color:var(--dim)} .mchip:hover{border-color:#3a4568} .mchip.on{color:var(--ok);border-color:var(--ok);background:var(--ok-bg)} .chartbox{background:var(--bg);border:1px solid var(--line);border-radius:10px;padding:10px 8px 4px} .chartbox canvas{width:100%;height:220px;display:block} .chartnote{display:flex;gap:16px;flex-wrap:wrap;font-family:var(--mono);font-size:11px;color:var(--dim); padding:8px 6px 4px} .chartnote b{color:var(--txt)} .nohist{color:var(--faint);font-size:12.5px;padding:8px 2px} @media(max-width:640px){.grid{grid-template-columns:1fr}.search{width:100%}.topbar{padding:12px 14px}.wrap{padding:14px}} </style> </head> <body> <div class="topbar"> <div class="brand"> <h1>checkdisk<em>2</em> · Disk Fleet</h1> <span class="gen">build 2026-07-26 16:01:12</span> </div> <div class="spacer"></div> <input id="q" class="search" type="search" placeholder="tìm host / device / model / serial…" aria-label="Tìm kiếm"> <button class="fchip f-all on" data-f="ALL">Tất cả</button> <button class="fchip f-warn" data-f="WARNING">Warning</button> <button class="fchip f-crit" data-f="CRITICAL">Critical</button> </div> <div class="wrap"> <div class="stats" id="stats"></div> <div id="problems"></div> <div class="grid" id="grid"></div> <div id="hostErrs"></div> <div class="empty" id="empty" style="display:none">— không có ổ nào khớp bộ lọc —</div> </div> <div class="overlay" id="overlay" role="dialog" aria-modal="true"> <div class="modal" id="modal"></div> </div> <script> var DATA = {"generated_at": "2026-07-26 16:01:12", "totals": {"hosts": 1, "disks": 5, "critical": 0, "warning": 0, "ok": 5, "host_errors": 0}, "hosts": [{"host": "103.124.95.115", "file": "95.115.json", "updated_at": "2026-07-26 15:58", "counts": {"OK": 5, "WARNING": 0, "CRITICAL": 0}, "worst": "OK", "disks": [{"slot": "nvme0", "device_name": "/dev/nvme0n1", "mountpoints": [], "model_name": "SAMSUNG MZPLJ1T6HBJR-00007", "serial_number": "S55JNC0WA00008", "protocol": "NVMe", "type": "NVMe", "is_raid_member": false, "capacity_bytes": 1600321314816, "capacity_human": "1.60 TB", "temperature_c": 40, "power_on_hours": 9887, "smart_overall_passed": true, "health": {"critical_warning": 0, "percentage_used": 0, "available_spare": 100, "available_spare_threshold": 10, "media_errors": 0, "unsafe_shutdowns": 36, "num_err_log_entries": 0}, "warnings": [], "status": "OK", "smartctl_full": {"json_format_version": [1, 0], "smartctl": {"version": [7, 2], "svn_revision": "5155", "platform_info": "x86_64-linux-5.14.0-611.5.1.el9_7.x86_64", "build_info": "(local build)", "argv": ["smartctl", "-d", "nvme", "-a", "/dev/nvme0", "-j"], "exit_status": 0}, "device": {"name": "/dev/nvme0", "info_name": "/dev/nvme0", "type": "nvme", "protocol": "NVMe"}, "model_name": "SAMSUNG MZPLJ1T6HBJR-00007", "serial_number": "S55JNC0WA00008", "firmware_version": "EPK9GB5Q", "nvme_pci_vendor": {"id": 5197, "subsystem_id": 5197}, "nvme_ieee_oui_identifier": 9528, "nvme_total_capacity": 1600321314816, "nvme_unallocated_capacity": 0, "nvme_controller_id": 65, "nvme_version": {"string": "1.3", "value": 66304}, "nvme_number_of_namespaces": 32, "local_time": {"time_t": 1785056275, "asctime": "Sun Jul 26 15:57:55 2026 +07"}, "smart_status": {"passed": true, "nvme": {"value": 0}}, "nvme_smart_health_information_log": {"critical_warning": 0, "temperature": 40, "available_spare": 100, "available_spare_threshold": 10, "percentage_used": 0, "data_units_read": 628592347, "data_units_written": 121056477, "host_reads": 17905895427, "host_writes": 3032747820, "controller_busy_time": 4212, "power_cycles": 46, "power_on_hours": 9887, "unsafe_shutdowns": 36, "media_errors": 0, "num_err_log_entries": 0, "warning_temp_time": 0, "critical_comp_time": 0, "temperature_sensors": [40, 38, 38]}, "temperature": {"current": 40}, "power_cycle_count": 46, "power_on_time": {"hours": 9887}}, "history": [{"t": 1785056472, "temp": 40.0, "poh": 9887.0, "st": "OK", "h": {"critical_warning": 0, "percentage_used": 0, "available_spare": 100, "available_spare_threshold": 10, "media_errors": 0, "unsafe_shutdowns": 36, "num_err_log_entries": 0}}]}, {"slot": "nvme1", "device_name": "/dev/nvme1n1", "mountpoints": [], "model_name": "SAMSUNG MZPLJ1T6HBJR-00007", "serial_number": "S55JNC0WA00882", "protocol": "NVMe", "type": "NVMe", "is_raid_member": false, "capacity_bytes": 1600321314816, "capacity_human": "1.60 TB", "temperature_c": 47, "power_on_hours": 9887, "smart_overall_passed": true, "health": {"critical_warning": 0, "percentage_used": 0, "available_spare": 100, "available_spare_threshold": 10, "media_errors": 0, "unsafe_shutdowns": 36, "num_err_log_entries": 0}, "warnings": [], "status": "OK", "smartctl_full": {"json_format_version": [1, 0], "smartctl": {"version": [7, 2], "svn_revision": "5155", "platform_info": "x86_64-linux-5.14.0-611.5.1.el9_7.x86_64", "build_info": "(local build)", "argv": ["smartctl", "-d", "nvme", "-a", "/dev/nvme1", "-j"], "exit_status": 0}, "device": {"name": "/dev/nvme1", "info_name": "/dev/nvme1", "type": "nvme", "protocol": "NVMe"}, "model_name": "SAMSUNG MZPLJ1T6HBJR-00007", "serial_number": "S55JNC0WA00882", "firmware_version": "EPK9GB5Q", "nvme_pci_vendor": {"id": 5197, "subsystem_id": 5197}, "nvme_ieee_oui_identifier": 9528, "nvme_total_capacity": 1600321314816, "nvme_unallocated_capacity": 0, "nvme_controller_id": 65, "nvme_version": {"string": "1.3", "value": 66304}, "nvme_number_of_namespaces": 32, "local_time": {"time_t": 1785056275, "asctime": "Sun Jul 26 15:57:55 2026 +07"}, "smart_status": {"passed": true, "nvme": {"value": 0}}, "nvme_smart_health_information_log": {"critical_warning": 0, "temperature": 47, "available_spare": 100, "available_spare_threshold": 10, "percentage_used": 0, "data_units_read": 135866290, "data_units_written": 39986665, "host_reads": 701586085, "host_writes": 944403361, "controller_busy_time": 208, "power_cycles": 46, "power_on_hours": 9887, "unsafe_shutdowns": 36, "media_errors": 0, "num_err_log_entries": 0, "warning_temp_time": 0, "critical_comp_time": 0, "temperature_sensors": [47, 44, 45]}, "temperature": {"current": 47}, "power_cycle_count": 46, "power_on_time": {"hours": 9887}}, "history": [{"t": 1785056472, "temp": 47.0, "poh": 9887.0, "st": "OK", "h": {"critical_warning": 0, "percentage_used": 0, "available_spare": 100, "available_spare_threshold": 10, "media_errors": 0, "unsafe_shutdowns": 36, "num_err_log_entries": 0}}]}, {"slot": "0", "device_name": "/dev/sda", "mountpoints": ["/boot", "/boot/efi"], "model_name": "SAMSUNG MZ7L3480HCHQ-00A07", "serial_number": "S725NS0Y703784K", "protocol": "ATA/SATA", "type": "SSD", "is_raid_member": true, "capacity_bytes": 480103981056, "capacity_human": "480.1 GB", "temperature_c": 34, "power_on_hours": 2135, "smart_overall_passed": true, "health": {"reallocated_sector_ct": 0, "current_pending_sector": 0, "offline_uncorrectable": null, "udma_crc_error_count": 0, "wear_leveling_count": 23, "ssd_life_left_pct": null}, "warnings": [], "status": "OK", "smartctl_full": {"json_format_version": [1, 0], "smartctl": {"version": [7, 2], "svn_revision": "5155", "platform_info": "x86_64-linux-5.14.0-611.5.1.el9_7.x86_64", "build_info": "(local build)", "argv": ["smartctl", "-d", "megaraid,0", "-a", "/dev/bus/0", "-j"], "messages": [{"string": "Warning: This result is based on an Attribute check.", "severity": "warning"}], "exit_status": 4}, "device": {"name": "/dev/bus/0", "info_name": "/dev/bus/0 [megaraid_disk_00] [SAT]", "type": "sat+megaraid,0", "protocol": "ATA"}, "model_family": "Samsung based SSDs", "model_name": "SAMSUNG MZ7L3480HCHQ-00A07", "serial_number": "S725NS0Y703784K", "wwn": {"naa": 5, "oui": 9528, "id": 65321077440}, "firmware_version": "JXTC604Q", "user_capacity": {"blocks": 937703088, "bytes": 480103981056}, "logical_block_size": 512, "physical_block_size": 4096, "rotation_rate": 0, "form_factor": {"ata_value": 3, "name": "2.5 inches"}, "trim": {"supported": true, "deterministic": true, "zeroed": true}, "in_smartctl_database": true, "ata_version": {"string": "ACS-4 T13/BSR INCITS 529 revision 5", "major_value": 4092, "minor_value": 94}, "sata_version": {"string": "SATA 3.2", "value": 255}, "interface_speed": {"max": {"sata_value": 14, "string": "6.0 Gb/s", "units_per_second": 60, "bits_per_unit": 100000000}, "current": {"sata_value": 3, "string": "6.0 Gb/s", "units_per_second": 60, "bits_per_unit": 100000000}}, "local_time": {"time_t": 1785056273, "asctime": "Sun Jul 26 15:57:53 2026 +07"}, "smart_status": {"passed": true}, "ata_smart_data": {"offline_data_collection": {"status": {"value": 0, "string": "was never started"}, "completion_seconds": 0}, "self_test": {"status": {"value": 0, "string": "completed without error", "passed": true}, "polling_minutes": {"short": 2, "extended": 35}}, "capabilities": {"values": [83, 3], "exec_offline_immediate_supported": true, "offline_is_aborted_upon_new_cmd": false, "offline_surface_scan_supported": false, "self_tests_supported": true, "conveyance_self_test_supported": false, "selective_self_test_supported": true, "attribute_autosave_enabled": true, "error_logging_supported": true, "gp_logging_supported": true}}, "ata_sct_capabilities": {"value": 61, "error_recovery_control_supported": true, "feature_control_supported": true, "data_table_supported": true}, "ata_smart_attributes": {"revision": 1, "table": [{"id": 5, "name": "Reallocated_Sector_Ct", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 51, "string": "PO--CK ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 9, "name": "Power_On_Hours", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 2135, "string": "2135"}}, {"id": 12, "name": "Power_Cycle_Count", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 33, "string": "33"}}, {"id": 177, "name": "Wear_Leveling_Count", "value": 99, "worst": 99, "thresh": 5, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 23, "string": "23"}}, {"id": 179, "name": "Used_Rsvd_Blk_Cnt_Tot", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 0, "string": "0"}}, {"id": 180, "name": "Unused_Rsvd_Blk_Cnt_Tot", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 438, "string": "438"}}, {"id": 181, "name": "Program_Fail_Cnt_Total", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 182, "name": "Erase_Fail_Count_Total", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 183, "name": "Runtime_Bad_Block", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 0, "string": "0"}}, {"id": 184, "name": "End-to-End_Error", "value": 100, "worst": 100, "thresh": 97, "when_failed": "", "flags": {"value": 51, "string": "PO--CK ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 187, "name": "Uncorrectable_Error_Cnt", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 190, "name": "Airflow_Temperature_Cel", "value": 66, "worst": 55, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 34, "string": "34"}}, {"id": 194, "name": "Temperature_Celsius", "value": 66, "worst": 55, "thresh": 0, "when_failed": "", "flags": {"value": 34, "string": "-O---K ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": false, "auto_keep": true}, "raw": {"value": 193275166754, "string": "34 (Min/Max 25/45)"}}, {"id": 195, "name": "ECC_Error_Rate", "value": 200, "worst": 200, "thresh": 0, "when_failed": "", "flags": {"value": 26, "string": "-O-RC- ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": true, "event_count": true, "auto_keep": false}, "raw": {"value": 0, "string": "0"}}, {"id": 197, "name": "Current_Pending_Sector", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 199, "name": "CRC_Error_Count", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 62, "string": "-OSRCK ", "prefailure": false, "updated_online": true, "performance": true, "error_rate": true, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 202, "name": "Exception_Mode_Status", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 51, "string": "PO--CK ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 235, "name": "POR_Recovery_Count", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 18, "string": "-O--C- ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 28, "string": "28"}}, {"id": 241, "name": "Total_LBAs_Written", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 1240246915, "string": "1240246915"}}, {"id": 242, "name": "Total_LBAs_Read", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 1243501005, "string": "1243501005"}}, {"id": 243, "name": "SATA_Downshift_Ct", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 244, "name": "Thermal_Throttle_St", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 245, "name": "Timed_Workld_Media_Wear", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 65535, "string": "65535"}}, {"id": 246, "name": "Timed_Workld_RdWr_Ratio", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 65535, "string": "65535"}}, {"id": 247, "name": "Timed_Workld_Timer", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 65535, "string": "65535"}}, {"id": 251, "name": "NAND_Writes", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 1486885120, "string": "1486885120"}}]}, "power_on_time": {"hours": 2135}, "power_cycle_count": 33, "temperature": {"current": 34}, "ata_smart_error_log": {"summary": {"revision": 1, "count": 0}}, "ata_smart_self_test_log": {"standard": {"revision": 1, "count": 0}}, "ata_smart_selective_self_test_log": {"revision": 1, "table": [{"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}], "current_read_scan": {"lba_min": 0, "lba_max": 65535, "status": {"value": 0, "string": "was never started"}}, "flags": {"value": 0, "remainder_scan_enabled": false}, "power_up_scan_resume_minutes": 0}}, "history": [{"t": 1785056472, "temp": 34.0, "poh": 2135.0, "st": "OK", "h": {"reallocated_sector_ct": 0, "current_pending_sector": 0, "offline_uncorrectable": null, "udma_crc_error_count": 0, "wear_leveling_count": 23, "ssd_life_left_pct": null}}]}, {"slot": "1", "device_name": "/dev/sda", "mountpoints": ["/boot", "/boot/efi"], "model_name": "SAMSUNG MZ7L3480HCHQ-00A07", "serial_number": "S725NS0Y703813V", "protocol": "ATA/SATA", "type": "SSD", "is_raid_member": true, "capacity_bytes": 480103981056, "capacity_human": "480.1 GB", "temperature_c": 34, "power_on_hours": 2135, "smart_overall_passed": true, "health": {"reallocated_sector_ct": 0, "current_pending_sector": 0, "offline_uncorrectable": null, "udma_crc_error_count": 0, "wear_leveling_count": 23, "ssd_life_left_pct": null}, "warnings": [], "status": "OK", "smartctl_full": {"json_format_version": [1, 0], "smartctl": {"version": [7, 2], "svn_revision": "5155", "platform_info": "x86_64-linux-5.14.0-611.5.1.el9_7.x86_64", "build_info": "(local build)", "argv": ["smartctl", "-d", "megaraid,1", "-a", "/dev/bus/0", "-j"], "messages": [{"string": "Warning: This result is based on an Attribute check.", "severity": "warning"}], "exit_status": 4}, "device": {"name": "/dev/bus/0", "info_name": "/dev/bus/0 [megaraid_disk_01] [SAT]", "type": "sat+megaraid,1", "protocol": "ATA"}, "model_family": "Samsung based SSDs", "model_name": "SAMSUNG MZ7L3480HCHQ-00A07", "serial_number": "S725NS0Y703813V", "wwn": {"naa": 5, "oui": 9528, "id": 65321077469}, "firmware_version": "JXTC604Q", "user_capacity": {"blocks": 937703088, "bytes": 480103981056}, "logical_block_size": 512, "physical_block_size": 4096, "rotation_rate": 0, "form_factor": {"ata_value": 3, "name": "2.5 inches"}, "trim": {"supported": true, "deterministic": true, "zeroed": true}, "in_smartctl_database": true, "ata_version": {"string": "ACS-4 T13/BSR INCITS 529 revision 5", "major_value": 4092, "minor_value": 94}, "sata_version": {"string": "SATA 3.2", "value": 255}, "interface_speed": {"max": {"sata_value": 14, "string": "6.0 Gb/s", "units_per_second": 60, "bits_per_unit": 100000000}, "current": {"sata_value": 3, "string": "6.0 Gb/s", "units_per_second": 60, "bits_per_unit": 100000000}}, "local_time": {"time_t": 1785056273, "asctime": "Sun Jul 26 15:57:53 2026 +07"}, "smart_status": {"passed": true}, "ata_smart_data": {"offline_data_collection": {"status": {"value": 0, "string": "was never started"}, "completion_seconds": 0}, "self_test": {"status": {"value": 0, "string": "completed without error", "passed": true}, "polling_minutes": {"short": 2, "extended": 35}}, "capabilities": {"values": [83, 3], "exec_offline_immediate_supported": true, "offline_is_aborted_upon_new_cmd": false, "offline_surface_scan_supported": false, "self_tests_supported": true, "conveyance_self_test_supported": false, "selective_self_test_supported": true, "attribute_autosave_enabled": true, "error_logging_supported": true, "gp_logging_supported": true}}, "ata_sct_capabilities": {"value": 61, "error_recovery_control_supported": true, "feature_control_supported": true, "data_table_supported": true}, "ata_smart_attributes": {"revision": 1, "table": [{"id": 5, "name": "Reallocated_Sector_Ct", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 51, "string": "PO--CK ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 9, "name": "Power_On_Hours", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 2135, "string": "2135"}}, {"id": 12, "name": "Power_Cycle_Count", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 33, "string": "33"}}, {"id": 177, "name": "Wear_Leveling_Count", "value": 99, "worst": 99, "thresh": 5, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 23, "string": "23"}}, {"id": 179, "name": "Used_Rsvd_Blk_Cnt_Tot", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 0, "string": "0"}}, {"id": 180, "name": "Unused_Rsvd_Blk_Cnt_Tot", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 436, "string": "436"}}, {"id": 181, "name": "Program_Fail_Cnt_Total", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 182, "name": "Erase_Fail_Count_Total", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 183, "name": "Runtime_Bad_Block", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 19, "string": "PO--C- ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 0, "string": "0"}}, {"id": 184, "name": "End-to-End_Error", "value": 100, "worst": 100, "thresh": 97, "when_failed": "", "flags": {"value": 51, "string": "PO--CK ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 187, "name": "Uncorrectable_Error_Cnt", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 190, "name": "Airflow_Temperature_Cel", "value": 66, "worst": 59, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 34, "string": "34"}}, {"id": 194, "name": "Temperature_Celsius", "value": 66, "worst": 59, "thresh": 0, "when_failed": "", "flags": {"value": 34, "string": "-O---K ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": false, "auto_keep": true}, "raw": {"value": 176095297570, "string": "34 (Min/Max 25/41)"}}, {"id": 195, "name": "ECC_Error_Rate", "value": 200, "worst": 200, "thresh": 0, "when_failed": "", "flags": {"value": 26, "string": "-O-RC- ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": true, "event_count": true, "auto_keep": false}, "raw": {"value": 0, "string": "0"}}, {"id": 197, "name": "Current_Pending_Sector", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 199, "name": "CRC_Error_Count", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 62, "string": "-OSRCK ", "prefailure": false, "updated_online": true, "performance": true, "error_rate": true, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 202, "name": "Exception_Mode_Status", "value": 100, "worst": 100, "thresh": 10, "when_failed": "", "flags": {"value": 51, "string": "PO--CK ", "prefailure": true, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 235, "name": "POR_Recovery_Count", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 18, "string": "-O--C- ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": false}, "raw": {"value": 28, "string": "28"}}, {"id": 241, "name": "Total_LBAs_Written", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 1241641088, "string": "1241641088"}}, {"id": 242, "name": "Total_LBAs_Read", "value": 99, "worst": 99, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 1248675555, "string": "1248675555"}}, {"id": 243, "name": "SATA_Downshift_Ct", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 244, "name": "Thermal_Throttle_St", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 0, "string": "0"}}, {"id": 245, "name": "Timed_Workld_Media_Wear", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 65535, "string": "65535"}}, {"id": 246, "name": "Timed_Workld_RdWr_Ratio", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 65535, "string": "65535"}}, {"id": 247, "name": "Timed_Workld_Timer", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 65535, "string": "65535"}}, {"id": 251, "name": "NAND_Writes", "value": 100, "worst": 100, "thresh": 0, "when_failed": "", "flags": {"value": 50, "string": "-O--CK ", "prefailure": false, "updated_online": true, "performance": false, "error_rate": false, "event_count": true, "auto_keep": true}, "raw": {"value": 1487884608, "string": "1487884608"}}]}, "power_on_time": {"hours": 2135}, "power_cycle_count": 33, "temperature": {"current": 34}, "ata_smart_error_log": {"summary": {"revision": 1, "count": 0}}, "ata_smart_self_test_log": {"standard": {"revision": 1, "count": 0}}, "ata_smart_selective_self_test_log": {"revision": 1, "table": [{"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}, {"lba_min": 0, "lba_max": 0, "status": {"value": 0, "string": "Not_testing"}}], "current_read_scan": {"lba_min": 0, "lba_max": 65535, "status": {"value": 0, "string": "was never started"}}, "flags": {"value": 0, "remainder_scan_enabled": false}, "power_up_scan_resume_minutes": 0}}, "history": [{"t": 1785056472, "temp": 34.0, "poh": 2135.0, "st": "OK", "h": {"reallocated_sector_ct": 0, "current_pending_sector": 0, "offline_uncorrectable": null, "udma_crc_error_count": 0, "wear_leveling_count": 23, "ssd_life_left_pct": null}}]}, {"slot": "2", "device_name": "/dev/sdb", "mountpoints": ["/backup"], "model_name": "SEAGATE ST2400MM0129", "serial_number": "WBM9C3DH0000K44513PW", "protocol": "SCSI/SAS", "type": "HDD", "is_raid_member": true, "capacity_bytes": 2400476553216, "capacity_human": "2.40 TB", "temperature_c": 30, "power_on_hours": 2138, "smart_overall_passed": true, "health": {"grown_defect_list": 0, "uncorrected_errors_read": 0, "uncorrected_errors_write": 0, "uncorrected_errors_verify": 0, "uncorrected_errors_total": 0, "non_medium_error_count": null}, "warnings": [], "status": "OK", "smartctl_full": {"json_format_version": [1, 0], "smartctl": {"version": [7, 2], "svn_revision": "5155", "platform_info": "x86_64-linux-5.14.0-611.5.1.el9_7.x86_64", "build_info": "(local build)", "argv": ["smartctl", "-d", "megaraid,2", "-a", "/dev/bus/0", "-j"], "exit_status": 0}, "device": {"name": "/dev/bus/0", "info_name": "/dev/bus/0 [megaraid_disk_02]", "type": "megaraid,2", "protocol": "SCSI"}, "vendor": "SEAGATE", "product": "ST2400MM0129", "model_name": "SEAGATE ST2400MM0129", "revision": "CCA8", "scsi_version": "SPC-4", "user_capacity": {"blocks": 4688430768, "bytes": 2400476553216}, "logical_block_size": 512, "physical_block_size": 4096, "rotation_rate": 10500, "form_factor": {"scsi_value": 3, "name": "2.5 inches"}, "serial_number": "WBM9C3DH0000K44513PW", "device_type": {"scsi_value": 0, "name": "disk"}, "local_time": {"time_t": 1785056273, "asctime": "Sun Jul 26 15:57:53 2026 +07"}, "smart_status": {"passed": true}, "temperature": {"current": 30, "drive_trip": 60}, "power_on_time": {"hours": 2138, "minutes": 22}, "scsi_grown_defect_list": 0, "scsi_error_counter_log": {"read": {"errors_corrected_by_eccfast": 480021271, "errors_corrected_by_eccdelayed": 0, "errors_corrected_by_rereads_rewrites": 0, "total_errors_corrected": 480021271, "correction_algorithm_invocations": 0, "gigabytes_processed": "1966.763", "total_uncorrected_errors": 0}, "write": {"errors_corrected_by_eccfast": 0, "errors_corrected_by_eccdelayed": 0, "errors_corrected_by_rereads_rewrites": 0, "total_errors_corrected": 0, "correction_algorithm_invocations": 0, "gigabytes_processed": "2107.970", "total_uncorrected_errors": 0}, "verify": {"errors_corrected_by_eccfast": 581263, "errors_corrected_by_eccdelayed": 0, "errors_corrected_by_rereads_rewrites": 0, "total_errors_corrected": 581263, "correction_algorithm_invocations": 0, "gigabytes_processed": "2.379", "total_uncorrected_errors": 0}}}, "history": [{"t": 1785056472, "temp": 30.0, "poh": 2138.0, "st": "OK", "h": {"grown_defect_list": 0, "uncorrected_errors_read": 0, "uncorrected_errors_write": 0, "uncorrected_errors_verify": 0, "uncorrected_errors_total": 0, "non_medium_error_count": null}}]}]}], "host_errors": [], "problems": []}; /* ---------- icons: HDD / SSD / NVMe ---------- */ var ICONS = { HDD: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"><circle cx="12" cy="12" r="9"/><circle cx="12" cy="12" r="3.2"/><path d="M12 8.8V3.2M17.6 17.4l3 3"/></svg>', SSD: '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"><rect x="3.5" y="6" width="17" height="12" rx="2"/><path d="M7 18v2.5M12 18v2.5M17 18v2.5M7 9.5h6M7 12.5h10"/></svg>', NVMe:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"><rect x="2.5" y="8" width="19" height="8" rx="1.5"/><path d="M5.5 16v2M8.5 16v2M11.5 16v2M14.5 16v2M17.5 16v2"/><path d="M13 10l-2.2 2.2h2.6L11 14.6" stroke-width="1.4"/></svg>' }; function iconFor(d){ return ICONS[d.type] || ICONS.HDD; } function esc(s){ return String(s==null?'—':s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); } /* ---------- stats ---------- */ (function(){ var t = DATA.totals; var el = document.getElementById('stats'); var cells = [ ['s-plain', t.hosts, 'Server'], ['s-plain', t.disks, 'Tổng ổ đĩa'], ['s-crit', t.critical,'Critical'], ['s-warn', t.warning, 'Warning'], ['s-ok', t.ok, 'Khoẻ mạnh'], ['s-err', t.host_errors, 'Node lỗi thu thập'] ]; el.innerHTML = cells.map(function(c){ return '<div class="stat '+c[0]+'"><div class="n">'+c[1]+'</div><div class="l">'+c[2]+'</div></div>'; }).join(''); })(); /* ---------- problem strip ---------- */ (function(){ var el = document.getElementById('problems'); if (!DATA.problems.length){ el.innerHTML = '<div class="problems allok"><b>✓ Toàn bộ ổ đĩa khoẻ mạnh.</b> Không có cảnh báo nào trên '+DATA.totals.hosts+' server.</div>'; return; } var rows = DATA.problems.map(function(p, i){ return '<button class="pitem" data-open="'+esc(p.host)+'|'+esc(p.serial)+'">' + '<span class="st '+p.status+'">'+p.status+'</span>' + '<span class="h">'+esc(p.host)+'</span>' + '<span class="d">'+esc(p.device)+'</span>' + '<span class="w">'+esc(p.model)+' · '+esc((p.mounts||[]).join(', ')||'không mount')+' — '+esc(p.warnings.join('; '))+'</span>' + '</button>'; }).join(''); el.innerHTML = '<div class="problems"><h2>⚠ Cần chú ý — '+DATA.problems.length+' ổ có vấn đề</h2>'+rows+'</div>'; })(); /* ---------- server grid ---------- */ (function(){ var g = document.getElementById('grid'); g.innerHTML = DATA.hosts.map(function(h, hi){ var bays = h.disks.map(function(d, di){ var mounts = (d.mountpoints||[]).join(','); var hay = [h.host, d.device_name, d.model_name, d.serial_number, mounts, d.slot].join(' ').toLowerCase(); return '<button class="bay '+(d.status||'OK')+'" data-h="'+hi+'" data-d="'+di+'" data-st="'+(d.status||'OK')+'"' + ' data-hay="'+esc(hay)+'" title="'+esc(d.model_name)+'">' + '<span class="led"></span>' + iconFor(d) + '<div class="dv">'+esc(d.device_name || ('slot '+d.slot))+'</div>' + '<div class="cap">'+esc(d.capacity_human || '—')+' · '+esc(d.type||'?')+'</div>' + '<div class="mnt">'+esc(mounts || '· không mount')+'</div>' + '</button>'; }).join(''); var c = h.counts; return '<div class="server" data-worst="'+h.worst+'">' + '<div class="shead"><span class="dot '+h.worst+'"></span>' + '<span class="ip">'+esc(h.host)+'</span>' + '<span class="meta">'+h.disks.length+' ổ · '+(c.CRITICAL?c.CRITICAL+' crit · ':'')+(c.WARNING?c.WARNING+' warn':'ok') + (h.updated_at?'<br>cập nhật '+h.updated_at:'')+'</span></div>' + '<div class="bays">'+bays+'</div></div>'; }).join(''); })(); /* ---------- host errors ---------- */ (function(){ if (!DATA.host_errors.length) return; document.getElementById('hostErrs').innerHTML = '<div class="host-errs"><h2>⛔ Node không thu thập được dữ liệu</h2>' + DATA.host_errors.map(function(e){ return '<div><b>'+esc(e.host)+'</b> — '+esc(e.reason)+'</div>'; }).join('') + '</div>'; })(); /* ---------- modal ---------- */ var overlay = document.getElementById('overlay'), modal = document.getElementById('modal'); function kvRow(k, v, cls){ return '<div class="row"><span class="k">'+esc(k)+'</span><span class="v '+(cls||'')+'">'+esc(v)+'</span></div>'; } function openDisk(h, d){ var warnKeys = {}; (d.warnings||[]).forEach(function(w){ var m = w.match(/^([a-z_]+)/); if(m) warnKeys[m[1]] = 1; }); var basic = '' + kvRow('Server', h.host) + kvRow('Device', d.device_name) + kvRow('Slot', d.slot) + kvRow('Mountpoints', (d.mountpoints||[]).join(', ') || '—') + kvRow('Model', d.model_name) + kvRow('Serial', d.serial_number) + kvRow('Loại', (d.protocol||'')+' / '+(d.type||'')) + kvRow('Dung lượng', d.capacity_human) + kvRow('Nhiệt độ', d.temperature_c!=null ? d.temperature_c+' °C' : '—', (d.temperature_c>=60?'warnv':'')) + kvRow('Power-on hours', d.power_on_hours!=null ? Number(d.power_on_hours).toLocaleString()+' h (~'+(d.power_on_hours/8760).toFixed(1)+' năm)' : '—') + kvRow('RAID member', d.is_raid_member ? 'có' : 'không') + kvRow('SMART overall', d.smart_overall_passed===true?'PASSED':(d.smart_overall_passed===false?'FAILED':'—'), d.smart_overall_passed===false?'bad':''); var health = Object.keys(d.health||{}).map(function(k){ var v = d.health[k]; var cls = warnKeys[k] ? (d.status==='CRITICAL'?'bad':'warnv') : ''; return kvRow(k, v===null?'—':v, cls); }).join('') || '<div class="row"><span class="k">—</span></div>'; var warns = (d.warnings&&d.warnings.length) ? '<ul class="wlist">'+d.warnings.map(function(w){ return '<li class="'+(d.status==='CRITICAL'?'crit':'')+'">'+esc(w)+'</li>'; }).join('')+'</ul>' : '<div style="color:var(--ok);font-size:13px">✓ Không có cảnh báo</div>'; var raw = d.smartctl_full ? '<details class="raw"><summary>▸ Full smartctl JSON'+(d.smartctl_parse_mode?' (parse từ text — smartctl cũ)':'')+'</summary><pre>'+esc(JSON.stringify(d.smartctl_full,null,2))+'</pre></details>' : '<div style="color:var(--faint);font-size:12.5px">Không có dữ liệu full trong file JSON của node này.</div>'; var rawTxt = d.smartctl_text_raw ? '<details class="raw" style="margin-top:8px"><summary>▸ Nguyên văn output smartctl (text)</summary><pre>'+esc(d.smartctl_text_raw)+'</pre></details>' : ''; /* ----- Bieu do lich su ----- */ var chartSec; var hist = d.history || []; if (hist.length >= 2) { var metrics = chartMetrics(d); chartSec = '<div class="msec"><h3>Biểu đồ theo thời gian · '+hist.length+' lần đo</h3>' + '<div class="mchips">' + metrics.map(function(m,i){ return '<button class="mchip'+(i===0?' on':'')+'" data-m="'+m[0]+'">'+esc(m[1])+'</button>'; }).join('') + '</div><div class="chartbox"><canvas id="chart"></canvas>' + '<div class="chartnote" id="chartnote"></div></div></div>'; } else { chartSec = '<div class="msec"><h3>Biểu đồ theo thời gian</h3>' + '<div class="nohist">Chưa đủ dữ liệu lịch sử (cần ≥ 2 lần build có SQLite). Hiện có: '+hist.length+' điểm.</div></div>'; } modal.innerHTML = '' + '<div class="mhead">'+iconFor(d) + '<div><div class="t">'+esc(d.device_name||('slot '+d.slot))+' <span class="st '+(d.status||'OK')+'">'+(d.status||'OK')+'</span></div>' + '<div class="s">'+esc(h.host)+' · '+esc(d.model_name)+'</div></div>' + '<button class="mclose" aria-label="Đóng" onclick="closeModal()">×</button></div>' + '<div class="mbody">' + '<div class="msec"><h3>Thông tin cơ bản</h3><div class="kv">'+basic+'</div></div>' + '<div class="msec"><h3>Chỉ số sức khoẻ ('+esc(d.protocol||'')+')</h3><div class="kv">'+health+'</div></div>' + chartSec + '<div class="msec"><h3>Cảnh báo</h3>'+warns+'</div>' + '<div class="msec"><h3>Dữ liệu gốc</h3>'+raw+rawTxt+'</div>' + '</div>'; overlay.classList.add('open'); document.body.style.overflow='hidden'; if (hist.length >= 2) { var curMetric = chartMetrics(d)[0][0]; drawMetric(d, curMetric); modal.querySelectorAll('.mchip').forEach(function(c){ c.addEventListener('click', function(){ modal.querySelectorAll('.mchip').forEach(function(x){ x.classList.remove('on'); }); c.classList.add('on'); drawMetric(d, c.dataset.m); }); }); } } /* ---------- chart engine (canvas thuan, khong CDN) ---------- */ var METRIC_LABELS = { temperature:'Nhiệt độ (°C)', power_on_hours:'Power-on hours', reallocated_sector_ct:'Reallocated sectors', current_pending_sector:'Pending sectors', offline_uncorrectable:'Offline uncorrectable', udma_crc_error_count:'UDMA CRC errors', wear_leveling_count:'Wear leveling', ssd_life_left_pct:'SSD life left (%)', spin_retry_count:'Spin retry', reported_uncorrect:'Reported uncorrect', grown_defect_list:'Grown defects', uncorrected_errors_total:'Uncorrected errors (total)', uncorrected_errors_read:'Uncorrected read', uncorrected_errors_write:'Uncorrected write', non_medium_error_count:'Non-medium errors', percentage_used:'% tuổi thọ đã dùng', available_spare:'Available spare (%)', media_errors:'Media errors', unsafe_shutdowns:'Unsafe shutdowns', num_err_log_entries:'Error log entries', critical_warning:'Critical warning' }; function metricSeries(d, key){ return (d.history||[]).map(function(s){ var v = key==='temperature' ? s.temp : (key==='power_on_hours' ? s.poh : (s.h||{})[key]); return {t:s.t, v:(typeof v==='number' && isFinite(v)) ? v : null}; }).filter(function(p){ return p.v !== null; }); } function chartMetrics(d){ var keys = ['temperature']; var seen = {}; (d.history||[]).forEach(function(s){ Object.keys(s.h||{}).forEach(function(k){ seen[k]=1; }); }); Object.keys(seen).forEach(function(k){ keys.push(k); }); keys.push('power_on_hours'); // Chi giu metric thuc su co so lieu return keys.filter(function(k){ return metricSeries(d,k).length >= 2; }) .map(function(k){ return [k, METRIC_LABELS[k]||k]; }); } function fmtDate(ts){ var x=new Date(ts*1000); return (x.getDate())+'/'+(x.getMonth()+1); } function fmtDateFull(ts){ var x=new Date(ts*1000); return x.getDate()+'/'+(x.getMonth()+1)+' '+String(x.getHours()).padStart(2,'0')+':'+String(x.getMinutes()).padStart(2,'0'); } function drawMetric(d, key){ var pts = metricSeries(d, key); var cv = document.getElementById('chart'); if (!cv) return; var dpr = window.devicePixelRatio || 1; var W = cv.clientWidth, H = 220; cv.width = W*dpr; cv.height = H*dpr; var ctx = cv.getContext('2d'); ctx.scale(dpr, dpr); ctx.clearRect(0,0,W,H); var css = getComputedStyle(document.documentElement); var C_LINE = css.getPropertyValue('--ok').trim(), C_GRID = 'rgba(139,147,173,.15)', C_TXT = css.getPropertyValue('--dim').trim(), C_WARN = css.getPropertyValue('--warn').trim(), C_CRIT = css.getPropertyValue('--crit').trim(); // Metric loi (counter): tang = xau -> to mau duong theo trang thai cuoi var isCounter = ['reallocated_sector_ct','current_pending_sector','offline_uncorrectable','udma_crc_error_count', 'grown_defect_list','uncorrected_errors_total','uncorrected_errors_read','uncorrected_errors_write', 'media_errors','spin_retry_count','reported_uncorrect','critical_warning','unsafe_shutdowns'].indexOf(key)!==-1; var last = pts[pts.length-1].v, first = pts[0].v; var rising = last > first; if (isCounter && rising) C_LINE = (last>0 ? C_CRIT : C_WARN); else if (isCounter && last>0) C_LINE = C_WARN; var vmin = Infinity, vmax = -Infinity, tmin = pts[0].t, tmax = pts[pts.length-1].t; pts.forEach(function(p){ if(p.v<vmin)vmin=p.v; if(p.v>vmax)vmax=p.v; }); if (vmin===vmax){ vmin -= 1; vmax += 1; } var pad = (vmax-vmin)*0.12; vmin -= pad; vmax += pad; if (isCounter && vmin < 0) vmin = 0; var L=52, R=14, T=12, B=24; function X(t){ return L + (t-tmin)/(tmax-tmin||1)*(W-L-R); } function Y(v){ return T + (1-(v-vmin)/(vmax-vmin))*(H-T-B); } // Grid + nhan truc Y ctx.font = '10.5px ui-monospace,Menlo,monospace'; ctx.fillStyle = C_TXT; for (var i=0;i<=4;i++){ var v = vmin + (vmax-vmin)*i/4, y = Y(v); ctx.strokeStyle = C_GRID; ctx.beginPath(); ctx.moveTo(L,y); ctx.lineTo(W-R,y); ctx.stroke(); ctx.textAlign='right'; ctx.fillText(v>=1000? (v/1000).toFixed(1)+'k' : (Math.round(v*10)/10), L-7, y+3.5); } // Nhan truc X: dau / giua / cuoi ctx.textAlign='center'; [tmin, (tmin+tmax)/2, tmax].forEach(function(t){ ctx.fillText(fmtDate(t), X(t), H-8); }); // Area gradient var grad = ctx.createLinearGradient(0,T,0,H-B); grad.addColorStop(0, C_LINE.replace(')',',.22)').replace('rgb','rgba').replace('#','#')); try { grad.addColorStop(0, hexA(C_LINE,.20)); grad.addColorStop(1, hexA(C_LINE,0)); } catch(e){} ctx.beginPath(); pts.forEach(function(p,i){ i? ctx.lineTo(X(p.t),Y(p.v)) : ctx.moveTo(X(p.t),Y(p.v)); }); ctx.lineTo(X(tmax),H-B); ctx.lineTo(X(tmin),H-B); ctx.closePath(); ctx.fillStyle = grad; ctx.fill(); // Line ctx.beginPath(); pts.forEach(function(p,i){ i? ctx.lineTo(X(p.t),Y(p.v)) : ctx.moveTo(X(p.t),Y(p.v)); }); ctx.strokeStyle = C_LINE; ctx.lineWidth = 2; ctx.lineJoin='round'; ctx.stroke(); // Diem cuoi + gia tri ctx.beginPath(); ctx.arc(X(tmax), Y(last), 3.5, 0, Math.PI*2); ctx.fillStyle = C_LINE; ctx.fill(); ctx.textAlign='right'; ctx.fillStyle = C_LINE; ctx.font='bold 11.5px ui-monospace,Menlo,monospace'; ctx.fillText(String(last), W-R-2, Y(last)-8); // Chu thich min/max/last + xu huong var note = document.getElementById('chartnote'); var trend = last>first ? '↑ tăng +'+fmt(last-first) : (last<first ? '↓ giảm '+fmt(first-last) : '→ ổn định'); var trendCls = (isCounter && last>first) ? 'style="color:var(--crit)"' : ''; note.innerHTML = '<span>min <b>'+fmt(vminReal(pts))+'</b></span><span>max <b>'+fmt(vmaxReal(pts))+'</b></span>' + '<span>hiện tại <b>'+fmt(last)+'</b></span>' + '<span '+trendCls+'>'+trend+' trong kỳ</span>' + '<span style="margin-left:auto">'+fmtDateFull(tmin)+' → '+fmtDateFull(tmax)+'</span>'; } function fmt(v){ return (v>=1000)? Number(v).toLocaleString() : String(Math.round(v*100)/100); } function vminReal(pts){ var m=Infinity; pts.forEach(function(p){ if(p.v<m)m=p.v; }); return m; } function vmaxReal(pts){ var m=-Infinity; pts.forEach(function(p){ if(p.v>m)m=p.v; }); return m; } function hexA(hex, a){ hex = hex.trim(); if (hex[0] !== '#') return 'rgba(57,208,195,'+a+')'; var r=parseInt(hex.slice(1,3),16), g=parseInt(hex.slice(3,5),16), b=parseInt(hex.slice(5,7),16); return 'rgba('+r+','+g+','+b+','+a+')'; } function closeModal(){ overlay.classList.remove('open'); document.body.style.overflow=''; } overlay.addEventListener('click', function(e){ if (e.target===overlay) closeModal(); }); document.addEventListener('keydown', function(e){ if (e.key==='Escape') closeModal(); }); document.getElementById('grid').addEventListener('click', function(e){ var b = e.target.closest('.bay'); if (!b) return; openDisk(DATA.hosts[+b.dataset.h], DATA.hosts[+b.dataset.h].disks[+b.dataset.d]); }); document.getElementById('problems').addEventListener('click', function(e){ var p = e.target.closest('.pitem'); if (!p) return; var parts = p.dataset.open.split('|'); for (var i=0;i<DATA.hosts.length;i++){ var h = DATA.hosts[i]; if (h.host !== parts[0]) continue; for (var j=0;j<h.disks.length;j++){ if (String(h.disks[j].serial_number) === parts[1]) { openDisk(h, h.disks[j]); return; } } } }); /* ---------- filter ---------- */ var filter = 'ALL', query = ''; function applyFilter(){ var shown = 0; document.querySelectorAll('.server').forEach(function(sv){ var visible = 0; sv.querySelectorAll('.bay').forEach(function(b){ var okStatus = (filter==='ALL') || (b.dataset.st===filter) || (filter==='WARNING' && b.dataset.st==='CRITICAL'); var okQuery = !query || b.dataset.hay.indexOf(query) !== -1; var show = okStatus && okQuery; b.classList.toggle('hide', !show); if (show) visible++; }); sv.classList.toggle('hide', visible===0); shown += visible; }); document.getElementById('empty').style.display = shown ? 'none' : 'block'; } document.querySelectorAll('.fchip').forEach(function(c){ c.addEventListener('click', function(){ document.querySelectorAll('.fchip').forEach(function(x){ x.classList.remove('on'); }); c.classList.add('on'); filter = c.dataset.f; applyFilter(); }); }); document.getElementById('q').addEventListener('input', function(e){ query = e.target.value.trim().toLowerCase(); applyFilter(); }); </script> </body> </html>