Advertisement
EurenikZ

RAID Rechner

Feb 24th, 2025 (edited)
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.03 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="de">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>RAID Rechner</title>
  7. <style>
  8. body { font-family: Arial, sans-serif; text-align: center; }
  9. .container { max-width: 600px; margin: auto; padding: 20px; }
  10. .disks { display: flex; justify-content: center; margin-top: 10px; }
  11. .disk { width: 40px; height: 60px; background: gray; margin: 5px; border-radius: 5px; }
  12. .disk.faulty { opacity: 0.3; }
  13. .error { color: red; font-weight: bold; }
  14. </style>
  15. </head>
  16. <body>
  17. <div class="container">
  18. <h1>RAID Rechner</h1>
  19. <label for="raidType">RAID-Level:</label>
  20. <select id="raidType" onchange="updateRaid()">
  21. <option value="RAID 0">RAID 0</option>
  22. <option value="RAID 1">RAID 1</option>
  23. <option value="RAID 5">RAID 5</option>
  24. <option value="RAID 6">RAID 6</option>
  25. <option value="RAID 10">RAID 10</option>
  26. <option value="RAID 50">RAID 50</option>
  27. <option value="RAID 60">RAID 60</option>
  28. </select>
  29. <br><br>
  30. <label>Anzahl der Festplatten:</label>
  31. <input type="number" id="diskCount" value="2" min="2" onchange="updateRaid()">
  32. <br><br>
  33. <label>Speicher pro Festplatte (TB):</label>
  34. <input type="text" id="diskSize" value="1" onchange="updateRaid()">
  35. <br><br>
  36. <p><strong>Beschreibung:</strong> <span id="description"></span></p>
  37. <p><strong>Fehlertoleranz:</strong> <span id="faultToleranceText"></span></p>
  38. <p><strong>Verfügbarer Speicher:</strong> <span id="availableStorage"></span> TB</p>
  39. <p id="errorMessage" class="error"></p>
  40. <div class="disks" id="diskDisplay"></div>
  41. </div>
  42.  
  43. <script>
  44. const raidConfigs = {
  45. "RAID 0": { minDisks: 2, faultTolerance: 0, storage: (n, s) => n * s, description: "Keine Redundanz, aber hohe Geschwindigkeit. Mindestens 2 Festplatten erforderlich." },
  46. "RAID 1": { minDisks: 2, faultTolerance: 1, storage: (n, s) => s, description: "Spiegelt die Daten. Eine Festplatte kann ausfallen. Mindestens 2 Festplatten erforderlich." },
  47. "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." },
  48. "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." },
  49. "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." },
  50. "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)." },
  51. "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)." }
  52. };
  53.  
  54. function updateRaid() {
  55. const raidType = document.getElementById("raidType").value;
  56. const diskCount = parseInt(document.getElementById("diskCount").value);
  57. let diskSize = document.getElementById("diskSize").value.replace(",", ".");
  58. diskSize = parseFloat(diskSize);
  59. if (isNaN(diskSize) || diskSize <= 0) {
  60. diskSize = 1;
  61. document.getElementById("diskSize").value = "1";
  62. }
  63.  
  64. const raid = raidConfigs[raidType];
  65. if (diskCount < raid.minDisks) {
  66. document.getElementById("errorMessage").innerText = "Mindestens " + raid.minDisks + " Festplatten erforderlich für " + raidType + "!";
  67. document.getElementById("diskDisplay").innerHTML = "";
  68. document.getElementById("availableStorage").innerText = "-";
  69. document.getElementById("faultToleranceText").innerText = "-";
  70. return;
  71. } else {
  72. document.getElementById("errorMessage").innerText = "";
  73. }
  74.  
  75. const faultTolerance = typeof raid.faultTolerance === "number" ? Math.min(raid.faultTolerance, diskCount - 1) : Math.floor(diskCount / 2);
  76. const availableStorage = raid.storage(diskCount, diskSize);
  77.  
  78. document.getElementById("description").innerText = raid.description;
  79. document.getElementById("faultToleranceText").innerText = faultTolerance + " " + (faultTolerance === 1 ? "Festplatte kann ausfallen." : "Festplatten können ausfallen.");
  80. document.getElementById("availableStorage").innerText = availableStorage.toFixed(1).replace(".", ",");
  81.  
  82. const diskDisplay = document.getElementById("diskDisplay");
  83. diskDisplay.innerHTML = "";
  84.  
  85. for (let i = 0; i < diskCount - faultTolerance; i++) {
  86. const disk = document.createElement("div");
  87. disk.className = "disk";
  88. diskDisplay.appendChild(disk);
  89. }
  90. for (let i = 0; i < faultTolerance; i++) {
  91. const disk = document.createElement("div");
  92. disk.className = "disk faulty";
  93. diskDisplay.appendChild(disk);
  94. }
  95. }
  96.  
  97. updateRaid();
  98. </script>
  99. </body>
  100. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement