<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RAID Rechner</title>
<style>
body { font-family: Arial, sans-serif; text-align: center; }
.container { max-width: 600px; margin: auto; padding: 20px; }
.disks { display: flex; justify-content: center; margin-top: 10px; }
.disk { width: 40px; height: 60px; background: gray; margin: 5px; border-radius: 5px; }
.disk.faulty { opacity: 0.3; }
.error { color: red; font-weight: bold; }
</style>
</head>
<body>
<div class="container">
<h1>RAID Rechner</h1>
<label for="raidType">RAID-Level:</label>
<select id="raidType" onchange="updateRaid()">
<option value="RAID 0">RAID 0</option>
<option value="RAID 1">RAID 1</option>
<option value="RAID 5">RAID 5</option>
<option value="RAID 6">RAID 6</option>
<option value="RAID 10">RAID 10</option>
<option value="RAID 50">RAID 50</option>
<option value="RAID 60">RAID 60</option>
</select>
<br><br>
<label>Anzahl der Festplatten:</label>
<input type="number" id="diskCount" value="2" min="2" onchange="updateRaid()">
<br><br>
<label>Speicher pro Festplatte (TB):</label>
<input type="text" id="diskSize" value="1" onchange="updateRaid()">
<br><br>
<p><strong>Beschreibung:</strong> <span id="description"></span></p>
<p><strong>Fehlertoleranz:</strong> <span id="faultToleranceText"></span></p>
<p><strong>Verfügbarer Speicher:</strong> <span id="availableStorage"></span> TB</p>
<p id="errorMessage" class="error"></p>
<div class="disks" id="diskDisplay"></div>
</div>
<script>
const raidConfigs = {
"RAID 0": { minDisks: 2, faultTolerance: 0, storage: (n, s) => n * s, description: "Keine Redundanz, aber hohe Geschwindigkeit. Mindestens 2 Festplatten erforderlich." },
"RAID 1": { minDisks: 2, faultTolerance: 1, storage: (n, s) => s, description: "Spiegelt die Daten. Eine Festplatte kann ausfallen. Mindestens 2 Festplatten erforderlich." },
"RAID 5": { minDisks: 3, faultTolerance: 1, storage: (n, s) => (n - 1) * s, description: "Verwendet verteilte Parität. Eine Festplatte kann ausfallen. Mindestens 3 Festplatten erforderlich." },
"RAID 6": { minDisks: 4, faultTolerance: 2, storage: (n, s) => (n - 2) * s, description: "Erhöhte Parität. Zwei Festplatten können ausfallen. Mindestens 4 Festplatten erforderlich." },
"RAID 10": { minDisks: 4, faultTolerance: "50%", storage: (n, s) => (n / 2) * s, description: "Kombination aus RAID 1 und 0. Hälfte der Festplatten kann ausfallen, wenn die Spiegelpaare intakt bleiben. Mindestens 4 Festplatten erforderlich." },
"RAID 50": { minDisks: 6, faultTolerance: 2, storage: (n, s) => ((n / 3) * (3 - 1)) * s, description: "Kombination aus RAID 5 und 0. Mindestens 6 Festplatten erforderlich (optimal in 2 oder mehr RAID-5-Gruppen)." },
"RAID 60": { minDisks: 8, faultTolerance: 4, storage: (n, s) => ((n / 4) * (4 - 2)) * s, description: "Kombination aus RAID 6 und 0. Mindestens 8 Festplatten erforderlich (optimal in 2 oder mehr RAID-6-Gruppen)." }
};
function updateRaid() {
const raidType = document.getElementById("raidType").value;
const diskCount = parseInt(document.getElementById("diskCount").value);
let diskSize = document.getElementById("diskSize").value.replace(",", ".");
diskSize = parseFloat(diskSize);
if (isNaN(diskSize) || diskSize <= 0) {
diskSize = 1;
document.getElementById("diskSize").value = "1";
}
const raid = raidConfigs[raidType];
if (diskCount < raid.minDisks) {
document.getElementById("errorMessage").innerText = "Mindestens " + raid.minDisks + " Festplatten erforderlich für " + raidType + "!";
document.getElementById("diskDisplay").innerHTML = "";
document.getElementById("availableStorage").innerText = "-";
document.getElementById("faultToleranceText").innerText = "-";
return;
} else {
document.getElementById("errorMessage").innerText = "";
}
const faultTolerance = typeof raid.faultTolerance === "number" ? Math.min(raid.faultTolerance, diskCount - 1) : Math.floor(diskCount / 2);
const availableStorage = raid.storage(diskCount, diskSize);
document.getElementById("description").innerText = raid.description;
document.getElementById("faultToleranceText").innerText = faultTolerance + " " + (faultTolerance === 1 ? "Festplatte kann ausfallen." : "Festplatten können ausfallen.");
document.getElementById("availableStorage").innerText = availableStorage.toFixed(1).replace(".", ",");
const diskDisplay = document.getElementById("diskDisplay");
diskDisplay.innerHTML = "";
for (let i = 0; i < diskCount - faultTolerance; i++) {
const disk = document.createElement("div");
disk.className = "disk";
diskDisplay.appendChild(disk);
}
for (let i = 0; i < faultTolerance; i++) {
const disk = document.createElement("div");
disk.className = "disk faulty";
diskDisplay.appendChild(disk);
}
}
updateRaid();
</script>
</body>
</html>
Comments