<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Storage on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/storage/</link><description>Recent content in Storage on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 14 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/storage/index.xml" rel="self" type="application/rss+xml"/><item><title>Ceph</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/</guid><description>&lt;p&gt;Ceph is an open-source distributed storage platform providing object, block, and file storage in a single unified system. It runs across multiple nodes and has no single point of failure.&lt;/p&gt;
&lt;p&gt;The core idea: data is not stored on specific disks on specific nodes. Instead, the CRUSH algorithm distributes data across all available OSDs (Object Storage Daemons) based on a placement map. Add nodes and the cluster rebalances automatically. Lose a node and Ceph re-replicates from surviving copies without operator intervention.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="storage-types"&gt;Storage types
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Interface&lt;/th&gt;
 &lt;th&gt;Typical use&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Block (RBD)&lt;/td&gt;
 &lt;td&gt;Kernel block device / iSCSI&lt;/td&gt;
 &lt;td&gt;Kubernetes PVCs, VM disks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Object (RGW)&lt;/td&gt;
 &lt;td&gt;S3-compatible API&lt;/td&gt;
 &lt;td&gt;Backups, artifacts, media&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;File (CephFS)&lt;/td&gt;
 &lt;td&gt;POSIX filesystem / NFS&lt;/td&gt;
 &lt;td&gt;Shared filesystems, home dirs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For Kubernetes workloads, RBD block storage via a StorageClass is the common path.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="components"&gt;Components
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;MON (Monitor)&lt;/strong&gt; — maintains the cluster map; quorum-based, needs an odd number (typically 3 or 5). Not a data path.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;OSD (Object Storage Daemon)&lt;/strong&gt; — one per disk; handles actual data reads/writes and replication.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MGR (Manager)&lt;/strong&gt; — collects metrics, hosts the dashboard, runs modules (balancer, alertmanager, etc.).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;MDS (Metadata Server)&lt;/strong&gt; — only required for CephFS; manages the filesystem namespace.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="single-node-constraint"&gt;Single-node constraint
&lt;/h2&gt;&lt;p&gt;A single-node Ceph cluster can be made to run (&lt;code&gt;allowMultiplePerNode: true&lt;/code&gt; in Rook, replication &lt;code&gt;size: 1&lt;/code&gt;), but it provides no actual redundancy. There is nothing to replicate to. This is fine for testing concepts; it is not a valid storage setup for anything you care about.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="related"&gt;Related
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.ceph.com/" target="_blank" rel="noopener"
 &gt;Ceph documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/rook/" &gt;Rook&lt;/a&gt; — Kubernetes operator that manages Ceph clusters inside K8s&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/proxmox/" &gt;Proxmox&lt;/a&gt; — Ceph is a native storage backend in Proxmox clusters&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/rook-ceph/" &gt;Rook + Ceph in the homelab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rook</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/rook/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/rook/</guid><description>&lt;p&gt;Rook is a Kubernetes operator that deploys and manages storage systems — primarily &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/" &gt;Ceph&lt;/a&gt; — as native Kubernetes resources. The distinction: Ceph is the storage system; Rook is the Kubernetes wiring around it.&lt;/p&gt;
&lt;p&gt;Without Rook you would run Ceph manually (or via &lt;code&gt;cephadm&lt;/code&gt;) and then configure the Kubernetes CSI driver separately. Rook collapses that into CRDs and handles the full lifecycle: deployment, configuration, expansion, upgrades, and failure recovery.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-it-works"&gt;How it works
&lt;/h2&gt;&lt;p&gt;Rook introduces several CRDs:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CephCluster&lt;/strong&gt; — declares the cluster: which nodes, which disks to use as OSDs, replication settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CephBlockPool&lt;/strong&gt; — defines a Ceph pool (replication factor, failure domain). Maps to an RBD pool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;StorageClass&lt;/strong&gt; — references a CephBlockPool and enables dynamic PVC provisioning. Kubernetes workloads request storage; Rook/Ceph fulfils it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CephFilesystem&lt;/strong&gt; — deploys CephFS + MDS for POSIX shared filesystem access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CephObjectStore&lt;/strong&gt; — deploys the Ceph RGW S3-compatible object storage gateway.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="typical-install-sequence"&gt;Typical install sequence
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f https://raw.githubusercontent.com/rook/rook/refs/tags/v1.17.9/deploy/examples/crds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f https://raw.githubusercontent.com/rook/rook/refs/tags/v1.17.9/deploy/examples/common.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f https://raw.githubusercontent.com/rook/rook/refs/tags/v1.17.9/deploy/examples/operator.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then apply a &lt;code&gt;CephCluster&lt;/code&gt; manifest declaring your storage topology, followed by &lt;code&gt;CephBlockPool&lt;/code&gt; and &lt;code&gt;StorageClass&lt;/code&gt; for PVC support.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="single-node-considerations"&gt;Single-node considerations
&lt;/h2&gt;&lt;p&gt;A single-node setup requires &lt;code&gt;allowMultiplePerNode: true&lt;/code&gt; in the &lt;code&gt;CephCluster&lt;/code&gt; spec (MONs, MGR, and OSDs all land on the same node). Replication &lt;code&gt;size&lt;/code&gt; must be set to &lt;code&gt;1&lt;/code&gt; — there is nowhere else to replicate. This works for experimentation; it is not a production configuration. See &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/" &gt;Ceph&lt;/a&gt; for details on the replication model.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="related"&gt;Related
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://rook.io/docs/rook/latest/" target="_blank" rel="noopener"
 &gt;Rook documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/" &gt;Ceph&lt;/a&gt; — the underlying storage system&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/rook-ceph/" &gt;Rook + Ceph in the homelab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Rook + Ceph on ODEN</title><link>https://backend-engineering-strategy-tools.github.io/site/homelab/rook-ceph/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/homelab/rook-ceph/</guid><description>&lt;p&gt;Attempting to add persistent block storage to the &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/systems/" &gt;ODEN&lt;/a&gt; single-node Talos cluster using &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/rook/" &gt;Rook&lt;/a&gt; and &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/" &gt;Ceph&lt;/a&gt;. This did not fully succeed — the setup reached the point of a bound PVC and a working write test, but the cluster was not left in a clean stable state. Notes are here for completeness.&lt;/p&gt;
&lt;p&gt;This builds on the &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/homelab/talos-omni/" &gt;Talos cluster setup on ODEN&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="hardware"&gt;Hardware
&lt;/h2&gt;&lt;p&gt;ODEN has five storage devices:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Device&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Size&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/dev/sdb&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kingston SA400S3 SSD (SATA)&lt;/td&gt;
 &lt;td&gt;120 GB&lt;/td&gt;
 &lt;td&gt;Boot disk — leave alone&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/dev/nvme0n1&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Samsung 970 EVO NVMe&lt;/td&gt;
 &lt;td&gt;500 GB&lt;/td&gt;
 &lt;td&gt;OSD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/dev/sdc&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kingston SA400S3 SSD (SATA)&lt;/td&gt;
 &lt;td&gt;120 GB&lt;/td&gt;
 &lt;td&gt;OSD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/dev/sdd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kingston SA400S3 SSD (SATA)&lt;/td&gt;
 &lt;td&gt;120 GB&lt;/td&gt;
 &lt;td&gt;OSD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;/dev/sde&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Kingston SA400S3 SSD (SATA)&lt;/td&gt;
 &lt;td&gt;120 GB&lt;/td&gt;
 &lt;td&gt;OSD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Do not add &lt;code&gt;/dev/sdb&lt;/code&gt; to Ceph. It is the boot disk.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-1--install-the-rook-operator"&gt;Step 1 — Install the Rook operator
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f https://raw.githubusercontent.com/rook/rook/refs/tags/v1.17.9/deploy/examples/crds.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f https://raw.githubusercontent.com/rook/rook/refs/tags/v1.17.9/deploy/examples/common.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kubectl apply -f https://raw.githubusercontent.com/rook/rook/refs/tags/v1.17.9/deploy/examples/operator.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Wait for the operator pod to be running in &lt;code&gt;rook-ceph&lt;/code&gt; namespace before continuing.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-2--cephcluster-single-node"&gt;Step 2 — CephCluster (single-node)
&lt;/h2&gt;&lt;p&gt;Single-node requires &lt;code&gt;allowMultiplePerNode: true&lt;/code&gt; and explicit disk selection. The cluster-test example from the Rook repo is a reasonable starting point:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;storage&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;useAllNodes&lt;/span&gt;: &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;nodes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;192.168.1.171&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;devices&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;nvme0n1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;sdc&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;sdd&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;sde&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference: &lt;a class="link" href="https://github.com/rook/rook/blob/release-1.17/deploy/examples/cluster-test.yaml" target="_blank" rel="noopener"
 &gt;cluster-test.yaml&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="step-3--cephblockpool-and-storageclass"&gt;Step 3 — CephBlockPool and StorageClass
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ceph.rook.io/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;CephBlockPool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;replicapool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;namespace&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rook-ceph&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;replicated&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;size&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;storage.k8s.io/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;StorageClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rook-ceph-block&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;provisioner&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rook-ceph.rbd.csi.ceph.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;parameters&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;clusterID&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rook-ceph&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;pool&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;replicapool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;imageFormat&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;imageFeatures&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;layering&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;reclaimPolicy&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Delete&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="step-4--pvc-test"&gt;Step 4 — PVC test
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;PersistentVolumeClaim&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;test-pvc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;accessModes&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#ae81ff"&gt;ReadWriteOnce&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;storageClassName&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;rook-ceph-block&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;resources&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;requests&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;storage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;10Gi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;PVC reached &lt;code&gt;Bound&lt;/code&gt;. A BusyBox pod mounting it could write to &lt;code&gt;/mnt&lt;/code&gt;. The Ceph dashboard (&lt;code&gt;kubectl -n rook-ceph port-forward svc/rook-ceph-mgr-dashboard 7000:7000&lt;/code&gt;) showed OSDs active and the pool present.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="what-did-not-work"&gt;What did not work
&lt;/h2&gt;&lt;p&gt;The cluster ran but was not left stable. Single-node Ceph produces health warnings by design (no redundancy, no failure domain separation). More importantly, the setup was not revisited after initial testing and there are unresolved questions about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSI driver behaviour on Talos (Talos has specific requirements for CSI socket paths)&lt;/li&gt;
&lt;li&gt;Whether the dashboard warnings were cosmetic or indicated real issues&lt;/li&gt;
&lt;li&gt;Long-term stability under actual workloads&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is left as a draft until there is time to run it properly — ideally on more than one node.&lt;/p&gt;</description></item><item><title>Cables &amp; Transceivers Inventory</title><link>https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/cables/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/cables/</guid><description>&lt;h1 id="sas-cables"&gt;SAS Cables
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Connectors&lt;/th&gt;
 &lt;th&gt;Length&lt;/th&gt;
 &lt;th&gt;Qty&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CBL-SAS-001&lt;/td&gt;
 &lt;td&gt;Internal Mini-SAS&lt;/td&gt;
 &lt;td&gt;SFF-8087 → SFF-8087&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CBL-SAS-002&lt;/td&gt;
 &lt;td&gt;Int → Ext Mini-SAS&lt;/td&gt;
 &lt;td&gt;SFF-8087 → SFF-8088&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;Needed for internal cards (CTRL-002/003) to reach DAS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CBL-SAS-003&lt;/td&gt;
 &lt;td&gt;Ext SAS&lt;/td&gt;
 &lt;td&gt;SFF-8470 → SFF-8088&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;CTRL-006 → MIMIR&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="ethernet-cables"&gt;Ethernet Cables
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Speed&lt;/th&gt;
 &lt;th&gt;Length&lt;/th&gt;
 &lt;th&gt;Qty&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CBL-ETH-001&lt;/td&gt;
 &lt;td&gt;Cat5e/Cat6&lt;/td&gt;
 &lt;td&gt;1GbE&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="sfp--sfp-transceivers"&gt;SFP / SFP+ Transceivers
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;Speed&lt;/th&gt;
 &lt;th&gt;Wavelength&lt;/th&gt;
 &lt;th&gt;Reach&lt;/th&gt;
 &lt;th&gt;Qty&lt;/th&gt;
 &lt;th&gt;Where used&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SFP-001&lt;/td&gt;
 &lt;td&gt;SFP&lt;/td&gt;
 &lt;td&gt;1GbE&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;BIFROST-01/02 (28 cages each); MODI (4 cages)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SFP-002&lt;/td&gt;
 &lt;td&gt;XFP&lt;/td&gt;
 &lt;td&gt;10GbE&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;ASGARD switch ports 20-21 (2× XFP per module × 2)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="adapters"&gt;Adapters
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;th&gt;From&lt;/th&gt;
 &lt;th&gt;To&lt;/th&gt;
 &lt;th&gt;Qty&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;ADP-001&lt;/td&gt;
 &lt;td&gt;SFF-8470 → SFF-8088&lt;/td&gt;
 &lt;td&gt;SFF-8470&lt;/td&gt;
 &lt;td&gt;SFF-8088&lt;/td&gt;
 &lt;td&gt;?&lt;/td&gt;
 &lt;td&gt;Passive; alternative to CBL-SAS-003 if cabling via adapter&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Controller Inventory</title><link>https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/controller/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/controller/</guid><description>&lt;h1 id="controller-catalog"&gt;Controller Catalog
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Manufacturer&lt;/th&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;Type&lt;/th&gt;
 &lt;th&gt;PCIe Slot&lt;/th&gt;
 &lt;th&gt;Connectors&lt;/th&gt;
 &lt;th&gt;Qty&lt;/th&gt;
 &lt;th&gt;IT Mode&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-001&lt;/td&gt;
 &lt;td&gt;IBM / LSI&lt;/td&gt;
 &lt;td&gt;ServeRAID MR10i&lt;/td&gt;
 &lt;td&gt;RAID&lt;/td&gt;
 &lt;td&gt;PCIe x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;not possible&lt;/td&gt;
 &lt;td&gt;Cache module FRU 25R8079 attached; SAS1078 chip&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-002&lt;/td&gt;
 &lt;td&gt;LSI&lt;/td&gt;
 &lt;td&gt;9211-8i&lt;/td&gt;
 &lt;td&gt;RAID&lt;/td&gt;
 &lt;td&gt;PCIe 2.0 x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;eligible&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-003&lt;/td&gt;
 &lt;td&gt;LSI&lt;/td&gt;
 &lt;td&gt;9211-8i&lt;/td&gt;
 &lt;td&gt;HBA&lt;/td&gt;
 &lt;td&gt;PCIe 2.0 x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;✓ flashed&lt;/td&gt;
 &lt;td&gt;IT mode (passthrough)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-004&lt;/td&gt;
 &lt;td&gt;Dell&lt;/td&gt;
 &lt;td&gt;PERC H710&lt;/td&gt;
 &lt;td&gt;RAID&lt;/td&gt;
 &lt;td&gt;PCIe 2.0 x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;? verify&lt;/td&gt;
 &lt;td&gt;Hardware RAID, may already be flashed for HBA&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-005&lt;/td&gt;
 &lt;td&gt;HP&lt;/td&gt;
 &lt;td&gt;Smart Array P410&lt;/td&gt;
 &lt;td&gt;RAID&lt;/td&gt;
 &lt;td&gt;PCIe 2.0 x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;not possible&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-006&lt;/td&gt;
 &lt;td&gt;IBM / LSI&lt;/td&gt;
 &lt;td&gt;ServeRAID-8e (FRU 39R8852)&lt;/td&gt;
 &lt;td&gt;HBA&lt;/td&gt;
 &lt;td&gt;PCIe 1.0 x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8470 (ext.)&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;n/a&lt;/td&gt;
 &lt;td&gt;External SAS; needs SFF-8470→SFF-8088 cable for MD1200&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-007&lt;/td&gt;
 &lt;td&gt;IBM / LSI&lt;/td&gt;
 &lt;td&gt;SAS3082E-R (FRU 44E8690)&lt;/td&gt;
 &lt;td&gt;HBA&lt;/td&gt;
 &lt;td&gt;PCIe x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;n/a&lt;/td&gt;
 &lt;td&gt;Internal SAS; 3Gb/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-008&lt;/td&gt;
 &lt;td&gt;LSI&lt;/td&gt;
 &lt;td&gt;MegaRAID SAS 8708EM2&lt;/td&gt;
 &lt;td&gt;RAID&lt;/td&gt;
 &lt;td&gt;PCIe x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;not possible&lt;/td&gt;
 &lt;td&gt;iBBU06 attached&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CTRL-009&lt;/td&gt;
 &lt;td&gt;IBM / LSI&lt;/td&gt;
 &lt;td&gt;ServeRAID M1015 (FRU 46C8937)&lt;/td&gt;
 &lt;td&gt;RAID&lt;/td&gt;
 &lt;td&gt;PCIe 2.0 x8&lt;/td&gt;
 &lt;td&gt;2× SFF-8087 (int.)&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;? verify&lt;/td&gt;
 &lt;td&gt;LSI 9220-8i OEM; IT-flashable (same path as 9211-8i), may already be flashed for HBA&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="controller-placement"&gt;Controller Placement
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Asset ID&lt;/th&gt;
 &lt;th&gt;Hostname&lt;/th&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Slot / Location&lt;/th&gt;
 &lt;th&gt;Role&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-001&lt;/td&gt;
 &lt;td&gt;FREJA&lt;/td&gt;
 &lt;td&gt;CTRL-001&lt;/td&gt;
 &lt;td&gt;Enclosure&lt;/td&gt;
 &lt;td&gt;RAID controller&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-002&lt;/td&gt;
 &lt;td&gt;TYR&lt;/td&gt;
 &lt;td&gt;CTRL-002&lt;/td&gt;
 &lt;td&gt;Enclosure&lt;/td&gt;
 &lt;td&gt;RAID controller&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-003&lt;/td&gt;
 &lt;td&gt;TOR&lt;/td&gt;
 &lt;td&gt;CTRL-003&lt;/td&gt;
 &lt;td&gt;Enclosure&lt;/td&gt;
 &lt;td&gt;HBA passthrough&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-004&lt;/td&gt;
 &lt;td&gt;MD1200&lt;/td&gt;
 &lt;td&gt;(no controller)&lt;/td&gt;
 &lt;td&gt;Enclosure&lt;/td&gt;
 &lt;td&gt;Disk shelf controller&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-005&lt;/td&gt;
 &lt;td&gt;ODEN&lt;/td&gt;
 &lt;td&gt;CTRL-009&lt;/td&gt;
 &lt;td&gt;Enclosure&lt;/td&gt;
 &lt;td&gt;RAID controller&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-006&lt;/td&gt;
 &lt;td&gt;LOKE&lt;/td&gt;
 &lt;td&gt;CTRL-009&lt;/td&gt;
 &lt;td&gt;Enclosure&lt;/td&gt;
 &lt;td&gt;RAID controller&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="controller-overviews"&gt;Controller Overviews
&lt;/h1&gt;&lt;p&gt;Here are some brief overviews of selected storage controllers, highlighting their typical uses and characteristics.&lt;/p&gt;
&lt;h3 id="lsi-9211-8i-eg-ctrl-002-ctrl-003--it-mode-flashing-guide"&gt;LSI 9211-8i (e.g., CTRL-002, CTRL-003) — &lt;a class="link" href="https://www.stewright.me/tutorial-flash-lsi-9211-8i-with-it-firmware-for-truenas/" target="_blank" rel="noopener"
 &gt;IT mode flashing guide&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;8-port SAS/SATA · 6Gb/s per port · PCIe 2.0 x8 · CTRL-003 flashed to IT (passthrough) mode&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The LSI SAS 9211-8i is a highly popular host bus adapter (HBA) in homelab and enthusiast communities. While capable of functioning as a basic RAID controller, it is most frequently flashed to &amp;ldquo;IT (Initiator Target) mode&amp;rdquo; to operate purely as an HBA. This passthrough mode is essential for software-defined storage solutions like ZFS (TrueNAS/OpenZFS) or unRAID, enabling the operating system to have direct control over individual drives.&lt;/p&gt;
&lt;h3 id="dell-perc-h710-eg-ctrl-004--spec-sheet"&gt;Dell PERC H710 (e.g., CTRL-004) — &lt;a class="link" href="https://www.dell.com/learn/us/en/04/shared-content~data-sheets/documents~dell-perc-h710-spec-sheet.pdf" target="_blank" rel="noopener"
 &gt;spec sheet&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;8-port SAS/SATA · 6Gb/s · PCIe 2.0 · 512MB battery-backed cache · RAID 0/1/5/6/10/50/60&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Dell PERC H710 is an enterprise-grade RAID controller commonly found in Dell PowerEdge servers. It supports a comprehensive range of RAID levels (0, 1, 5, 6, 10, 50, 60), providing robust data protection and optimized performance for server storage. These controllers typically incorporate battery-backed cache (BBWC) or flash-backed cache (FBWC) to enhance write performance and ensure data integrity during unexpected power events.&lt;/p&gt;
&lt;h3 id="hp-smart-array-p410-eg-ctrl-005"&gt;HP Smart Array P410 (e.g., CTRL-005)
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;8-port SAS · 3Gb/s · PCIe · RAID 0/1/5/10&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The HP Smart Array P410 is a legacy RAID controller designed for older generations of HPE ProLiant servers. It offered hardware RAID capabilities, supporting RAID levels 0, 1, 5, and 10. Although still functional, its performance and feature set are considered dated compared to contemporary controllers, making it suitable for less intensive storage tasks or environments requiring compatibility with older hardware.&lt;/p&gt;
&lt;h3 id="ibm-serveraid-8e--lsi-sas3444e-ctrl-006-2"&gt;IBM ServeRAID-8e / LSI SAS3444E (CTRL-006 ×2)
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;4-port external SAS · 3Gb/s · PCIe 1.0 x8 · 2× SFF-8470 (SAS-A, SAS-B)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The ServeRAID-8e is an IBM OEM of the LSI SAS3444E, purpose-built for connecting external SAS enclosures and DAS units. Unlike the internal-only cards in this inventory, its SFF-8470 ports face the rear bracket, making it the right card to pull when you need to link a host to the MD1200. &lt;strong&gt;Note:&lt;/strong&gt; the MD1200 uses SFF-8088 ports, so a SFF-8470 → SFF-8088 cable is required. Pull one of these when adding a host that needs direct DAS connectivity and lacks a native external SAS port.&lt;/p&gt;
&lt;h3 id="ibmlsi-sas3082e-r-ctrl-007"&gt;IBM/LSI SAS3082E-R (CTRL-007)
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;8-port SAS/SATA · 3Gb/s · PCIe x8 · 2× SFF-8087 (int.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The SAS3082E-R is an IBM OEM internal SAS HBA providing eight SAS/SATA ports via two SFF-8087 connectors. Like the 9211-8i it operates as a passthrough HBA, making it suitable for ZFS/TrueNAS builds where the OS needs direct drive access. Pull this card when you need to expand internal port count in a host and the 9211-8i units are already allocated — the 3Gb/s bandwidth is the limiting factor versus the 9211-8i&amp;rsquo;s 6Gb/s, so prefer the 9211-8i for performance-sensitive pools.&lt;/p&gt;
&lt;h3 id="lsi-megaraid-sas-8708em2-ctrl-008--ibbu06"&gt;LSI MegaRAID SAS 8708EM2 (CTRL-008) + iBBU06
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;8-port SAS/SATA · 3Gb/s · PCIe x8 · 2× SFF-8087 (int.) · RAID 0/1/5/6/10/50/60 · battery-backed cache&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The MegaRAID SAS 8708EM2 is a hardware RAID controller with an iBBU06 battery backup unit attached, which protects the write cache during power loss. Pull this card when you need hardware RAID with a battery-backed cache — typically for workloads like virtual machine storage or databases where write performance and data integrity under power failure both matter. For ZFS or software-defined storage, prefer the 9211-8i or SAS3082E-R in HBA/passthrough mode instead, as hardware RAID sits between ZFS and the drives and undermines its integrity guarantees.&lt;/p&gt;</description></item><item><title>Disk Inventory</title><link>https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/disk/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/homelab/inventory/disk/</guid><description>&lt;h1 id="storage-media"&gt;Storage Media
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Manufacturer&lt;/th&gt;
 &lt;th&gt;Model&lt;/th&gt;
 &lt;th&gt;Capacity&lt;/th&gt;
 &lt;th&gt;RPM&lt;/th&gt;
 &lt;th&gt;Interface&lt;/th&gt;
 &lt;th&gt;Quantity&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-001&lt;/td&gt;
 &lt;td&gt;IBM / Fujitsu&lt;/td&gt;
 &lt;td&gt;MBB2073RC&lt;/td&gt;
 &lt;td&gt;73.4GB&lt;/td&gt;
 &lt;td&gt;10K RPM&lt;/td&gt;
 &lt;td&gt;SAS 3Gbps&lt;/td&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;2.5&amp;quot; SFF; enterprise&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-002&lt;/td&gt;
 &lt;td&gt;IBM / Seagate&lt;/td&gt;
 &lt;td&gt;ST9146802SS (FRU 43X0825)&lt;/td&gt;
 &lt;td&gt;146.8GB&lt;/td&gt;
 &lt;td&gt;10K RPM&lt;/td&gt;
 &lt;td&gt;SAS 6Gbps&lt;/td&gt;
 &lt;td&gt;22&lt;/td&gt;
 &lt;td&gt;2.5&amp;quot; SFF hot-swap; IBM P/N 42D0248&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-003&lt;/td&gt;
 &lt;td&gt;Seagate&lt;/td&gt;
 &lt;td&gt;Constellation ES.3 ST1000NM0043&lt;/td&gt;
 &lt;td&gt;1TB&lt;/td&gt;
 &lt;td&gt;7200 RPM&lt;/td&gt;
 &lt;td&gt;SAS 6Gbps&lt;/td&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-004&lt;/td&gt;
 &lt;td&gt;Kingston&lt;/td&gt;
 &lt;td&gt;SSDNow V300 SV300S37A/120G&lt;/td&gt;
 &lt;td&gt;120GB&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;SATA&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;Consumer SSD; used as boot drives&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-005&lt;/td&gt;
 &lt;td&gt;Samsung&lt;/td&gt;
 &lt;td&gt;970 EVO&lt;/td&gt;
 &lt;td&gt;500GB&lt;/td&gt;
 &lt;td&gt;—&lt;/td&gt;
 &lt;td&gt;NVMe M.2 PCIe 3.0 x4&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;In PCIe x16 riser (FRU 43V7066) in ODEN&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-006&lt;/td&gt;
 &lt;td&gt;Western Digital&lt;/td&gt;
 &lt;td&gt;WD Blue WD10EZEX&lt;/td&gt;
 &lt;td&gt;1TB&lt;/td&gt;
 &lt;td&gt;7200 RPM&lt;/td&gt;
 &lt;td&gt;SATA 64MB cache&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;Consumer-grade; mfg. 2015-11&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-007&lt;/td&gt;
 &lt;td&gt;Seagate&lt;/td&gt;
 &lt;td&gt;ST500LM000&lt;/td&gt;
 &lt;td&gt;500GB&lt;/td&gt;
 &lt;td&gt;5400 RPM&lt;/td&gt;
 &lt;td&gt;SATA&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;SSHD; 8GB NAND cache; laptop-grade&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-008&lt;/td&gt;
 &lt;td&gt;Hitachi&lt;/td&gt;
 &lt;td&gt;HTS542525K9SA00&lt;/td&gt;
 &lt;td&gt;250GB&lt;/td&gt;
 &lt;td&gt;5400 RPM&lt;/td&gt;
 &lt;td&gt;SATA&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Laptop-grade&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-009&lt;/td&gt;
 &lt;td&gt;Samsung&lt;/td&gt;
 &lt;td&gt;HD300LD&lt;/td&gt;
 &lt;td&gt;300GB&lt;/td&gt;
 &lt;td&gt;7200 RPM&lt;/td&gt;
 &lt;td&gt;PATA (IDE)&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Desktop; 8MB cache; legacy interface&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-010&lt;/td&gt;
 &lt;td&gt;Seagate&lt;/td&gt;
 &lt;td&gt;Barracuda 7200.7 ST380013AS&lt;/td&gt;
 &lt;td&gt;80GB&lt;/td&gt;
 &lt;td&gt;7200 RPM&lt;/td&gt;
 &lt;td&gt;SATA&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Desktop; legacy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-011&lt;/td&gt;
 &lt;td&gt;HP / Seagate&lt;/td&gt;
 &lt;td&gt;EH0146FARWD (518216-002 / GPN 652599-002)&lt;/td&gt;
 &lt;td&gt;146GB&lt;/td&gt;
 &lt;td&gt;15K RPM&lt;/td&gt;
 &lt;td&gt;SAS 6Gbps&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;2.5&amp;quot; SFF; enterprise; BL460c Gen8 pulls&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;HP&lt;/td&gt;
 &lt;td&gt;EG0300FBVFL (641552-001 / GPN 652566-001)&lt;/td&gt;
 &lt;td&gt;300GB&lt;/td&gt;
 &lt;td&gt;10K RPM&lt;/td&gt;
 &lt;td&gt;SAS 6Gbps&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;2.5&amp;quot; SFF; enterprise; BL460c Gen8 pulls&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-013&lt;/td&gt;
 &lt;td&gt;HGST&lt;/td&gt;
 &lt;td&gt;Ultrastar C10K900 HUC109090CSS600 (EMC 118033034-02)&lt;/td&gt;
 &lt;td&gt;900GB&lt;/td&gt;
 &lt;td&gt;10K RPM&lt;/td&gt;
 &lt;td&gt;SAS 6Gbps&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2.5&amp;quot; SFF; enterprise&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;HDD-014&lt;/td&gt;
 &lt;td&gt;Toshiba&lt;/td&gt;
 &lt;td&gt;AL13SEB900 (HDEBC00NAA51)&lt;/td&gt;
 &lt;td&gt;900GB&lt;/td&gt;
 &lt;td&gt;10K RPM&lt;/td&gt;
 &lt;td&gt;SAS 6Gbps&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;2.5&amp;quot; SFF; enterprise&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="storage-assignments"&gt;Storage Assignments
&lt;/h1&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;System ID&lt;/th&gt;
 &lt;th&gt;Hostname&lt;/th&gt;
 &lt;th&gt;Component ID&lt;/th&gt;
 &lt;th&gt;Quantity&lt;/th&gt;
 &lt;th&gt;Total Installed Storage&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-001&lt;/td&gt;
 &lt;td&gt;FREJA&lt;/td&gt;
 &lt;td&gt;HDD-004&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;single drive&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-002&lt;/td&gt;
 &lt;td&gt;TYR&lt;/td&gt;
 &lt;td&gt;HDD-002&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;raid 10&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-003&lt;/td&gt;
 &lt;td&gt;TOR&lt;/td&gt;
 &lt;td&gt;HDD-002&lt;/td&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;td&gt;HBA&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-004&lt;/td&gt;
 &lt;td&gt;MD1200&lt;/td&gt;
 &lt;td&gt;HDD-003&lt;/td&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;15 TB&lt;/td&gt;
 &lt;td&gt;SAS HBA not installed; shelf unconnected&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-005&lt;/td&gt;
 &lt;td&gt;ODEN&lt;/td&gt;
 &lt;td&gt;HDD-004&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;480GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-005&lt;/td&gt;
 &lt;td&gt;ODEN&lt;/td&gt;
 &lt;td&gt;HDD-005&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;500GB&lt;/td&gt;
 &lt;td&gt;M.2 via riser&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;SYS-009&lt;/td&gt;
 &lt;td&gt;HEIMDAL&lt;/td&gt;
 &lt;td&gt;HDD-001&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;219GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-001&lt;/td&gt;
 &lt;td&gt;BLADE-01&lt;/td&gt;
 &lt;td&gt;HDD-011&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;292GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-003&lt;/td&gt;
 &lt;td&gt;BLADE-03&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-005&lt;/td&gt;
 &lt;td&gt;BLADE-05&lt;/td&gt;
 &lt;td&gt;HDD-011&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;146GB&lt;/td&gt;
 &lt;td&gt;mixed config&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-005&lt;/td&gt;
 &lt;td&gt;BLADE-05&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;300GB&lt;/td&gt;
 &lt;td&gt;mixed config&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-006&lt;/td&gt;
 &lt;td&gt;BLADE-06&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-007&lt;/td&gt;
 &lt;td&gt;BLADE-07&lt;/td&gt;
 &lt;td&gt;HDD-013&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;900GB&lt;/td&gt;
 &lt;td&gt;mixed config&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-007&lt;/td&gt;
 &lt;td&gt;BLADE-07&lt;/td&gt;
 &lt;td&gt;HDD-014&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;900GB&lt;/td&gt;
 &lt;td&gt;mixed config&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-008&lt;/td&gt;
 &lt;td&gt;BLADE-08&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-010&lt;/td&gt;
 &lt;td&gt;BLADE-10&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-011&lt;/td&gt;
 &lt;td&gt;BLADE-11&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-012&lt;/td&gt;
 &lt;td&gt;BLADE-12&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;BLD-015&lt;/td&gt;
 &lt;td&gt;BLADE-15&lt;/td&gt;
 &lt;td&gt;HDD-012&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;600GB&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h1 id="storage-media-overviews"&gt;Storage Media Overviews
&lt;/h1&gt;&lt;p&gt;Here are some brief overviews of the storage media types in the inventory, highlighting their characteristics and typical applications.&lt;/p&gt;
&lt;h3 id="enterprise-sas-hdds-eg-hdd-001-hdd-002"&gt;Enterprise SAS HDDs (e.g., HDD-001, HDD-002)
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;73GB / 146GB · 7200 RPM · SAS 3Gbps · make/model unidentified&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;These hard disk drives are engineered for high reliability and continuous operation within server environments. SAS (Serial Attached SCSI) interfaces provide superior performance, enhanced reliability, and enterprise-specific features compared to consumer-grade SATA drives. SAS HDDs of this generation (e.g., 73GB or 146GB at 7200 RPM with SAS 3Gbps) were common in servers from the late 2000s. Despite their modest capacities by today&amp;rsquo;s standards, their robust construction and enterprise-grade design make them suitable for homelab applications where durability is prioritized, such as for boot drives or less critical data storage.&lt;/p&gt;
&lt;h3 id="seagate-constellation-es3-st1000nm0043-eg-hdd-003--datasheet"&gt;Seagate Constellation ES.3 ST1000NM0043 (e.g., HDD-003) — &lt;a class="link" href="https://www.seagate.com/www-content/product-content/constellation-fam/constellation-es/constellation-es-3/en-us/docs/constellation-es-3-data-sheet-ds1769-1-1210us.pdf" target="_blank" rel="noopener"
 &gt;datasheet&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;1TB · 7200 RPM · SAS 6Gbps · 128MB cache · 1.4M hr MTBF · AES-256 SED&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Seagate Constellation ES.3 series represents enterprise-class hard drives designed for high-capacity, 24/7 operation in data centers. The ST1000NM0043 is a 1TB model, featuring a 7200 RPM spindle speed and a SAS 6Gbps interface. These drives offer an excellent balance of capacity, performance, and enterprise-level reliability, making them ideal for bulk storage in homelab NAS or storage arrays where data integrity and longevity are critical.&lt;/p&gt;
&lt;h3 id="enterprise-ssd-eg-hdd-004"&gt;Enterprise SSD (e.g., HDD-004)
&lt;/h3&gt;&lt;p&gt;&lt;em&gt;120GB · SATA/SAS · make/model unidentified&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Enterprise Solid State Drives (SSDs) are built to withstand demanding server workloads, providing significantly higher endurance, consistent performance, and often integrated power loss protection features that surpass those of consumer SSDs. A 120GB enterprise SSD, whether with a SATA or SAS interface, would typically be deployed as an operating system boot drive, for caching solutions, or for hosting small, performance-sensitive applications within a server environment. Their speed and inherent reliability, even with smaller capacities, can considerably enhance overall system responsiveness.&lt;/p&gt;</description></item><item><title>LVM — Logical Volume Manager</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/lvm/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/lvm/</guid><description>&lt;p&gt;LVM adds a virtualisation layer between physical disks and filesystems. Instead of formatting a disk partition directly, you assemble physical volumes into a volume group and carve logical volumes out of the pool. This makes resizing, snapshots, and spanning volumes across multiple disks straightforward operations rather than destructive partition table surgery.&lt;/p&gt;
&lt;h2 id="layers"&gt;Layers
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Physical Volume (PV)&lt;/td&gt;
 &lt;td&gt;A disk or partition initialised for LVM use (&lt;code&gt;pvcreate&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Volume Group (VG)&lt;/td&gt;
 &lt;td&gt;A pool of storage assembled from one or more PVs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Logical Volume (LV)&lt;/td&gt;
 &lt;td&gt;A virtual partition carved from a VG, formatted and mounted like a regular disk&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Initialise two disks as PVs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;pvcreate /dev/sdb /dev/sdc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create a VG from both&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vgcreate data-vg /dev/sdb /dev/sdc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Create an LV using all available space&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lvcreate -l 100%FREE -n data-lv data-vg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Format and mount&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mkfs.ext4 /dev/data-vg/data-lv
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mount /dev/data-vg/data-lv /mnt/data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="resizing"&gt;Resizing
&lt;/h2&gt;&lt;p&gt;The practical benefit over raw partitions: extend a logical volume online without unmounting:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Extend the LV by 50GB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lvextend -L +50G /dev/data-vg/data-lv
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Grow the filesystem to fill the new space&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;resize2fs /dev/data-vg/data-lv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="snapshots"&gt;Snapshots
&lt;/h2&gt;&lt;p&gt;LVM supports copy-on-write snapshots. A snapshot captures the LV state at a point in time and stores only the blocks that change afterwards:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lvcreate -L 10G -s -n data-snap /dev/data-vg/data-lv
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Used for consistent backups of live filesystems — snapshot, back up the snapshot, remove it. Rook/Ceph and cloud providers use similar snapshot semantics at the storage layer.&lt;/p&gt;
&lt;h2 id="resources"&gt;Resources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://sourceware.org/lvm2/" target="_blank" rel="noopener"
 &gt;LVM2 documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/configuring_and_managing_logical_volumes/" target="_blank" rel="noopener"
 &gt;Red Hat LVM administration guide&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>OpenShift Data Foundation</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/odf/</link><pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/odf/</guid><description>&lt;p&gt;OpenShift Data Foundation (ODF) is Red Hat&amp;rsquo;s enterprise Kubernetes storage platform, built on &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/cloud-infrastructure/ceph/" &gt;Ceph&lt;/a&gt; orchestrated by &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/kubernetes/rook/" &gt;Rook&lt;/a&gt;. Where Rook-Ceph is the open source upstream, ODF packages it with an operator, a validated configuration, enterprise support, and integration with the OpenShift console. It provides block (RBD), file (CephFS), and object (S3-compatible via Ceph RGW) storage as Kubernetes StorageClasses on the same hardware.&lt;/p&gt;
&lt;h2 id="what-it-provides"&gt;What it provides
&lt;/h2&gt;&lt;p&gt;Three storage modes from one cluster:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Mode&lt;/th&gt;
 &lt;th&gt;StorageClass&lt;/th&gt;
 &lt;th&gt;Use case&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Block (RBD)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ocs-storagecluster-ceph-rbd&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Databases, stateful apps needing a single-writer disk&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;File (CephFS)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ocs-storagecluster-cephfs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Shared filesystems, multiple pods reading/writing the same volume&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Object&lt;/td&gt;
 &lt;td&gt;S3-compatible endpoint&lt;/td&gt;
 &lt;td&gt;Buckets via &lt;code&gt;ObjectBucketClaim&lt;/code&gt;, backup targets, artifact storage&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;ODF installs via the ODF operator from OperatorHub. The operator creates a &lt;code&gt;StorageCluster&lt;/code&gt; CR that drives the Ceph deployment:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;apiVersion&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ocs.openshift.io/v1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;kind&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;StorageCluster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;metadata&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ocs-storagecluster&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;namespace&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;openshift-storage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;storageDeviceSets&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ocs-deviceset&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;count&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;replica&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;dataPVCTemplate&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;spec&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;storageClassName&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;local-storage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;volumeMode&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Block&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;resources&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;requests&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;storage&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1Ti&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Requires at minimum three nodes with dedicated block devices. The operator handles Ceph cluster formation, monitors, MGRs, and OSDs.&lt;/p&gt;
&lt;h2 id="vs-rook-ceph"&gt;vs Rook-Ceph
&lt;/h2&gt;&lt;p&gt;ODF IS Rook-Ceph under the hood. The difference is packaging and support: ODF is tested and supported on OpenShift, includes the NooBaa multi-cloud gateway for object storage federation, and integrates with the OpenShift UI. For self-managed Kubernetes outside OpenShift, raw Rook-Ceph is the equivalent path.&lt;/p&gt;
&lt;h2 id="resources"&gt;Resources
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://access.redhat.com/documentation/en-us/red_hat_openshift_data_foundation/" target="_blank" rel="noopener"
 &gt;ODF documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://rook.io/docs/rook/latest/" target="_blank" rel="noopener"
 &gt;Rook documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>