<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Welcome to Leo&#39;s Tech Log on Leo&#39;s Technical Log</title>
    <link>https://jksoftcn.com/en/</link>
    <description>Recent content in Welcome to Leo&#39;s Tech Log on Leo&#39;s Technical Log</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sat, 20 Dec 2025 00:00:00 +0000</lastBuildDate>
      <atom:link href="https://jksoftcn.com/en/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>My Honest Thoughts on Mice and Keyboards After All These Years</title>
      <link>https://jksoftcn.com/en/blog/thoughts-on-mouse-and-keyboard/</link>
      <pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://jksoftcn.com/en/blog/thoughts-on-mouse-and-keyboard/</guid>
      <description>&lt;p&gt;This is not a review, nor a buying guide.&lt;/p&gt;&#xA;&lt;p&gt;It’s a collection of personal conclusions I’ve reached &lt;strong&gt;after falling into more than enough rabbit holes&lt;/strong&gt;, as a programmer who spends a large portion of each day behind a keyboard and mouse.&lt;/p&gt;&#xA;&lt;p&gt;These conclusions may not fit everyone. But if you, like me:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a computer for long hours every day&lt;/li&gt;&#xA;&lt;li&gt;Switch frequently between macOS and Windows&lt;/li&gt;&#xA;&lt;li&gt;Don’t want to waste time on pointless tinkering&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Then this article might help you &lt;strong&gt;spend less money and avoid unnecessary detours&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-premise-worth-stating-up-front&#34;&gt;A Premise Worth Stating Up Front&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;99% of electronic products have no collectible value.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Keyboards and mice are no exception.&lt;br&gt;&#xA;They age. They depreciate. They get replaced by better options.&lt;/p&gt;&#xA;&lt;p&gt;If a device already feels uncomfortable or awkward to use,&lt;br&gt;&#xA;don’t justify it with “nostalgia,” “habit,” or “I’ll adapt eventually.”&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Sell it early. Cutting your losses is already a win.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-core-views-on-keyboards&#34;&gt;My Core Views on Keyboards&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-typing-feel-comes-first-everything-else-is-secondary&#34;&gt;1. Typing Feel Comes First. Everything Else Is Secondary.&lt;/h3&gt;&#xA;&lt;p&gt;Mechanical, electrostatic capacitive, or membrane—it doesn’t matter.&lt;/p&gt;&#xA;&lt;p&gt;What really matters is this:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Are you willing to type on it for 8 hours a day?&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Specs, switch names, layout dogma—none of that survives long-term use.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-multi-device-switching-matters-more-than-you-think&#34;&gt;2. Multi-Device Switching Matters More Than You Think&lt;/h3&gt;&#xA;&lt;p&gt;If you regularly switch between &lt;strong&gt;two or three computers&lt;/strong&gt;,&lt;br&gt;&#xA;then connection stability and switching convenience matter far more than:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Keycap material&lt;/li&gt;&#xA;&lt;li&gt;RGB lighting&lt;/li&gt;&#xA;&lt;li&gt;“Custom” aesthetics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;keyboard-types-i-actually-endorse-after-long-term-use&#34;&gt;Keyboard Types I Actually Endorse After Long-Term Use&lt;/h2&gt;&#xA;&lt;h3 id=&#34;electrostatic-capacitive-only-niz-35g&#34;&gt;Electrostatic Capacitive: Only NIZ 35g&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;strong&gt;only electrostatic capacitive keyboard&lt;/strong&gt; I personally认可 is the NIZ 35g.&lt;/p&gt;&#xA;&lt;p&gt;The reasons are straightforward:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Consistent typing feel that doesn’t stiffen significantly over time&lt;/li&gt;&#xA;&lt;li&gt;Solid compatibility with both macOS and Windows&lt;/li&gt;&#xA;&lt;li&gt;Multi-mode connectivity that actually works in daily use&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;HHKB is hard to avoid in this category, but my conclusion is blunt:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;It’s more of a geek symbol than a long-term productivity tool.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My own HHKB Pro BT:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Has noticeably stiffened over time&lt;/li&gt;&#xA;&lt;li&gt;The plastic case has started to yellow&lt;/li&gt;&#xA;&lt;li&gt;Resale value is far from impressive&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If your goal is simply to &lt;strong&gt;use a keyboard well&lt;/strong&gt;,&lt;br&gt;&#xA;rather than tuning rubber domes, modding parts, or buying into belief systems,&lt;br&gt;&#xA;you can safely skip the HHKB.&lt;/p&gt;&#xA;&lt;h3 id=&#34;mechanical-keyboards-filco-minila-as-a-representative-example&#34;&gt;Mechanical Keyboards: Filco Minila as a Representative Example&lt;/h3&gt;&#xA;&lt;p&gt;The Filco Minila was the first mechanical keyboard that truly satisfied me.&lt;/p&gt;&#xA;&lt;p&gt;It taught me one important lesson:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Stability matters more than flair.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;The solid feel brought by a steel plate&lt;br&gt;&#xA;is far more tangible than any switch specification on paper.&lt;/p&gt;&#xA;&lt;p&gt;Yes, the ABS keycaps shine over time—that’s one of its few drawbacks.&lt;br&gt;&#xA;But it barely affects actual usability.&lt;/p&gt;&#xA;&lt;h3 id=&#34;membrane-keyboards-only-mx-keys-is-worth-considering&#34;&gt;Membrane Keyboards: Only MX Keys Is Worth Considering&lt;/h3&gt;&#xA;&lt;p&gt;If you’re set on a membrane keyboard, my conclusion is simple:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Only look at MX Keys or MX Keys Mini. Ignore the rest.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I’ve used the K950. It looks similar to MX Keys,&lt;br&gt;&#xA;but build quality, reliability, and overall experience are clearly inferior.&lt;/p&gt;&#xA;&lt;p&gt;MX Keys has its downsides:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The keys have a noticeable central concavity&lt;/li&gt;&#xA;&lt;li&gt;Some users need time to adjust&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;But when it comes to &lt;strong&gt;stability, multi-device support, and minimal fuss&lt;/strong&gt;,&lt;br&gt;&#xA;it remains the best membrane keyboard available.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-core-views-on-mice&#34;&gt;My Core Views on Mice&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-for-a-primary-mouse-ergonomics-are-non-negotiable&#34;&gt;1. For a Primary Mouse, Ergonomics Are Non-Negotiable&lt;/h3&gt;&#xA;&lt;p&gt;If you use a mouse more than 6 hours a day,&lt;br&gt;&#xA;&lt;strong&gt;ergonomics aren’t a bonus—they’re the baseline.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Wrist, forearm, and shoulder strain&lt;br&gt;&#xA;will catch up with you in a very honest way after a few years.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-travel-mice-can-compromisebut-not-too-much&#34;&gt;2. Travel Mice Can Compromise—But Not Too Much&lt;/h3&gt;&#xA;&lt;p&gt;Portability matters,&lt;br&gt;&#xA;but “too light to grip” or “too small to support your hand”&lt;br&gt;&#xA;also leads to fatigue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mouse-types-i-actually-recommend&#34;&gt;Mouse Types I Actually Recommend&lt;/h2&gt;&#xA;&lt;h3 id=&#34;office-workhorse-mx-master-series&#34;&gt;Office Workhorse: MX Master Series&lt;/h3&gt;&#xA;&lt;p&gt;The MX Master 3s is, in my view, the &lt;strong&gt;benchmark for office mice&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It’s not for gaming,&lt;br&gt;&#xA;but in productivity scenarios it offers:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Stable grip&lt;/li&gt;&#xA;&lt;li&gt;Mature feature set&lt;/li&gt;&#xA;&lt;li&gt;Smooth multi-device switching&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Its main drawback is also well-known:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The rubber coating ages and becomes oily.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This affects nearly all mid-to-high-end Logitech mice,&lt;br&gt;&#xA;to the point where some users resort to 3D-printed shells.&lt;/p&gt;&#xA;&lt;h3 id=&#34;ergonomics-focused-mx-vertical&#34;&gt;Ergonomics-Focused: MX Vertical&lt;/h3&gt;&#xA;&lt;p&gt;If you’re already feeling wrist strain,&lt;br&gt;&#xA;MX Vertical is a &lt;strong&gt;serious option worth considering&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You don’t need to “believe in ergonomics.”&lt;br&gt;&#xA;After a few days of use, the difference becomes obvious.&lt;/p&gt;&#xA;&lt;p&gt;Logitech also has a vertical mouse called LIFT.&lt;br&gt;&#xA;Unless you have very small hands, it’s generally not worth considering.&lt;/p&gt;&#xA;&lt;h3 id=&#34;lightweight-option-rog-keris-aimpoint&#34;&gt;Lightweight Option: ROG Keris AimPoint&lt;/h3&gt;&#xA;&lt;p&gt;This type of mouse works well as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A mobile office mouse&lt;/li&gt;&#xA;&lt;li&gt;A secondary or backup device&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;It’s lightweight and supports multi-device switching,&lt;br&gt;&#xA;but for users with larger hands, it’s not ideal as a long-term primary mouse.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-few-realities-about-logitech&#34;&gt;A Few Realities About Logitech&lt;/h2&gt;&#xA;&lt;h3 id=&#34;unifying--logi-bolt-are-not-perfectly-stable&#34;&gt;Unifying / Logi Bolt Are Not “Perfectly Stable”&lt;/h3&gt;&#xA;&lt;p&gt;In theory, they’re more reliable than Bluetooth.&lt;br&gt;&#xA;In reality:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;In environments crowded with wireless devices, interference happens to everyone.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;When issues occur,&lt;br&gt;&#xA;the most effective fix is still the oldest one:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Turn it off. Turn it back on.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;gaming-mice--good-office-mice&#34;&gt;Gaming Mice ≠ Good Office Mice&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Low-end models are not recommended&lt;/li&gt;&#xA;&lt;li&gt;Mid-range models are usable, but imperfect&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;They often suffer from:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Worse battery life compared to office-focused lines&lt;/li&gt;&#xA;&lt;li&gt;No support for Unifying or Logi Bolt&lt;/li&gt;&#xA;&lt;li&gt;Average micro-switch reliability, with no easy replacement&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;final-takeaway&#34;&gt;Final Takeaway&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Don’t mythologize keyboards or mice.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;They are tools, not beliefs.&lt;br&gt;&#xA;Only three things really matter:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Do you feel fatigued after long use?&lt;/li&gt;&#xA;&lt;li&gt;Is switching between devices smooth?&lt;/li&gt;&#xA;&lt;li&gt;If it breaks, does it hurt emotionally?&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If the answers aren’t right,&lt;br&gt;&#xA;replace it—and don’t hesitate.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Do You Really Need ZFS? A Practical Storage Guide for Home and Power Users</title>
      <link>https://jksoftcn.com/en/blog/00-do-you-need-to-use-zfs/</link>
      <pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://jksoftcn.com/en/blog/00-do-you-need-to-use-zfs/</guid>
      <description>&lt;div class=&#34;mermaid&#34;&gt;&#xD;&#xA;graph TD&#xD;&#xA;    Start[Start Choosing a Storage Solution] --&gt; Q1{Is your total data&lt;br/&gt;under 4TB?}&#xD;&#xA;    &#xD;&#xA;    Q1 --&gt;|Yes| Q2{Do multiple devices&lt;br/&gt;need access?}&#xD;&#xA;    Q1 --&gt;|No| Q3{Is your budget&lt;br/&gt;over ~$400?}&#xD;&#xA;    &#xD;&#xA;    Q2 --&gt;|No| Q2a{Do you want&lt;br/&gt;automatic backups?}&#xD;&#xA;    Q2 --&gt;|Yes| NAS1[2-bay entry NAS&lt;br/&gt;Synology / QNAP&lt;br/&gt;Built-in filesystem]&#xD;&#xA;    &#xD;&#xA;    Q2a --&gt;|No| HDD[External drive&lt;br/&gt;Cheapest &amp; simplest&lt;br/&gt;Manual backups]&#xD;&#xA;    Q2a --&gt;|Yes| NAS1&#xD;&#xA;    &#xD;&#xA;    Q3 --&gt;|No| HDD&#xD;&#xA;    Q3 --&gt;|Yes| Q4{Linux experience?}&#xD;&#xA;    &#xD;&#xA;    Q4 --&gt;|No| NAS2[4-bay prebuilt NAS&lt;br/&gt;Synology / QNAP&lt;br/&gt;RAID5 / SHR]&#xD;&#xA;    Q4 --&gt;|Yes| Q5{Willing to spend time&lt;br/&gt;learning &amp; maintaining?}&#xD;&#xA;    &#xD;&#xA;    Q5 --&gt;|No| NAS2&#xD;&#xA;    Q5 --&gt;|Yes| Q6{More than 20TB&lt;br/&gt;of data?}&#xD;&#xA;    &#xD;&#xA;    Q6 --&gt;|No| Q7{Is maximum data&lt;br/&gt;integrity critical?}&#xD;&#xA;    Q6 --&gt;|Yes| Q8{Budget over ~$1,400?}&#xD;&#xA;    &#xD;&#xA;    Q7 --&gt;|No| Q7a{Less than&lt;br/&gt;8GB RAM?}&#xD;&#xA;    Q7 --&gt;|Yes| Q7b{At least&lt;br/&gt;16GB RAM?}&#xD;&#xA;    &#xD;&#xA;    Q7a --&gt;|Yes| MDADM1[mdadm RAID1/10&lt;br/&gt;Flexible &amp; cheap]&#xD;&#xA;    Q7a --&gt;|No| Q7b&#xD;&#xA;    &#xD;&#xA;    Q7b --&gt;|No| MDADM1&#xD;&#xA;    Q7b --&gt;|Yes| ZFS1[ZFS on Linux / TrueNAS&lt;br/&gt;Checksums &amp; snapshots]&#xD;&#xA;    &#xD;&#xA;    Q8 --&gt;|No| Q9{At least&lt;br/&gt;32GB RAM?}&#xD;&#xA;    Q8 --&gt;|Yes| Q10{High random I/O&lt;br/&gt;performance needed?}&#xD;&#xA;    &#xD;&#xA;    Q9 --&gt;|No| MDADM2[mdadm RAID6/10&lt;br/&gt;Large arrays]&#xD;&#xA;    Q9 --&gt;|Yes| ZFS2[ZFS RAIDZ2&lt;br/&gt;Large storage pools]&#xD;&#xA;    &#xD;&#xA;    Q10 --&gt;|Yes| HWRAID[Hardware RAID&lt;br/&gt;BBU protected cache]&#xD;&#xA;    Q10 --&gt;|No| ZFS2&#xD;&#xA;&lt;/div&gt;&#xD;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;ZFS has a reputation problem.&lt;/p&gt;&#xA;&lt;p&gt;In many tech communities, it is often portrayed as &lt;em&gt;the&lt;/em&gt; &amp;ldquo;correct&amp;rdquo; way to store data—anything else is seen as risky or amateur. At the same time, seasoned admins warn that ZFS is complex, memory-hungry, and easy to misuse.&lt;/p&gt;&#xA;&lt;p&gt;So where does that leave ordinary users, home labbers, and small NAS builders?&lt;/p&gt;&#xA;&lt;p&gt;This article takes a pragmatic, experience-driven look at whether you actually need ZFS, and how to choose a storage solution that fits your data size, budget, and willingness to maintain it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-external-drives-vs-nas-start-simple&#34;&gt;1. External Drives vs NAS: Start Simple&lt;/h2&gt;&#xA;&lt;h3 id=&#34;when-an-external-drive-is-enough&#34;&gt;When an External Drive Is Enough&lt;/h3&gt;&#xA;&lt;p&gt;An external hard drive is often dismissed as &amp;ldquo;too simple&amp;rdquo;, but for many people it is the &lt;em&gt;right&lt;/em&gt; answer.&lt;/p&gt;&#xA;&lt;p&gt;External drives work well if:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Your total data is &lt;strong&gt;under 4TB&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;You mainly back up &lt;strong&gt;one machine&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;You are on a &lt;strong&gt;tight budget&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Backups are &lt;strong&gt;occasional&lt;/strong&gt;, not continuous&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;For example, backing up a laptop with photos, documents, and personal files does not justify a NAS or RAID. A single 2–4TB external drive plus periodic backups is cheap, reliable, and easy to understand.&lt;/p&gt;&#xA;&lt;p&gt;Complexity is a cost. Avoid it unless you truly need it.&lt;/p&gt;&#xA;&lt;h3 id=&#34;when-a-nas-makes-sense&#34;&gt;When a NAS Makes Sense&lt;/h3&gt;&#xA;&lt;p&gt;A NAS becomes attractive once your needs grow beyond a single device.&lt;/p&gt;&#xA;&lt;p&gt;A NAS is a good fit if:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Multiple devices need &lt;strong&gt;shared access&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;You want &lt;strong&gt;automatic, scheduled backups&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Services must be &lt;strong&gt;online 24/7&lt;/strong&gt; (media server, downloads, remote access)&lt;/li&gt;&#xA;&lt;li&gt;Your data volume is &lt;strong&gt;growing steadily&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Even a basic 2-bay NAS provides redundancy, convenience, and automation that external drives cannot match.&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-do-nas-users-need-zfs&#34;&gt;2. Do NAS Users Need ZFS?&lt;/h2&gt;&#xA;&lt;h3 id=&#34;prebuilt-nas-usually-no&#34;&gt;Prebuilt NAS: Usually No&lt;/h3&gt;&#xA;&lt;p&gt;If you are using a commercial NAS (Synology, QNAP, etc.), &lt;strong&gt;you almost certainly do not need ZFS&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Synology’s Btrfs implementation already provides snapshots and checksums&lt;/li&gt;&#xA;&lt;li&gt;QNAP’s default filesystems are well-tested and supported&lt;/li&gt;&#xA;&lt;li&gt;Vendor GUIs, updates, and documentation matter more than filesystem purity&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Installing ZFS on a prebuilt NAS usually adds risk and complexity without clear benefits.&lt;/p&gt;&#xA;&lt;h3 id=&#34;self-built-nas-maybe&#34;&gt;Self-Built NAS: Maybe&lt;/h3&gt;&#xA;&lt;p&gt;ZFS becomes interesting once you move into self-built systems.&lt;/p&gt;&#xA;&lt;p&gt;ZFS is worth considering if:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Data integrity truly matters&lt;/strong&gt; (irreplaceable photos, archives, work data)&lt;/li&gt;&#xA;&lt;li&gt;You understand concepts like pools, vdevs, datasets, and scrubs&lt;/li&gt;&#xA;&lt;li&gt;You have &lt;strong&gt;enough RAM&lt;/strong&gt; (16GB minimum is realistic)&lt;/li&gt;&#xA;&lt;li&gt;Your storage layout is &lt;strong&gt;planned long-term&lt;/strong&gt;, not constantly changing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;ZFS’s biggest strength is end-to-end checksumming and self-healing. Silent data corruption &lt;em&gt;does&lt;/em&gt; happen—but whether it matters depends on your data.&lt;/p&gt;&#xA;&lt;h3 id=&#34;a-reality-check-for-most-users&#34;&gt;A Reality Check for Most Users&lt;/h3&gt;&#xA;&lt;p&gt;For most home NAS users:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Vendor filesystems are &lt;em&gt;good enough&lt;/em&gt;&lt;/li&gt;&#xA;&lt;li&gt;ZFS features are underutilized&lt;/li&gt;&#xA;&lt;li&gt;Proper backups matter more than filesystem choice&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;ZFS is powerful—but power only helps if you know how to use it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;3-when-does-a-linux-storage-server-make-sense&#34;&gt;3. When Does a Linux Storage Server Make Sense?&lt;/h2&gt;&#xA;&lt;p&gt;Self-built Linux storage is not about saving money—it is about control.&lt;/p&gt;&#xA;&lt;p&gt;It makes sense if:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;You enjoy &lt;strong&gt;learning and maintaining systems&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;You already use Linux comfortably&lt;/li&gt;&#xA;&lt;li&gt;You need &lt;strong&gt;custom workloads&lt;/strong&gt; (VMs, containers, heavy media processing)&lt;/li&gt;&#xA;&lt;li&gt;Your data exceeds &lt;strong&gt;20TB&lt;/strong&gt; and keeps growing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you value your time more than tinkering, a prebuilt NAS is still the better tool.&lt;/p&gt;&#xA;&lt;h2 id=&#34;4-choosing-the-right-storage-technology&#34;&gt;4. Choosing the Right Storage Technology&lt;/h2&gt;&#xA;&lt;h3 id=&#34;mdadm-simple-and-flexible&#34;&gt;mdadm: Simple and Flexible&lt;/h3&gt;&#xA;&lt;p&gt;Linux software RAID (mdadm) is often underrated.&lt;/p&gt;&#xA;&lt;p&gt;It works well when:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Budgets are limited&lt;/li&gt;&#xA;&lt;li&gt;Arrays are small to medium (4–8 drives)&lt;/li&gt;&#xA;&lt;li&gt;Flexibility matters more than elegance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Important caveats&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Rebuilds on large disks can take days&lt;/li&gt;&#xA;&lt;li&gt;RAID5 is risky with modern drive sizes&lt;/li&gt;&#xA;&lt;li&gt;A UPS is not optional&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;RAID1 and RAID10 remain the safest mdadm choices.&lt;/p&gt;&#xA;&lt;h3 id=&#34;hardware-raid-still-relevant&#34;&gt;Hardware RAID: Still Relevant&lt;/h3&gt;&#xA;&lt;p&gt;Hardware RAID is unfashionable, but not obsolete.&lt;/p&gt;&#xA;&lt;p&gt;It excels when:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Random I/O performance is critical&lt;/li&gt;&#xA;&lt;li&gt;Arrays are large (8+ disks)&lt;/li&gt;&#xA;&lt;li&gt;Downtime is unacceptable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you go this route:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use reputable vendors (LSI/Broadcom)&lt;/li&gt;&#xA;&lt;li&gt;Ensure cache protection (BBU or supercapacitor)&lt;/li&gt;&#xA;&lt;li&gt;Verify OS and drive compatibility&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;zfs-powerful-opinionated-demanding&#34;&gt;ZFS: Powerful, Opinionated, Demanding&lt;/h3&gt;&#xA;&lt;p&gt;ZFS shines when:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Data integrity is non-negotiable&lt;/li&gt;&#xA;&lt;li&gt;Snapshots and clones are core workflows&lt;/li&gt;&#xA;&lt;li&gt;Plenty of RAM is available&lt;/li&gt;&#xA;&lt;li&gt;The system is designed upfront and left mostly unchanged&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;ZFS struggles when:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAM is scarce (&amp;lt;8GB)&lt;/li&gt;&#xA;&lt;li&gt;Storage layouts change frequently&lt;/li&gt;&#xA;&lt;li&gt;Hardware or power is unreliable&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;ZFS rewards discipline—and punishes shortcuts.&lt;/p&gt;&#xA;&lt;h2 id=&#34;5-high-level-comparison&#34;&gt;5. High-Level Comparison&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Solution&lt;/th&gt;&#xA;          &lt;th&gt;Performance&lt;/th&gt;&#xA;          &lt;th&gt;Flexibility&lt;/th&gt;&#xA;          &lt;th&gt;Reliability&lt;/th&gt;&#xA;          &lt;th&gt;Cost&lt;/th&gt;&#xA;          &lt;th&gt;Best For&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;mdadm&lt;/td&gt;&#xA;          &lt;td&gt;Medium&lt;/td&gt;&#xA;          &lt;td&gt;High&lt;/td&gt;&#xA;          &lt;td&gt;Medium&lt;/td&gt;&#xA;          &lt;td&gt;Low&lt;/td&gt;&#xA;          &lt;td&gt;Home servers, small arrays&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Hardware RAID&lt;/td&gt;&#xA;          &lt;td&gt;High&lt;/td&gt;&#xA;          &lt;td&gt;Low&lt;/td&gt;&#xA;          &lt;td&gt;High&lt;/td&gt;&#xA;          &lt;td&gt;High&lt;/td&gt;&#xA;          &lt;td&gt;Performance-critical workloads&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ZFS&lt;/td&gt;&#xA;          &lt;td&gt;Medium–High&lt;/td&gt;&#xA;          &lt;td&gt;Medium&lt;/td&gt;&#xA;          &lt;td&gt;High&lt;/td&gt;&#xA;          &lt;td&gt;Medium&lt;/td&gt;&#xA;          &lt;td&gt;Integrity-focused users&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;6-practical-recommendations&#34;&gt;6. Practical Recommendations&lt;/h2&gt;&#xA;&lt;h3 id=&#34;a-sensible-upgrade-path&#34;&gt;A Sensible Upgrade Path&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Beginner (&amp;lt;4TB)&lt;/strong&gt;&lt;br&gt;&#xA;External drive + manual backups&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Intermediate (4–12TB)&lt;/strong&gt;&lt;br&gt;&#xA;2–4 bay NAS with vendor filesystem&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Advanced (&amp;gt;12TB, technical users)&lt;/strong&gt;&lt;br&gt;&#xA;Self-built Linux server with ZFS or mdadm&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Professional (&amp;gt;50TB, critical data)&lt;/strong&gt;&lt;br&gt;&#xA;Hardware RAID + enterprise drives + UPS + offsite backups&lt;/p&gt;&#xA;&lt;h3 id=&#34;principles-that-actually-matter&#34;&gt;Principles That Actually Matter&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Backups beat RAID&lt;/strong&gt;: RAID does not protect against deletion, malware, or disasters&lt;/li&gt;&#xA;&lt;li&gt;Follow &lt;strong&gt;3-2-1 backups&lt;/strong&gt;: 3 copies, 2 media types, 1 offsite&lt;/li&gt;&#xA;&lt;li&gt;Choose systems you can &lt;strong&gt;maintain long-term&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Simpler systems fail less often&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;Most people do &lt;strong&gt;not&lt;/strong&gt; need ZFS.&lt;/p&gt;&#xA;&lt;p&gt;They need reliable hardware, boring configurations, and tested backups.&lt;/p&gt;&#xA;&lt;p&gt;ZFS is an excellent tool—when used for the right reasons, by users who understand its trade-offs. For everyone else, a simpler solution will be safer, cheaper, and easier to live with.&lt;/p&gt;&#xA;&lt;p&gt;The best storage system is not the most advanced one—it is the one you can keep running correctly for years.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>ZFS Core Concepts and a Quick Start Guide</title>
      <link>https://jksoftcn.com/en/blog/01-zfs-core-concepts-and-quick-start/</link>
      <pubDate>Sun, 30 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://jksoftcn.com/en/blog/01-zfs-core-concepts-and-quick-start/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;ZFS (Zettabyte File System) is a revolutionary storage system originally developed by Sun Microsystems and now maintained by the OpenZFS community. Unlike traditional file systems, ZFS is not just a filesystem—it is a complete storage management solution that integrates volume management and filesystem functionality into a single coherent system.&lt;/p&gt;&#xA;&lt;p&gt;In this article, we’ll walk through the core concepts behind ZFS and get hands-on by creating our first ZFS storage pool on Linux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-zfs&#34;&gt;What Is ZFS?&lt;/h2&gt;&#xA;&lt;p&gt;First released in 2005, ZFS was designed with an ambitious goal: to build a filesystem that would &lt;em&gt;never silently corrupt data&lt;/em&gt;. To achieve this, ZFS introduced a number of groundbreaking features, including Copy-on-Write (CoW), end-to-end checksumming, snapshots, and clones.&lt;/p&gt;&#xA;&lt;h3 id=&#34;key-features-of-zfs&#34;&gt;Key Features of ZFS&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Strong data integrity guarantees&lt;/strong&gt;&#xA;Every data block is protected by a checksum, allowing ZFS to detect and even repair silent data corruption.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Massive scalability&lt;/strong&gt;&#xA;Theoretical maximum storage capacity reaches 256 quadrillion zettabytes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Simplified administration&lt;/strong&gt;&#xA;No need for manual partitioning or traditional formatting workflows.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Advanced built-in features&lt;/strong&gt;&#xA;Snapshots, clones, compression, deduplication, and more.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Flexible RAID support&lt;/strong&gt;&#xA;Native support for mirrors and RAID-Z configurations.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;zfs-design-philosophy&#34;&gt;ZFS Design Philosophy&lt;/h2&gt;&#xA;&lt;p&gt;ZFS stands out largely because of a few fundamental design principles.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-end-to-end-data-integrity&#34;&gt;1. End-to-End Data Integrity&lt;/h3&gt;&#xA;&lt;p&gt;ZFS computes a checksum for every block of data and stores that checksum in the parent block rather than alongside the data itself. This design allows ZFS to detect corruption anywhere along the data path—whether caused by failing disks, faulty controllers, or firmware bugs.&lt;/p&gt;&#xA;&lt;p&gt;If redundancy is available, ZFS can automatically repair corrupted data without user intervention.&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-copy-on-write-cow&#34;&gt;2. Copy-on-Write (CoW)&lt;/h3&gt;&#xA;&lt;p&gt;ZFS never overwrites existing data. When data is modified, it is written to a new location, and only after the write succeeds are the metadata pointers updated.&lt;/p&gt;&#xA;&lt;p&gt;This approach provides several important benefits:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Transactional semantics that keep the filesystem always consistent&lt;/li&gt;&#xA;&lt;li&gt;Near-zero-cost snapshots&lt;/li&gt;&#xA;&lt;li&gt;Elimination of the classic “write hole” problem&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;3-storage-pooling&#34;&gt;3. Storage Pooling&lt;/h3&gt;&#xA;&lt;p&gt;ZFS abstracts physical storage devices into a &lt;em&gt;storage pool&lt;/em&gt;. All filesystems draw space from this shared pool, removing the rigid constraints of traditional partition-based layouts.&lt;/p&gt;&#xA;&lt;p&gt;Filesystems can grow dynamically as needed—no resizing or re-partitioning required.&lt;/p&gt;&#xA;&lt;h3 id=&#34;4-simplified-management&#34;&gt;4. Simplified Management&lt;/h3&gt;&#xA;&lt;p&gt;ZFS embraces the idea that “everything belongs to the filesystem.” Tasks that traditionally require multiple tools (&lt;code&gt;fdisk&lt;/code&gt;, &lt;code&gt;mkfs&lt;/code&gt;, &lt;code&gt;lvm&lt;/code&gt;, etc.) can all be performed using a unified ZFS command set, significantly reducing operational complexity.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;core-concepts&#34;&gt;Core Concepts&lt;/h2&gt;&#xA;&lt;p&gt;To work effectively with ZFS, it’s essential to understand a few core abstractions.&lt;/p&gt;&#xA;&lt;h3 id=&#34;storage-pools&#34;&gt;Storage Pools&lt;/h3&gt;&#xA;&lt;p&gt;A &lt;em&gt;storage pool&lt;/em&gt; is the foundation of ZFS. It consists of one or more &lt;em&gt;virtual devices&lt;/em&gt; (vdevs) and represents a shared pool of storage capacity and I/O resources.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Key characteristics:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pools can be expanded by adding new devices&lt;/li&gt;&#xA;&lt;li&gt;Performance depends on the layout and type of vdevs&lt;/li&gt;&#xA;&lt;li&gt;All filesystems in the pool share the same space and I/O bandwidth&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;virtual-devices-vdevs&#34;&gt;Virtual Devices (vdevs)&lt;/h3&gt;&#xA;&lt;p&gt;A vdev is the basic building block of a ZFS pool. Common vdev types include:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Single disk&lt;/strong&gt; – simplest setup, no redundancy&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mirror&lt;/strong&gt; – similar to RAID 1, full data replication&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;RAID-Z&lt;/strong&gt; – ZFS-native RAID with parity&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;RAID-Z1: single parity, tolerates 1 disk failure&lt;/li&gt;&#xA;&lt;li&gt;RAID-Z2: double parity, tolerates 2 disk failures&lt;/li&gt;&#xA;&lt;li&gt;RAID-Z3: triple parity, tolerates 3 disk failures&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Pool redundancy is determined by its vdevs. If any single vdev fails, the entire pool fails. For production systems, every vdev should provide adequate redundancy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;datasets&#34;&gt;Datasets&lt;/h3&gt;&#xA;&lt;p&gt;In ZFS, &lt;em&gt;dataset&lt;/em&gt; is a generic term that includes:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Filesystems&lt;/strong&gt; – mountable directory trees&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Volumes (zvols)&lt;/strong&gt; – block devices, commonly used for VM disks&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Snapshots&lt;/strong&gt; – read-only point-in-time copies&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Clones&lt;/strong&gt; – writable copies created from snapshots&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Datasets are hierarchical and can inherit properties from their parent datasets.&lt;/p&gt;&#xA;&lt;h3 id=&#34;properties&#34;&gt;Properties&lt;/h3&gt;&#xA;&lt;p&gt;Many ZFS features are controlled via dataset properties, such as:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;compression&lt;/code&gt; – lz4, gzip, zstd, etc.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;quota&lt;/code&gt; – space usage limits&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;reservation&lt;/code&gt; – guaranteed space&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;atime&lt;/code&gt; – access time updates&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;copies&lt;/code&gt; – number of data replicas&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Properties can be set at any level and inherited by child datasets.&lt;/p&gt;&#xA;&lt;h3 id=&#34;snapshots-and-clones&#34;&gt;Snapshots and Clones&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;Snapshots&lt;/strong&gt; are one of ZFS’s most powerful features:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Created almost instantly&lt;/li&gt;&#xA;&lt;li&gt;Consume no space initially&lt;/li&gt;&#xA;&lt;li&gt;Only store changed data blocks&lt;/li&gt;&#xA;&lt;li&gt;Can be rolled back or sent to another system&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Clones&lt;/strong&gt; are writable datasets created from snapshots:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Initially share all data blocks with the snapshot&lt;/li&gt;&#xA;&lt;li&gt;Consume additional space only for modified data&lt;/li&gt;&#xA;&lt;li&gt;Can diverge independently over time&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;hands-on-installing-and-using-zfs-on-linux&#34;&gt;Hands-On: Installing and Using ZFS on Linux&lt;/h2&gt;&#xA;&lt;p&gt;Let’s install ZFS and create our first storage pool. The examples below use Ubuntu/Debian.&lt;/p&gt;&#xA;&lt;h3 id=&#34;step-1-install-zfs&#34;&gt;Step 1: Install ZFS&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install zfsutils-linux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zfs version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zpool version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For CentOS/RHEL:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo yum install epel-release&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo yum install https://zfsonlinux.org/epel/zfs-release-2-2&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;rpm --eval &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%{dist}&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;.noarch.rpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo yum install kernel-devel zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo modprobe zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-2-prepare-disks&#34;&gt;Step 2: Prepare Disks&lt;/h3&gt;&#xA;&lt;p&gt;Identify available disks:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; Creating a ZFS pool will erase all data on the selected disks.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-3-create-your-first-pool&#34;&gt;Step 3: Create Your First Pool&lt;/h3&gt;&#xA;&lt;p&gt;Single-disk pool (not recommended for production):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool create mypool /dev/sdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool status mypool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-4-create-a-mirrored-pool-recommended&#34;&gt;Step 4: Create a Mirrored Pool (Recommended)&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool create mypool mirror /dev/sdb /dev/sdc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-5-create-a-raid-z-pool&#34;&gt;Step 5: Create a RAID-Z Pool&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool create mypool raidz /dev/sdb /dev/sdc /dev/sdd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-6-pool-management-commands&#34;&gt;Step 6: Pool Management Commands&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool status -v mypool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool iostat mypool &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool get all mypool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-7-create-filesystems&#34;&gt;Step 7: Create Filesystems&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs create mypool/data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs create mypool/data/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zfs list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Set custom mountpoints:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs set mountpoint&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/mnt/mydata mypool/data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-8-common-property-settings&#34;&gt;Step 8: Common Property Settings&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs set compression&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;lz4 mypool/data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs set atime&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;off mypool/data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs set quota&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;10G mypool/data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-9-working-with-snapshots&#34;&gt;Step 9: Working with Snapshots&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs snapshot mypool/data@backup-2024-11-28&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;zfs list -t snapshot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs rollback mypool/data@backup-2024-11-28&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zfs destroy mypool/data@backup-2024-11-28&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;step-10-monitoring-and-maintenance&#34;&gt;Step 10: Monitoring and Maintenance&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool scrub mypool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool status mypool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo zpool history mypool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h2 id=&#34;practical-tips&#34;&gt;Practical Tips&lt;/h2&gt;&#xA;&lt;h3 id=&#34;automated-snapshots&#34;&gt;Automated Snapshots&lt;/h3&gt;&#xA;&lt;p&gt;Use cron to create daily snapshots and clean up old ones.&lt;/p&gt;&#xA;&lt;h3 id=&#34;zfs-sendreceive-for-backups&#34;&gt;ZFS Send/Receive for Backups&lt;/h3&gt;&#xA;&lt;p&gt;Efficient full and incremental replication between systems using &lt;code&gt;zfs send&lt;/code&gt; and &lt;code&gt;zfs receive&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;performance-tuning&#34;&gt;Performance Tuning&lt;/h3&gt;&#xA;&lt;p&gt;Adjust ARC size and monitor cache efficiency via &lt;code&gt;/proc/spl/kstat/zfs/arcstats&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;frequently-asked-questions&#34;&gt;Frequently Asked Questions&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Can disks be removed from a ZFS pool?&lt;/strong&gt;&#xA;Not directly. Mirrors can be detached, but RAID-Z pools must be rebuilt.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;How do I expand a pool?&lt;/strong&gt;&#xA;Add new vdevs using &lt;code&gt;zpool add&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Is ZFS fast?&lt;/strong&gt;&#xA;Yes—especially with sufficient RAM. A common guideline is 1 GB RAM per TB of storage.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Does ZFS support encryption?&lt;/strong&gt;&#xA;Yes. Native encryption is supported at the dataset level.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;ZFS is a powerful and reliable storage platform that seamlessly combines volume management and filesystem functionality. While it introduces several new concepts, its core ideas are straightforward: pooled storage, copy-on-write, and end-to-end data integrity.&lt;/p&gt;&#xA;&lt;p&gt;By following this guide, you’ve learned how to create pools, filesystems, and snapshots, and how to manage a basic ZFS setup. From here, you can explore advanced features such as replication, encryption, and deduplication.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Best practices to remember:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Always use redundancy in production&lt;/li&gt;&#xA;&lt;li&gt;Run regular scrubs&lt;/li&gt;&#xA;&lt;li&gt;Make extensive use of snapshots&lt;/li&gt;&#xA;&lt;li&gt;Provision enough memory for optimal performance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Happy hacking with ZFS 🚀&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://jksoftcn.com/en/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jksoftcn.com/en/about/</guid>
      <description>&lt;p&gt;I am a software engineer based in China with over twenty years of experience in software development, primarily focusing on system-level software and engineering practices.&lt;/p&gt;&#xA;&lt;p&gt;Throughout my career, I have worked across a range of technical domains driven by business needs, including Windows desktop and driver development, the Android platform, big data processing, recommendation systems, deep learning applications, and Linux user-space development. These experiences have given me practical insights into software design, performance, and reliability across different environments and system scales.&lt;/p&gt;&#xA;&lt;p&gt;My primary programming language is C++. In professional projects, I have also used C, Python, Java, Scala, Rust, and Go, both extensively and on a project basis. Out of personal interest and curiosity about language design, I have also explored Object Pascal, Zig, and R.&lt;/p&gt;&#xA;&lt;p&gt;I currently work mainly in Windows and Linux environments.&lt;/p&gt;&#xA;&lt;p&gt;This blog is used to document technical details, problem analysis, architectural thinking, and practical experience related to programming languages, system implementation, and software engineering. The content is practice-oriented and also includes some personal reflections.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Contact</title>
      <link>https://jksoftcn.com/en/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jksoftcn.com/en/contact/</guid>
      <description>&lt;p class=&#34;error message js-hidden&#34;&gt;You must have Javascript enabled to use this function.&lt;/p&gt;&#xA;&lt;p class=&#34;success message hidden&#34; data-contact-submitted&gt;Your message was sent.&lt;/p&gt;&#xA;&lt;p class=&#34;error message hidden&#34; data-contact-error&gt;There was an error sending the message.&lt;/p&gt;&#xA;&#xA;&lt;form class=&#34;contact-form hidden&#34; data-protect=&#34;/php/contact.php&#34; action=&#34;#&#34; method=&#34;post&#34; accept-charset=&#34;UTF-8&#34;&gt;&#xA;  &lt;label for=&#34;edit-name&#34;&gt;Name&lt;/label&gt;&#xA;  &lt;input type=&#34;text&#34; id=&#34;edit-name&#34; name=&#34;name&#34; placeholder=&#34;Your name&#34; required autofocus&gt;&#xA;  &lt;label for=&#34;edit-mail&#34;&gt;E-mail address&lt;/label&gt;&#xA;  &lt;input type=&#34;email&#34; id=&#34;edit-mail&#34; name=&#34;email&#34; placeholder=&#34;Your e-mail address&#34; required&gt;&#xA;  &lt;input type=&#34;text&#34; id=&#34;edit-url&#34; class=&#34;hidden&#34; name=&#34;url&#34; placeholder=&#34;Skip if you are a human&#34;&gt;&#xA;  &lt;label for=&#34;edit-subject&#34;&gt;Subject&lt;/label&gt;&#xA;  &lt;input type=&#34;text&#34; id=&#34;edit-subject&#34; name=&#34;subject&#34; placeholder=&#34;A short subject&#34; required&gt;&#xA;  &lt;label for=&#34;edit-message&#34;&gt;Message&lt;/label&gt;&#xA;  &lt;textarea id=&#34;edit-message&#34; name=&#34;message&#34; rows=&#34;5&#34; placeholder=&#34;The messages go here…&#34; required&gt;&lt;/textarea&gt;&#xA;  &lt;button type=&#34;submit&#34; name=&#34;submit&#34; disabled&gt;Send message&lt;/button&gt;&#xA;&lt;/form&gt;&#xA;&#xA;</description>
    </item>
    <item>
      <title>Search</title>
      <link>https://jksoftcn.com/en/search/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jksoftcn.com/en/search/</guid>
      <description>&lt;p class=&#34;error message js-hidden&#34;&gt;You must have Javascript enabled to use this function.&lt;/p&gt;&#xA;&lt;p class=&#34;info message hidden&#34; data-search-loading&gt;Loading search index…&lt;/p&gt;&#xA;&#xA;&lt;div data-search-input class=&#34;hidden&#34;&gt;&#xA;  &lt;form data-search-form id=&#34;search-form&#34; action=&#34;#&#34; method=&#34;post&#34; accept-charset=&#34;UTF-8&#34; role=&#34;search&#34;&gt;&#xA;    &lt;label for=&#34;query&#34; class=&#34;visually-hidden&#34;&gt;Search&lt;/label&gt;&#xA;    &lt;input data-search-text type=&#34;search&#34; id=&#34;query&#34; name=&#34;query&#34; placeholder=&#34;Enter the terms you wish to search for.&#34; maxlength=&#34;128&#34;&gt;&#xA;  &lt;/form&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div data-search-results&gt;&lt;/div&gt;&#xA;&#xA;&lt;template&gt;&#xA;  &lt;article data-search-result class=&#34;list-view&#34;&gt;&#xA;    &lt;header&gt;&#xA;      &lt;h2 class=&#34;title mt--s mb--xxs&#34;&gt;&lt;a href=&#34;#&#34;&gt;Title here&lt;/a&gt;&lt;/h2&gt;&#xA;      &lt;div class=&#34;submitted&#34;&gt;&lt;time class=&#34;created-date&#34;&gt;Date here&lt;/time&gt;&lt;/div&gt;&#xA;    &lt;/header&gt;&#xA;    &lt;p class=&#34;content&#34;&gt;Summary here&lt;/p&gt;&#xA;  &lt;/article&gt;&#xA;&lt;/template&gt;&#xA;&#xA;</description>
    </item>
  </channel>
</rss>
