nurjns icon

RAID Rechner

nurjns | PRO | 03/04/25 06:35:59 AM UTC (Edited) | 0 ⭐ | 419 👁️ | Never ⏰ | []
text |

5.03 KB

|

None

|

0 👍

/

0 👎

<!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