mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 10:51:54 -04:00
202 lines
11 KiB
HTML
202 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="description" content="A backup program for disk arrays. It stores parity information of your data and it recovers from up to six disk failures">
|
|
<meta name="keywords" content="snapraid snapshot raid backup disk array redundancy parity">
|
|
<title>SnapRAID Design</title>
|
|
<link rel="stylesheet" href="style.css">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
|
<link rel="manifest" href="/site.webmanifest">
|
|
<script src="script.js"></script>
|
|
|
|
<!-- Google Analytics 4 -->
|
|
<!-- Google tag (gtag.js) -->
|
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-W1Z5FKHYQ4"></script>
|
|
<script>
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag(){dataLayer.push(arguments);}
|
|
gtag('js', new Date());
|
|
|
|
gtag('config', 'G-W1Z5FKHYQ4');
|
|
</script>
|
|
|
|
<!-- Google Universal Analytics -->
|
|
<script type="text/javascript">
|
|
|
|
var _gaq = _gaq || [];
|
|
_gaq.push(['_setAccount', 'UA-21967501-1']);
|
|
_gaq.push(['_trackPageview']);
|
|
|
|
(function() {
|
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
|
})();
|
|
</script>
|
|
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<div class="container nav-container">
|
|
<a href="index" class="logo">
|
|
<img src="android-chrome-192x192.png" width="32" height="32"/>
|
|
SnapRAID
|
|
</a>
|
|
<nav>
|
|
<input type="checkbox" id="menu-toggle">
|
|
<label for="menu-toggle" class="menu-icon"><svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg></label>
|
|
<ul>
|
|
<li><a href="index" >Home</a></li>
|
|
<li><a href="ui" >UI & Daemon</a></li>
|
|
<li><a href="howitworks" >How it Works</a></li>
|
|
<li><a href="design" class="active">Design</a></li>
|
|
<li><a href="compare" >Compare</a></li>
|
|
<li><a href="manual" >Manual</a></li>
|
|
<li><a href="faq" >FAQ</a></li>
|
|
<li><a href="support" >Support</a></li>
|
|
<li><a href="download" class="nav-cta">Download</a></li>
|
|
<li>
|
|
<button class="theme-toggle" aria-label="Toggle theme">
|
|
<svg class="sun-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg>
|
|
<svg class="moon-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg>
|
|
</button>
|
|
</li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
|
|
<div class="container" style="padding: 4rem 20px;">
|
|
<div style="text-align: center; margin-bottom: 4rem;">
|
|
<h1 style="margin-bottom: 1rem;">Design Philosophy</h1>
|
|
<blockquote style="font-size: 1.5rem; color: var(--text-accent); font-style: italic; margin: 0; padding: 0; border: none; font-family: serif;">
|
|
Simplicity is prerequisite for reliability
|
|
</blockquote>
|
|
<cite style="display: block; margin-top: 1rem; font-size: 1rem; color: var(--text-secondary); font-style: normal;">
|
|
<a href="http://en.wikipedia.org/wiki/Edsger_W._Dijkstra" style="color: var(--text-secondary); text-decoration: underline;">Edsger W. Dijkstra</a>
|
|
</cite>
|
|
</div>
|
|
|
|
<!-- Unix Philosophy & Reliability -->
|
|
<div style="max-width: 800px; margin: 0 auto 4rem auto;">
|
|
<p style="font-size: 1.1rem; color: var(--text-secondary); margin-bottom: 1.5rem;">
|
|
<strong style="color: var(--text-primary);">SnapRAID</strong> was created following the <a href="http://en.wikipedia.org/wiki/Unix_philosophy">Unix philosophy</a>:
|
|
<em>Write programs that do one thing and do it well</em>.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="grid grid-3-cols" style="margin-bottom: 4rem;">
|
|
<!-- Testing/Verification Card -->
|
|
<div class="card">
|
|
<h3>Reliability</h3>
|
|
<p>
|
|
The first design principle was <strong style="color: var(--text-primary);">reliability</strong>.
|
|
The result is a simple architecture and an easy to understand implementation.
|
|
</p>
|
|
<p>
|
|
Extensive and automated tests with the runtime checker <a href="http://valgrind.org/">Valgrind</a>
|
|
and with the <a href="https://github.com/google/sanitizers">Google Sanitizers</a>
|
|
are done to ensure the correctness of the final application.
|
|
The test has a <a href="/cov/">code coverage of over 90%</a>, measured with <a href="https://github.com/linux-test-project/lcov">lcov</a>.
|
|
</p>
|
|
<p>
|
|
SnapRAID is also verified with Coverity Scan for both the
|
|
<a href="https://scan.coverity.com/projects/snapraid">CLI</a> and the <a href="https://scan.coverity.com/projects/snapraid-daemon">Daemon</a>.
|
|
and <a href="http://clang-analyzer.llvm.org/">clang</a> static analyzers,
|
|
and with the <a href="http://lcamtuf.coredump.cx/afl/">American Fuzzy Lop</a> fuzzy tester.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- Robustness Card -->
|
|
<div class="card">
|
|
<h3>Robustness</h3>
|
|
<p>
|
|
The second design principle was <strong style="color: var(--text-primary);">robustness</strong>.
|
|
It supports any kind of problem. Even on kernel panics, power-downs
|
|
or any other hard failure at runtime, your redundancy data is in safe hands.
|
|
</p>
|
|
<p>
|
|
It uses all the possible storage techniques to ensure to always keep consistent
|
|
redundancy even after critical interruptions.
|
|
</p>
|
|
</div>
|
|
|
|
<!-- Efficiency Card -->
|
|
<div class="card">
|
|
<h3>Efficiency</h3>
|
|
<p>
|
|
The third design principle was <strong style="color: var(--text-primary);">efficiency</strong>.
|
|
It's a native C application highly optimized to ensure maximum throughput of your disk array.
|
|
</p>
|
|
<p>
|
|
Integrity checks use the highly efficient <a href="https://github.com/aappleby/smhasher">murmur3</a>
|
|
and <a href="https://burtleburtle.net/bob/hash/spooky.html">SpookyHash</a> hashes at 128 bits.
|
|
</p>
|
|
<p>
|
|
Redundancy computations use a custom <a href="https://github.com/amadvance/snapraid/tree/master/raid">RAID library</a>
|
|
(based on Linux Kernel RAID) supporting up to six parity levels.
|
|
Internal structures use <a href="https://www.tommyds.it/">TommyDS</a>.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid" style="margin-bottom: 4rem;">
|
|
<!-- AI -->
|
|
<div class="card">
|
|
<h3>Use of Artificial Intelligence</h3>
|
|
<p>
|
|
This project <strong style="color: var(--text-primary);">is not "vibe-coded"</strong>.
|
|
Artificial intelligence is used strictly as a
|
|
precision tool and a pair programmer, never as a substitute for engineering judgment. All architecture
|
|
decisions, core logic, and safety guarantees remain under direct human control and review.
|
|
</p>
|
|
<p>
|
|
AI was used selectively to accelerate front-end scaffolding, component layout, and alignment with modern UI
|
|
standards. All functional behavior, state management, API integration, and system logic were implemented and
|
|
<strong style="color: var(--text-primary);">manually validated</strong>.
|
|
</p>
|
|
<p>
|
|
Development follows a <strong style="color: var(--text-primary);">human-led</strong>, AI-assisted workflow. The developer defines the architecture and writes
|
|
the core implementations. AI contributes by exploring design alternatives, surfacing edge cases, suggesting
|
|
optimizations, and helping refine documentation. Any generated output is reviewed, revised where necessary,
|
|
and hardened before integration.
|
|
</p>
|
|
<p>
|
|
This approach improves development efficiency while preserving strict <strong style="color: var(--text-primary);">engineering oversight</strong> and reliability.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<!-- Footer -->
|
|
<footer>
|
|
<div class="container footer-content">
|
|
<div class="footer-col">
|
|
<div class="logo">
|
|
<img src="android-chrome-192x192.png" width="32" height="32"/>
|
|
SnapRAID
|
|
</div>
|
|
<p>Copyright © 2026 Andrea Mazzoleni</p>
|
|
<p class="license">Distributed under GPL v3 License</p>
|
|
</div>
|
|
<div class="footer-col">
|
|
<h4>Links</h4>
|
|
<ul class="footer-list">
|
|
<li><a href="https://github.com/amadvance/snapraid/">GitHub SnapRAID CLI</a></li>
|
|
<li><a href="https://github.com/amadvance/snapraid-daemon/">GitHub SnapRAID Daemon</a></li>
|
|
<li><a href="https://www.reddit.com/r/Snapraid/">Reddit</a></li>
|
|
<li><a href="https://sourceforge.net/p/snapraid/">SourceForge</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html>
|
|
|
|
|