/** * 💾 IHK RAID- & STORAGE-SIMULATOR 💾 * =================================== * Interaktiver Storage-Simulator für AP2 FISI (LF 11 Storage & Hochverfügbarkeit): * - RAID 0, 1, 5, 6, 10 * - Brutto-, Netto-Kapazität, Parität und Ausfallsicherheit * - Hot-Spare Integration & IHK-Formeln */ class RaidSimulator { constructor(containerId) { this.container = document.getElementById(containerId); this.init(); } init() { if (!this.container) return; this.render(); this.calculate(); } render() { this.container.innerHTML = `
💾 IHK RAID- & Storage-Simulator (LF 11)
IHK Formelwerkzeuge
`; document.getElementById("raid-level").addEventListener("change", () => this.calculate()); document.getElementById("raid-disks").addEventListener("input", () => this.calculate()); document.getElementById("raid-size").addEventListener("input", () => this.calculate()); document.getElementById("raid-hotspare").addEventListener("change", () => this.calculate()); } calculate() { const level = document.getElementById("raid-level").value; let n = parseInt(document.getElementById("raid-disks").value, 10) || 0; const s = parseFloat(document.getElementById("raid-size").value) || 0; const hasHotSpare = parseInt(document.getElementById("raid-hotspare").value, 10) === 1; let activeDisks = hasHotSpare ? n - 1 : n; let valid = true; let errorMsg = ""; let minDisks = 2; if (level === "0") minDisks = 2; if (level === "1") minDisks = 2; if (level === "5") minDisks = 3; if (level === "6") minDisks = 4; if (level === "10") minDisks = 4; if (activeDisks < minDisks) { valid = false; errorMsg = `Für RAID ${level} werden mindestens ${minDisks} aktive Platten benötigt (aktuell: ${activeDisks}).`; } if (level === "10" && activeDisks % 2 !== 0) { valid = false; errorMsg = `RAID 10 erfordert eine gerade Anzahl aktiver Platten (aktuell: ${activeDisks}).`; } const metricsBox = document.getElementById("raid-metrics"); const explBox = document.getElementById("raid-explanation"); if (!valid) { metricsBox.innerHTML = `
⚠️ ${errorMsg}
`; explBox.innerHTML = "Bitte passe die Plattenanzahl für das gewählte RAID-Level an."; return; } const rawTotal = n * s; let usable = 0; let faultTolerance = 0; let formula = ""; if (level === "0") { usable = activeDisks * s; faultTolerance = 0; formula = "Nutzdaten = n × Kapazität (Keine Redundanz!)"; } else if (level === "1") { usable = s; faultTolerance = activeDisks - 1; formula = "Nutzdaten = 1 × Kapazität (Gesamte Spiegelung)"; } else if (level === "5") { usable = (activeDisks - 1) * s; faultTolerance = 1; formula = "Nutzdaten = (n - 1) × Kapazität (1 Platte Paritäts-Overhead)"; } else if (level === "6") { usable = (activeDisks - 2) * s; faultTolerance = 2; formula = "Nutzdaten = (n - 2) × Kapazität (2 Platten Paritäts-Overhead)"; } else if (level === "10") { usable = (activeDisks / 2) * s; faultTolerance = 1; // Garantiert 1 Platte, bis zu n/2 im besten Fall formula = "Nutzdaten = (n / 2) × Kapazität (50 % Nutzkapazität)"; } const efficiency = Math.round((usable / rawTotal) * 100); metricsBox.innerHTML = `
Bruttokapazität (Roh):
${rawTotal.toFixed(1)} TB
Nettokapazität (Nutzbar):
${usable.toFixed(1)} TB
Ausfalltoleranz:
${faultTolerance} Platte(n)
Speichereffizienz:
${efficiency} %
`; explBox.innerHTML = `

IHK-Prüfungswissen & Formel:

Angewandte Formel: ${formula}
${hasHotSpare ? 'Hinweis: 1 Festplatte ist als Standby-Ersatzplatte (Hot-Spare) reserviert und zählt nicht zu den aktiven Nutzkapazitäten.
' : ''} Prüfungsfalle URE (Unrecoverable Read Error): Bei großen SATA-Festplatten ab 4 TB dauert der Rebuild eines RAID 5 viele Stunden bis Tage. Tritt während des Rebuilds ein Lesefehler auf einer weiteren Platte auf, ist das gesamte RAID 5 verloren! Die IHK verlangt in solchen Szenarien daher oft RAID 6 (Dual-Parität) oder RAID 10.

`; } } window.RaidSimulator = RaidSimulator;