<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>NAS on KnightLi Blog</title>
        <link>https://knightli.com/en/tags/nas/</link>
        <description>Recent content in NAS on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 31 May 2026 12:23:55 +0800</lastBuildDate><atom:link href="https://knightli.com/en/tags/nas/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>How to Manage Multiple Devices and Folders in Syncthing: Topology, Naming, and Versioning</title>
        <link>https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/</link>
        <pubDate>Sun, 31 May 2026 12:23:55 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/</guid>
        <description>&lt;h2 id=&#34;syncthing-series&#34;&gt;Syncthing Series
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/&#34; &gt;How to Use Syncthing: Practical Notes from Device Pairing to File Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/&#34; &gt;Deploying Syncthing with Docker: Compose, Ports, and Volume Mapping Pitfalls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/&#34; &gt;How to Configure Multiple Devices in Syncthing: Peer Networks, Star Topology, and Introducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/&#34; &gt;How to Use Syncthing on Android: Syncthing-Fork Setup and Photo Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/&#34; &gt;How to Manage Multiple Devices and Folders in Syncthing: Topology, Naming, and Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/&#34; &gt;How to Sync iPhone Photos to a Computer or NAS with Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once Syncthing has many devices and many folders, it can quickly become messy if you do not plan ahead.
The typical setup is a phone, tablet, laptop, desktop, and NAS all syncing at once, while folders contain photos, work documents, code projects, chat backups, and ebooks. Every device may modify files, every folder may be shared, and eventually it becomes hard to tell where a file came from and where it will sync next.&lt;/p&gt;
&lt;p&gt;To keep Syncthing stable, the core is not installing more clients, but building a management model:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use a star topology.&lt;/li&gt;
&lt;li&gt;Standardize folder IDs and paths.&lt;/li&gt;
&lt;li&gt;Use introducers for device relationships.&lt;/li&gt;
&lt;li&gt;Separate backups from two-way sync by data direction.&lt;/li&gt;
&lt;li&gt;Enable versioning on the central node.&lt;/li&gt;
&lt;li&gt;Filter temporary files with ignore patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;topology-avoid-full-mesh-prefer-star&#34;&gt;Topology: Avoid Full Mesh, Prefer Star
&lt;/h2&gt;&lt;p&gt;Syncthing is a P2P architecture, but that does not mean every device should pair with every other device.&lt;/p&gt;
&lt;p&gt;If 5 devices are fully connected, you need to maintain 10 device relationships. When you add a new folder, you also need to accept it, set paths, and confirm sharing across multiple devices. The more devices you have, the higher the management cost.&lt;/p&gt;
&lt;p&gt;A star topology is usually better.&lt;/p&gt;
&lt;p&gt;Choose one always-on, spacious, and stable device as the hub:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAS&lt;/li&gt;
&lt;li&gt;Synology&lt;/li&gt;
&lt;li&gt;soft router&lt;/li&gt;
&lt;li&gt;mini PC&lt;/li&gt;
&lt;li&gt;a computer that stays on 24/7&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All other devices pair only with the hub:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Phone ----\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Tablet ----\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Laptop ---- NAS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Desktop ---/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The phone does not directly add the laptop, and the laptop does not directly add the desktop. If the phone needs to sync photos to a computer, it syncs to the NAS first, then the NAS syncs them to the computer.&lt;/p&gt;
&lt;p&gt;This has several benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New devices only need to pair with the NAS.&lt;/li&gt;
&lt;li&gt;Folder relationships are managed centrally on the NAS.&lt;/li&gt;
&lt;li&gt;The NAS can handle version retention consistently.&lt;/li&gt;
&lt;li&gt;When edge devices go offline, the NAS still acts as a buffer.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The tradeoff is that the NAS becomes more important. It should run reliably and have its own backup.&lt;/p&gt;
&lt;h2 id=&#34;folder-id-matters-more-than-the-folder-label&#34;&gt;Folder ID Matters More Than the Folder Label
&lt;/h2&gt;&lt;p&gt;In Syncthing, the real identifier for a synchronized folder is the &lt;code&gt;Folder ID&lt;/code&gt;, not the label you see in the UI.&lt;/p&gt;
&lt;p&gt;The label is just a display name and may differ across devices. The &lt;code&gt;Folder ID&lt;/code&gt; is what determines whether folders on different devices belong to the same sync group.&lt;/p&gt;
&lt;p&gt;When creating a folder on the first device, specify a clean ID manually.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;notes-main
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;work-docs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;backup-pixel-photos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;backup-iphone-photos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;media-ebooks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;code-projects
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Avoid random generated IDs or long-term-unfriendly names such as &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;sync&lt;/code&gt;, and &lt;code&gt;new-folder&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A simple naming rule is enough:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two-way sync: &lt;code&gt;notes-main&lt;/code&gt;, &lt;code&gt;work-docs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Phone backups: &lt;code&gt;backup-pixel-photos&lt;/code&gt;, &lt;code&gt;backup-iphone-photos&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Media distribution: &lt;code&gt;media-ebooks&lt;/code&gt;, &lt;code&gt;media-music&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Code directories: &lt;code&gt;code-projects&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Later, when other devices receive a shared folder, the Folder ID tells you immediately what the folder is for.&lt;/p&gt;
&lt;h2 id=&#34;keep-hub-paths-organized&#34;&gt;Keep Hub Paths Organized
&lt;/h2&gt;&lt;p&gt;On the NAS or central computer, create one dedicated Syncthing root directory.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/Syncthing/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── Phone_Backup/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── iPhone15_DCIM/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── Pixel7_DCIM/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── Work/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   ├── Office_Docs/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── Coding_Projects/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── Notes/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── Main_Notes/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── Media/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── eBooks/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Do not scatter sync folders across the system. Scattered paths may feel convenient at first, but they become difficult to maintain.&lt;/p&gt;
&lt;p&gt;Recommended rules:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Put all Syncthing-managed folders under one root directory.&lt;/li&gt;
&lt;li&gt;Separate phone backups, work documents, and media files into clear sections.&lt;/li&gt;
&lt;li&gt;Let folder names reflect purpose, not temporary device state.&lt;/li&gt;
&lt;li&gt;Do not use system directories or download caches as long-term sync folders.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If Syncthing runs in Docker, also pay attention to the mapping between host paths and container paths.&lt;/p&gt;
&lt;p&gt;For example, the host path:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/Syncthing/Phone_Backup/iPhone15_DCIM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;may be mounted inside the container as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/syncthing/Phone_Backup/iPhone15_DCIM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The path entered in the Web UI is the container path, not the host path.&lt;/p&gt;
&lt;h2 id=&#34;introducers-reduce-multi-device-pairing-work&#34;&gt;Introducers: Reduce Multi-device Pairing Work
&lt;/h2&gt;&lt;p&gt;Syncthing&amp;rsquo;s &lt;code&gt;Introducer&lt;/code&gt; feature is well suited to star topologies.&lt;/p&gt;
&lt;p&gt;The idea is to make the NAS an introducer. After that, a new device only needs to pair with the NAS. The NAS can introduce known devices and sharing relationships to the new device, reducing repeated scanning and manual adding across devices.&lt;/p&gt;
&lt;p&gt;It works well when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;your home has multiple computers and phones;&lt;/li&gt;
&lt;li&gt;the NAS is the long-running hub;&lt;/li&gt;
&lt;li&gt;you often add new devices;&lt;/li&gt;
&lt;li&gt;you want to reduce pairing work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But do not use it casually.&lt;/p&gt;
&lt;p&gt;Recommended practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only set the NAS or main server as an introducer.&lt;/li&gt;
&lt;li&gt;Do not set ordinary phones, tablets, or temporary computers as introducers.&lt;/li&gt;
&lt;li&gt;After a new device joins, check which devices and folders were added automatically.&lt;/li&gt;
&lt;li&gt;Do not bring untrusted devices into the introducer-managed network.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Introducers improve efficiency, but they also expand automatic relationships. They are best for a clear hub-based network, not a messy temporary device environment.&lt;/p&gt;
&lt;h2 id=&#34;separate-backups-from-two-way-sync&#34;&gt;Separate Backups from Two-way Sync
&lt;/h2&gt;&lt;p&gt;In multi-folder management, one of the most important rules is: do not use &lt;code&gt;Send &amp;amp; Receive&lt;/code&gt; for every folder.&lt;/p&gt;
&lt;p&gt;Different folders have different data directions.&lt;/p&gt;
&lt;h3 id=&#34;phone-photo-backup&#34;&gt;Phone Photo Backup
&lt;/h3&gt;&lt;p&gt;Phone side:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;NAS side:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Receive Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The phone sends photos and the NAS receives them. Cleaning phone storage or organizing the NAS folder is less likely to affect the other side.&lt;/p&gt;
&lt;h3 id=&#34;multi-device-documents-and-notes&#34;&gt;Multi-device Documents and Notes
&lt;/h3&gt;&lt;p&gt;Computer side:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send &amp;amp; Receive
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;NAS side:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send &amp;amp; Receive
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Whether the phone joins this two-way sync depends on whether you truly edit these files on the phone. If the phone only reads them, consider &lt;code&gt;Receive Only&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;media-distribution&#34;&gt;Media Distribution
&lt;/h3&gt;&lt;p&gt;NAS side:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Other devices:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Receive Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is suitable for ebooks, installers, and reference material distributed from a central folder.&lt;/p&gt;
&lt;h3 id=&#34;backup-directories&#34;&gt;Backup Directories
&lt;/h3&gt;&lt;p&gt;Primary device:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Backup machine:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Receive Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then combine it with versioning or snapshots on the backup side.&lt;/p&gt;
&lt;h2 id=&#34;enable-file-versioning-on-the-nas&#34;&gt;Enable File Versioning on the NAS
&lt;/h2&gt;&lt;p&gt;The biggest risks in multi-device sync are accidental deletion and accidental overwrite.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A computer deletes work documents by mistake.&lt;/li&gt;
&lt;li&gt;A phone cleanup tool removes an album directory.&lt;/li&gt;
&lt;li&gt;Two devices edit the same note at the same time.&lt;/li&gt;
&lt;li&gt;A sync rule is misconfigured and an empty directory is synced over.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because of this, the central node should enable file versioning.&lt;/p&gt;
&lt;p&gt;In the NAS Syncthing Web UI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the target folder settings.&lt;/li&gt;
&lt;li&gt;Go to file versioning.&lt;/li&gt;
&lt;li&gt;Choose a suitable versioning strategy.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A common choice is &lt;code&gt;Staggered File Versioning&lt;/code&gt;. It keeps historical versions by time intervals, retaining older versions more sparsely over time.&lt;/p&gt;
&lt;p&gt;You can also use simpler strategies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trash Can File Versioning: similar to a recycle bin.&lt;/li&gt;
&lt;li&gt;Simple File Versioning: keeps a fixed number of versions.&lt;/li&gt;
&lt;li&gt;Staggered File Versioning: keeps versions by time stages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are not sure which to choose, a home NAS can start with Trash Can or Staggered.&lt;/p&gt;
&lt;p&gt;Versioning is not a full backup, but it is the undo button you want in multi-device sync.&lt;/p&gt;
&lt;h2 id=&#34;filter-temporary-files-with-ignore-patterns&#34;&gt;Filter Temporary Files with Ignore Patterns
&lt;/h2&gt;&lt;p&gt;When syncing code projects, document folders, or chat backups across many devices, temporary files and caches can create noise.&lt;/p&gt;
&lt;p&gt;Common problems include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;wasting bandwidth;&lt;/li&gt;
&lt;li&gt;generating meaningless conflicts;&lt;/li&gt;
&lt;li&gt;creating different cache files on different operating systems;&lt;/li&gt;
&lt;li&gt;blocking directory deletion because ignored files remain.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Add rules in the folder&amp;rsquo;s Ignore Patterns.&lt;/p&gt;
&lt;p&gt;Common temporary files:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d).DS_Store
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d)Thumbs.db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d)*~
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Node / Python / Java projects:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d)node_modules/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d)__pycache__/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d).pytest_cache/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d)target/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If a code project is already managed by Git, it is usually not recommended to sync the &lt;code&gt;.git&lt;/code&gt; directory with Syncthing. You can ignore it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d).git/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;(?d)&lt;/code&gt; means that if the whole directory is going to be deleted, Syncthing may delete these locally generated ignored files as well, preventing leftover cache files from blocking the deletion.&lt;/p&gt;
&lt;p&gt;Do not make ignore rules too complex at once. Start with obvious caches and temporary files, then adjust slowly according to real conflicts.&lt;/p&gt;
&lt;h2 id=&#34;multi-folder-naming-examples&#34;&gt;Multi-folder Naming Examples
&lt;/h2&gt;&lt;p&gt;You can use a fixed naming scheme.&lt;/p&gt;
&lt;p&gt;Phone photos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Folder ID: backup-pixel-photos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Label: Pixel Photos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAS Path: /volume1/Syncthing/Phone_Backup/Pixel7_DCIM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;iPhone photos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Folder ID: backup-iphone-photos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Label: iPhone Photos
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAS Path: /volume1/Syncthing/Phone_Backup/iPhone15_DCIM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Main notes vault:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Folder ID: notes-main
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Label: Main Notes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAS Path: /volume1/Syncthing/Notes/Main_Notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Work documents:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Folder ID: work-docs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Label: Work Docs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAS Path: /volume1/Syncthing/Work/Office_Docs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ebooks:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Folder ID: media-ebooks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Label: eBooks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAS Path: /volume1/Syncthing/Media/eBooks
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;As long as IDs, labels, and paths follow rules, multi-device setups are much easier to control.&lt;/p&gt;
&lt;h2 id=&#34;recommended-overall-design&#34;&gt;Recommended Overall Design
&lt;/h2&gt;&lt;p&gt;If you already run Docker Syncthing on a NAS, you can design it like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use the NAS as the hub.&lt;/li&gt;
&lt;li&gt;Set the NAS as the introducer.&lt;/li&gt;
&lt;li&gt;Pair all devices only with the NAS.&lt;/li&gt;
&lt;li&gt;Put all sync folders under &lt;code&gt;/volume1/Syncthing/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use phone &lt;code&gt;Send Only&lt;/code&gt; and NAS &lt;code&gt;Receive Only&lt;/code&gt; for photo folders.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Send &amp;amp; Receive&lt;/code&gt; for work documents and notes.&lt;/li&gt;
&lt;li&gt;Use NAS &lt;code&gt;Send Only&lt;/code&gt; and other devices &lt;code&gt;Receive Only&lt;/code&gt; for distribution folders.&lt;/li&gt;
&lt;li&gt;Enable versioning for important folders on the NAS.&lt;/li&gt;
&lt;li&gt;Configure ignore rules for code and cache directories.&lt;/li&gt;
&lt;li&gt;Back up or snapshot the NAS itself.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once this structure is in place, adding new devices or folders simply means putting them into the existing rules. You do not need to rethink the sync relationships every time.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Syncthing gives you a lot of freedom, but the more freedom you have, the more you need rules.&lt;/p&gt;
&lt;p&gt;For multi-device and multi-folder setups, avoid a fully connected mesh. A steadier approach is to let a NAS or always-on computer act as the hub, then standardize Folder IDs, paths, and versioning. Use folder types to distinguish backups, two-way sync, and distribution folders.&lt;/p&gt;
&lt;p&gt;This keeps Syncthing&amp;rsquo;s P2P capability while bringing day-to-day management back to one central device. Even with many devices and many folders, the sync system will not turn into a tangle.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>How to Sync iPhone Photos to a PC or NAS with Syncthing</title>
        <link>https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/</link>
        <pubDate>Sun, 31 May 2026 12:21:54 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/</guid>
        <description>&lt;h2 id=&#34;syncthing-series&#34;&gt;Syncthing Series
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/&#34; &gt;How to Use Syncthing: Practical Notes from Device Pairing to File Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/&#34; &gt;Deploying Syncthing with Docker: Compose, Ports, and Volume Mapping Tips&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/&#34; &gt;How to Configure Syncthing Across Multiple Devices: Peer Networks, Star Topology, and Introducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/&#34; &gt;How to Use Syncthing on Android: Syncthing-Fork Setup and Photo Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/&#34; &gt;Managing Multiple Devices and Folders in Syncthing: Topology, Naming, and Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/&#34; &gt;How to Sync iPhone Photos to a PC or NAS with Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using Syncthing to sync photos on an iPhone is quite different from doing the same thing on Android.&lt;/p&gt;
&lt;p&gt;The reason is simple: iOS is more locked down, and the official Syncthing project does not provide a first-party iOS client. To use the Syncthing protocol on an iPhone, you usually need a third-party compatible client.&lt;/p&gt;
&lt;p&gt;There are two common choices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Mobius Sync&lt;/code&gt;: a popular option with an experience close to a native app. Some features may require a paid unlock, so check the current App Store description.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;FSync&lt;/code&gt;: a free and open-source Syncthing client for iOS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your goal is to sync the iPhone photo library to a PC or NAS, &lt;code&gt;Mobius Sync&lt;/code&gt; is the more common choice. The steps below use it as the example.&lt;/p&gt;
&lt;h2 id=&#34;understand-the-limits-on-ios-first&#34;&gt;Understand the Limits on iOS First
&lt;/h2&gt;&lt;p&gt;On Android, Syncthing-Fork can run for a long time through a background service, run conditions, and battery optimization exemptions. iOS does not allow third-party sync tools to run in the background without limits.&lt;/p&gt;
&lt;p&gt;This means:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do not expect it to sync 24/7 like a NAS.&lt;/li&gt;
&lt;li&gt;After the app goes into the background, the sync window may be short.&lt;/li&gt;
&lt;li&gt;For large photo batches, it is best to open the app manually and let it finish.&lt;/li&gt;
&lt;li&gt;iCloud optimized storage may affect whether the original photo files can be read.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So on iPhone, Syncthing is better treated as a &amp;ldquo;open the app periodically to sync photos&amp;rdquo; workflow, rather than a fully invisible real-time background sync service.&lt;/p&gt;
&lt;h2 id=&#34;step-1-install-the-client-and-grant-permissions&#34;&gt;Step 1: Install the Client and Grant Permissions
&lt;/h2&gt;&lt;p&gt;After installing &lt;code&gt;Mobius Sync&lt;/code&gt; from the App Store, handle these permissions carefully the first time you open it.&lt;/p&gt;
&lt;h3 id=&#34;notifications&#34;&gt;Notifications
&lt;/h3&gt;&lt;p&gt;It is recommended to allow notifications. They can show sync status, connection status, and error messages.&lt;/p&gt;
&lt;h3 id=&#34;local-network-access&#34;&gt;Local Network Access
&lt;/h3&gt;&lt;p&gt;This permission is very important.&lt;/p&gt;
&lt;p&gt;iOS separately asks whether an app may access the local network. If you deny it, the iPhone may not be able to discover your PC, NAS, or other Syncthing nodes on the LAN.&lt;/p&gt;
&lt;p&gt;If you denied it by mistake, you can enable it again in iOS Settings.&lt;/p&gt;
&lt;h3 id=&#34;photo-library-access&#34;&gt;Photo Library Access
&lt;/h3&gt;&lt;p&gt;If you want to sync photos, you must allow access to the photo library.&lt;/p&gt;
&lt;p&gt;The recommended choice is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Full Access to Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you only grant limited photo access, &lt;code&gt;Mobius Sync&lt;/code&gt; may only see the selected photos, and newly added photos may not be synced later.&lt;/p&gt;
&lt;h2 id=&#34;step-2-pair-the-iphone-with-the-pc-or-nas&#34;&gt;Step 2: Pair the iPhone with the PC or NAS
&lt;/h2&gt;&lt;p&gt;Syncthing pairing still works by exchanging device IDs.&lt;/p&gt;
&lt;p&gt;On the iPhone:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;Mobius Sync&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;code&gt;Settings&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Device ID&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Keep the QR code screen open.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On the PC or NAS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the Syncthing Web UI.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Add Remote Device&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Scan the QR code on the iPhone, or enter the device ID manually.&lt;/li&gt;
&lt;li&gt;Give the device a name, such as &lt;code&gt;My-iPhone&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Return to the iPhone, wait for the connection request, and tap &lt;code&gt;Accept&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;At this point, the iPhone and the PC/NAS trust each other, but the photo library has not been shared yet.&lt;/p&gt;
&lt;h2 id=&#34;step-3-create-a-photo-sync-folder-on-the-iphone&#34;&gt;Step 3: Create a Photo Sync Folder on the iPhone
&lt;/h2&gt;&lt;p&gt;iOS does not let you choose a path like &lt;code&gt;/DCIM/Camera&lt;/code&gt; directly in the same way Android does. &lt;code&gt;Mobius Sync&lt;/code&gt; provides special support for the system photo library, so you need to choose the photo-library folder type.&lt;/p&gt;
&lt;p&gt;In &lt;code&gt;Mobius Sync&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Switch to &lt;code&gt;Folders&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Tap &lt;code&gt;+&lt;/code&gt; in the upper-right corner.&lt;/li&gt;
&lt;li&gt;Create a new folder.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Important fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Folder Type&lt;/code&gt;: choose &lt;code&gt;Camera Roll&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Folder Label&lt;/code&gt;: use an easy-to-recognize name, such as &lt;code&gt;iPhone_Photos&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Folder ID&lt;/code&gt;: you can keep the generated value, or use a stable English ID.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Folder Path&lt;/code&gt;: keep the default so the client can bind to the iOS photo library.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, in the &lt;code&gt;Sharing&lt;/code&gt; section, select the PC or NAS you just paired.&lt;/p&gt;
&lt;h2 id=&#34;step-4-set-the-iphone-side-to-send-only&#34;&gt;Step 4: Set the iPhone Side to Send Only
&lt;/h2&gt;&lt;p&gt;Photo sync is usually &amp;ldquo;phone sends to NAS&amp;rdquo;, not a two-way editing workflow.&lt;/p&gt;
&lt;p&gt;So on the iPhone side, set the folder type to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This makes the iPhone responsible for sending photos out, without accepting reverse changes from the PC or NAS.&lt;/p&gt;
&lt;p&gt;This reduces the risk of accidental operations. For example, when organizing the backup folder on the computer, you usually do not want those changes to affect the iPhone photo library.&lt;/p&gt;
&lt;p&gt;Still, remember that Syncthing is a sync tool, not a complete backup system. For long-term photo safety, you should also use NAS snapshots, file versioning, or an independent backup.&lt;/p&gt;
&lt;h2 id=&#34;step-5-receive-photos-on-the-pc-or-nas&#34;&gt;Step 5: Receive Photos on the PC or NAS
&lt;/h2&gt;&lt;p&gt;After saving on the iPhone, the Syncthing Web UI on the PC or NAS will show a prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device My-iPhone wants to share folder iPhone_Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Click add.&lt;/p&gt;
&lt;p&gt;Set the storage path.&lt;/p&gt;
&lt;p&gt;On Windows, it may look like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;D:\Backups\iPhone_Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On Linux or NAS, it may look like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/photos/iphone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If Syncthing runs in Docker, enter the path inside the container. For example, if the host mount is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;l&#34;&gt;/volume1/photos:/var/syncthing/photos&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then in the Web UI, use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/syncthing/photos/iphone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;set-the-receiving-side-to-receive-only&#34;&gt;Set the Receiving Side to Receive Only
&lt;/h2&gt;&lt;p&gt;On the PC or NAS side, it is also recommended to set this folder type to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Receive Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This makes the receiving side accept photos from the iPhone, without syncing local changes back to the iPhone.&lt;/p&gt;
&lt;p&gt;It is a second layer of protection:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iPhone side: &lt;code&gt;Send Only&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NAS side: &lt;code&gt;Receive Only&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both ends are configured around one-way backup, which better matches a photo archive workflow.&lt;/p&gt;
&lt;h2 id=&#34;the-reality-of-ios-background-sync&#34;&gt;The Reality of iOS Background Sync
&lt;/h2&gt;&lt;p&gt;iOS is strict about background execution. Even with correct settings, do not expect &lt;code&gt;Mobius Sync&lt;/code&gt; to keep running silently in the background all the time.&lt;/p&gt;
&lt;p&gt;Common behavior:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sync speed is normal while the app is open.&lt;/li&gt;
&lt;li&gt;It may keep syncing for a short time after going into the background.&lt;/li&gt;
&lt;li&gt;After a while, the system may pause or limit it.&lt;/li&gt;
&lt;li&gt;Location changes, system scheduling, or short background windows may wake it again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The most reliable practical workflow is simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;After taking many photos, open &lt;code&gt;Mobius Sync&lt;/code&gt; manually.&lt;/li&gt;
&lt;li&gt;Keep the phone awake, or avoid locking the screen too quickly.&lt;/li&gt;
&lt;li&gt;Wait for the new photos to finish syncing.&lt;/li&gt;
&lt;li&gt;Then close the app or lock the screen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you are used to doing a photo backup every few days, this approach is fairly reliable.&lt;/p&gt;
&lt;h2 id=&#34;avoid-icloud-optimized-storage-problems&#34;&gt;Avoid iCloud Optimized Storage Problems
&lt;/h2&gt;&lt;p&gt;If the iPhone has enabled:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Optimize iPhone Storage
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;iOS may keep only thumbnails locally while the original files remain in iCloud. When a third-party sync client tries to read photos, it may not be able to get the full originals, causing failed syncs, skipped items, or waits while iOS downloads the files.&lt;/p&gt;
&lt;p&gt;The better setting for sync backup is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Download and Keep Originals
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The path is usually:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Settings -&amp;gt; Apple ID -&amp;gt; iCloud -&amp;gt; Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the phone does not have enough storage and you must use optimized storage, you may need to open the relevant photos in the system Photos app before syncing, so the iPhone downloads the originals from iCloud first, and then start &lt;code&gt;Mobius Sync&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;tips-for-the-first-large-photo-sync&#34;&gt;Tips for the First Large Photo Sync
&lt;/h2&gt;&lt;p&gt;The first time you sync an iPhone photo library, there may be thousands or even tens of thousands of photos. Do not rush to finish everything in one pass.&lt;/p&gt;
&lt;p&gt;A safer approach:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sync a small number of photos first for testing.&lt;/li&gt;
&lt;li&gt;Confirm the NAS path is correct.&lt;/li&gt;
&lt;li&gt;Confirm the folder types are Send Only / Receive Only.&lt;/li&gt;
&lt;li&gt;Confirm the receiving side will not affect the iPhone in reverse.&lt;/li&gt;
&lt;li&gt;Then start the full sync.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;During the first sync, it is best to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep the iPhone plugged in.&lt;/li&gt;
&lt;li&gt;Keep Wi-Fi stable.&lt;/li&gt;
&lt;li&gt;Keep &lt;code&gt;Mobius Sync&lt;/code&gt; open in the foreground.&lt;/li&gt;
&lt;li&gt;Keep the NAS or PC online.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the photo library is large, the sync may take a long time. That is normal.&lt;/p&gt;
&lt;h2 id=&#34;recommended-configuration&#34;&gt;Recommended Configuration
&lt;/h2&gt;&lt;p&gt;A stable iPhone photo sync setup looks like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install &lt;code&gt;Mobius Sync&lt;/code&gt; on the iPhone.&lt;/li&gt;
&lt;li&gt;Allow notifications, Local Network access, and full photo library access.&lt;/li&gt;
&lt;li&gt;Exchange device IDs between the iPhone and NAS.&lt;/li&gt;
&lt;li&gt;Create a &lt;code&gt;Camera Roll&lt;/code&gt; folder on the iPhone.&lt;/li&gt;
&lt;li&gt;Set the folder label to &lt;code&gt;iPhone_Photos&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the iPhone-side folder type to &lt;code&gt;Send Only&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the NAS receiving path to &lt;code&gt;/volume1/photos/iphone&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the NAS-side folder type to &lt;code&gt;Receive Only&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enable file versioning or snapshots on the NAS.&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;Mobius Sync&lt;/code&gt; manually every few days to complete sync.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you rely heavily on fully automatic background photo backup, iOS will be more troublesome than Android. The system restrictions make it difficult for third-party sync tools to behave like an always-on background service.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;An iPhone can join the Syncthing ecosystem through &lt;code&gt;Mobius Sync&lt;/code&gt; or &lt;code&gt;FSync&lt;/code&gt;, and sync photos to a PC or NAS.&lt;/p&gt;
&lt;p&gt;The key differences on iOS are background limits and photo-library permissions. During setup, allow Local Network access and full photo access. Design the folder types around one-way backup: iPhone &lt;code&gt;Send Only&lt;/code&gt;, NAS &lt;code&gt;Receive Only&lt;/code&gt;. If iCloud optimized storage is enabled, also check whether the original photos are truly available locally.&lt;/p&gt;
&lt;p&gt;For photo archiving, the most stable workflow is to open the client periodically to sync, then let the NAS handle version retention, snapshots, and long-term backup.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Using Syncthing on Android: Syncthing-Fork Setup and Photo Backup</title>
        <link>https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/</link>
        <pubDate>Sun, 31 May 2026 12:17:19 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/</guid>
        <description>&lt;h2 id=&#34;syncthing-series&#34;&gt;Syncthing Series
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/&#34; &gt;How to Use Syncthing: Practical Notes from Device Pairing to File Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/&#34; &gt;Deploying Syncthing with Docker: Compose, Ports, and Volume Mapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/&#34; &gt;How to Configure Syncthing Across Multiple Devices: Mesh, Star Topology, and Introducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/&#34; &gt;Using Syncthing on Android: Syncthing-Fork Setup and Photo Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/&#34; &gt;Managing Syncthing Across Many Devices and Folders: Topology, Naming, and Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/&#34; &gt;How to Sync iPhone Photos to a Computer or NAS with Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On Android, there are two common ways to use Syncthing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The original Syncthing Android client.&lt;/li&gt;
&lt;li&gt;The community-maintained Syncthing-Fork.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both can work for basic use. For long-term syncing of photos, notes, or documents, Syncthing-Fork is usually the better choice. It offers more practical controls for Android background behavior, battery usage, and network conditions, including Wi-Fi-only sync, selected Wi-Fi SSIDs, and running only while charging.&lt;/p&gt;
&lt;p&gt;This article combines general Android setup with photo backup. Photo backup is one of the most common mobile Syncthing workflows, but it should not be configured like an ordinary two-way sync folder.&lt;/p&gt;
&lt;h2 id=&#34;why-syncthing-fork-is-usually-better&#34;&gt;Why Syncthing-Fork Is Usually Better
&lt;/h2&gt;&lt;p&gt;Android actively restricts background apps. After the screen turns off, the system may suspend networking, freeze processes, or kill background services. If a sync tool does not handle this well, it may only sync while the app is open.&lt;/p&gt;
&lt;p&gt;Syncthing-Fork is more practical for phone use because it can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set run conditions.&lt;/li&gt;
&lt;li&gt;Sync only on Wi-Fi.&lt;/li&gt;
&lt;li&gt;Sync only on selected Wi-Fi networks.&lt;/li&gt;
&lt;li&gt;Run only while charging.&lt;/li&gt;
&lt;li&gt;Fit Android&amp;rsquo;s background restrictions better.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This does not mean the original client is unusable. It simply means Syncthing-Fork is better tuned for long-running mobile sync.&lt;/p&gt;
&lt;h2 id=&#34;installation-sources&#34;&gt;Installation Sources
&lt;/h2&gt;&lt;p&gt;Common sources include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Google Play&lt;/li&gt;
&lt;li&gt;F-Droid&lt;/li&gt;
&lt;li&gt;GitHub Releases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choose the channel you trust. After installation, handle permissions and background settings before pairing devices.&lt;/p&gt;
&lt;h2 id=&#34;step-1-grant-required-permissions&#34;&gt;Step 1: Grant Required Permissions
&lt;/h2&gt;&lt;p&gt;On first launch, focus on two permission areas.&lt;/p&gt;
&lt;h3 id=&#34;storage-permission&#34;&gt;Storage Permission
&lt;/h3&gt;&lt;p&gt;For file synchronization, Syncthing-Fork must be able to read and write target folders.&lt;/p&gt;
&lt;p&gt;Recent Android versions may ask for all-files access or similar storage access. Without it, the app may only see a limited set of folders and fail to read photos, documents, or your chosen sync directory.&lt;/p&gt;
&lt;p&gt;Recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Grant the required file access permissions.&lt;/li&gt;
&lt;li&gt;Put sync folders under ordinary internal-storage directories.&lt;/li&gt;
&lt;li&gt;Avoid protected system directories.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Useful examples:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/SyncData
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/SyncData/Notes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/SyncData/Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For camera photos, the common path is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/DCIM/Camera
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;battery-optimization-allowlist&#34;&gt;Battery Optimization Allowlist
&lt;/h3&gt;&lt;p&gt;This is the most important Android-specific step.&lt;/p&gt;
&lt;p&gt;If Syncthing-Fork is not excluded from battery optimization, Android may kill the sync process after the screen locks. The result is simple: you think it is syncing in the background, but it only moves when you open the app.&lt;/p&gt;
&lt;p&gt;Add Syncthing-Fork to the system battery optimization allowlist. The setting name depends on the vendor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Not optimized&lt;/li&gt;
&lt;li&gt;Allow background running&lt;/li&gt;
&lt;li&gt;Allow auto start&lt;/li&gt;
&lt;li&gt;Lock in background&lt;/li&gt;
&lt;li&gt;Allow high background power usage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many Android vendor builds add extra background and auto-start restrictions. If sync is unstable, check both battery management and auto-start settings.&lt;/p&gt;
&lt;h2 id=&#34;step-2-pair-with-a-nas-or-computer&#34;&gt;Step 2: Pair with a NAS or Computer
&lt;/h2&gt;&lt;p&gt;Syncthing pairs devices by adding each other&amp;rsquo;s device ID.&lt;/p&gt;
&lt;p&gt;Assume the phone is device A and the NAS or computer is device B.&lt;/p&gt;
&lt;p&gt;On the phone:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Syncthing-Fork.&lt;/li&gt;
&lt;li&gt;Open the menu.&lt;/li&gt;
&lt;li&gt;Show the device ID.&lt;/li&gt;
&lt;li&gt;You will see a QR code and a long device ID.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On the NAS or computer:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the Syncthing Web GUI.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Add Remote Device&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Scan the phone&amp;rsquo;s QR code, or paste the phone device ID manually.&lt;/li&gt;
&lt;li&gt;Name it clearly, such as &lt;code&gt;Android-Phone&lt;/code&gt; or &lt;code&gt;Pixel-Phone&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Back on the phone, accept the connection request.&lt;/p&gt;
&lt;p&gt;At this point, the two devices trust each other, but no folder is synced yet.&lt;/p&gt;
&lt;h2 id=&#34;step-3-receive-a-folder-shared-from-nas-or-pc&#34;&gt;Step 3: Receive a Folder Shared from NAS or PC
&lt;/h2&gt;&lt;p&gt;If the computer or NAS shares a folder with the phone, the phone will show a prompt.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device NAS wants to share folder Notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Add it, then choose a local path on the phone, such as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/SyncData/Notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After saving, the phone starts downloading from the NAS or computer.&lt;/p&gt;
&lt;p&gt;It is better to create the directory manually first so Syncthing-Fork does not place it somewhere unexpected.&lt;/p&gt;
&lt;p&gt;If you sync Markdown notes, be careful with application configuration directories. In Obsidian, &lt;code&gt;.obsidian&lt;/code&gt; contains workspace state, plugin settings, and cache. If Android and desktop plugins differ a lot, start by syncing only note content and attachments.&lt;/p&gt;
&lt;h2 id=&#34;step-4-back-up-phone-photos-to-a-pc-or-nas&#34;&gt;Step 4: Back Up Phone Photos to a PC or NAS
&lt;/h2&gt;&lt;p&gt;The most common phone use case is backing up photos to a NAS or computer.&lt;/p&gt;
&lt;p&gt;Photo backup is different from normal file sync. Most people want new phone photos copied to the NAS, not phone deletions mirrored to the NAS. Treat it as one-way backup.&lt;/p&gt;
&lt;p&gt;Recommended combination:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Phone side: &lt;code&gt;Send Only&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;PC or NAS side: &lt;code&gt;Receive Only&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The phone sends photos, and the NAS receives and stores them. Add NAS-side file versioning or snapshots to reduce deletion risk.&lt;/p&gt;
&lt;h2 id=&#34;add-the-camera-folder-on-the-phone&#34;&gt;Add the Camera Folder on the Phone
&lt;/h2&gt;&lt;p&gt;In Syncthing-Fork&amp;rsquo;s folder page:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tap &lt;code&gt;+&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a folder.&lt;/li&gt;
&lt;li&gt;Use a clear label such as &lt;code&gt;Pixel_Photos&lt;/code&gt; or &lt;code&gt;Huawei_DCIM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Choose the phone&amp;rsquo;s camera directory.&lt;/li&gt;
&lt;li&gt;Share it with your PC or NAS.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The common Android camera path is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/DCIM/Camera
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Screenshots, WeChat images, or other app images often live elsewhere. Add separate folders when needed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/Pictures/Screenshots
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/Pictures/WeiXin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Paths vary by Android version, vendor, and app. Confirm with a file manager first.&lt;/p&gt;
&lt;h2 id=&#34;set-the-phone-folder-to-send-only&#34;&gt;Set the Phone Folder to Send Only
&lt;/h2&gt;&lt;p&gt;In the phone-side folder settings, change the folder type from:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send &amp;amp; Receive
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This makes the phone the photo source. New photos are sent to the NAS, but NAS-side changes are not written back to the phone.&lt;/p&gt;
&lt;p&gt;Syncthing is still a sync tool, not a complete backup system. For a safer setup, also enable NAS-side versioning, snapshots, or independent backups.&lt;/p&gt;
&lt;h2 id=&#34;configure-the-receiver-path&#34;&gt;Configure the Receiver Path
&lt;/h2&gt;&lt;p&gt;After saving on the phone, the PC or NAS Web GUI will show a prompt:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device Pixel-Phone wants to share folder Pixel_Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Add it and choose the local storage path.&lt;/p&gt;
&lt;p&gt;On Windows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;D:\Backups\Phone_Photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On Linux or NAS:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/photos/phone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;With Docker, remember to use the container path. If the host mapping is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;l&#34;&gt;/volume1/photos:/var/syncthing/photos&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;then the Web GUI path should be:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/syncthing/photos/phone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;set-the-receiver-to-receive-only&#34;&gt;Set the Receiver to Receive Only
&lt;/h2&gt;&lt;p&gt;On the PC or NAS, set the folder type to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Receive Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The receiver will accept photos from the phone but will not send local changes back.&lt;/p&gt;
&lt;p&gt;This is an extra layer of protection. Even if you move, edit, or delete files on the NAS, those actions should not directly affect the originals on the phone.&lt;/p&gt;
&lt;p&gt;Still, &lt;code&gt;Receive Only&lt;/code&gt; is not a replacement for NAS history. Enable file versioning or snapshots on the NAS if the photos matter.&lt;/p&gt;
&lt;h2 id=&#34;test-with-a-small-set-first&#34;&gt;Test with a Small Set First
&lt;/h2&gt;&lt;p&gt;Do not start by syncing tens of thousands of photos.&lt;/p&gt;
&lt;p&gt;Test first:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Put 3-5 temporary photos in the phone album.&lt;/li&gt;
&lt;li&gt;Confirm that the PC or NAS receives them.&lt;/li&gt;
&lt;li&gt;Add a new photo and see whether it syncs.&lt;/li&gt;
&lt;li&gt;Delete one test photo on the phone and observe the NAS behavior.&lt;/li&gt;
&lt;li&gt;Only then enable the full album.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Folder type and deletion behavior are easy to misunderstand. A small test avoids expensive cleanup later.&lt;/p&gt;
&lt;h2 id=&#34;run-conditions-avoid-mobile-data-usage&#34;&gt;Run Conditions: Avoid Mobile Data Usage
&lt;/h2&gt;&lt;p&gt;Syncthing-Fork run conditions are very useful on Android.&lt;/p&gt;
&lt;p&gt;At minimum, enable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Run only when connected to Wi-Fi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This avoids syncing large files over 5G or 4G.&lt;/p&gt;
&lt;p&gt;If you only want sync at home, restrict it to a specific Wi-Fi SSID. This is useful when the NAS is only reachable on your home LAN.&lt;/p&gt;
&lt;h2 id=&#34;charging-only-sync&#34;&gt;Charging-Only Sync
&lt;/h2&gt;&lt;p&gt;If you do not need real-time sync, enable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Run only while charging
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A stable workflow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Take photos and write notes during the day.&lt;/li&gt;
&lt;li&gt;Syncthing-Fork does not keep running constantly.&lt;/li&gt;
&lt;li&gt;At night, return home and connect to home Wi-Fi.&lt;/li&gt;
&lt;li&gt;Plug in the charger.&lt;/li&gt;
&lt;li&gt;Syncthing-Fork starts and syncs the day&amp;rsquo;s photos and files to the NAS.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This saves battery and fits phone usage better than always-on sync.&lt;/p&gt;
&lt;p&gt;For notes that must update quickly, you can skip charging-only mode and keep Wi-Fi-only mode.&lt;/p&gt;
&lt;h2 id=&#34;android-11-storage-restrictions&#34;&gt;Android 11+ Storage Restrictions
&lt;/h2&gt;&lt;p&gt;Android 11 and later restrict storage more heavily. Some directories may not be reliably accessible, especially:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Android/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Android/obb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;SD card directories may also be limited depending on vendor, Android version, and file picker authorization.&lt;/p&gt;
&lt;p&gt;Recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create dedicated sync directories under internal storage.&lt;/li&gt;
&lt;li&gt;Do not use app-private system directories as primary sync folders.&lt;/li&gt;
&lt;li&gt;For photos, prefer ordinary media folders such as &lt;code&gt;DCIM/Camera&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For notes, use a clear path such as &lt;code&gt;/storage/emulated/0/SyncData/Notes&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stability matters more than choosing a path that looks native.&lt;/p&gt;
&lt;p&gt;Do not sync all of:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;It is too large and mixed, with caches, downloads, app data, and temporary files.&lt;/p&gt;
&lt;h2 id=&#34;choosing-folder-types-on-the-phone&#34;&gt;Choosing Folder Types on the Phone
&lt;/h2&gt;&lt;p&gt;Different scenarios need different folder types.&lt;/p&gt;
&lt;h3 id=&#34;two-way-note-sync&#34;&gt;Two-Way Note Sync
&lt;/h3&gt;&lt;p&gt;If both phone and PC edit the same Markdown notes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send &amp;amp; Receive
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Avoid editing the same file on multiple devices at the same time.&lt;/p&gt;
&lt;h3 id=&#34;phone-photos-to-nas&#34;&gt;Phone Photos to NAS
&lt;/h3&gt;&lt;p&gt;If the phone mainly sends photos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Send Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Use versioning or snapshots on the NAS.&lt;/p&gt;
&lt;h3 id=&#34;read-only-materials-on-the-phone&#34;&gt;Read-Only Materials on the Phone
&lt;/h3&gt;&lt;p&gt;If the phone only needs to read files from the NAS:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Receive Only
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This works for ebooks, reference documents, or script examples.&lt;/p&gt;
&lt;h2 id=&#34;think-through-deletion-semantics&#34;&gt;Think Through Deletion Semantics
&lt;/h2&gt;&lt;p&gt;Will deleting a phone photo delete it on the NAS? It depends on folder types and sync state.&lt;/p&gt;
&lt;p&gt;To reduce risk:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;Send Only&lt;/code&gt; on the phone.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Receive Only&lt;/code&gt; on the NAS.&lt;/li&gt;
&lt;li&gt;Enable file versioning on the NAS.&lt;/li&gt;
&lt;li&gt;Add snapshots or separate backups.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your real goal is archival storage, sync into an inbox directory first, then let a NAS task copy files into an archive directory that Syncthing no longer manages.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/photos/inbox-phone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/photos/archive
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Syncthing writes to &lt;code&gt;inbox-phone&lt;/code&gt;; a scheduled script organizes files into &lt;code&gt;archive&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;common-problems&#34;&gt;Common Problems
&lt;/h2&gt;&lt;h3 id=&#34;sync-stops-after-screen-lock&#34;&gt;Sync Stops After Screen Lock
&lt;/h3&gt;&lt;p&gt;Check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Battery optimization allowlist.&lt;/li&gt;
&lt;li&gt;Background running permission.&lt;/li&gt;
&lt;li&gt;Auto-start permission.&lt;/li&gt;
&lt;li&gt;Whether Wi-Fi-only or charging-only conditions are active.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Often the issue is Android background management, not Syncthing itself.&lt;/p&gt;
&lt;h3 id=&#34;cannot-find-the-camera-folder&#34;&gt;Cannot Find the Camera Folder
&lt;/h3&gt;&lt;p&gt;Use a file manager to confirm the real path. The common path is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/storage/emulated/0/DCIM/Camera
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Third-party camera or editing apps may use other folders.&lt;/p&gt;
&lt;h3 id=&#34;sync-is-slow&#34;&gt;Sync Is Slow
&lt;/h3&gt;&lt;p&gt;Check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Whether the phone and NAS are on the same Wi-Fi.&lt;/li&gt;
&lt;li&gt;Whether traffic is going through relay.&lt;/li&gt;
&lt;li&gt;Whether &lt;code&gt;22000/TCP&lt;/code&gt; and &lt;code&gt;22000/UDP&lt;/code&gt; are reachable on the NAS.&lt;/li&gt;
&lt;li&gt;Whether the phone is in power-saving mode.&lt;/li&gt;
&lt;li&gt;Whether there are many small files.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many small files are slower than fewer large files. After the first sync, incremental sync is usually much lighter.&lt;/p&gt;
&lt;h3 id=&#34;deleting-phone-photos-also-deletes-nas-copies&#34;&gt;Deleting Phone Photos Also Deletes NAS Copies
&lt;/h3&gt;&lt;p&gt;That means your sync relationship is propagating deletions. Syncthing is a sync tool, not a built-in append-only backup tool.&lt;/p&gt;
&lt;p&gt;Fixes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check folder types on phone and NAS.&lt;/li&gt;
&lt;li&gt;Enable NAS-side file versioning.&lt;/li&gt;
&lt;li&gt;Add snapshots or independent backups.&lt;/li&gt;
&lt;li&gt;Use an inbox directory and archive files outside Syncthing&amp;rsquo;s control if needed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;recommended-setup&#34;&gt;Recommended Setup
&lt;/h2&gt;&lt;p&gt;For Android + NAS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install Syncthing-Fork on the phone.&lt;/li&gt;
&lt;li&gt;Grant file access.&lt;/li&gt;
&lt;li&gt;Add it to the battery optimization allowlist.&lt;/li&gt;
&lt;li&gt;Pair phone and NAS.&lt;/li&gt;
&lt;li&gt;Put notes under &lt;code&gt;/storage/emulated/0/SyncData/Notes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;/storage/emulated/0/DCIM/Camera&lt;/code&gt; for photos.&lt;/li&gt;
&lt;li&gt;Set the phone photo folder to &lt;code&gt;Send Only&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the NAS photo folder to &lt;code&gt;Receive Only&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enable home Wi-Fi-only sync.&lt;/li&gt;
&lt;li&gt;If real-time sync is not needed, enable charging-only sync.&lt;/li&gt;
&lt;li&gt;Enable NAS-side versioning or snapshots.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This avoids constant battery drain while still backing up photos when the phone returns home and charges.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Using Syncthing on Android is not just about installing the app. The important parts are permissions, background behavior, battery settings, and network conditions.&lt;/p&gt;
&lt;p&gt;Syncthing-Fork is better suited to long-term phone sync. It can limit sync to Wi-Fi, selected Wi-Fi networks, or charging state, reducing battery drain and mobile data usage.&lt;/p&gt;
&lt;p&gt;For photo backup to a NAS, use a one-way backup mindset: phone &lt;code&gt;Send Only&lt;/code&gt;, PC or NAS &lt;code&gt;Receive Only&lt;/code&gt;, plus NAS-side versioning, snapshots, and independent backups. Syncthing handles transfer; long-term safety still depends on your backup strategy.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>How to Configure Syncthing for Multiple Devices: Peer Networks, Star Topology, and Introducers</title>
        <link>https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/</link>
        <pubDate>Sun, 31 May 2026 12:13:57 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/</guid>
        <description>&lt;h2 id=&#34;syncthing-series&#34;&gt;Syncthing Series
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/&#34; &gt;How to Use Syncthing: Practical Notes from Device Pairing to File Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/&#34; &gt;Deploy Syncthing with Docker: Compose, Ports, and Volume Mapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/&#34; &gt;How to Configure Syncthing for Multiple Devices: Peer Networks, Star Topology, and Introducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/&#34; &gt;How to Use Syncthing on Android: Syncthing-Fork Setup and Photo Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/&#34; &gt;How to Manage Syncthing Across Multiple Devices and Folders: Topology, Naming, and Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/&#34; &gt;How to Sync iPhone Photos to a Computer or NAS with Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Syncthing uses a decentralized P2P architecture. It does not have a traditional Server or Client role. At the protocol level, every device is a peer.&lt;/p&gt;
&lt;p&gt;In real use, though, you can organize it in two common ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pure peer network: every device pairs directly with the other devices.&lt;/li&gt;
&lt;li&gt;Star network: one NAS, server, or always-on computer acts as the central node, and all other devices pair only with it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both approaches fit Syncthing&amp;rsquo;s design. The difference is management cost and daily workflow.&lt;/p&gt;
&lt;h2 id=&#34;understand-peers-and-the-pseudo-server-first&#34;&gt;Understand Peers and the Pseudo Server First
&lt;/h2&gt;&lt;p&gt;Every Syncthing device has its own device ID. When two devices add each other&amp;rsquo;s ID and share the same folder, they can sync.&lt;/p&gt;
&lt;p&gt;That means Syncthing itself does not require one server to hold all data. What people call a &amp;ldquo;server&amp;rdquo; is usually just an always-on device that you choose as the operational center.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A NAS is always on and has plenty of storage, so it works well as a central node.&lt;/li&gt;
&lt;li&gt;Phones and laptops often go offline, so they are better treated as edge devices.&lt;/li&gt;
&lt;li&gt;A desktop may be powerful, but it may not run 24/7, so it is usually a normal sync node.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This central node is not a protocol-level server. It is simply the device you let handle management and relay duties in your topology.&lt;/p&gt;
&lt;h2 id=&#34;mode-1-pure-peer-mesh&#34;&gt;Mode 1: Pure Peer Mesh
&lt;/h2&gt;&lt;p&gt;In pure peer mode, every device pairs with every other device.&lt;/p&gt;
&lt;p&gt;For example, suppose you have four devices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAS&lt;/li&gt;
&lt;li&gt;Desktop&lt;/li&gt;
&lt;li&gt;Laptop&lt;/li&gt;
&lt;li&gt;Phone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each device needs to connect to the other three. Any two online devices can then sync directly.&lt;/p&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transfer paths are more direct.&lt;/li&gt;
&lt;li&gt;If one device is offline, other online devices can still sync with each other.&lt;/li&gt;
&lt;li&gt;There is no dependency on a single central node.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The more devices you have, the more complex pairing becomes.&lt;/li&gt;
&lt;li&gt;Adding a new device requires confirmation and setup on multiple existing devices.&lt;/li&gt;
&lt;li&gt;Folder sharing relationships can become scattered.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you only have a few devices, pure peer mode is comfortable. For one computer and one phone, or two computers syncing notes, there is no need to overthink the design.&lt;/p&gt;
&lt;p&gt;Once you have five or six devices, maintaining a fully connected mesh by hand becomes increasingly annoying.&lt;/p&gt;
&lt;h2 id=&#34;mode-2-nas-centered-star-topology&#34;&gt;Mode 2: NAS-Centered Star Topology
&lt;/h2&gt;&lt;p&gt;Star topology is usually better for home and personal productivity setups.&lt;/p&gt;
&lt;p&gt;Pick one device that stays online, has enough space, and has a stable network connection, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAS&lt;/li&gt;
&lt;li&gt;Synology&lt;/li&gt;
&lt;li&gt;Soft router&lt;/li&gt;
&lt;li&gt;Mini PC&lt;/li&gt;
&lt;li&gt;Home Linux server&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then pair every other device only with that center:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Phone   ----\
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Laptop  ---- NAS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Desktop ----/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The phone does not need to pair directly with the laptop, and the laptop does not need to pair directly with the desktop. They all sync indirectly through the NAS.&lt;/p&gt;
&lt;p&gt;Advantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Management is simple.&lt;/li&gt;
&lt;li&gt;A new device only needs to pair with the NAS.&lt;/li&gt;
&lt;li&gt;The NAS can handle versioning and backup buffering.&lt;/li&gt;
&lt;li&gt;It fits 24/7 sync scenarios.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Disadvantages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the NAS is offline, other devices may not be able to keep syncing with each other.&lt;/li&gt;
&lt;li&gt;If all traffic goes through the NAS, its network and disk performance affect the experience.&lt;/li&gt;
&lt;li&gt;The central node&amp;rsquo;s permissions need to be managed carefully.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you already have a NAS or an always-on mini server, star topology is the default recommendation. It keeps Syncthing&amp;rsquo;s P2P strengths while making day-to-day management feel much closer to centralized sync.&lt;/p&gt;
&lt;h2 id=&#34;basic-order-for-multi-device-setup&#34;&gt;Basic Order for Multi-Device Setup
&lt;/h2&gt;&lt;p&gt;No matter which topology you choose, Syncthing setup follows this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Pair devices first.&lt;/li&gt;
&lt;li&gt;Share folders second.&lt;/li&gt;
&lt;li&gt;Confirm the local path on the receiving side last.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Do not start by creating folders everywhere. Clarify device relationships first, and the later steps will be much less chaotic.&lt;/p&gt;
&lt;h2 id=&#34;step-1-pair-devices&#34;&gt;Step 1: Pair Devices
&lt;/h2&gt;&lt;p&gt;Assume you want to connect device A and device B.&lt;/p&gt;
&lt;p&gt;Device A could be a phone, while device B could be a NAS or computer.&lt;/p&gt;
&lt;p&gt;On device A:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the Syncthing Web UI.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Actions&lt;/code&gt; in the upper-right corner.&lt;/li&gt;
&lt;li&gt;Choose &lt;code&gt;Show ID&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Copy the device ID or display the QR code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;On device B:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the Syncthing Web UI.&lt;/li&gt;
&lt;li&gt;Click &lt;code&gt;Add Remote Device&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enter device A&amp;rsquo;s ID.&lt;/li&gt;
&lt;li&gt;Give the device a recognizable name, such as &lt;code&gt;My-Phone&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Then return to device A. It will usually show a prompt saying that device B wants to connect. Accept it.&lt;/p&gt;
&lt;p&gt;At this point, the two devices have established a peer relationship, but no folders are syncing yet.&lt;/p&gt;
&lt;h2 id=&#34;step-2-create-and-share-a-folder&#34;&gt;Step 2: Create and Share a Folder
&lt;/h2&gt;&lt;p&gt;On device A, click &lt;code&gt;Add Folder&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Common fields:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Folder label: a human-readable name, such as &lt;code&gt;Notes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Folder ID: the cross-device identifier. Use stable English names, such as &lt;code&gt;notes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Folder path: the real local path on this device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then switch to the &lt;code&gt;Sharing&lt;/code&gt; tab and select the device B you just paired.&lt;/p&gt;
&lt;p&gt;After saving, device A sends a folder sharing invitation to device B.&lt;/p&gt;
&lt;h2 id=&#34;step-3-accept-the-share&#34;&gt;Step 3: Accept the Share
&lt;/h2&gt;&lt;p&gt;Open device B&amp;rsquo;s Web UI and wait a few seconds. You will usually see a prompt like:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Device A wants to share a folder
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Click add, then choose a local storage path on device B.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Or, in a Docker deployment, a container path such as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/syncthing/notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After saving, sync starts.&lt;/p&gt;
&lt;p&gt;The paths do not have to match across devices. Syncthing identifies the sync relationship by Folder ID, not by requiring every device to use the same local path.&lt;/p&gt;
&lt;h2 id=&#34;how-to-configure-star-topology&#34;&gt;How to Configure Star Topology
&lt;/h2&gt;&lt;p&gt;If you use the NAS-centered model, a good setup is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Deploy Syncthing on the NAS first.&lt;/li&gt;
&lt;li&gt;Pair every phone, computer, and server only with the NAS.&lt;/li&gt;
&lt;li&gt;Create or accept the main sync folders on the NAS.&lt;/li&gt;
&lt;li&gt;Each new device only needs to add the NAS device ID.&lt;/li&gt;
&lt;li&gt;Share each folder only between the NAS and the devices that need it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;NAS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── notes       -&amp;gt; desktop, laptop, phone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── photos      -&amp;gt; phone, backup disk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── downloads   -&amp;gt; desktop, NAS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── scripts     -&amp;gt; desktop, laptop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This keeps the structure clear. You can treat the NAS as the control panel for sync relationships.&lt;/p&gt;
&lt;h2 id=&#34;what-is-an-introducer&#34;&gt;What Is an Introducer?
&lt;/h2&gt;&lt;p&gt;Syncthing has a useful feature called Introducer.&lt;/p&gt;
&lt;p&gt;It is designed for multi-device setups.&lt;/p&gt;
&lt;p&gt;Suppose you set the NAS as an introducer. Later, when a new device pairs with the NAS, the NAS can introduce the other devices it knows to the new device. It can also help propagate existing shared relationships.&lt;/p&gt;
&lt;p&gt;This reduces repetitive clicking and repeated device pairing.&lt;/p&gt;
&lt;p&gt;It is useful when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You have several computers and phones at home.&lt;/li&gt;
&lt;li&gt;The NAS is the long-running central node.&lt;/li&gt;
&lt;li&gt;You add new devices often.&lt;/li&gt;
&lt;li&gt;You want to reduce manual device relationship maintenance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Be careful, though. An introducer expands the scope of automatically established relationships. Do not set an untrusted device as an introducer, and do not enable it casually before you understand the topology.&lt;/p&gt;
&lt;p&gt;A safer rule is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Only set the NAS or main server as the introducer.&lt;/li&gt;
&lt;li&gt;Do not make ordinary phones or laptops introducers.&lt;/li&gt;
&lt;li&gt;After adding a new device, check which devices and folders were added automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;folder-type-controls-data-direction&#34;&gt;Folder Type Controls Data Direction
&lt;/h2&gt;&lt;p&gt;Syncthing&amp;rsquo;s permission behavior is mostly controlled by the folder type.&lt;/p&gt;
&lt;p&gt;Open a folder&amp;rsquo;s settings and adjust &lt;code&gt;Folder Type&lt;/code&gt; in the options.&lt;/p&gt;
&lt;p&gt;There are three common types:&lt;/p&gt;
&lt;h3 id=&#34;send--receive&#34;&gt;Send &amp;amp; Receive
&lt;/h3&gt;&lt;p&gt;The default mode. Both sides can send and receive changes.&lt;/p&gt;
&lt;p&gt;It is suitable for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Editing notes from multiple devices.&lt;/li&gt;
&lt;li&gt;Syncing documents across several computers.&lt;/li&gt;
&lt;li&gt;Normal two-way sync folders.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is the closest mode to true peer-to-peer sync.&lt;/p&gt;
&lt;h3 id=&#34;send-only&#34;&gt;Send Only
&lt;/h3&gt;&lt;p&gt;This device only sends changes and does not accept changes from other devices.&lt;/p&gt;
&lt;p&gt;It is suitable for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Data source folders.&lt;/li&gt;
&lt;li&gt;Distributing a primary folder to other devices.&lt;/li&gt;
&lt;li&gt;Preventing remote changes from affecting this device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, you can set a software installer directory on the NAS to Send Only so other computers only receive it.&lt;/p&gt;
&lt;h3 id=&#34;receive-only&#34;&gt;Receive Only
&lt;/h3&gt;&lt;p&gt;This device only receives changes and does not send local changes out.&lt;/p&gt;
&lt;p&gt;It is suitable for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backup machines.&lt;/li&gt;
&lt;li&gt;Read-only mirrors.&lt;/li&gt;
&lt;li&gt;Preventing local accidental deletion from propagating back to the source.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, if the NAS receives photos from a phone, and you do not want phone-side deletion to also remove the NAS copy, you need to design folder types and deletion policy carefully.&lt;/p&gt;
&lt;h2 id=&#34;different-folders-can-use-different-topologies&#34;&gt;Different Folders Can Use Different Topologies
&lt;/h2&gt;&lt;p&gt;Syncthing topology does not need to be site-wide or uniform. You can design it per folder.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;notes&lt;/code&gt;: desktop, laptop, phone, and NAS all use Send &amp;amp; Receive.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;photos&lt;/code&gt;: phone sends, NAS receives and keeps versions.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;downloads&lt;/code&gt;: desktop and NAS sync, phone does not participate.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;backup&lt;/code&gt;: main computer is Send Only, NAS is Receive Only.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not force every directory into one rule. In multi-device sync, the important question is data direction, not device count.&lt;/p&gt;
&lt;h2 id=&#34;think-about-conflicts-and-accidental-deletion-early&#34;&gt;Think About Conflicts and Accidental Deletion Early
&lt;/h2&gt;&lt;p&gt;The most common multi-device sync problem is not failed setup. It is accidental deletion or conflicts after sync is already working.&lt;/p&gt;
&lt;p&gt;Risky scenarios include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Two devices edit the same file at the same time.&lt;/li&gt;
&lt;li&gt;A mobile app automatically cleans a folder.&lt;/li&gt;
&lt;li&gt;One device uses the wrong path, creates an empty folder, and syncs it out.&lt;/li&gt;
&lt;li&gt;Cache files, temporary files, workspace state, and real files are synced together.&lt;/li&gt;
&lt;li&gt;Versioning is not enabled on the NAS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enable file versioning on the NAS for important folders.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;.stignore&lt;/code&gt; to exclude caches and temporary files.&lt;/li&gt;
&lt;li&gt;Before the first sync of a new folder, test with a small number of files.&lt;/li&gt;
&lt;li&gt;If deletion behavior is unclear, do not set every device to Send &amp;amp; Receive.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;recommended-setup&#34;&gt;Recommended Setup
&lt;/h2&gt;&lt;p&gt;If you have a NAS or always-on server, use star topology directly:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use the NAS as the central node.&lt;/li&gt;
&lt;li&gt;Pair the NAS with all devices.&lt;/li&gt;
&lt;li&gt;Ordinary devices pair only with the NAS.&lt;/li&gt;
&lt;li&gt;The NAS can be set as an introducer.&lt;/li&gt;
&lt;li&gt;Choose Send &amp;amp; Receive, Send Only, or Receive Only per folder.&lt;/li&gt;
&lt;li&gt;Enable file versioning on the NAS for important folders.&lt;/li&gt;
&lt;li&gt;After adding a new device, share a test folder first to confirm path and permissions.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you only have two or three devices, and they are often online, pure peer mode is fine. It is more direct and may be faster.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;Syncthing is a P2P peer architecture, but that does not mean every device must be wired into a complex mesh.&lt;/p&gt;
&lt;p&gt;Small setups can use pure peer mode. When you have many devices, a NAS, or an always-on host, star topology is usually better. Let the NAS act as the central node and introducer, and let other devices connect only to it. Management becomes much simpler.&lt;/p&gt;
&lt;p&gt;The real questions are which devices you trust, which folders need to sync, where data originates, and which device should keep versions after accidental deletion. Topology is just the method. Data flow is the core of the configuration.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Deploy Syncthing with Docker: Compose, Ports, and Volume Mapping Pitfalls</title>
        <link>https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/</link>
        <pubDate>Sun, 31 May 2026 12:12:05 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/</guid>
        <description>&lt;h2 id=&#34;syncthing-series&#34;&gt;Syncthing Series
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/&#34; &gt;How to Use Syncthing: Practical Notes from Device Pairing to File Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/&#34; &gt;Deploy Syncthing with Docker: Compose, Ports, and Volume Mapping Pitfalls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/&#34; &gt;How to Configure Syncthing for Multiple Devices: Peer Networks, Star Topology, and Introducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/&#34; &gt;How to Use Syncthing on Android: Syncthing-Fork Setup and Photo Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/&#34; &gt;How to Manage Multiple Devices and Folders in Syncthing: Topology, Naming, and Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/&#34; &gt;How to Sync iPhone Photos to a Computer or NAS with Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deploying Syncthing in Docker is a good fit for a NAS, a home server, or a VPS. It can act as an always-on sync node for photos, documents, Markdown notes, or download folders.&lt;/p&gt;
&lt;p&gt;The important part of a Docker-based Syncthing setup is not merely whether the container starts. The real questions are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether the configuration directory is persistent;&lt;/li&gt;
&lt;li&gt;whether the data folders you want to sync are mapped into the container;&lt;/li&gt;
&lt;li&gt;whether ports and permissions are prepared in advance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If these details are not handled well, a container update may wipe your configuration, the path you enter in the Web UI may not point to the real host folder, or sync tasks may fail with &lt;code&gt;Permission denied&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;directory-planning&#34;&gt;Directory Planning
&lt;/h2&gt;&lt;p&gt;Start by creating a dedicated directory on the server or NAS, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/syncthing
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Put &lt;code&gt;docker-compose.yml&lt;/code&gt; in this directory, and keep Syncthing&amp;rsquo;s configuration in a subdirectory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;syncthing/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── docker-compose.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── config/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The actual sync data can live in existing host paths, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/downloads
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Keep the configuration directory separate from the data directories. &lt;code&gt;config&lt;/code&gt; stores Syncthing&amp;rsquo;s own configuration, keys, and index database. Folders such as &lt;code&gt;downloads&lt;/code&gt; and &lt;code&gt;photos&lt;/code&gt; are the actual data you want to sync.&lt;/p&gt;
&lt;h2 id=&#34;option-1-docker-compose&#34;&gt;Option 1: Docker Compose
&lt;/h2&gt;&lt;p&gt;Docker Compose is the recommended approach because updates, restarts, and migrations are easier to understand later.&lt;/p&gt;
&lt;p&gt;Create &lt;code&gt;~/syncthing/docker-compose.yml&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;syncthing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;syncthing/syncthing:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;syncthing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;my-nas-syncthing&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PUID=1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PGID=1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./config:/var/syncthing/config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/volume1/downloads:/var/syncthing/downloads&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/volume1/photos:/var/syncthing/photos&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;8384&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8384&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;22000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22000&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/tcp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;22000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;22000&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/udp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;21027&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;21027&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/udp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Start it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Check the status:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose ps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker logs -f syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Open the Web UI:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://server-ip:8384
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After the first login, set a GUI username and password first.&lt;/p&gt;
&lt;h2 id=&#34;option-2-docker-run&#34;&gt;Option 2: docker run
&lt;/h2&gt;&lt;p&gt;For quick testing, you can also start Syncthing directly with &lt;code&gt;docker run&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -d &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --name syncthing &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --hostname my-nas-syncthing &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e &lt;span class=&#34;nv&#34;&gt;PUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e &lt;span class=&#34;nv&#34;&gt;PGID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -e &lt;span class=&#34;nv&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Asia/Shanghai &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 8384:8384 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 22000:22000/tcp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 22000:22000/udp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -p 21027:21027/udp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v /path/to/config:/var/syncthing/config &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  -v /path/to/data1:/var/syncthing/data1 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --restart unless-stopped &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  syncthing/syncthing:latest
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;/path/to/config&lt;/code&gt; and &lt;code&gt;/path/to/data1&lt;/code&gt; with real host paths.&lt;/p&gt;
&lt;p&gt;For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /volume1/docker/syncthing/config:/var/syncthing/config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /volume1/photos:/var/syncthing/photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For long-term use, convert this into a Compose file so you do not need to rebuild the full command every time the container is recreated.&lt;/p&gt;
&lt;h2 id=&#34;container-paths-and-host-paths&#34;&gt;Container Paths and Host Paths
&lt;/h2&gt;&lt;p&gt;Docker beginners often get confused by paths.&lt;/p&gt;
&lt;p&gt;For example, this volume mapping:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/volume1/photos:/var/syncthing/photos&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The left side, &lt;code&gt;/volume1/photos&lt;/code&gt;, is the host path. The right side, &lt;code&gt;/var/syncthing/photos&lt;/code&gt;, is the path inside the container.&lt;/p&gt;
&lt;p&gt;When adding a sync folder in the Syncthing Web UI, the folder path must be the container path:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/syncthing/photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;That way Syncthing is actually operating on this host directory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you enter &lt;code&gt;/volume1/photos&lt;/code&gt; in the Web UI, that path usually does not exist inside the container. Syncthing may report an error, or it may create a new directory inside the container filesystem that you did not intend to use.&lt;/p&gt;
&lt;h2 id=&#34;persist-the-configuration-directory&#34;&gt;Persist the Configuration Directory
&lt;/h2&gt;&lt;p&gt;This line is critical:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;l&#34;&gt;./config:/var/syncthing/config&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Syncthing stores its configuration files, device keys, and index database in the configuration directory. If this directory is not mounted to the host, deleting or recreating the container may change the device ID and invalidate existing device pairings.&lt;/p&gt;
&lt;p&gt;Use a stable host path such as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/docker/syncthing/config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Do not put the configuration directory in a temporary location, and do not mix it with the actual sync data directories.&lt;/p&gt;
&lt;h2 id=&#34;ports-and-firewalls&#34;&gt;Ports and Firewalls
&lt;/h2&gt;&lt;p&gt;Common ports are:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8384/TCP   Web UI administration
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;22000/TCP Device sync traffic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;22000/UDP QUIC sync traffic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;21027/UDP Local discovery
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If Syncthing runs on a home NAS, usually check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether the NAS firewall allows these ports;&lt;/li&gt;
&lt;li&gt;whether Docker bridge port mapping is correct;&lt;/li&gt;
&lt;li&gt;whether the router isolates Wi-Fi from wired devices;&lt;/li&gt;
&lt;li&gt;whether the phone and computer are on the same subnet.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If Syncthing runs on a cloud server, also check the cloud provider&amp;rsquo;s security group. In particular, if &lt;code&gt;22000/TCP&lt;/code&gt; and &lt;code&gt;22000/UDP&lt;/code&gt; are not allowed, other devices may only connect through a relay, and the speed will be much slower.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;8384&lt;/code&gt; is the administration port. Do not expose it directly to the public internet. If remote administration is necessary, at least set a strong password, and preferably combine it with a reverse proxy, HTTPS, access control, or a VPN.&lt;/p&gt;
&lt;h2 id=&#34;permission-issues-puid-and-pgid&#34;&gt;Permission Issues: PUID and PGID
&lt;/h2&gt;&lt;p&gt;If Syncthing starts and the Web UI is accessible, but a sync folder reports:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Permission denied
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;the container process usually does not have read/write permission on the host directory.&lt;/p&gt;
&lt;p&gt;Check the UID and GID of the current user on the host:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;id
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The output may look like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uid=1000(user) gid=1000(user) groups=1000(user)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then set the corresponding values in Compose:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PUID=1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;PGID=1000&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Also confirm that the host directory itself allows this user to read and write:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -ld /volume1/photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If necessary, adjust the owner or permissions:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R 1000:1000 /volume1/photos
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On a NAS, do not blindly run recursive permission changes on an entire shared directory, especially if it is shared by multiple users. A safer approach is to prepare a dedicated sync directory for Syncthing, or grant the corresponding user access from the NAS permission management interface.&lt;/p&gt;
&lt;h2 id=&#34;first-time-web-ui-security&#34;&gt;First-Time Web UI Security
&lt;/h2&gt;&lt;p&gt;After the container starts, visit:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://server-ip:8384
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On the first visit, Syncthing usually prompts you to set a GUI username and password. Do not skip this step.&lt;/p&gt;
&lt;p&gt;Recommended practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;set a GUI username and strong password immediately;&lt;/li&gt;
&lt;li&gt;do not expose &lt;code&gt;8384&lt;/code&gt; to the public internet;&lt;/li&gt;
&lt;li&gt;use a VPN, SSH tunnel, or controlled reverse proxy for remote access;&lt;/li&gt;
&lt;li&gt;if using a reverse proxy, proxy only the Web UI and do not accidentally expose unnecessary ports.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If someone else controls the administration interface, they may be able to add devices, modify shared folders, and change sync relationships. Syncthing encrypts data in transit, but the administration entry point still needs protection.&lt;/p&gt;
&lt;h2 id=&#34;add-sync-folders-in-the-web-ui&#34;&gt;Add Sync Folders in the Web UI
&lt;/h2&gt;&lt;p&gt;Take a photo directory as an example. The Compose file already mounts:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;l&#34;&gt;/volume1/photos:/var/syncthing/photos&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;When adding the folder in the Web UI:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Folder Label: you can use &lt;code&gt;Photos&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Folder ID: use a stable English ID such as &lt;code&gt;photos&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Folder Path: enter &lt;code&gt;/var/syncthing/photos&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Sharing: choose the devices that should receive this folder;&lt;/li&gt;
&lt;li&gt;Folder Type: choose &lt;code&gt;Send &amp;amp; Receive&lt;/code&gt;, &lt;code&gt;Send Only&lt;/code&gt;, or &lt;code&gt;Receive Only&lt;/code&gt; based on the data flow.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this Docker node is the central NAS node, common choices are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;regular documents: &lt;code&gt;Send &amp;amp; Receive&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;phone photo collection: &lt;code&gt;Receive Only&lt;/code&gt; on the NAS;&lt;/li&gt;
&lt;li&gt;outbound distribution folder: &lt;code&gt;Send Only&lt;/code&gt; on the NAS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Choose based on the intended direction of the data. Do not set every folder to bidirectional sync without thinking.&lt;/p&gt;
&lt;h2 id=&#34;update-the-container&#34;&gt;Update the Container
&lt;/h2&gt;&lt;p&gt;With Compose, updates are usually:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose pull
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;As long as the configuration directory and data directories are mounted correctly, updating the container will not lose the device ID, pairings, or sync folder configuration.&lt;/p&gt;
&lt;p&gt;Before updating, you can back up the configuration directory:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -czf syncthing-config-backup.tar.gz ./config
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The configuration directory contains device private keys. Do not upload the backup casually to a public location.&lt;/p&gt;
&lt;h2 id=&#34;common-issues&#34;&gt;Common Issues
&lt;/h2&gt;&lt;h3 id=&#34;web-ui-does-not-open&#34;&gt;Web UI Does Not Open
&lt;/h3&gt;&lt;p&gt;First check whether the container is running:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker ps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker logs syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then check port mappings:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker port syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the container is healthy but the page still does not open, check the host firewall, NAS firewall, or cloud security group.&lt;/p&gt;
&lt;h3 id=&#34;folder-does-not-exist-after-adding-it&#34;&gt;Folder Does Not Exist After Adding It
&lt;/h3&gt;&lt;p&gt;Check whether the path entered in the Web UI is the container path.&lt;/p&gt;
&lt;p&gt;For example, if the host path is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/downloads
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;and the container path is:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/syncthing/downloads
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;the Web UI should use the latter.&lt;/p&gt;
&lt;h3 id=&#34;only-relay-connections-very-slow&#34;&gt;Only Relay Connections, Very Slow
&lt;/h3&gt;&lt;p&gt;Check first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;whether &lt;code&gt;22000/TCP&lt;/code&gt; is allowed;&lt;/li&gt;
&lt;li&gt;whether &lt;code&gt;22000/UDP&lt;/code&gt; is allowed;&lt;/li&gt;
&lt;li&gt;whether router port forwarding is correct;&lt;/li&gt;
&lt;li&gt;whether the cloud security group allows both TCP and UDP;&lt;/li&gt;
&lt;li&gt;whether the local firewall blocks Docker&amp;rsquo;s mapped ports.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Relays improve reachability, but they are not suitable for long-term heavy sync traffic.&lt;/p&gt;
&lt;h3 id=&#34;file-permissions-are-wrong-after-sync&#34;&gt;File Permissions Are Wrong After Sync
&lt;/h3&gt;&lt;p&gt;First confirm that the container user is correct, then check the host directory permissions. Linux, NAS, and Windows shared folders have different permission models. Do not treat Syncthing as a permission repair tool.&lt;/p&gt;
&lt;p&gt;For cross-system sync, try to sync ordinary files and directories. Avoid syncing system folders that depend on complex ACLs, ownership, or extended attributes.&lt;/p&gt;
&lt;h2 id=&#34;a-more-stable-setup&#34;&gt;A More Stable Setup
&lt;/h2&gt;&lt;p&gt;If your goal is to use a NAS or server as the central node, design it like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run Syncthing with Docker on the NAS.&lt;/li&gt;
&lt;li&gt;Mount the configuration directory to &lt;code&gt;/volume1/docker/syncthing/config&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Mount each data category separately, for example &lt;code&gt;/volume1/photos&lt;/code&gt; and &lt;code&gt;/volume1/notes&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add the NAS device ID from phones and computers.&lt;/li&gt;
&lt;li&gt;Enable file versioning on important folders on the NAS side.&lt;/li&gt;
&lt;li&gt;Keep the Web UI accessible only on the LAN or through a VPN.&lt;/li&gt;
&lt;li&gt;Back up the NAS independently. Do not treat sync as the only backup.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In this setup, Syncthing handles device-to-device synchronization, the NAS provides always-on availability and version buffering, and real backup is still handled by snapshots, external disks, or off-site backups.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The key to deploying Syncthing with Docker is separating the container lifecycle from the sync data lifecycle.&lt;/p&gt;
&lt;p&gt;The container can be updated, recreated, or migrated at any time. The configuration directory and data directories, however, must remain stable on the host. Use container paths in the Web UI, handle host permissions with &lt;code&gt;PUID&lt;/code&gt;, &lt;code&gt;PGID&lt;/code&gt;, and directory access rules, and open ports according to the actual network environment.&lt;/p&gt;
&lt;p&gt;Once these pieces are clear, Syncthing works very well as a lightweight sync layer between a NAS, a server, and personal devices.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>How to Use Syncthing: Practical Notes from Device Pairing to File Sync</title>
        <link>https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/</link>
        <pubDate>Sun, 31 May 2026 11:59:09 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/</guid>
        <description>&lt;h2 id=&#34;syncthing-series&#34;&gt;Syncthing Series
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-file-sync-practical-notes/&#34; &gt;How to Use Syncthing: Practical Notes from Device Pairing to File Sync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-docker-deploy-guide/&#34; &gt;Deploying Syncthing with Docker: Compose, Ports, and Volume Mapping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-topology-guide/&#34; &gt;How to Configure Syncthing Across Multiple Devices: Mesh, Star Topology, and Introducers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-android-fork-setup-guide/&#34; &gt;Using Syncthing on Android: Syncthing-Fork Setup and Photo Backup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-multi-device-folder-management/&#34; &gt;Managing Syncthing Across Many Devices and Folders: Topology, Naming, and Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/31/syncthing-iphone-photo-backup/&#34; &gt;How to Sync iPhone Photos to a Computer or NAS with Syncthing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Syncthing is well suited for peer-to-peer file synchronization between multiple devices. It is not a traditional cloud drive, and it does not first upload all data to a central server before downloading it elsewhere. Instead, authorized devices exchange files directly.&lt;/p&gt;
&lt;p&gt;If you are considering it for Markdown notes, photo backup, configuration files, or a home NAS directory, the first question is not just whether it can sync. You should first understand devices, folders, device IDs, sync direction, discovery, and conflict handling.&lt;/p&gt;
&lt;h2 id=&#34;what-syncthing-solves&#34;&gt;What Syncthing Solves
&lt;/h2&gt;&lt;p&gt;Syncthing is designed for one core scenario: you have two or more devices and want a directory to stay consistent across them.&lt;/p&gt;
&lt;p&gt;Typical examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Syncing work files between a Windows desktop and laptop.&lt;/li&gt;
&lt;li&gt;Syncing photos or documents between a phone and NAS.&lt;/li&gt;
&lt;li&gt;Syncing small scripts, examples, or configuration notes between Linux servers.&lt;/li&gt;
&lt;li&gt;Keeping Obsidian notes, Joplin attachments, or Markdown folders available on several devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is better for cases where you control the devices and the data. If you need team permissions, web previews, sharing links, or collaborative editing, a conventional cloud drive or document platform may fit better.&lt;/p&gt;
&lt;h2 id=&#34;what-happens-on-first-start&#34;&gt;What Happens on First Start
&lt;/h2&gt;&lt;p&gt;The official getting started guide suggests configuring two machines side by side. In Syncthing, each machine is a device. The machine you are configuring is the local device, while the other machine is a remote device.&lt;/p&gt;
&lt;p&gt;On first start, Syncthing creates its configuration, cryptographic keys, and device ID. It also opens the local Web GUI by default:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http://127.0.0.1:8384/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The Web GUI is the everyday configuration interface. Syncthing may also create a default folder, usually a &lt;code&gt;Sync&lt;/code&gt; directory under your user profile. You can use it for testing, or remove it later and add your own folders.&lt;/p&gt;
&lt;h2 id=&#34;device-id-is-the-basis-of-pairing&#34;&gt;Device ID Is the Basis of Pairing
&lt;/h2&gt;&lt;p&gt;Syncthing pairs devices through device IDs.&lt;/p&gt;
&lt;p&gt;Each device creates its own key on first start. The device ID is a readable fingerprint of that device certificate. Two devices only establish a sync relationship after they have added each other&amp;rsquo;s device ID.&lt;/p&gt;
&lt;p&gt;A typical flow is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Start Syncthing on both devices.&lt;/li&gt;
&lt;li&gt;Open the Web GUI on both sides.&lt;/li&gt;
&lt;li&gt;Add device B&amp;rsquo;s device ID on device A.&lt;/li&gt;
&lt;li&gt;Add device A&amp;rsquo;s device ID on device B.&lt;/li&gt;
&lt;li&gt;Choose which folders to share.&lt;/li&gt;
&lt;li&gt;Save and wait for the connection.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The device ID does not need to be protected like a password, but you should not publish your sync topology unnecessarily. The things that really need protection are the device private key, Web GUI access, and the synced folders themselves.&lt;/p&gt;
&lt;h2 id=&#34;syncthing-does-not-sync-the-whole-machine&#34;&gt;Syncthing Does Not Sync the Whole Machine
&lt;/h2&gt;&lt;p&gt;Syncthing only syncs folders that you explicitly add. It does not sync an entire device by default.&lt;/p&gt;
&lt;p&gt;Each folder has its own path, ID, shared devices, and folder type. It is usually better to separate folders by purpose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;notes/&lt;/code&gt;: Markdown notes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;photos-inbox/&lt;/code&gt;: phone photo intake.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docs/&lt;/code&gt;: documents shared across devices.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scripts/&lt;/code&gt;: scripts and configuration examples.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do not start by syncing huge system directories, download directories, or mixed folders. The more complex the directory, the more likely conflicts, ignore rules, permissions, and scan cost will become long-term problems.&lt;/p&gt;
&lt;h2 id=&#34;three-common-folder-types&#34;&gt;Three Common Folder Types
&lt;/h2&gt;&lt;p&gt;The official documentation explains folder types clearly. In practice, you mainly need to understand these three.&lt;/p&gt;
&lt;h3 id=&#34;send--receive&#34;&gt;Send &amp;amp; Receive
&lt;/h3&gt;&lt;p&gt;This is the default mode. The folder sends local changes and receives remote changes.&lt;/p&gt;
&lt;p&gt;It fits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Editing notes across several devices.&lt;/li&gt;
&lt;li&gt;Maintaining documents on multiple devices.&lt;/li&gt;
&lt;li&gt;Normal two-way synchronization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If two devices modify the same file at the same time, Syncthing creates a conflict file instead of silently overwriting one side.&lt;/p&gt;
&lt;h3 id=&#34;send-only&#34;&gt;Send Only
&lt;/h3&gt;&lt;p&gt;This mode treats the local folder as the reference copy. It sends changes to other devices, but does not apply changes from them.&lt;/p&gt;
&lt;p&gt;It fits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A primary device distributing files to backup devices.&lt;/li&gt;
&lt;li&gt;Cases where one machine should be authoritative.&lt;/li&gt;
&lt;li&gt;Situations where remote changes should not affect the local folder.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If remote changes appear, the local device may show the folder as out of sync. The Web GUI can then offer &lt;code&gt;Override Changes&lt;/code&gt;, which pushes the local state to the rest of the cluster. Use that button carefully.&lt;/p&gt;
&lt;h3 id=&#34;receive-only&#34;&gt;Receive Only
&lt;/h3&gt;&lt;p&gt;This is the opposite of Send Only. The folder receives cluster changes, but local changes are not sent to other devices.&lt;/p&gt;
&lt;p&gt;It fits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Backup targets.&lt;/li&gt;
&lt;li&gt;Read-only mirrors.&lt;/li&gt;
&lt;li&gt;Devices where local mistakes should not pollute the main sync set.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If local changes appear, the Web GUI may offer &lt;code&gt;Revert Local Changes&lt;/code&gt; to return the folder to the cluster state.&lt;/p&gt;
&lt;h2 id=&#34;check-firewall-and-ports-first&#34;&gt;Check Firewall and Ports First
&lt;/h2&gt;&lt;p&gt;Syncthing can use discovery, NAT traversal, and relays, but connections are more stable when the network is understood.&lt;/p&gt;
&lt;p&gt;The important ports listed in the official firewall guide are:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;22000/TCP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;22000/UDP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;21027/UDP
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Where:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;22000/TCP&lt;/code&gt; is used for TCP sync traffic.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;22000/UDP&lt;/code&gt; is used for QUIC sync traffic.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;21027/UDP&lt;/code&gt; is used for local discovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If devices are on the same LAN but cannot discover each other, first check local firewalls, router isolation, and whether Wi-Fi and wired networks are on different segments.&lt;/p&gt;
&lt;p&gt;Across the internet or NAT, direct connections are usually faster than relays when port forwarding is possible. Without port forwarding, relays can still help devices connect, but performance is often worse.&lt;/p&gt;
&lt;p&gt;On Linux with &lt;code&gt;ufw&lt;/code&gt; and the corresponding application profile installed, you can use:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw allow syncthing
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw status verbose
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The Web GUI listens on &lt;code&gt;127.0.0.1:8384&lt;/code&gt; by default. If you change it to &lt;code&gt;0.0.0.0:8384&lt;/code&gt;, the management interface becomes reachable from outside the machine. At that point you must think about passwords, HTTPS, reverse proxies, or SSH tunnels. For home use, an SSH tunnel is usually safer.&lt;/p&gt;
&lt;h2 id=&#34;stignore-belongs-in-the-sync-root&#34;&gt;&lt;code&gt;.stignore&lt;/code&gt; Belongs in the Sync Root
&lt;/h2&gt;&lt;p&gt;If some files should not sync, create a &lt;code&gt;.stignore&lt;/code&gt; file in the root of the synced folder.&lt;/p&gt;
&lt;p&gt;Important details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.stignore&lt;/code&gt; must be in the root of the synced folder.&lt;/li&gt;
&lt;li&gt;Rules are relative to that root.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.stignore&lt;/code&gt; itself is not synced to other devices.&lt;/li&gt;
&lt;li&gt;The file should use UTF-8.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A simple example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(?d).DS_Store
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;node_modules
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cache/**
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!/cache/keep.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;(?d)&lt;/code&gt; means Syncthing may delete those ignored files when they would otherwise prevent a directory deletion. It is useful for generated files such as &lt;code&gt;.DS_Store&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The exclamation mark &lt;code&gt;!&lt;/code&gt; negates a rule and includes a file again. Complex negative rules can make Syncthing scan directories that would otherwise be ignored, so start with simple patterns.&lt;/p&gt;
&lt;h2 id=&#34;file-versioning-is-not-local-undo&#34;&gt;File Versioning Is Not Local Undo
&lt;/h2&gt;&lt;p&gt;Syncthing supports file versioning, but its meaning is easy to misunderstand.&lt;/p&gt;
&lt;p&gt;The official documentation emphasizes that versioning stores the old local version when a remote change replaces it. If B modifies a file and syncs it to A, A can keep the replaced version. But if A edits a file locally, Syncthing cannot preserve A&amp;rsquo;s previous version before the edit.&lt;/p&gt;
&lt;p&gt;Common versioning strategies include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trash Can File Versioning: move replaced or deleted files into &lt;code&gt;.stversions&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Simple File Versioning: keep a fixed number of versions.&lt;/li&gt;
&lt;li&gt;Staggered File Versioning: keep dense recent versions and sparser older versions.&lt;/li&gt;
&lt;li&gt;External File Versioning: hand version handling to a script.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For important documents, enable at least simple or trash-can versioning on the backup target. It is not a full backup system, but it reduces the damage from accidental deletion or overwrite.&lt;/p&gt;
&lt;h2 id=&#34;how-conflicts-happen&#34;&gt;How Conflicts Happen
&lt;/h2&gt;&lt;p&gt;Syncthing detects conflicts. If two devices change the same file differently at the same time, it may create a conflict file such as:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;filename.sync-conflict-date-time-modifiedBy.ext
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is safer than silent overwrite, but you still need to clean up conflict files.&lt;/p&gt;
&lt;p&gt;Common conflict sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Opening the same Markdown note on multiple devices at once.&lt;/li&gt;
&lt;li&gt;Applications automatically writing the same state file.&lt;/li&gt;
&lt;li&gt;Syncing device-specific files such as &lt;code&gt;.obsidian/workspace.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Case-sensitive and case-insensitive filename differences across Windows, macOS, and Android.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For notes, sync the text, attachments, and templates first. Be careful with workspace state, caches, and plugin temporary files; put them in &lt;code&gt;.stignore&lt;/code&gt; when needed.&lt;/p&gt;
&lt;h2 id=&#34;security-boundaries&#34;&gt;Security Boundaries
&lt;/h2&gt;&lt;p&gt;One of Syncthing&amp;rsquo;s security goals is that unauthorized devices cannot join the sync cluster and passive observers cannot read file contents in transit.&lt;/p&gt;
&lt;p&gt;The security documentation explains that traffic between devices is protected by TLS, and peers verify that the device certificate fingerprint is in the allowed list. In practice, devices only sync after both sides are configured with the correct device IDs.&lt;/p&gt;
&lt;p&gt;That does not mean Syncthing usage is invisible:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Global discovery announces device IDs and listening addresses.&lt;/li&gt;
&lt;li&gt;Local discovery broadcasts on the LAN.&lt;/li&gt;
&lt;li&gt;Relay servers can see device IDs, though they cannot decrypt synced data.&lt;/li&gt;
&lt;li&gt;An exposed Web GUI reveals that the machine is running Syncthing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Practical security advice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Do not expose the Web GUI to the public internet unless authentication and encryption are properly configured.&lt;/li&gt;
&lt;li&gt;Only add devices you trust.&lt;/li&gt;
&lt;li&gt;Use disk encryption or separate backups for important folders.&lt;/li&gt;
&lt;li&gt;Disable global discovery, relays, or auto-upgrade if your environment requires it, while accepting the loss of convenience.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;untrusted-encrypted-devices&#34;&gt;Untrusted Encrypted Devices
&lt;/h2&gt;&lt;p&gt;Syncthing also supports untrusted encrypted devices. This lets an untrusted device store encrypted data only.&lt;/p&gt;
&lt;p&gt;A typical use case is a cloud server or external machine that participates in sync or backup but should not see plaintext. Trusted devices encrypt data with a folder password before sending it; other trusted devices with the same password can sync and decrypt it.&lt;/p&gt;
&lt;p&gt;The official documentation still treats this feature as beta/testing. It is useful for specific needs, but not the simplest starting point.&lt;/p&gt;
&lt;p&gt;Remember:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;File data, names, timestamps, hashes, and directory structure are protected.&lt;/li&gt;
&lt;li&gt;Folder ID, label, and approximate file sizes are not fully hidden.&lt;/li&gt;
&lt;li&gt;The password and folder ID must be kept safely.&lt;/li&gt;
&lt;li&gt;The folder type on the untrusted device should be &lt;code&gt;Receive Encrypted&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For a normal home NAS, your own computers, and phones, trusted-device sync plus system login security, disk encryption, and backups is usually easier to maintain.&lt;/p&gt;
&lt;h2 id=&#34;practical-configuration-advice&#34;&gt;Practical Configuration Advice
&lt;/h2&gt;&lt;p&gt;If you plan to use Syncthing for notes or documents long term:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create separate folders by data type. Do not use one giant mixed folder.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;Send &amp;amp; Receive&lt;/code&gt; on primary computers.&lt;/li&gt;
&lt;li&gt;Consider &lt;code&gt;Receive Only&lt;/code&gt; plus file versioning on a NAS or backup machine.&lt;/li&gt;
&lt;li&gt;On phones, sync only the directories you need.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;.stignore&lt;/code&gt; for caches, temporary files, and workspace state.&lt;/li&gt;
&lt;li&gt;Make sure &lt;code&gt;22000/TCP&lt;/code&gt;, &lt;code&gt;22000/UDP&lt;/code&gt;, and &lt;code&gt;21027/UDP&lt;/code&gt; work on the LAN.&lt;/li&gt;
&lt;li&gt;Keep the Web GUI local when possible; use SSH tunnels or VPN for remote access.&lt;/li&gt;
&lt;li&gt;Do not treat sync as the only backup for important data.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;where-syncthing-fits&#34;&gt;Where Syncthing Fits
&lt;/h2&gt;&lt;p&gt;Syncthing is a good fit if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want data to stay mainly on your own devices.&lt;/li&gt;
&lt;li&gt;You can understand device pairing, folders, and conflict handling.&lt;/li&gt;
&lt;li&gt;You have a NAS, home server, or multiple personal devices.&lt;/li&gt;
&lt;li&gt;You want to sync Markdown, photo intake folders, scripts, or lightweight documents.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is not ideal if:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You need collaborative online editing.&lt;/li&gt;
&lt;li&gt;You need web previews and sharing links.&lt;/li&gt;
&lt;li&gt;You need fine-grained team permissions.&lt;/li&gt;
&lt;li&gt;You do not want to deal with network, firewall, or conflict issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is best understood as a reliable device-to-device sync layer, not a full cloud-drive product. Used well, it can connect a NAS, computers, and phones into a controllable personal data network. Used casually, it can become a maintenance burden through conflicts, accidental deletion, ignore rules, and network quirks.&lt;/p&gt;
&lt;h2 id=&#34;references&#34;&gt;References
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Syncthing Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/intro/getting-started.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Getting Started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/config.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Syncthing Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/foldertypes.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Folder Types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/firewall.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Firewall Setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/ignoring.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ignoring Files&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/versioning.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;File Versioning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/syncing.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Understanding Synchronization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/security.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Security Principles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.syncthing.net/users/untrusted.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Untrusted (Encrypted) Devices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Sync Local Markdown Notes with a Self-Hosted Git Server on a NAS</title>
        <link>https://knightli.com/en/2026/05/30/nas-git-server-local-notes-sync/</link>
        <pubDate>Sat, 30 May 2026 16:14:19 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/30/nas-git-server-local-notes-sync/</guid>
        <description>&lt;p&gt;If you already have a local NAS and want to keep your notes as much as possible under your own control, you can put Markdown notes into a Git Server on the NAS and sync them with Android and Windows clients. This setup does not depend on public cloud drives, and it works well with note tools centered on local Markdown files, such as Obsidian, Markor, VS Code, and Typora.&lt;/p&gt;
&lt;p&gt;The basic idea is simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a bare Git repository on the NAS as the central notes repository.&lt;/li&gt;
&lt;li&gt;Clone the repository on Windows and write notes with a normal editor.&lt;/li&gt;
&lt;li&gt;Clone the same repository on Android and use a Git client to pull and push.&lt;/li&gt;
&lt;li&gt;Before switching devices, run &lt;code&gt;pull&lt;/code&gt;; after writing, run &lt;code&gt;commit&lt;/code&gt; and &lt;code&gt;push&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is not the most hands-off sync method, but it gives good control and clear version history. Once you build the habit of committing, you can keep notes, configuration, and image attachments on your own NAS for long-term storage.&lt;/p&gt;
&lt;h2 id=&#34;who-this-setup-is-for&#34;&gt;Who This Setup Is For
&lt;/h2&gt;&lt;p&gt;This setup is suitable for people who:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Already have a NAS at home or in the office.&lt;/li&gt;
&lt;li&gt;Mainly write notes as Markdown files.&lt;/li&gt;
&lt;li&gt;Want note data stored inside a local network instead of only on a commercial cloud drive.&lt;/li&gt;
&lt;li&gt;Need sync between Windows and Android devices.&lt;/li&gt;
&lt;li&gt;Can accept basic Git operations such as &lt;code&gt;clone&lt;/code&gt;, &lt;code&gt;pull&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, and &lt;code&gt;push&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you want fully automatic and invisible sync, Syncthing, WebDAV, or the built-in sync of a notes app may be easier. Git is better for a notes library where version history, rollback, migration, and control matter.&lt;/p&gt;
&lt;h2 id=&#34;1-install-git-server-on-the-nas&#34;&gt;1. Install Git Server on the NAS
&lt;/h2&gt;&lt;p&gt;Different NAS systems expose this in different places, but the goal is the same: let the NAS provide a Git repository that can be accessed through SSH.&lt;/p&gt;
&lt;p&gt;There are three common approaches:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Method&lt;/th&gt;
          &lt;th&gt;Suitable Scenario&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Install Git Server from the NAS package center&lt;/td&gt;
          &lt;td&gt;Synology, QNAP, and other consumer NAS systems when you want less setup work&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Deploy Gitea with Docker&lt;/td&gt;
          &lt;td&gt;You want a web UI, account management, and a more complete Git service&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Use SSH + a bare repository directly&lt;/td&gt;
          &lt;td&gt;You only use it yourself and want something simple and stable&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For personal note sync, SSH + a bare repository is usually enough. Suppose the NAS has a dedicated Git user named &lt;code&gt;git&lt;/code&gt;, and repositories are stored under &lt;code&gt;/volume1/git&lt;/code&gt;. On the NAS terminal, run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /volume1/git/notes.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /volume1/git/notes.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init --bare
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A bare repository is not edited directly. It only acts as the sync center. The actual note-writing directory lives locally on Windows or Android.&lt;/p&gt;
&lt;p&gt;Then confirm that SSH can access the NAS:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh git@192.168.1.10
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the NAS supports SSH public-key login, configure keys so you do not need to enter a password every time you push. Windows and Android can each generate their own SSH key, and then you can add the public keys to the NAS &lt;code&gt;authorized_keys&lt;/code&gt; file or the Git Server user settings.&lt;/p&gt;
&lt;h2 id=&#34;2-windows-setup&#34;&gt;2. Windows Setup
&lt;/h2&gt;&lt;p&gt;On Windows, install Git for Windows first. Then choose a local directory for notes, such as &lt;code&gt;D:\Notes&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Initial clone:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clone&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;@192&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;168&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;volume1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;D:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Notes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After entering the directory, you can create a basic structure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;D:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Notes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;daily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;projects&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;resources&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then open &lt;code&gt;D:\Notes&lt;/code&gt; with Obsidian, VS Code, Typora, or another Markdown editor. After writing the first batch of notes, commit them:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;add&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-m&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;初始化笔记库&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;origin&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the default branch is &lt;code&gt;master&lt;/code&gt;, replace &lt;code&gt;main&lt;/code&gt; with &lt;code&gt;master&lt;/code&gt; in the command. You can also standardize it to &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;branch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-u&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;origin&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;For daily use, keep this rhythm on Windows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pull&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-rebase&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;add&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-m&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;更新笔记&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;3-android-setup&#34;&gt;3. Android Setup
&lt;/h2&gt;&lt;p&gt;On Android, use a client that supports Git to sync the local Markdown directory. Common choices include:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Tool&lt;/th&gt;
          &lt;th&gt;Usage&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Termux&lt;/td&gt;
          &lt;td&gt;Most flexible, close to a Linux command line&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;MGit&lt;/td&gt;
          &lt;td&gt;Graphical Git client, suitable if you do not want to type many commands&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;GitJournal&lt;/td&gt;
          &lt;td&gt;More like a notes app, suitable for simple Markdown notes&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you choose Termux, first install Git and OpenSSH:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pkg update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pkg install git openssh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Generate an SSH key:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t ed25519 -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;android-notes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Add the generated public key to the Git user authorization on the NAS. Then choose a local directory on the phone and clone the repository:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git@192.168.1.10:/volume1/git/notes.git ~/notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you want ordinary Android editors to access this directory, you can put the repository in shared storage, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /sdcard
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git@192.168.1.10:/volume1/git/notes.git Notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then open &lt;code&gt;/sdcard/Notes&lt;/code&gt; with Markor, Obsidian Android, or another Markdown editor. After editing on the phone, return to Termux and run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /sdcard/Notes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git pull --rebase
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;手机更新笔记&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Permissions and paths are the easiest sources of trouble on Android. Termux&amp;rsquo;s own home directory is more stable, but some editors may not access it directly. &lt;code&gt;/sdcard&lt;/code&gt; is easier for editors to access, but permissions, file watching, and performance may be limited by the system. Test with a small number of notes before deciding on the final directory.&lt;/p&gt;
&lt;h2 id=&#34;4-how-obsidian-and-joplin-fit-in&#34;&gt;4. How Obsidian and Joplin Fit In
&lt;/h2&gt;&lt;p&gt;The NAS Git Server only solves where files live and how they sync. You still need to choose a notes app for writing. Here, the setup can be split into an Obsidian path and a Joplin path.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Setup&lt;/th&gt;
          &lt;th&gt;Sync Method&lt;/th&gt;
          &lt;th&gt;Best For&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;Obsidian + Git&lt;/td&gt;
          &lt;td&gt;The notes directory is the Git repository, and Windows and Android both pull the same repository&lt;/td&gt;
          &lt;td&gt;People who want backlinks, knowledge graphs, plugins, and pure Markdown files&lt;/td&gt;
          &lt;td&gt;On Android, test whether the Git client and Obsidian can access the same directory correctly&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Joplin + Git&lt;/td&gt;
          &lt;td&gt;Do not put the Joplin database directly into Git; use Joplin&amp;rsquo;s own sync or export Markdown to Git regularly&lt;/td&gt;
          &lt;td&gt;People who want web clipping, end-to-end encryption, and a traditional notebook structure&lt;/td&gt;
          &lt;td&gt;Joplin&amp;rsquo;s local data is not a normal Markdown folder and is not suitable as a direct Git-synced notes library&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;obsidian-setup&#34;&gt;Obsidian Setup
&lt;/h3&gt;&lt;p&gt;Obsidian is the best fit for this NAS Git sync setup. Its vault is essentially an ordinary folder containing Markdown files, image attachments, and configuration files. You can directly use &lt;code&gt;D:\Notes&lt;/code&gt; or &lt;code&gt;/sdcard/Notes&lt;/code&gt; as the Obsidian vault.&lt;/p&gt;
&lt;p&gt;Windows workflow:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;clone&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;@192&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;168&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;volume1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;notes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;D:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Notes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then open &lt;code&gt;D:\Notes&lt;/code&gt; in Obsidian.&lt;/p&gt;
&lt;p&gt;Android workflow:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /sdcard
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git@192.168.1.10:/volume1/git/notes.git Notes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then open &lt;code&gt;/sdcard/Notes&lt;/code&gt; in Obsidian Android.&lt;/p&gt;
&lt;p&gt;Suggestions for the Obsidian setup:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For single-user use, you can commit &lt;code&gt;.obsidian/&lt;/code&gt; so themes, plugins, and some settings sync across devices.&lt;/li&gt;
&lt;li&gt;If Android and Windows use very different plugins, commit only the note content and exclude device-state files such as &lt;code&gt;.obsidian/workspace.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Put image attachments under &lt;code&gt;attachments/&lt;/code&gt; to avoid scattering them across directories.&lt;/li&gt;
&lt;li&gt;Before opening Obsidian, run &lt;code&gt;git pull --rebase&lt;/code&gt;; after writing, run &lt;code&gt;commit&lt;/code&gt; and &lt;code&gt;push&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can prepare a &lt;code&gt;.gitignore&lt;/code&gt; to reduce conflicts caused by device-state files:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.obsidian/workspace.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.obsidian/workspace-mobile.json
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.trash/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;joplin-setup&#34;&gt;Joplin Setup
&lt;/h3&gt;&lt;p&gt;Joplin works differently from Obsidian. Although it uses Markdown syntax, its local data is mainly managed by the application&amp;rsquo;s database. It is not a normal Markdown folder that can be synced directly with Git. Therefore, do not put Joplin&amp;rsquo;s configuration or database directory directly into a Git repository.&lt;/p&gt;
&lt;p&gt;If you prefer Joplin, two safer approaches are:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Approach&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;Use Joplin&amp;rsquo;s built-in sync&lt;/td&gt;
          &lt;td&gt;Sync through WebDAV, Nextcloud, Joplin Cloud, Dropbox, OneDrive, and similar options. The NAS can provide WebDAV or Nextcloud&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Export Markdown to Git regularly&lt;/td&gt;
          &lt;td&gt;Use Joplin as the main notes app, regularly export notes as Markdown, and commit them to the NAS Git repository as a backup&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If your NAS already has WebDAV or Nextcloud, connecting Joplin directly to the NAS for sync is smoother than Git. It can also enable end-to-end encryption, which is suitable for people who do not want to handle Git conflicts but still want data under their own control.&lt;/p&gt;
&lt;p&gt;The recommended Joplin + NAS path is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enable WebDAV on the NAS or deploy Nextcloud.&lt;/li&gt;
&lt;li&gt;Configure the same sync target on Joplin for Windows.&lt;/li&gt;
&lt;li&gt;Configure the same sync target on Joplin for Android.&lt;/li&gt;
&lt;li&gt;When versioned backup is needed, export Markdown to the Git repository regularly.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Simple rule of thumb:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Choose Obsidian if you want &amp;ldquo;local Markdown folder + backlinks + Git history&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Choose Joplin if you want &amp;ldquo;traditional notes app + web clipping + encrypted sync&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;If you want the NAS Git Server as the main sync center, Obsidian is more suitable.&lt;/li&gt;
&lt;li&gt;If you want the NAS to act as a private cloud sync backend, Joplin is more suitable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;5-recommended-notes-directory-structure&#34;&gt;5. Recommended Notes Directory Structure
&lt;/h2&gt;&lt;p&gt;Do not design the notes library too elaborately at the beginning. Start with a structure like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Notes/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  inbox/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  daily/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  projects/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  resources/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  attachments/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  README.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The meaning is straightforward:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;inbox/&lt;/code&gt; stores temporary notes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;daily/&lt;/code&gt; stores journals, logs, and daily records.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;projects/&lt;/code&gt; stores project notes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;resources/&lt;/code&gt; stores long-term reference material.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;attachments/&lt;/code&gt; stores images, PDFs, and other attachments.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you use Obsidian, you can use this directory directly as a vault. Whether to commit &lt;code&gt;.obsidian/&lt;/code&gt; depends on personal preference. For single-user multi-device use, committing it is fine. If plugins differ greatly across devices, commit only part of the configuration.&lt;/p&gt;
&lt;h2 id=&#34;6-avoiding-sync-conflicts&#34;&gt;6. Avoiding Sync Conflicts
&lt;/h2&gt;&lt;p&gt;The key to syncing notes with Git is not complicated commands, but stable habits.&lt;/p&gt;
&lt;p&gt;Recommended rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Before writing on another device, run &lt;code&gt;git pull --rebase&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;After a writing session, run &lt;code&gt;commit&lt;/code&gt; and &lt;code&gt;push&lt;/code&gt; promptly.&lt;/li&gt;
&lt;li&gt;Do not edit the same file on two devices for a long time at the same time.&lt;/li&gt;
&lt;li&gt;Do not keep adding unlimited images and large attachments into the Git repository.&lt;/li&gt;
&lt;li&gt;Regularly keep another backup of the repository outside the NAS.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If a conflict happens, Git will mark the conflicting files. Markdown text conflicts are usually not hard to resolve, but the experience is worse on a phone, so try to resolve conflicts on Windows.&lt;/p&gt;
&lt;h2 id=&#34;7-do-you-need-automatic-sync&#34;&gt;7. Do You Need Automatic Sync?
&lt;/h2&gt;&lt;p&gt;You can write a simple Windows script that chains &lt;code&gt;pull&lt;/code&gt;, &lt;code&gt;add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, and &lt;code&gt;push&lt;/code&gt;. But for note sync, fully automatic commits are not recommended, because accidental deletions, empty commits, conflicts, and large attachments may all be pushed automatically.&lt;/p&gt;
&lt;p&gt;A safer approach is semi-automatic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pull manually before opening notes.&lt;/li&gt;
&lt;li&gt;Run a script to commit after writing.&lt;/li&gt;
&lt;li&gt;Use a simple commit message that says what changed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, you can prepare a &lt;code&gt;sync-notes.ps1&lt;/code&gt; on Windows:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pull&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;-rebase&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;add&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;-m&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;更新笔记&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;push&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If there are no changes, &lt;code&gt;git commit&lt;/code&gt; will report nothing to commit. That is not a problem.&lt;/p&gt;
&lt;h2 id=&#34;8-pros-and-cons-of-this-setup&#34;&gt;8. Pros and Cons of This Setup
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Aspect&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;Pros&lt;/td&gt;
          &lt;td&gt;Data stays on the local NAS, version history is clear, rollback is possible, migration is easy, and it suits Markdown&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Cons&lt;/td&gt;
          &lt;td&gt;Requires understanding Git, conflicts need manual handling, and the mobile experience is not as smooth as cloud sync&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Best for&lt;/td&gt;
          &lt;td&gt;Technical users, local-first notes, personal knowledge bases, project documentation&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Not for&lt;/td&gt;
          &lt;td&gt;People who do not want to touch a command line, need real-time multi-user collaboration, or frequently sync large attachments&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;my-recommendation&#34;&gt;My Recommendation
&lt;/h2&gt;&lt;p&gt;If you only want to sync ordinary Markdown notes between Android and Windows, start with the smallest setup: one bare repository on the NAS, Git for Windows on Windows, and Termux or MGit on Android. Do not introduce complex permissions, automation scripts, or excessive categorization on day one.&lt;/p&gt;
&lt;p&gt;After this workflow runs smoothly, then consider Gitea, automatic backups, per-device SSH key management, a separate attachment repository, scheduled tasks, and other extensions. The most important thing for a notes system is long-term stability, not filling it with every feature on the first day.&lt;/p&gt;
&lt;p&gt;In one sentence: a NAS Git Server is suitable for turning Markdown notes into a local-first, traceable, and portable personal knowledge library. It is less effortless than cloud sync, but the control is clearer.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>What is Above 4G Decoding? Why multi-PCIe systems, NAS expansion cards, and large-VRAM GPUs should enable it</title>
        <link>https://knightli.com/en/2026/05/24/above-4g-decoding-pcie-mmio-bar-explained/</link>
        <pubDate>Sun, 24 May 2026 00:51:13 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/24/above-4g-decoding-pcie-mmio-bar-explained/</guid>
        <description>&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; is a low-level PCIe resource allocation option in the motherboard BIOS. It often appears when troubleshooting NAS boxes, mini PCs, workstations, multi-GPU systems, routers, HBA / SATA expansion cards, and local AI machines.&lt;/p&gt;
&lt;p&gt;In simple terms, it allows a 64-bit system to assign PCIe devices&amp;rsquo; MMIO address space above the 4GB physical address range.&lt;/p&gt;
&lt;p&gt;That sounds low-level, but the problem is very real: when a motherboard has a GPU, NVMe drive, NIC, SATA expansion card, capture card, HBA, and other PCIe devices, forcing all of them to compete for address space below 4GB can cause resource allocation failures, missing devices, or even boot freezes.&lt;/p&gt;
&lt;h2 id=&#34;why-is-there-a-4gb-boundary&#34;&gt;Why is there a 4GB boundary?
&lt;/h2&gt;&lt;p&gt;The 4GB boundary is a historical legacy of the 32-bit era.&lt;/p&gt;
&lt;p&gt;A 32-bit address space can address at most:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2^32 bytes = 4GB
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Modern computers have 64-bit CPUs and operating systems, and memory sizes of 16GB, 32GB, 64GB, or more are common. But during POST and PCIe device initialization, motherboards still need to account for old compatibility assumptions. Many PCIe device resource mappings are initially arranged below the 4GB address boundary.&lt;/p&gt;
&lt;p&gt;The problem is that the space below 4GB is not only for RAM. The system must reserve part of it for hardware devices.&lt;/p&gt;
&lt;p&gt;That is where &lt;code&gt;MMIO&lt;/code&gt; comes in.&lt;/p&gt;
&lt;h2 id=&#34;what-is-mmio&#34;&gt;What is MMIO?
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;MMIO&lt;/code&gt; means Memory-Mapped I/O.&lt;/p&gt;
&lt;p&gt;The CPU cannot directly touch the internal registers or memory windows of PCIe devices as if they were normal RAM. Instead, part of the device&amp;rsquo;s registers, buffers, or VRAM window is mapped into the system address space. When the CPU reads or writes that address range, it is effectively communicating with the PCIe device.&lt;/p&gt;
&lt;p&gt;Roughly:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A device needs an address range.&lt;/li&gt;
&lt;li&gt;The motherboard assigns a physical system address range to it.&lt;/li&gt;
&lt;li&gt;When the CPU accesses that address range, it actually accesses the PCIe device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This mapped region is not ordinary RAM. It is an address window occupied by hardware.&lt;/p&gt;
&lt;p&gt;In old default configurations, many devices&amp;rsquo; MMIO regions are constrained below 4GB, often around the 3GB to 4GB area. This usually works with few devices, but becomes crowded as more devices are installed.&lt;/p&gt;
&lt;h2 id=&#34;what-is-bar&#34;&gt;What is BAR?
&lt;/h2&gt;&lt;p&gt;Every PCIe device uses &lt;code&gt;BAR&lt;/code&gt; to tell the motherboard how much address space it needs.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;BAR&lt;/code&gt; means Base Address Register. Its job is to say:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;I need a block of MMIO space. Please assign me an address range.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GPUs, NVMe drives, SATA controllers, NICs, HBAs, and USB expansion cards may all need BAR space. More devices means more address windows. GPUs may need especially large mappings.&lt;/p&gt;
&lt;p&gt;If the available MMIO space below 4GB is insufficient, the motherboard may fail to allocate resources to later devices.&lt;/p&gt;
&lt;h2 id=&#34;what-happens-if-above-4g-decoding-is-disabled&#34;&gt;What happens if Above 4G Decoding is disabled?
&lt;/h2&gt;&lt;p&gt;When &lt;code&gt;Above 4G Decoding&lt;/code&gt; is disabled, the motherboard tends to pack PCIe resources below the 4GB boundary. With only a few devices, you may not notice anything. With many devices, problems can appear.&lt;/p&gt;
&lt;p&gt;Common setups include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A discrete GPU.&lt;/li&gt;
&lt;li&gt;One or more NVMe SSDs.&lt;/li&gt;
&lt;li&gt;A JMB585 / ASM1166 SATA expansion card.&lt;/li&gt;
&lt;li&gt;A 2.5G / 10G NIC.&lt;/li&gt;
&lt;li&gt;A Wi-Fi / Bluetooth module.&lt;/li&gt;
&lt;li&gt;Extra HBAs, capture cards, or USB expansion cards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these devices request BAR / MMIO address space from the motherboard. If the below-4GB region is full, the motherboard may show:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A PCIe card is not recognized.&lt;/li&gt;
&lt;li&gt;The device does not appear in BIOS.&lt;/li&gt;
&lt;li&gt;Linux / Windows reports missing devices or resource errors.&lt;/li&gt;
&lt;li&gt;Boot freezes during POST.&lt;/li&gt;
&lt;li&gt;Black screen or blinking cursor.&lt;/li&gt;
&lt;li&gt;Each card works alone, but the system fails when multiple cards are installed together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In JMB585 SATA expansion card scenarios, users often see the motherboard hang before BIOS, or the expansion card disappear after adding NVMe or NIC devices. Besides Option ROM, CSM, and PCIe Gen speed, PCIe address-space allocation is also worth checking.&lt;/p&gt;
&lt;h2 id=&#34;what-changes-when-above-4g-decoding-is-enabled&#34;&gt;What changes when Above 4G Decoding is enabled?
&lt;/h2&gt;&lt;p&gt;Enable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding = Enabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This tells the motherboard that PCIe devices supporting 64-bit addressing may have their MMIO resources allocated above 4GB.&lt;/p&gt;
&lt;p&gt;Then PCIe devices no longer need to fight for the small below-4GB region. The motherboard can place some BAR / MMIO mappings at higher addresses, reducing resource conflicts.&lt;/p&gt;
&lt;p&gt;For modern 64-bit systems, this is usually a reasonable setting, especially on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multi-disk NAS machines.&lt;/li&gt;
&lt;li&gt;Multi-NIC routers.&lt;/li&gt;
&lt;li&gt;Mini PCs with SATA / HBA expansion cards.&lt;/li&gt;
&lt;li&gt;Multi-GPU workstations.&lt;/li&gt;
&lt;li&gt;AI inference or training machines.&lt;/li&gt;
&lt;li&gt;Desktop systems with GPU, NVMe, capture cards, and expansion cards.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Its goal is not to improve normal application performance. Its goal is to make hardware resource allocation less cramped.&lt;/p&gt;
&lt;h2 id=&#34;relationship-with-jmb585--sata-expansion-cards&#34;&gt;Relationship with JMB585 / SATA expansion cards
&lt;/h2&gt;&lt;p&gt;A JMB585-style SATA expansion card may not need huge MMIO space by itself. The problem is often not how much this card needs alone, but how all PCIe devices in the system compete for address space together.&lt;/p&gt;
&lt;p&gt;For example, a mini PC may include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An NVMe system disk.&lt;/li&gt;
&lt;li&gt;An onboard NIC.&lt;/li&gt;
&lt;li&gt;A Wi-Fi module.&lt;/li&gt;
&lt;li&gt;A JMB585 five-port SATA expansion card.&lt;/li&gt;
&lt;li&gt;Possibly a discrete GPU or other controller.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If BIOS resource allocation is conservative, JMB585 may be one of the last devices initialized. Earlier devices have already consumed much of the below-4GB space. When JMB585 asks for BAR space, the motherboard may fail or enter an abnormal state.&lt;/p&gt;
&lt;p&gt;Enabling &lt;code&gt;Above 4G Decoding&lt;/code&gt; lets the motherboard place some device resources above 4GB, reducing the chance of conflict.&lt;/p&gt;
&lt;p&gt;It cannot repair a bad card or solve every PCIe link-training problem, but it is well worth trying when issues appear only after several devices are installed.&lt;/p&gt;
&lt;h2 id=&#34;relationship-with-resizable-bar--sam&#34;&gt;Relationship with Resizable BAR / SAM
&lt;/h2&gt;&lt;p&gt;Many users first notice &lt;code&gt;Above 4G Decoding&lt;/code&gt; when configuring GPU performance features, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Resizable BAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Re-Size BAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ReBAR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Smart Access Memory&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SAM&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They are related, but not the same thing.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt; is the foundation. It allows PCIe device MMIO resources to be assigned above 4GB.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Resizable BAR&lt;/code&gt; is a further capability. Traditionally, even if the CPU can access GPU memory, it often does so through a relatively small window, such as a 256MB mapping. With ReBAR, the CPU can map a larger portion of the GPU&amp;rsquo;s VRAM at once, theoretically reducing access switching overhead.&lt;/p&gt;
&lt;p&gt;Many motherboards require &lt;code&gt;Above 4G Decoding&lt;/code&gt; to be enabled before &lt;code&gt;Resizable BAR&lt;/code&gt; can be enabled. So:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Above 4G Decoding&lt;/code&gt;: allows device addresses above 4GB.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Resizable BAR&lt;/code&gt; / &lt;code&gt;SAM&lt;/code&gt;: allows the GPU BAR window to become larger.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For NAS and SATA expansion cards, the important part is usually the PCIe address space provided by the first option, not ReBAR itself.&lt;/p&gt;
&lt;h2 id=&#34;side-effects&#34;&gt;Side effects
&lt;/h2&gt;&lt;p&gt;On modern 64-bit Windows, Linux, Ubuntu, Debian, TrueNAS, Proxmox, and similar systems, enabling &lt;code&gt;Above 4G Decoding&lt;/code&gt; usually has no obvious downside.&lt;/p&gt;
&lt;p&gt;Still, keep these points in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Very old 32-bit operating systems may not be suitable.&lt;/li&gt;
&lt;li&gt;Some very old BIOS implementations or legacy PCIe devices may be incompatible.&lt;/li&gt;
&lt;li&gt;If the system cannot boot after changing BIOS settings, clear CMOS or restore defaults.&lt;/li&gt;
&lt;li&gt;If you enable ReBAR / SAM as well, verify that the GPU, motherboard, OS, and driver support it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On modern hardware and 64-bit systems, it is usually a healthy low-level setting to keep enabled, especially when multiple PCIe devices are installed.&lt;/p&gt;
&lt;h2 id=&#34;when-should-you-enable-it&#34;&gt;When should you enable it?
&lt;/h2&gt;&lt;p&gt;Consider enabling &lt;code&gt;Above 4G Decoding&lt;/code&gt; when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You use a 64-bit operating system.&lt;/li&gt;
&lt;li&gt;Multiple PCIe devices are installed.&lt;/li&gt;
&lt;li&gt;You have a discrete GPU, especially with 4GB or more VRAM.&lt;/li&gt;
&lt;li&gt;You use JMB585, ASM1166, HBA, RAID, capture, or other expansion cards.&lt;/li&gt;
&lt;li&gt;You are building a multi-disk NAS or router.&lt;/li&gt;
&lt;li&gt;You use multi-GPU, AI accelerator, or local LLM hardware.&lt;/li&gt;
&lt;li&gt;Installing a PCIe card causes boot freeze, black screen, or blinking cursor.&lt;/li&gt;
&lt;li&gt;Each device works alone, but combinations fail.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are troubleshooting a JMB585 SATA expansion card freezing during POST, check it together with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disable &lt;code&gt;CSM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Disable unnecessary &lt;code&gt;Storage OpROM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Change PCIe speed from &lt;code&gt;Auto&lt;/code&gt; or &lt;code&gt;Gen3&lt;/code&gt; to &lt;code&gt;Gen2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enable &lt;code&gt;Above 4G Decoding&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Try another PCIe slot.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;what-is-it-called-in-bios&#34;&gt;What is it called in BIOS?
&lt;/h2&gt;&lt;p&gt;Different motherboard vendors use slightly different names. Common names include:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4GB MMIO BIOS assignment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Memory Mapped I/O above 4GB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;64-bit PCIe decoding
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PCI 64-bit Resource Handling
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Common menu locations include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Advanced&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCIe Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCI Subsystem Settings&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Chipset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;North Bridge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IO Ports&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Boot&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some motherboards place it near &lt;code&gt;Resizable BAR&lt;/code&gt;, while others hide it under advanced PCIe or chipset settings.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The core purpose of &lt;code&gt;Above 4G Decoding&lt;/code&gt; is to let the motherboard allocate PCIe device MMIO / BAR address space above 4GB. It does not fix drivers; it addresses BIOS / PCIe resource allocation.&lt;/p&gt;
&lt;p&gt;On a simple PC with few devices, it may feel invisible. On a multi-disk NAS, multi-NIC router, mini PC with JMB585 / ASM1166 SATA expansion card, multi-GPU workstation, or local AI box, it matters.&lt;/p&gt;
&lt;p&gt;If installing a PCIe expansion card causes BIOS freezes, black screens, blinking cursor, missing devices, or failure only when multiple devices are installed together, &lt;code&gt;Above 4G Decoding = Enabled&lt;/code&gt; is a BIOS option worth checking early. It is not a cure-all, but it helps modern 64-bit hardware escape the old below-4GB address-space limitation and reduces PCIe resource conflicts.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PCIe expansion card causes a blinking cursor before BIOS: how to troubleshoot POST freezes</title>
        <link>https://knightli.com/en/2026/05/24/jmb585-sata-card-bios-post-blinking-cursor-troubleshooting/</link>
        <pubDate>Sun, 24 May 2026 00:46:52 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/24/jmb585-sata-card-bios-post-blinking-cursor-troubleshooting/</guid>
        <description>&lt;p&gt;If a PCIe expansion card is installed and the machine cannot even reach the BIOS screen, stopping at a black screen or blinking cursor before the motherboard finishes booting, this is usually not a Linux driver issue. It is an earlier hardware-level freeze.&lt;/p&gt;
&lt;p&gt;At this stage, the operating system has not loaded yet, so Linux kernel parameters such as &lt;code&gt;pci=nomsi&lt;/code&gt; and &lt;code&gt;pcie_aspm=off&lt;/code&gt; cannot help. The problem happens during POST, the power-on self-test stage. Common failure points include PCIe link training, PCIe resource allocation, Option ROM loading, Legacy / UEFI compatibility conflicts, or a faulty expansion card.&lt;/p&gt;
&lt;p&gt;In short: if you cannot even enter BIOS, do not start by changing Linux. First make the motherboard complete POST.&lt;/p&gt;
&lt;h2 id=&#34;what-this-failure-means&#34;&gt;What this failure means
&lt;/h2&gt;&lt;p&gt;During a normal boot, the motherboard scans PCIe devices, assigns bus, I/O, MMIO, and other resources, and decides whether to load any Option ROM provided by the device. Some SATA expansion cards, HBAs, NICs, capture cards, or adapters include firmware for boot support or device initialization, and the motherboard firmware may try to read it.&lt;/p&gt;
&lt;p&gt;If the expansion card, motherboard BIOS, PCIe slot, power, attached device, or Option ROM is incompatible, the system may freeze during motherboard self-test. Typical symptoms include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Black screen with only a blinking cursor.&lt;/li&gt;
&lt;li&gt;Stuck before or after the motherboard logo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Del&lt;/code&gt;, &lt;code&gt;F2&lt;/code&gt;, &lt;code&gt;F11&lt;/code&gt;, or &lt;code&gt;F12&lt;/code&gt; cannot enter BIOS or the boot menu.&lt;/li&gt;
&lt;li&gt;Everything works after removing the PCIe expansion card.&lt;/li&gt;
&lt;li&gt;NVMe, GPU, NIC, or existing boot device works normally when the card is removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This means the motherboard has not had a chance to hand control to the operating system; the card has already blocked the boot process.&lt;/p&gt;
&lt;h2 id=&#34;which-pcie-expansion-cards-commonly-trigger-this&#34;&gt;Which PCIe expansion cards commonly trigger this
&lt;/h2&gt;&lt;p&gt;This POST freeze does not only happen with JMB585 SATA cards. Any PCIe device that the motherboard needs to initialize, allocate resources for, or load Option ROM from can trigger similar problems.&lt;/p&gt;
&lt;p&gt;Common examples include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JMB585, ASM1166, and similar PCIe SATA expansion cards.&lt;/li&gt;
&lt;li&gt;LSI / Broadcom HBA or RAID cards.&lt;/li&gt;
&lt;li&gt;2.5G, 10G, copper, or fiber NICs.&lt;/li&gt;
&lt;li&gt;PCIe to M.2 / U.2 / SATA adapters.&lt;/li&gt;
&lt;li&gt;Video capture cards.&lt;/li&gt;
&lt;li&gt;USB 3.x expansion cards.&lt;/li&gt;
&lt;li&gt;Older GPUs, RAID cards, or server pull cards with Option ROM.&lt;/li&gt;
&lt;li&gt;Cheap PCIe cards with poor build quality, modified firmware, or broken EEPROM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The device may not be &amp;ldquo;dead.&amp;rdquo; It may simply be incompatible with the current motherboard BIOS, PCIe lane routing, PCIe speed, boot mode, or address resource allocation.&lt;/p&gt;
&lt;h2 id=&#34;why-linux-kernel-parameters-do-not-work-yet&#34;&gt;Why Linux kernel parameters do not work yet
&lt;/h2&gt;&lt;p&gt;Parameters such as &lt;code&gt;pci=nomsi&lt;/code&gt;, &lt;code&gt;pcie_aspm=off&lt;/code&gt;, and &lt;code&gt;libata.force&lt;/code&gt; are Linux kernel boot parameters. They only take effect after the kernel has loaded.&lt;/p&gt;
&lt;p&gt;A blinking cursor before BIOS, a freeze before the motherboard logo, or a keyboard that cannot enter BIOS means the system is still in POST. The code running is motherboard firmware, not the Linux kernel. Linux has not started yet, so it cannot read those parameters.&lt;/p&gt;
&lt;p&gt;For this class of failure, do not start by editing &lt;code&gt;/etc/default/grub&lt;/code&gt;. Focus first on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BIOS / UEFI boot mode.&lt;/li&gt;
&lt;li&gt;CSM / Legacy compatibility layer.&lt;/li&gt;
&lt;li&gt;PCIe Option ROM.&lt;/li&gt;
&lt;li&gt;PCIe link training.&lt;/li&gt;
&lt;li&gt;PCIe address space and resource allocation.&lt;/li&gt;
&lt;li&gt;Expansion card, slot, power, and attached devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;step-1-disconnect-devices-attached-to-the-expansion-card&#34;&gt;Step 1: disconnect devices attached to the expansion card
&lt;/h2&gt;&lt;p&gt;Start with the lowest-risk test. Leave the PCIe expansion card installed, but disconnect SATA data cables, attached device cables, or disk power from whatever is connected to it. Let the card sit in the motherboard with no attached devices.&lt;/p&gt;
&lt;p&gt;Then boot and test:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the system can enter BIOS after disconnecting disks or devices, the expansion card itself probably did not hard-lock the motherboard. The problem may be one disk, cable, power path, or boot-device detection.&lt;/li&gt;
&lt;li&gt;If it still freezes, the problem is more likely between the expansion card and the motherboard PCIe / BIOS compatibility.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Why can attached disks cause POST freezes? Common reasons include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A disk has a damaged boot sector or partition table, and the BIOS misidentifies it as a boot device and hangs while reading it.&lt;/li&gt;
&lt;li&gt;Multiple HDDs spin up at once and the power supply cannot handle the transient current.&lt;/li&gt;
&lt;li&gt;A SATA cable has poor contact, causing controller initialization to time out.&lt;/li&gt;
&lt;li&gt;A disk is in poor health and slows down initialization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If it boots after disconnecting disks, reconnect them one by one to find the specific disk or cable that triggers the problem.&lt;/p&gt;
&lt;h2 id=&#34;step-2-remove-the-card-and-disable-csm-in-bios&#34;&gt;Step 2: remove the card and disable CSM in BIOS
&lt;/h2&gt;&lt;p&gt;Many PCIe expansion cards freeze during POST because of the CSM / Legacy boot compatibility layer.&lt;/p&gt;
&lt;p&gt;CSM stands for Compatibility Support Module. It lets UEFI motherboards support old Legacy boot behavior. The problem is that some cheap SATA expansion cards or modified cards include old Option ROMs. When the motherboard runs in CSM mode, it may try to load those old boot firmwares, which can conflict with modern UEFI firmware.&lt;/p&gt;
&lt;h2 id=&#34;why-csm-and-option-rom-can-freeze-post&#34;&gt;Why CSM and Option ROM can freeze POST
&lt;/h2&gt;&lt;p&gt;During POST, the motherboard enumerates PCIe devices and checks whether they provide boot firmware. Older storage cards, RAID cards, HBAs, NICs, and SATA expansion cards may provide Option ROM so the motherboard can recognize the device before the operating system starts, or even boot from it.&lt;/p&gt;
&lt;p&gt;The problem is that Option ROM depends heavily on BIOS implementation. Some expansion cards have outdated, modified, damaged, or server-specific Option ROMs. When a modern consumer motherboard tries to load them under CSM / Legacy mode, it may enter an initialization loop, black screen, blinking cursor, or keyboard lock.&lt;/p&gt;
&lt;p&gt;Disabling CSM and Storage OpROM prevents the motherboard from executing the card&amp;rsquo;s own pre-boot firmware. If your system disk is not connected to that expansion card, most NAS and data-disk scenarios do not need to boot from it. Letting Linux or Windows recognize it after boot is usually more stable.&lt;/p&gt;
&lt;p&gt;Steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Shut down and remove power, then remove the PCIe expansion card.&lt;/li&gt;
&lt;li&gt;Boot with the original GPU, iGPU, or existing boot device and enter BIOS.&lt;/li&gt;
&lt;li&gt;Find &lt;code&gt;CSM&lt;/code&gt;, &lt;code&gt;Compatibility Support Module&lt;/code&gt;, or &lt;code&gt;Legacy Boot&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set CSM to &lt;code&gt;Disabled&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;UEFI Only&lt;/code&gt; boot mode if possible.&lt;/li&gt;
&lt;li&gt;Save BIOS settings and shut down.&lt;/li&gt;
&lt;li&gt;Reinstall the PCIe expansion card and test again.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If disabling CSM lets the machine pass POST, the likely cause was Legacy Option ROM or boot compatibility conflict.&lt;/p&gt;
&lt;h2 id=&#34;step-3-disable-pcie--storage-option-rom&#34;&gt;Step 3: disable PCIe / Storage Option ROM
&lt;/h2&gt;&lt;p&gt;Some BIOS menus provide more detailed Option ROM controls, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PCIe Option ROM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Storage OpROM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Mass Storage Controller Option ROM&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Launch Storage OpROM Policy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Option ROM Messages&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you find a similar option, set the expansion card slot or storage-controller Option ROM to:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Disabled
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;or:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Do Not Launch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This tells the motherboard not to load boot firmware from the card, and to leave it as an ordinary PCIe device for the operating system to detect later.&lt;/p&gt;
&lt;p&gt;If the system disk is not attached to this expansion card and the card is only used for data disks, NAS disks, warehouse disks, NICs, or capture devices, you usually do not need to boot from it. Disabling its Option ROM is often safer.&lt;/p&gt;
&lt;h2 id=&#34;step-4-force-pcie-speed-to-gen2-or-gen1&#34;&gt;Step 4: force PCIe speed to Gen2 or Gen1
&lt;/h2&gt;&lt;p&gt;Many cards advertise PCIe Gen3 links, but the motherboard, adapter, cabling, slot, or card build quality may not be good enough. PCIe link training may fail at Gen3 speed, leaving the motherboard waiting for device initialization.&lt;/p&gt;
&lt;h2 id=&#34;what-pcie-gen3-link-training-failure-looks-like&#34;&gt;What PCIe Gen3 link-training failure looks like
&lt;/h2&gt;&lt;p&gt;When a PCIe device is installed, the motherboard and device negotiate link width and speed, such as x1, x2, x4, and Gen1, Gen2, Gen3. This process is called Link Training.&lt;/p&gt;
&lt;p&gt;If the device, slot, adapter, motherboard traces, or power is unstable, both sides may fail to negotiate at higher speeds. Common symptoms include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Black screen or blinking cursor before BIOS after installing the card.&lt;/li&gt;
&lt;li&gt;Motherboard logo hangs for a long time and keyboard input does not respond.&lt;/li&gt;
&lt;li&gt;Sometimes it boots, sometimes it hard-freezes.&lt;/li&gt;
&lt;li&gt;Forcing PCIe Gen2 makes it stable.&lt;/li&gt;
&lt;li&gt;Moving to another slot makes it stable.&lt;/li&gt;
&lt;li&gt;The card works in a chipset slot but not a CPU-connected slot, or the opposite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is not an operating-system disk-drop issue. The motherboard and device have not finished PCIe link initialization yet. Forcing Gen2 / Gen1 lowers signal rate and trades theoretical bandwidth for stable boot.&lt;/p&gt;
&lt;p&gt;Steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Remove the PCIe expansion card.&lt;/li&gt;
&lt;li&gt;Enter BIOS.&lt;/li&gt;
&lt;li&gt;Find the speed setting for the target PCIe slot, such as &lt;code&gt;PCIe Speed&lt;/code&gt;, &lt;code&gt;PCIe Link Speed&lt;/code&gt;, or &lt;code&gt;Max Link Speed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Auto&lt;/code&gt; or &lt;code&gt;Gen3&lt;/code&gt; to &lt;code&gt;Gen2&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If &lt;code&gt;Gen2&lt;/code&gt; is still unstable, try &lt;code&gt;Gen1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save, shut down, reinstall the card, and test.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For SATA HDDs, Gen2 x1 or Gen2 x2 is often enough. When stability matters, do not insist on Gen3.&lt;/p&gt;
&lt;p&gt;If BIOS does not provide a PCIe speed setting, only then consider physical down-training methods. Some users tape selected gold-finger pins to force a card into x1 mode and test whether the second PCIe lane or high-speed signal quality is the problem. This is risky and easy to do wrong, so it should not be the first choice. Prefer BIOS speed limiting.&lt;/p&gt;
&lt;h2 id=&#34;step-5-enable-above-4g-decoding&#34;&gt;Step 5: enable Above 4G Decoding
&lt;/h2&gt;&lt;p&gt;If the motherboard has NVMe, GPU, wireless card, HBA, capture card, or multiple PCIe devices, BIOS must assign address space and MMIO resources during POST. Older boards or conservative BIOS resource allocation may freeze because of insufficient resources or address conflicts.&lt;/p&gt;
&lt;p&gt;Try enabling:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Above 4G Decoding
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;It is often under &lt;code&gt;Advanced&lt;/code&gt;, &lt;code&gt;PCIe Settings&lt;/code&gt;, &lt;code&gt;PCI Subsystem Settings&lt;/code&gt;, &lt;code&gt;Chipset&lt;/code&gt;, or similar menus.&lt;/p&gt;
&lt;p&gt;This option allows PCIe devices to use address space above 4GB, helping reduce resource allocation problems in multi-device systems. Although it is often mentioned for GPU passthrough, mining cards, HBAs, and multi-PCIe setups, it is also worth trying for SATA expansion cards that freeze during POST.&lt;/p&gt;
&lt;h2 id=&#34;step-6-change-pcie-slots&#34;&gt;Step 6: change PCIe slots
&lt;/h2&gt;&lt;p&gt;Do not test only one slot. Different PCIe slots may be wired differently:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The long slot near the CPU is often CPU-connected and intended for GPUs.&lt;/li&gt;
&lt;li&gt;Some short slots or secondary long slots may come from the chipset PCH.&lt;/li&gt;
&lt;li&gt;Some slots share lanes with NVMe, SATA, Wi-Fi, or other devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the expansion card freezes in a CPU-connected slot, try a chipset slot or lower-bandwidth slot. If the PCH slot is unstable, try another slot.&lt;/p&gt;
&lt;p&gt;Also check the motherboard manual for lane-sharing rules, such as &amp;ldquo;this PCIe slot is disabled when this M.2 slot is populated.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;recommended-fast-troubleshooting-path&#34;&gt;Recommended fast troubleshooting path
&lt;/h2&gt;&lt;p&gt;If you want to restore boot quickly, try this order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Disconnect all devices attached to the expansion card, such as SATA disks, U.2 disks, or external cables.&lt;/li&gt;
&lt;li&gt;If it still freezes, remove the card and enter BIOS.&lt;/li&gt;
&lt;li&gt;Disable &lt;code&gt;CSM&lt;/code&gt; and switch to &lt;code&gt;UEFI Only&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Disable &lt;code&gt;Storage OpROM&lt;/code&gt; or related PCIe Option ROM.&lt;/li&gt;
&lt;li&gt;Enable &lt;code&gt;Above 4G Decoding&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Force the target PCIe slot to &lt;code&gt;Gen2&lt;/code&gt;; if that fails, try &lt;code&gt;Gen1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Save, shut down, reinstall the PCIe expansion card, and test.&lt;/li&gt;
&lt;li&gt;If it passes POST, reconnect disks or devices one by one.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This path prioritizes the two most common causes: Legacy / Option ROM conflicts and PCIe Gen3 link-training incompatibility.&lt;/p&gt;
&lt;h2 id=&#34;how-to-tell-whether-the-card-is-bad-or-the-motherboard-is-incompatible&#34;&gt;How to tell whether the card is bad or the motherboard is incompatible
&lt;/h2&gt;&lt;p&gt;If all steps above still end with a blinking cursor, do two cross-checks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Test the same expansion card in another computer.&lt;/li&gt;
&lt;li&gt;Test a known-good similar PCIe expansion card in the current motherboard.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Use this logic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The same card freezes multiple computers: the card likely has a hardware or firmware problem.&lt;/li&gt;
&lt;li&gt;The card freezes only on this motherboard but works elsewhere: motherboard BIOS, slot wiring, PCIe speed, or resource allocation is more likely.&lt;/li&gt;
&lt;li&gt;Other similar expansion cards work in this motherboard: the original card is more suspicious.&lt;/li&gt;
&lt;li&gt;Other PCIe devices are also unstable in this motherboard: suspect the slot, power, BIOS settings, or PCIe lane sharing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If this card freezes multiple computers while other cards work on the current board, possible causes include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Damaged expansion-card EEPROM / Option ROM data.&lt;/li&gt;
&lt;li&gt;Short circuit or power problem on the card.&lt;/li&gt;
&lt;li&gt;Gold-finger, solder joint, crystal, or power-chip hardware issue.&lt;/li&gt;
&lt;li&gt;Firmware incompatible with many motherboard BIOS implementations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If it freezes only on one motherboard, suspect BIOS, slot lanes, PCIe speed, CSM, or resource allocation.&lt;/p&gt;
&lt;h2 id=&#34;do-not-treat-os-parameters-as-bios-stage-fixes&#34;&gt;Do not treat OS parameters as BIOS-stage fixes
&lt;/h2&gt;&lt;p&gt;Again, if the machine has not entered Linux, kernel parameters such as &lt;code&gt;pci=nomsi&lt;/code&gt;, &lt;code&gt;pcie_aspm=off&lt;/code&gt;, and &lt;code&gt;libata.force&lt;/code&gt; do not take effect.&lt;/p&gt;
&lt;p&gt;They only handle problems after the operating system takes over the hardware, such as disk drops, interrupt errors, and PCIe ASPM wake failures under Linux. They cannot help with a blinking cursor before BIOS or a POST-stage freeze because they never get a chance to run.&lt;/p&gt;
&lt;p&gt;For this class of failure, focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BIOS settings.&lt;/li&gt;
&lt;li&gt;PCIe link training.&lt;/li&gt;
&lt;li&gt;Option ROM.&lt;/li&gt;
&lt;li&gt;Slot and resource allocation.&lt;/li&gt;
&lt;li&gt;Physical condition of the expansion card and attached devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;When a PCIe expansion card causes a blinking cursor before BIOS, the system is stuck during POST. The most common fixes are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disconnect all attached devices to rule out disk or power triggers.&lt;/li&gt;
&lt;li&gt;Disable CSM and use pure UEFI.&lt;/li&gt;
&lt;li&gt;Disable Storage / PCIe Option ROM.&lt;/li&gt;
&lt;li&gt;Lower PCIe speed from Auto / Gen3 to Gen2 or Gen1.&lt;/li&gt;
&lt;li&gt;Enable Above 4G Decoding.&lt;/li&gt;
&lt;li&gt;Try another PCIe slot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If none of these works and the card also freezes other computers, strongly suspect hardware or firmware damage on the card itself. For NAS and storage servers, stability matters more than attractive specs. With POST-level freezes, first make the motherboard pass self-test reliably, then troubleshoot Linux kernel parameters and drivers.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>pci=nomsi and pcie_aspm=off explained: troubleshooting SATA expansion cards not detected, dropping disks, or freezing on Linux</title>
        <link>https://knightli.com/en/2026/05/24/pci-nomsi-pcie-aspm-off-linux-sata-expansion-card/</link>
        <pubDate>Sun, 24 May 2026 00:41:23 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/24/pci-nomsi-pcie-aspm-off-linux-sata-expansion-card/</guid>
        <description>&lt;p&gt;When using PCIe SATA expansion cards on Linux or Ubuntu, users often run into disks not being detected, disks dropping after some runtime, system freezes, or boot problems around PCIe link training. Common examples include JMB585 and ASM1166 SATA cards, especially in NAS boxes, mini PCs, industrial PCs, modified motherboards, or cheap adapter setups.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pci=nomsi&lt;/code&gt; and &lt;code&gt;pcie_aspm=off&lt;/code&gt; are two Linux kernel parameters often used when troubleshooting this class of problem. They both involve PCIe, but they address different layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pci=nomsi&lt;/code&gt; mainly targets &lt;strong&gt;interrupt signaling problems&lt;/strong&gt;, meaning the way the device notifies the CPU is unreliable.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pcie_aspm=off&lt;/code&gt; mainly targets &lt;strong&gt;PCIe power management problems&lt;/strong&gt;, meaning the link fails to wake reliably after entering a low-power state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you treat these two options as the same kind of fix, troubleshooting becomes guesswork. A better approach is to look at the symptoms and decide whether interrupts, link power management, or the hardware itself is the more likely suspect.&lt;/p&gt;
&lt;h2 id=&#34;pcinomsi-disable-message-signaled-interrupts&#34;&gt;pci=nomsi: disable message-signaled interrupts
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pci=nomsi&lt;/code&gt; can be read as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PCI&lt;/code&gt;: PCI-related devices.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;no&lt;/code&gt;: disable.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;MSI&lt;/code&gt;: Message Signaled Interrupts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It tells the Linux kernel not to use MSI / MSI-X interrupt mechanisms for PCI devices, and to fall back to the older INTx interrupt mode.&lt;/p&gt;
&lt;h2 id=&#34;what-is-msi&#34;&gt;What is MSI?
&lt;/h2&gt;&lt;p&gt;Traditionally, hardware devices notify the CPU through physical interrupt pins, known as legacy IRQs. This works, but sharing and scaling are limited.&lt;/p&gt;
&lt;p&gt;MSI / MSI-X came later. Instead of pulling a physical interrupt pin, the device writes a message to a specific memory address. When the CPU receives that message, it knows which device raised the interrupt. On modern systems, MSI / MSI-X is usually more flexible and better suited for high-concurrency devices.&lt;/p&gt;
&lt;p&gt;The problem is that not every PCIe expansion card implements MSI reliably. Some cheap cards, retired enterprise cards, bridge-chip designs, or SATA controllers with poor firmware may produce abnormal MSI messages, lost interrupts, or interrupt storms under Linux drivers.&lt;/p&gt;
&lt;p&gt;Common symptoms include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The machine hangs while detecting the PCIe expansion card during boot.&lt;/li&gt;
&lt;li&gt;The SATA expansion card does not detect disks at all.&lt;/li&gt;
&lt;li&gt;Random system freezes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dmesg&lt;/code&gt; shows errors such as &lt;code&gt;irq xx: nobody cared&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The card appears to work under Windows but is unstable under Linux.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The core problem is not the hard disk or filesystem. It is the interrupt communication path between the device and CPU.&lt;/p&gt;
&lt;h2 id=&#34;what-happens-after-adding-pcinomsi&#34;&gt;What happens after adding pci=nomsi?
&lt;/h2&gt;&lt;p&gt;Enable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pci=nomsi
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This tells the Linux kernel not to let PCI devices use advanced MSI message interrupts, and to fall back to legacy INTx interrupts.&lt;/p&gt;
&lt;p&gt;This may slightly reduce performance and interrupt handling efficiency, especially on high-throughput or high-interrupt devices. For home NAS setups, SATA expansion cards, and ordinary hard-drive arrays, the practical impact is usually small. The value is that it bypasses MSI compatibility bugs in some device firmware or bridge chips, allowing the system to identify the device and handle I/O reliably.&lt;/p&gt;
&lt;p&gt;In short, &lt;code&gt;pci=nomsi&lt;/code&gt; addresses &amp;ldquo;the device&amp;rsquo;s way of notifying the CPU is unreliable.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;pcie_aspmoff-disable-pcie-active-state-power-management&#34;&gt;pcie_aspm=off: disable PCIe Active State Power Management
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pcie_aspm=off&lt;/code&gt; can be read as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PCIe&lt;/code&gt;: PCI Express.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ASPM&lt;/code&gt;: Active State Power Management.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;off&lt;/code&gt;: disable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It disables PCIe link power-saving mechanisms, preventing PCIe links from entering low-power states.&lt;/p&gt;
&lt;h2 id=&#34;what-is-aspm&#34;&gt;What is ASPM?
&lt;/h2&gt;&lt;p&gt;ASPM is a PCIe power-saving mechanism. When the system sees that a PCIe link is idle, it can move the link into a lower-power state such as L0s or L1. When the device needs to transfer data again, the link wakes back up to normal operation.&lt;/p&gt;
&lt;p&gt;On well-designed hardware, this saves power and is almost invisible to users. On some consumer motherboards, mini PCs, industrial systems, cheap SATA cards, adapters, or systems with weaker signal quality, the problem is &amp;ldquo;it goes to sleep and does not wake cleanly.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;A typical case is a JMB585 or ASM1166 PCIe SATA card entering a low-power state after being idle. The next disk access requires the link to wake from L1. If the controller, motherboard, riser, power, or firmware quality is not good enough, wake-up may be too slow or the physical signal may glitch. The Linux kernel may then think the device briefly disappeared.&lt;/p&gt;
&lt;p&gt;Typical &lt;code&gt;dmesg&lt;/code&gt; messages include:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pcieport 0000:00:1c.0: PCIe Bus Error: severity=Corrected, type=Physical Layer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ata1: link is slow to respond, please be patient
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ata1: COMRESET failed (errno=-16)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This may be followed by:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Disk dropout.&lt;/li&gt;
&lt;li&gt;Degraded arrays.&lt;/li&gt;
&lt;li&gt;Filesystem remounted read-only.&lt;/li&gt;
&lt;li&gt;NAS services failing.&lt;/li&gt;
&lt;li&gt;System I/O hangs.&lt;/li&gt;
&lt;li&gt;Disk temporarily returns after reboot.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The frustrating part is that the problem may not appear at boot. It often happens after the system has been running, after an idle period, or during a load transition.&lt;/p&gt;
&lt;h2 id=&#34;what-happens-after-adding-pcie_aspmoff&#34;&gt;What happens after adding pcie_aspm=off?
&lt;/h2&gt;&lt;p&gt;Enable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pcie_aspm=off
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This tells the kernel to disable system-wide PCIe ASPM. PCIe links should remain in normal connected states as much as possible, whether idle or busy, instead of entering low-power sleep.&lt;/p&gt;
&lt;p&gt;The side effect is slightly higher power use. For desktops, NAS boxes, and mini PCs, this is often only hundreds of milliwatts to one or two watts. For laptops, it may affect battery life. The benefit is fewer disk drops, link-training errors, and physical-layer errors caused by PCIe link sleep and wake.&lt;/p&gt;
&lt;p&gt;In short, &lt;code&gt;pcie_aspm=off&lt;/code&gt; addresses &amp;ldquo;the PCIe link does not wake reliably after sleeping.&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;the-difference-between-the-two-parameters&#34;&gt;The difference between the two parameters
&lt;/h2&gt;&lt;p&gt;They solve two different classes of problems:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Parameter&lt;/th&gt;
          &lt;th&gt;Core problem&lt;/th&gt;
          &lt;th&gt;Common symptoms&lt;/th&gt;
          &lt;th&gt;Main side effect&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;pci=nomsi&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Interrupt signaling conflicts, poor MSI / MSI-X compatibility&lt;/td&gt;
          &lt;td&gt;Boot hangs, no disk detection, &lt;code&gt;irq xx: nobody cared&lt;/code&gt;, system freeze&lt;/td&gt;
          &lt;td&gt;Slightly lower interrupt efficiency under very high concurrency&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;pcie_aspm=off&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;PCIe power-save wake failure, unstable link signal&lt;/td&gt;
          &lt;td&gt;Works at boot, drops disks later, &lt;code&gt;PCIe Bus Error&lt;/code&gt;, &lt;code&gt;COMRESET failed&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Slightly higher power use, slightly lower laptop battery life&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;They do not replace each other. One controls interrupts, the other controls link power management.&lt;/p&gt;
&lt;p&gt;If the system hangs during boot or the device is never detected, suspect &lt;code&gt;pci=nomsi&lt;/code&gt; first. If it boots normally but drops disks later, or &lt;code&gt;dmesg&lt;/code&gt; shows Physical Layer, COMRESET, or &amp;ldquo;link is slow to respond&amp;rdquo; messages, suspect &lt;code&gt;pcie_aspm=off&lt;/code&gt; first.&lt;/p&gt;
&lt;h2 id=&#34;should-you-add-both&#34;&gt;Should you add both?
&lt;/h2&gt;&lt;p&gt;Many NAS users add both at once:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pci=nomsi pcie_aspm=off
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This is a quick troubleshooting method, especially with JMB585, ASM1166, mini PCs, adapter cards, uncertain power, and uncertain cabling. It can bypass MSI compatibility issues and ASPM wake problems at the same time.&lt;/p&gt;
&lt;p&gt;From a troubleshooting perspective, it is better to record symptoms and logs first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you see interrupt errors or boot hangs, try &lt;code&gt;pci=nomsi&lt;/code&gt; first.&lt;/li&gt;
&lt;li&gt;If you see disk drops, PCIe Bus Error, or COMRESET after runtime, try &lt;code&gt;pcie_aspm=off&lt;/code&gt; first.&lt;/li&gt;
&lt;li&gt;If the system is unstable and you need to restore service quickly, add both, then test them separately later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This helps you identify the actual class of problem, which is useful when changing cards, slots, motherboards, or BIOS settings later.&lt;/p&gt;
&lt;h2 id=&#34;how-to-make-it-permanent-on-ubuntu--debian&#34;&gt;How to make it permanent on Ubuntu / Debian
&lt;/h2&gt;&lt;p&gt;Edit the Grub configuration file:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nano /etc/default/grub
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Find this line:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;quiet splash&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Append the parameters inside the quotes, separated by spaces. For example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT=&amp;#34;quiet splash pci=nomsi pcie_aspm=off&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Save and exit. In Nano, press &lt;code&gt;Ctrl+O&lt;/code&gt;, confirm with Enter, then press &lt;code&gt;Ctrl+X&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Update Grub and reboot:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-grub
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo reboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After reboot, check whether the kernel command line is active:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/cmdline
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the output contains &lt;code&gt;pci=nomsi&lt;/code&gt; and &lt;code&gt;pcie_aspm=off&lt;/code&gt;, the parameters are active for the current boot.&lt;/p&gt;
&lt;h2 id=&#34;what-else-should-you-check&#34;&gt;What else should you check?
&lt;/h2&gt;&lt;p&gt;These two parameters are useful, but they are not universal fixes for every disk-drop problem. When troubleshooting SATA expansion cards and NAS disk drops, also check:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loose or poor-quality SATA data cables.&lt;/li&gt;
&lt;li&gt;Stable disk power, especially when many disks spin up at once.&lt;/li&gt;
&lt;li&gt;Poor PCIe slot contact.&lt;/li&gt;
&lt;li&gt;Expansion card overheating.&lt;/li&gt;
&lt;li&gt;BIOS options related to PCIe ASPM, Above 4G Decoding, and PCIe speed.&lt;/li&gt;
&lt;li&gt;Known firmware issues in the SATA expansion card.&lt;/li&gt;
&lt;li&gt;Disk SMART warnings, bad sectors, or I/O errors in system logs.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If disk SMART is already reporting errors, or power delivery is unstable, kernel parameters alone will not solve the underlying problem.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pci=nomsi&lt;/code&gt; and &lt;code&gt;pcie_aspm=off&lt;/code&gt; are both common troubleshooting parameters for unstable PCIe SATA expansion cards on Linux, but they work at different layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pci=nomsi&lt;/code&gt;: disables MSI / MSI-X to bypass interrupt compatibility issues.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pcie_aspm=off&lt;/code&gt;: disables PCIe ASPM to avoid wake failures after link power saving.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For JMB585, ASM1166, NAS systems, mini PCs, and cheap PCIe cards, these two parameters often help. The safer approach is to inspect &lt;code&gt;dmesg&lt;/code&gt;, decide whether the problem looks like interrupts or link power management, then choose one or both.&lt;/p&gt;
&lt;p&gt;They are troubleshooting tools, not a replacement for good hardware. If the system becomes stable after adding them, the problem is likely in interrupt compatibility or PCIe power management. If disks still drop, continue checking power, cables, cooling, disk health, and the expansion card itself.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Hard Drive Prices Are Soaring: Do Not Expand Your NAS Yet, Try a $200 TerraMaster &#43; HC620 Cold Data Setup</title>
        <link>https://knightli.com/en/2026/05/04/nas-full-cold-data-hc620-terramaster/</link>
        <pubDate>Mon, 04 May 2026 11:46:53 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/04/nas-full-cold-data-hc620-terramaster/</guid>
        <description>&lt;p&gt;When hard drive prices rise sharply, a full NAS does not always need an immediate drive upgrade. If the main NAS is still working normally and only running out of capacity, it is often better to separate data by access frequency: keep frequently used hot data on the original NAS, and move rarely used cold data and backups to a separate cold-storage disk.&lt;/p&gt;
&lt;p&gt;This article records a low-cost approach: use large HC620 drives for cold data, then use an inexpensive TerraMaster F2-220, F2-221, or F4 as the migration and mount node. It does not aim for high performance. It solves one practical problem: during a period when upgrading disks is not cost-effective, first free up space on the main NAS.&lt;/p&gt;
&lt;h2 id=&#34;idea&#34;&gt;Idea
&lt;/h2&gt;&lt;p&gt;Sort data by access frequency first:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hot data: photos, work files, recent downloads, frequently watched videos. Keep these on the main NAS.&lt;/li&gt;
&lt;li&gt;Cold data: old media libraries, archived materials, large files that rarely change. Move these to HC620.&lt;/li&gt;
&lt;li&gt;Backup data: data that only needs periodic writes and occasional reads. This can also be stored on HC620.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For HC620 usage scenarios, see the site article: &lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/03/27/common-misconceptions-about-wd-hc620-smr-drives-and-how-to-use-them-correctly/&#34; &gt;Misunderstandings and Correct Usage of Western Digital HC620 SMR Drives&lt;/a&gt;. It is better suited to sequential writes, long-term storage, and random reads. It is not suitable for workloads with frequent deletes and repeated writes.&lt;/p&gt;
&lt;p&gt;If the goal is simply to free up space on the main NAS, I do not recommend replacing the main NAS disks on a large scale while hard drive prices are high. Move rarely used data out first, and let the main NAS continue handling hot data. This is usually more cost-effective.&lt;/p&gt;
&lt;h2 id=&#34;why-use-an-old-terramaster&#34;&gt;Why Use an Old TerraMaster
&lt;/h2&gt;&lt;p&gt;The problem with HC620 is not capacity, but convenience. It has requirements for the operating system, interface, and usage pattern, so putting it directly into a USB hard drive enclosure is not a good fit.&lt;/p&gt;
&lt;p&gt;An old TerraMaster F2-220, F2-221, or some F4 models can be used as a low-cost cold-data node. The advantages are straightforward:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cheap. A used F2-220 is often under 200 RMB.&lt;/li&gt;
&lt;li&gt;Small footprint and acceptable power consumption.&lt;/li&gt;
&lt;li&gt;The system can be installed on a USB drive, so it does not occupy a drive bay.&lt;/li&gt;
&lt;li&gt;Two or more SATA bays are available, making it suitable for HC620 archive disks.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;These old machines are not powerful, but they are enough for cold-data migration, CIFS mounting, and background copying. Although the F2-220 only has older SATA 3G ports, HC620 can still reach around 200MB/s in outer-track disk-to-disk copies in testing. For cold-data migration, this is not slow. The bottleneck is often the network, the source disk condition, or the number of files.&lt;/p&gt;
&lt;p&gt;If the onboard gigabit network is not fast enough, you can also add a USB 2.5G network adapter. A cold-data node does not need complicated modification. As long as the system recognizes the adapter, and both the switch and main NAS support 2.5G, the network bottleneck can be raised noticeably.&lt;/p&gt;
&lt;h2 id=&#34;prepare-video-output&#34;&gt;Prepare Video Output
&lt;/h2&gt;&lt;p&gt;If the machine has no HDMI port, you need VGA for system installation. The F2-220 has an internal VGA header. You can use a motherboard internal 12-pin VGA adapter cable: one end connects to the internal header, and the other end exposes a standard VGA connector for a monitor.&lt;/p&gt;
&lt;p&gt;For VGA adapter specifications and notes, see: &lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/04/terramaster-f2-220-fnos-nvme-bios/&#34; &gt;Installing fnOS on TerraMaster F2-220: VGA Output&lt;/a&gt;. In short, search terms include &amp;ldquo;12Pin VGA adapter cable&amp;rdquo;, &amp;ldquo;motherboard 12-pin VGA cable&amp;rdquo;, and &amp;ldquo;2.0mm 12Pin to VGA&amp;rdquo;. Before buying, check pitch, direction, and pinout.&lt;/p&gt;
&lt;h2 id=&#34;install-ubuntu-server-to-a-usb-drive&#34;&gt;Install Ubuntu Server to a USB Drive
&lt;/h2&gt;&lt;p&gt;Install Ubuntu Server to a USB drive so all hard drive bays remain available for data disks.&lt;/p&gt;
&lt;p&gt;The F2-220 is relatively weak, so installing directly on it can be slow. A more efficient method is to plug the USB drive into a faster computer, complete the Ubuntu Server installation there, then move the USB drive back to the TerraMaster. As long as the boot mode is compatible, it usually works directly.&lt;/p&gt;
&lt;p&gt;After installation, check the network configuration carefully. Otherwise, the machine may boot but have no network connection, making SSH management impossible.&lt;/p&gt;
&lt;h2 id=&#34;configure-networking&#34;&gt;Configure Networking
&lt;/h2&gt;&lt;p&gt;After entering the system, check the network interface name first:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lshw -c network
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The sample output shows the &lt;code&gt;logical name&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  *-network
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       description: Ethernet interface
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       product: RTL8111/8168/8211/8411 PCI Express Gigabit Ethernet Controller
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       vendor: Realtek Semiconductor Co., Ltd.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       physical id: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       bus info: pci@0000:02:00.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       logical name: enp2s0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       version: 07
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       serial: 6c:bf:b5:00:63:ab
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       size: 1Gbit/s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       capacity: 1Gbit/s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       width: 64 bits
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       clock: 33MHz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       capabilities: bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=6.8.0-111-generic duplex=full firmware=rtl8168e-3_0.0.4 03/27/12 ip=192.168.8.205 latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       resources: irq:17 ioport:e000(size=256) memory:d0604000-d0604fff memory:d0600000-d0603fff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Here the interface name is &lt;code&gt;enp2s0&lt;/code&gt;. Then edit the netplan configuration:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo more /etc/netplan/01-install-config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If the file does not exist, create it with this content:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;network&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ethernets&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;enp2s0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dhcp4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Replace &lt;code&gt;enp2s0&lt;/code&gt; with the actual interface name on your machine. Save the file and apply it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo netplan apply
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After the network is restored, you can SSH into the TerraMaster and continue without keeping a monitor connected.&lt;/p&gt;
&lt;h2 id=&#34;format-hc620-as-btrfs&#34;&gt;Format HC620 as btrfs
&lt;/h2&gt;&lt;p&gt;If the HC620 is new, or if all data on it has been confirmed unnecessary, format it as btrfs first. The following operations erase the target drive. Confirm the disk device before running them. Do not format the main NAS share or the system USB drive by mistake.&lt;/p&gt;
&lt;p&gt;List current disks:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk -o NAME,SIZE,MODEL,SERIAL,FSTYPE,MOUNTPOINTS
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You can also check stable disk paths:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l /dev/disk/by-id/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After confirming which device is the HC620, unmount any existing mount point:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /dev/sda 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /dev/sda1 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you want to create btrfs directly on the whole disk:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkfs.btrfs -f -O zoned -d single -m single -L HC620_01 /dev/sda
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Parameter notes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-f&lt;/code&gt;: force file-system creation, avoiding old signatures blocking the format.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-O zoned&lt;/code&gt;: enable the zoned feature, suitable for drives like HC620 that need zone-aware sequential writes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d single -m single&lt;/code&gt;: use single-disk mode for both data and metadata.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-L HC620_01&lt;/code&gt;: set a label for easier identification.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If your system or kernel does not handle zoned btrfs well, continue with the earlier test notes: &lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2023/03/17/hc620-14tb-value-check/&#34; &gt;Is a New WD HC620 14T Drive for About 600 RMB Worth Buying?&lt;/a&gt;. Compatibility for this type of drive depends on kernel version, SATA controller, and file-system support. Do not import real data until the setup behaves normally.&lt;/p&gt;
&lt;p&gt;After formatting, test with a temporary mount:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /mnt/disk1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount /dev/sda /mnt/disk1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After confirming it mounts correctly, write &lt;code&gt;/etc/fstab&lt;/code&gt; for automatic mounting. For long-term use, prefer &lt;code&gt;/dev/disk/by-id/&lt;/code&gt; instead of &lt;code&gt;/dev/sda&lt;/code&gt; to avoid device-name changes after reboot.&lt;/p&gt;
&lt;h2 id=&#34;configure-mounts&#34;&gt;Configure Mounts
&lt;/h2&gt;&lt;p&gt;This cold-data node usually needs to mount two types of paths:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The main NAS share, used to read data that needs to be migrated.&lt;/li&gt;
&lt;li&gt;The local HC620 data disks, used to store cold data and backups.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Create mount directories first:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /mnt/xxxxx /mnt/disk1 /mnt/disk2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;If you need to mount CIFS/SMB shares, install the tools:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install cifs-utils
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then edit &lt;code&gt;/etc/fstab&lt;/code&gt; and add lines like these:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;//192.168.x.xxx/xxxxx   /mnt/xxxxx cifs auto,username=xxxxx,password=xxxxx,uid=997,gid=997,file_mode=0777,dir_mode=0777,nofail 0 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dev/sda  /mnt/disk1  auto  defaults,nofail  0  0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dev/sdb  /mnt/disk2  auto  defaults,nofail  0  0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The first line mounts the main NAS share. The next two lines mount local disks.&lt;/p&gt;
&lt;p&gt;In real use, prefer stable paths such as &lt;code&gt;/dev/disk/by-id/&lt;/code&gt; for data disks to avoid &lt;code&gt;/dev/sda&lt;/code&gt; and &lt;code&gt;/dev/sdb&lt;/code&gt; changing order after reboot. HC620 formatting and mounting notes are also covered in the earlier record: &lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2023/03/17/hc620-14tb-value-check/&#34; &gt;Is a New WD HC620 14T Drive for About 600 RMB Worth Buying?&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Test the mount after editing:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After confirming that both the main NAS share and local data disks appear, start migrating data.&lt;/p&gt;
&lt;h2 id=&#34;copy-files-in-the-background&#34;&gt;Copy Files in the Background
&lt;/h2&gt;&lt;p&gt;For large data migrations, do not run plain &lt;code&gt;cp&lt;/code&gt; directly in the SSH foreground. The preferred setup here is &lt;code&gt;screen + mc&lt;/code&gt;: &lt;code&gt;screen&lt;/code&gt; keeps the session alive after SSH disconnects, while &lt;code&gt;mc&lt;/code&gt; provides a clearer two-pane file-management interface.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;mc&lt;/code&gt; is well suited to manually organizing cold data. Open the main NAS mount on the left, open the HC620 data disk on the right, select files, and press &lt;code&gt;F5&lt;/code&gt; to copy. During copying, it shows both current-file progress and total progress, which is much easier to read than raw command-line output when moving many files.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/05/04/nas-full-cold-data-hc620-terramaster/mc-copy-progress.png&#34;
	width=&#34;960&#34;
	height=&#34;600&#34;
	srcset=&#34;https://knightli.com/2026/05/04/nas-full-cold-data-hc620-terramaster/mc-copy-progress_hu_95304c5a42a05cc9.png 480w, https://knightli.com/2026/05/04/nas-full-cold-data-hc620-terramaster/mc-copy-progress_hu_e61c78eb3500b22.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Midnight Commander copy progress illustration&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;160&#34;
		data-flex-basis=&#34;384px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;The image above illustrates the copy-progress window. The &lt;a class=&#34;link&#34; href=&#34;https://source.midnight-commander.org/man/mc.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Midnight Commander manual&lt;/a&gt; also notes that copy, move, and delete operations show a file-operation dialog in verbose mode, with current-file and total progress available.&lt;/p&gt;
&lt;p&gt;Install the tools:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install screen mc rsync
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Start a background session:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;screen -S cold-data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Run &lt;code&gt;mc&lt;/code&gt; inside &lt;code&gt;screen&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The usual workflow is to open the source directory and target directory in the two panels, then operate with shortcuts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Tab&lt;/code&gt;: switch between panels.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Insert&lt;/code&gt;: select multiple files or directories.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F5&lt;/code&gt;: copy to the other panel.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F6&lt;/code&gt;: move or rename.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;F8&lt;/code&gt;: delete, use carefully.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you need a more scriptable and repeatable sync task, use &lt;code&gt;rsync&lt;/code&gt; instead:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -avh --progress /mnt/xxxxx/old-data/ /mnt/disk1/old-data/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Even if SSH disconnects during copying, the &lt;code&gt;screen&lt;/code&gt; session remains alive. Reconnect and run:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;screen -r cold-data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You will return to the original copy task.&lt;/p&gt;
&lt;h2 id=&#34;usage-advice&#34;&gt;Usage Advice
&lt;/h2&gt;&lt;p&gt;This setup is for cold data and backups. Do not use HC620 as a high-frequency write disk. Suggested usage:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep hot data and daily services on the main NAS.&lt;/li&gt;
&lt;li&gt;Store large long-term files, media libraries, and archive materials on HC620.&lt;/li&gt;
&lt;li&gt;Migrate mainly by sequential writes; avoid frequent deletes and repeated small-file writes.&lt;/li&gt;
&lt;li&gt;Keep at least two copies of important data. Do not keep the only copy on a single disk.&lt;/li&gt;
&lt;li&gt;After migration, sample-check files and confirm that directory and file counts look normal.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If hard drive prices fall later, upgrading the main NAS array can still be considered. For now, using a low-cost node to relieve capacity pressure keeps both risk and spending more controllable.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;When NAS space is full, buying new drives immediately is not the only answer. Treat the main NAS as the hot-data device, treat HC620 as cold-data and backup storage, and use a cheap TerraMaster F2-220, F2-221, or F4 as the mount and copy node. This is a low-cost and practical transitional setup.&lt;/p&gt;
&lt;p&gt;The key is not performance, but division of responsibility: the main NAS keeps the daily experience smooth, while cold data is stored separately. This frees up space and avoids a large upgrade cost during a period of high hard drive prices.&lt;/p&gt;
&lt;h2 id=&#34;related-links&#34;&gt;Related Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/03/27/common-misconceptions-about-wd-hc620-smr-drives-and-how-to-use-them-correctly/&#34; &gt;Misunderstandings and Correct Usage of Western Digital HC620 SMR Drives&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2023/03/17/hc620-14tb-value-check/&#34; &gt;Is a New WD HC620 14T Drive for About 600 RMB Worth Buying?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/04/terramaster-f2-221-backplane-pinout/&#34; &gt;TerraMaster F2-221 NAS Backplane Pinout Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://knightli.com/en/2026/05/04/terramaster-f2-220-fnos-nvme-bios/&#34; &gt;Installing fnOS on TerraMaster F2-220: F3 Backplane, NVMe, and BIOS Module Injection&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Installing fnOS on TerraMaster F2-220: F3 Backplane, NVMe, and BIOS Module Injection</title>
        <link>https://knightli.com/en/2026/05/04/terramaster-f2-220-fnos-nvme-bios/</link>
        <pubDate>Mon, 04 May 2026 06:09:40 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/04/terramaster-f2-220-fnos-nvme-bios/</guid>
        <description>&lt;p&gt;This is a practical note on installing fnOS on a TerraMaster F2-220. The goal is to replace the original TOS and keep using the NAS after official support for the F2-220 has ended. The process also verifies that the F3 backplane can work on the F2-220, and solves the issue where the BIOS cannot boot from NVMe.&lt;/p&gt;
&lt;p&gt;The original F3 backplane project was verified on the F2-221 with a J3355 platform. The F2-220 uses the J1800 platform, so compatibility was not guaranteed. A V1.1 version existed in a project fork with fewer components, lower cost, and less assembly difficulty, so that version was used for testing.&lt;/p&gt;
&lt;h2 id=&#34;pcb-fabrication-and-soldering&#34;&gt;PCB Fabrication and Soldering
&lt;/h2&gt;&lt;p&gt;Backplane project: &lt;a class=&#34;link&#34; href=&#34;https://github.com/arnarg/f3_backplane&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;arnarg/f3_backplane&lt;/a&gt;. The board used here is the V1.1 version from a fork. Its core goal is to keep the original SATA drive bays while exposing an NVMe SSD position from the backplane connector.&lt;/p&gt;
&lt;p&gt;Multiple PCBs were received after fabrication. One detail appeared during soldering: after soldering the M.2 connector, it became clear that the SATA connector was different from common SATA connectors.&lt;/p&gt;
&lt;p&gt;A fully matching native SATA connector was not found on Taobao, so an existing connector was modified instead: the pins were pulled out, positions were swapped, and then the connector was soldered back to the board.&lt;/p&gt;
&lt;p&gt;The key takeaway is that the F3 backplane approach can be tried on the F2-220, but SATA connector selection needs special attention. Do not order only by looking for a generic SATA connector.&lt;/p&gt;
&lt;h2 id=&#34;vga-output&#34;&gt;VGA Output
&lt;/h2&gt;&lt;p&gt;The F2-220 has no exposed video output, but it has an internal 12-pin VGA header. You need an internal motherboard 12Pin VGA adapter cable. One end connects to the 12-pin header inside the machine, and the other end is usually a standard DB15 VGA female connector for an external monitor.&lt;/p&gt;
&lt;p&gt;Useful search keywords include &amp;ldquo;12Pin VGA adapter cable&amp;rdquo;, &amp;ldquo;motherboard 12-pin VGA adapter cable&amp;rdquo;, and &amp;ldquo;2.0mm 12Pin to VGA&amp;rdquo;. Before buying, compare the connector direction, pitch, and pinout against a photo of the internal header. Do not order based only on the &amp;ldquo;12Pin&amp;rdquo; label.&lt;/p&gt;
&lt;p&gt;This step is important for installation. Without video output, BIOS and installer troubleshooting becomes much harder.&lt;/p&gt;
&lt;h2 id=&#34;installing-fnos&#34;&gt;Installing fnOS
&lt;/h2&gt;&lt;p&gt;Boot the fnOS installer through Ventoy. The installer can see the NVMe SSD, which means the backplane and NVMe hardware path are working.&lt;/p&gt;
&lt;p&gt;However, after installation, removing the boot drive causes the machine to reboot into the BIOS screen instead of entering fnOS. The BIOS boot list does not contain the NVMe SSD. If fnOS is installed to a USB drive and booted from there, the system can still see the NVMe drive normally.&lt;/p&gt;
&lt;p&gt;This indicates:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NVMe hardware detection is fine.&lt;/li&gt;
&lt;li&gt;Linux can access the NVMe drive.&lt;/li&gt;
&lt;li&gt;The failure point is the BIOS boot stage.&lt;/li&gt;
&lt;li&gt;The F2-220 platform is old, and the stock BIOS likely lacks an NVMe boot module.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;backing-up-the-bios&#34;&gt;Backing Up the BIOS
&lt;/h2&gt;&lt;p&gt;At this point, fnOS can already boot from a USB drive. Since fnOS is Debian-based, &lt;code&gt;flashrom&lt;/code&gt; can be used inside the system to back up and flash the BIOS.&lt;/p&gt;
&lt;p&gt;Flashing BIOS is risky. Prepare a programmer if possible, so recovery is still possible after a failed flash.&lt;/p&gt;
&lt;p&gt;Install &lt;code&gt;flashrom&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install flashrom -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Check whether the BIOS chip can be detected:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo flashrom -p internal
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Detected chip information may look like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Found Winbond flash chip &amp;#34;W25Q64.W&amp;#34; (8192 kB, SPI) mapped at physical address 0x00000000ff800000.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Back up the original BIOS. Replace the chip model in the command with the actual result from your machine:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo flashrom -p internal -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;W25Q64.W&amp;#34;&lt;/span&gt; -r backup_factory.bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;injecting-the-nvme-module&#34;&gt;Injecting the NVMe Module
&lt;/h2&gt;&lt;p&gt;The backed-up BIOS is a &lt;code&gt;.bin&lt;/code&gt; file. You can transfer it to a PC with WinSCP, then refer to the Bilibili tutorial &lt;a class=&#34;link&#34; href=&#34;https://www.bilibili.com/read/cv4475152/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;让老主板用上 Nvme 协议的固态&lt;/a&gt; to inject the NVMe module into the BIOS file.&lt;/p&gt;
&lt;p&gt;After processing, transfer the modified BIOS file back to fnOS.&lt;/p&gt;
&lt;p&gt;Do not blindly reuse someone else&amp;rsquo;s BIOS file. Different machines, BIOS versions, and flash chips may differ. The safer approach is to back up your own original BIOS and modify that backup.&lt;/p&gt;
&lt;h2 id=&#34;flashing-the-new-bios&#34;&gt;Flashing the New BIOS
&lt;/h2&gt;&lt;p&gt;The flash command is shown below. Replace the chip model, firmware path, and file name according to your actual setup:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo flashrom -p internal -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;W25Q64.W&amp;#34;&lt;/span&gt; -w /vol1/NEW_NVME.bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;When the output shows this line, verification has passed:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Verifying flash... VERIFIED.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;After flashing, the BIOS boot list may show a &lt;code&gt;PATA&lt;/code&gt; entry. On older BIOS setups with an injected NVMe module, the NVMe boot entry often appears as &lt;code&gt;PATA&lt;/code&gt;. Seeing it means the BIOS can now recognize the NVMe boot path.&lt;/p&gt;
&lt;h2 id=&#34;result&#34;&gt;Result
&lt;/h2&gt;&lt;p&gt;Final result:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;F3 Backplane V1.1 can detect NVMe on the TerraMaster F2-220.&lt;/li&gt;
&lt;li&gt;The fnOS installer can see the NVMe SSD.&lt;/li&gt;
&lt;li&gt;The stock BIOS cannot boot directly from NVMe.&lt;/li&gt;
&lt;li&gt;After injecting the NVMe module into the BIOS, a &lt;code&gt;PATA&lt;/code&gt; boot entry appears.&lt;/li&gt;
&lt;li&gt;The machine can boot fnOS from NVMe after the BIOS modification.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Testing feedback also notes that this NVMe channel is only a little over 300MB/s. That is enough for a system drive. There is no need to use a high-end SSD; even a small Optane drive can be sufficient.&lt;/p&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes
&lt;/h2&gt;&lt;p&gt;This is not a risk-free general tutorial. It is closer to a hardware and BIOS modification record. Before trying it, note the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;F2-220 and F2-221 use different platforms, so F2-221 results should not be treated as identical to F2-220 results.&lt;/li&gt;
&lt;li&gt;The F3 backplane requires PCB fabrication and soldering. The SATA connector may also require pin modification.&lt;/li&gt;
&lt;li&gt;A suitable internal VGA adapter cable is needed for installation and troubleshooting.&lt;/li&gt;
&lt;li&gt;BIOS flashing can brick the machine. Prepare a programmer and keep the original backup.&lt;/li&gt;
&lt;li&gt;The chip model in the &lt;code&gt;flashrom&lt;/code&gt; command must match the chip detected on your own machine.&lt;/li&gt;
&lt;li&gt;Do not directly flash someone else&amp;rsquo;s modified BIOS. Inject the NVMe module into your own backup first.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The value of this note is that it adds real F2-220 test results: the F3 backplane idea is not limited to the F2-221, and the F2-220 can also use an NVMe system drive. The real blocker is not Linux detecting NVMe, but whether the BIOS supports NVMe booting.&lt;/p&gt;
&lt;h2 id=&#34;related-links&#34;&gt;Related Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;fnNAS forum test thread: &lt;a class=&#34;link&#34; href=&#34;https://club.fnnas.com/forum.php?mod=viewthread&amp;amp;tid=55589&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;铁威马F2-220折腾飞牛OS过程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>TerraMaster F2-221 NAS Backplane Pinout Notes</title>
        <link>https://knightli.com/en/2026/05/04/terramaster-f2-221-backplane-pinout/</link>
        <pubDate>Mon, 04 May 2026 06:02:56 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/04/terramaster-f2-221-backplane-pinout/</guid>
        <description>&lt;p&gt;This note documents the non-standard backplane connector pinout of the TerraMaster F2-221 NAS. The connector looks close to a PCIe edge connector, but it is not a standard PCIe slot. It is a custom TerraMaster backplane interface.&lt;/p&gt;
&lt;p&gt;The connector carries SATA, power, reset, and PCIe signals at the same time. Once PCIe1 x1 is confirmed usable, a custom backplane can expose an M.2 M-key slot and use an NVMe SSD as an internal system drive.&lt;/p&gt;
&lt;p&gt;The same idea also applies to the TerraMaster F2-220. Although the F2-220 and F2-221 use different platforms, a fnNAS forum test shows that F3 Backplane V1.1 can detect NVMe on the F2-220, and the NVMe drive is visible inside the OS installer. The extra work is that the old BIOS may not support booting from NVMe.&lt;/p&gt;
&lt;h2 id=&#34;summary&#34;&gt;Summary
&lt;/h2&gt;&lt;p&gt;The F2-221 backplane connector contains:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Signals for two native SATA ports&lt;/li&gt;
&lt;li&gt;12V, 5V, 3.3V, and GND&lt;/li&gt;
&lt;li&gt;SATA drive power-control related signals&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PERST#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;At least one usable PCIe Gen2 x1 signal group&lt;/li&gt;
&lt;li&gt;Partial clues for a second PCIe signal group, but not fully verified&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PCIe1 can be used to expose an M.2 M-key NVMe slot. In testing, the NVMe drive runs at PCIe Gen2 x1, and the BIOS can detect and boot from it.&lt;/p&gt;
&lt;p&gt;F2-220 testing points in the same direction: the hardware can detect NVMe, but the BIOS boot stage may require injecting an NVMe module, and the boot entry may appear as &lt;code&gt;PATA&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;backplane-connector-pinout&#34;&gt;Backplane Connector Pinout
&lt;/h2&gt;&lt;p&gt;The connector has B/A sides. &lt;code&gt;?&lt;/code&gt; means unknown or unconnected, and &lt;code&gt;NC&lt;/code&gt; means not connected.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Pin&lt;/th&gt;
          &lt;th&gt;B side&lt;/th&gt;
          &lt;th&gt;A side&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;1&lt;/td&gt;
          &lt;td&gt;12V&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;2&lt;/td&gt;
          &lt;td&gt;12V&lt;/td&gt;
          &lt;td&gt;12V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;3&lt;/td&gt;
          &lt;td&gt;12V&lt;/td&gt;
          &lt;td&gt;12V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;4&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;5&lt;/td&gt;
          &lt;td&gt;SATA1 A+&lt;/td&gt;
          &lt;td&gt;SATA1 B+&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;6&lt;/td&gt;
          &lt;td&gt;SATA1 A-&lt;/td&gt;
          &lt;td&gt;SATA1 B-&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;7&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;NC&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;8&lt;/td&gt;
          &lt;td&gt;5V&lt;/td&gt;
          &lt;td&gt;5V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;9&lt;/td&gt;
          &lt;td&gt;5V&lt;/td&gt;
          &lt;td&gt;5V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;10&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
          &lt;td&gt;5V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;11&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;12&lt;/td&gt;
          &lt;td&gt;3.3V&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;13&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;3.3V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;14&lt;/td&gt;
          &lt;td&gt;SATA2 A+&lt;/td&gt;
          &lt;td&gt;3.3V&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;15&lt;/td&gt;
          &lt;td&gt;SATA2 A-&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;16&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;SATA2 B+&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;17&lt;/td&gt;
          &lt;td&gt;PERST#&lt;/td&gt;
          &lt;td&gt;SATA2 B-&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;18&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;19&lt;/td&gt;
          &lt;td&gt;PCIe1 TX+&lt;/td&gt;
          &lt;td&gt;NC&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;20&lt;/td&gt;
          &lt;td&gt;PCIe1 TX-&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;21&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;PCIe1 RX+&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;22&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;PCIe1 RX-&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;23&lt;/td&gt;
          &lt;td&gt;PCIe1 REFCLK+&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;24&lt;/td&gt;
          &lt;td&gt;PCIe1 REFCLK-&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;25&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;PCIe2 RX+&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;26&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;PCIe2 RX-&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;27&lt;/td&gt;
          &lt;td&gt;PCIe2 TX+&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;28&lt;/td&gt;
          &lt;td&gt;PCIe2 TX-&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;29&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;PCIe2 REFCLK+&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;30&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
          &lt;td&gt;PCIe2 REFCLK-&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;31&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;32&lt;/td&gt;
          &lt;td&gt;GND&lt;/td&gt;
          &lt;td&gt;?&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;PCIe1 has higher practical reference value. PCIe2 is not fully verified and should only be treated as a clue, not a reliable design basis.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/05/04/terramaster-f2-221-backplane-pinout/pinout-overview.svg&#34;
	
	
	
	loading=&#34;lazy&#34;
	
		alt=&#34;TerraMaster F2-221 backplane connector pinout overview&#34;
	
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;signal-source-reasoning&#34;&gt;Signal Source Reasoning
&lt;/h2&gt;&lt;p&gt;The stock F2-221 dual-bay backplane does not include a PCIe-to-SATA controller. SATA signals go directly from the motherboard connector into the backplane. The extra PCIe signals are mainly inferred from other multi-bay models in the same product family.&lt;/p&gt;
&lt;p&gt;The TerraMaster F5-422 backplane uses two ASMedia &lt;code&gt;ASM1061&lt;/code&gt; chips. &lt;code&gt;ASM1061&lt;/code&gt; is a PCIe Gen2 x1 to dual-SATA controller. Combined with the Intel J3355 having 2 SATA ports and 6 PCIe Gen2 lanes, this suggests that multi-bay models expand SATA ports through PCIe.&lt;/p&gt;
&lt;p&gt;Therefore, it is reasonable for the F2-221 motherboard connector to retain PCIe signals. The vendor likely reuses motherboard designs across models with different bay counts and changes functionality through the backplane.&lt;/p&gt;
&lt;h2 id=&#34;pcie-differential-pair-identification&#34;&gt;PCIe Differential Pair Identification
&lt;/h2&gt;&lt;p&gt;PCIe differential pairs often go into inner layers after vias, so photos alone cannot trace the complete routing. One useful rule is that, in traditional PCIe designs, TX differential pairs usually have AC coupling capacitors.&lt;/p&gt;
&lt;p&gt;The direction must be viewed in reverse:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;TX&lt;/code&gt; from the &lt;code&gt;ASM1061&lt;/code&gt; controller&amp;rsquo;s perspective corresponds to &lt;code&gt;RX&lt;/code&gt; on the CPU or motherboard side.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RX&lt;/code&gt; from the &lt;code&gt;ASM1061&lt;/code&gt; controller&amp;rsquo;s perspective corresponds to &lt;code&gt;TX&lt;/code&gt; on the CPU or motherboard side.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REFCLK&lt;/code&gt; needs to be judged together with neighboring differential pairs and routing location.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This kind of pinout is better treated as hardware reverse-engineering material, not as an official specification.&lt;/p&gt;
&lt;h2 id=&#34;validation&#34;&gt;Validation
&lt;/h2&gt;&lt;p&gt;F3 Backplane designs based on this pinout have completed the following validation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The original two SATA drive bays remain usable.&lt;/li&gt;
&lt;li&gt;PCIe1 can be routed to an M.2 M-key slot.&lt;/li&gt;
&lt;li&gt;The NVMe SSD can be detected by BIOS.&lt;/li&gt;
&lt;li&gt;The NAS can boot directly from the NVMe SSD.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;btrfs scrub&lt;/code&gt; found no disk errors.&lt;/li&gt;
&lt;li&gt;The system ran from the NVMe SSD for weeks without obvious issues.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The test NVMe SSD was a Patriot P300 128GB. &lt;code&gt;hdparm&lt;/code&gt; result:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dev/nvme0n1:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Timing cached reads:   4554 MB in  2.00 seconds = 2279.68 MB/sec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Timing buffered disk reads: 1222 MB in  3.00 seconds = 407.22 MB/sec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;This speed matches the PCIe Gen2 x1 limitation. The goal is not to fully utilize NVMe performance, but to replace an external USB SSD with an internal system drive.&lt;/p&gt;
&lt;h2 id=&#34;notes&#34;&gt;Notes
&lt;/h2&gt;&lt;p&gt;This pinout is useful as a reference for hardware reverse engineering and custom backplanes, but it should not be treated as official documentation.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The connector is not standard PCIe and cannot directly accept generic PCIe devices.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;?&lt;/code&gt; pins are unverified and should not be connected to critical circuits casually.&lt;/li&gt;
&lt;li&gt;PCIe2 is not fully verified and carries higher risk than PCIe1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CLKREQ&lt;/code&gt; is not fully routed like a normal M.2 design, so ASPM may not work.&lt;/li&gt;
&lt;li&gt;SATA power includes hot-swap related load switch and slow start logic; do not route only signal lines while ignoring power control.&lt;/li&gt;
&lt;li&gt;If reproducing the design, measure your own motherboard and backplane again instead of relying only on photos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;related-links&#34;&gt;Related Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Original project write-up: &lt;a class=&#34;link&#34; href=&#34;https://codedbearder.com/posts/f3-backplane/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;I made a new backplane for my Terramaster F2-221 NAS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;F3 Backplane KiCad project: &lt;a class=&#34;link&#34; href=&#34;https://github.com/arnarg/f3_backplane&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;arnarg/f3_backplane&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;F3 Backplane pinout CSV: &lt;a class=&#34;link&#34; href=&#34;https://github.com/arnarg/f3_backplane/blob/main/f3_backplane.csv&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;f3_backplane.csv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;F2-220 compatibility test: &lt;a class=&#34;link&#34; href=&#34;https://club.fnnas.com/forum.php?mod=viewthread&amp;amp;tid=55589&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;铁威马F2-220折腾飞牛OS过程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Seagate Exos 2X14 Dual-Arm HDD: Cheap, Fast, Large, and Not for Everyone</title>
        <link>https://knightli.com/en/2026/05/01/seagate-exos-2x14-dual-actuator-hdd/</link>
        <pubDate>Fri, 01 May 2026 11:05:45 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/05/01/seagate-exos-2x14-dual-actuator-hdd/</guid>
        <description>&lt;p&gt;The Seagate Exos 2X14 / Mach.2 is a rather unusual enterprise mechanical hard drive.
Its key selling point is not just capacity, but its dual-arm design: a single 14TB drive appears to the system as two 7TB logical disks, with each side using its own head-arm assembly for parallel access.&lt;/p&gt;
&lt;p&gt;That makes it look very tempting on the used market.
When ordinary 14TB enterprise drives are being pushed up in price, these retired dual-arm drives can sometimes offer 14TB of capacity for less money while delivering sequential speeds close to SATA SSD territory.
But this is not a normal NAS drive that everyone should buy as a drop-in replacement.
Its strengths and risks are both obvious, and they need to be understood before buying.&lt;/p&gt;
&lt;h2 id=&#34;why-it-can-be-so-fast&#34;&gt;Why It Can Be So Fast
&lt;/h2&gt;&lt;p&gt;A normal mechanical hard drive has one head-arm assembly, so reads and writes are mainly handled by one group of heads at a time.
The Exos 2X14 / Mach.2 splits one physical drive into two 7TB logical units, allowing two head-arm groups to work at the same time.&lt;/p&gt;
&lt;p&gt;Each 7TB logical disk can reach roughly 250MB/s in sequential reads and writes, similar to many large enterprise HDDs.
If the two 7TB logical disks are combined as RAID 0, large sequential transfers can approach 500MB/s when there is no network bottleneck.
That is close to mainstream SATA SSD performance and enough to saturate a 2.5G network.&lt;/p&gt;
&lt;p&gt;However, this boost mainly applies to large sequential transfers.
4K small files, fragmented files, and random access do not suddenly become fast just because of the dual-arm design and RAID 0.
It is still a mechanical hard drive at heart, so small-file workloads remain slow.&lt;/p&gt;
&lt;h2 id=&#34;the-biggest-barrier-is-hardware-compatibility&#34;&gt;The Biggest Barrier Is Hardware Compatibility
&lt;/h2&gt;&lt;p&gt;Most low-priced units available on the used market are retired server drives with SAS interfaces, not SATA models.
That means they are not suitable for most off-the-shelf NAS systems.&lt;/p&gt;
&lt;p&gt;Consumer and prosumer NAS devices from brands such as UGREEN, Synology, and QNAP are usually designed around SATA backplanes, and SAS drives often cannot be used directly.
DIY NAS users also need extra hardware:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An available PCIe slot on the motherboard&lt;/li&gt;
&lt;li&gt;A SAS HBA or RAID card, such as an LSI 2008 flashed to IT mode&lt;/li&gt;
&lt;li&gt;A server SAS backplane, or cables such as SFF-8087 to SFF-8482 adapters&lt;/li&gt;
&lt;li&gt;An operating system that can correctly identify the two logical disks from the same physical drive&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The controller card itself may not be expensive.
The real hassle is the full chain of cabling, compatibility, cooling, power, and available PCIe space.
If the machine is already tight on space, airflow, cables, or expansion slots, this drive adds real friction.&lt;/p&gt;
&lt;h2 id=&#34;do-not-treat-the-two-7tb-disks-as-backups-of-each-other&#34;&gt;Do Not Treat the Two 7TB Disks as Backups of Each Other
&lt;/h2&gt;&lt;p&gt;The easiest mistake is treating the two 7TB logical disks shown by the system as two independent drives.
They are not two physical disks; they are two logical units inside the same physical hard drive.&lt;/p&gt;
&lt;p&gt;If these two 7TB logical disks are configured as RAID 1, it may look like a mirror, but the practical value is very limited.
They share the same enclosure, controller board, power path, and part of the same mechanical environment.
If the physical drive, board, or power path fails, the original data and the supposed backup can disappear together.&lt;/p&gt;
&lt;p&gt;RAID 5 and RAID 6 also require caution.
Traditional RAID 5 usually tolerates the failure of one physical disk, but when a dual-arm drive fails, the array may effectively lose two 7TB logical disks at the same time.
If the array design does not account for this failure model, redundancy can be defeated very easily.&lt;/p&gt;
&lt;p&gt;So this type of drive is better understood as one fast, large, risk-concentrated disk, not as two independent disks that can safely protect each other.&lt;/p&gt;
&lt;h2 id=&#34;how-to-use-it-in-nas-systems&#34;&gt;How to Use It in NAS Systems
&lt;/h2&gt;&lt;p&gt;If hardware passthrough and driver recognition work properly, systems such as FNOS, TrueNAS, Unraid, and Windows can usually see the two 7TB logical disks.
The key question is not whether the system can see them, but how they should be used.&lt;/p&gt;
&lt;p&gt;In FNOS, the two 7TB logical disks can be combined into a RAID 0 storage space to gain sequential throughput.&lt;/p&gt;
&lt;p&gt;In TrueNAS, creating a storage pool may trigger a prompt about using disks with the same serial number.
If you are sure you want to use this drive, you can allow it, place the two logical disks into the same vdev, and choose Stripe instead of Mirror.
Mirror creates an unreliable illusion of redundancy here.&lt;/p&gt;
&lt;p&gt;In Unraid, it is not recommended to put the two logical disks into the main array with a parity disk.
A better approach is to create a separate cache pool or dedicated high-speed pool, use Btrfs or ZFS for an independent RAID 0, and assign it to temporary high-speed data, downloads, transcoding cache, or data that can be rebuilt.&lt;/p&gt;
&lt;p&gt;Windows can also identify and use the disks, with similar logic: striping can improve sequential performance, but it should not be treated as a real two-drive backup plan.&lt;/p&gt;
&lt;h2 id=&#34;lifespan-temperature-and-power-still-matter&#34;&gt;Lifespan, Temperature, and Power Still Matter
&lt;/h2&gt;&lt;p&gt;The dual-arm design improves performance, but it also makes the mechanical structure more complex.
These drives contain two head-arm assemblies and more head components, which naturally means more mechanical risk points.
Since most units on the used market are retired enterprise drives, real power-on hours, previous workload, handling history, and transport condition are often unclear.
Specification-sheet endurance numbers should not be trusted blindly.&lt;/p&gt;
&lt;p&gt;Power and cooling also matter.
Under full load, power consumption may exceed 11W, and shell temperatures above 40 degrees Celsius are not unusual.
If the drive is installed in a small case, dense drive cage, or low-airflow NAS, sustained heat can further affect stability and lifespan.&lt;/p&gt;
&lt;h2 id=&#34;who-should-buy-it&#34;&gt;Who Should Buy It
&lt;/h2&gt;&lt;p&gt;This drive is suitable for people who are comfortable building a DIY NAS, already have the right SAS hardware, understand the risks of RAID 0, and mainly handle large sequential files.
Media libraries, download caches, temporary project storage, and rebuildable data pools can all benefit from its capacity and speed.&lt;/p&gt;
&lt;p&gt;It is not suitable for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Users of off-the-shelf branded NAS systems&lt;/li&gt;
&lt;li&gt;Users who do not want to buy a SAS card and adapter cables&lt;/li&gt;
&lt;li&gt;Primary storage with high data-safety requirements&lt;/li&gt;
&lt;li&gt;Users who want to use the two 7TB logical disks as a RAID 1 backup&lt;/li&gt;
&lt;li&gt;Workloads dominated by small files, virtual-machine random I/O, or databases&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the goal is low-cost capacity and fast sequential reads and writes, the Exos 2X14 / Mach.2 is genuinely interesting.
But its proper role is a cheap, fast, tinkerer-friendly special-purpose drive, not a universal NAS disk that everyone can buy without thinking.&lt;/p&gt;
&lt;p&gt;Hard drives have prices; data has value.
This kind of dual-arm drive can be worth buying, but it is best used only for recoverable, rebuildable, or separately backed-up data.
Truly important files should still live inside a clear and reliable backup strategy.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Why Are 16-Core Board&#43;CPU Combos So Cheap? Is a Xeon D-1581 Integrated Board Actually Worth Buying?</title>
        <link>https://knightli.com/en/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/</link>
        <pubDate>Wed, 29 Apr 2026 10:48:00 +0800</pubDate>
        
        <guid>https://knightli.com/en/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/</guid>
        <description>&lt;p&gt;These &lt;code&gt;Xeon D-1581&lt;/code&gt; integrated board+CPU combos have started popping up again, and the reason is simple: the price looks extremely tempting.&lt;/p&gt;
&lt;p&gt;The selling points are easy to recognize:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;16&lt;/code&gt; cores and &lt;code&gt;32&lt;/code&gt; threads&lt;/li&gt;
&lt;li&gt;motherboard and CPU together&lt;/li&gt;
&lt;li&gt;multiple NICs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PCIe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;a price that looks unusually low&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/2.jpg&#34;
	width=&#34;1024&#34;
	height=&#34;1024&#34;
	srcset=&#34;https://knightli.com/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/2_hu_61fad8ff2f2cbcaf.jpg 480w, https://knightli.com/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/2_hu_a0f9d68fe38d508f.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;100&#34;
		data-flex-basis=&#34;240px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;On paper, it really does look like a dream board for &lt;code&gt;NAS&lt;/code&gt;, &lt;code&gt;AIO&lt;/code&gt;, download boxes, or home labs.&lt;br&gt;
But whether this kind of board is worth buying has less to do with the core count itself and more to do with &lt;strong&gt;whether the use case matches&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;the-short-verdict&#34;&gt;The Short Verdict
&lt;/h2&gt;&lt;p&gt;The strengths are easy to see:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;lots of cores&lt;/li&gt;
&lt;li&gt;integrated board+CPU is convenient&lt;/li&gt;
&lt;li&gt;expansion is usually better than many mini PCs&lt;/li&gt;
&lt;li&gt;very comfortable for lots of background services&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The weaknesses are just as clear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the platform is old&lt;/li&gt;
&lt;li&gt;single-core performance is mediocre&lt;/li&gt;
&lt;li&gt;stability and compatibility depend a lot on the board itself&lt;/li&gt;
&lt;li&gt;many cheap listings are really just old-platform risk being resold&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So this is good for people who like tinkering, not for people who like wishful thinking.&lt;br&gt;
If you clearly want it for &lt;code&gt;NAS&lt;/code&gt;, containers, or a lab host, it can be very appealing. If you want a cheap, low-maintenance main machine, it will probably disappoint you.&lt;/p&gt;
&lt;h2 id=&#34;why-this-kind-of-board-feels-so-attractive&#34;&gt;Why This Kind of Board Feels So Attractive
&lt;/h2&gt;&lt;p&gt;The reason is simple: it stacks together several things people love hearing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;16 cores and 32 threads&lt;/li&gt;
&lt;li&gt;multiple NICs and &lt;code&gt;PCIe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;motherboard and CPU included together&lt;/li&gt;
&lt;li&gt;very low pricing after falling out of the server market&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At the same price, a desktop platform may only get you an ordinary 4-core or 6-core chip, while this gives you 16 cores and 32 threads.&lt;br&gt;
That is exactly why it is so tempting and also a little dangerous: &lt;strong&gt;what it really sells is thread count and I/O presence, not a complete user experience.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;strengths&#34;&gt;Strengths
&lt;/h2&gt;&lt;h3 id=&#34;1-it-is-genuinely-comfortable-for-service-heavy-use&#34;&gt;1. It is genuinely comfortable for service-heavy use
&lt;/h3&gt;&lt;p&gt;This kind of board is best suited for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NAS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Docker hosts&lt;/li&gt;
&lt;li&gt;download boxes&lt;/li&gt;
&lt;li&gt;home labs&lt;/li&gt;
&lt;li&gt;light to medium virtualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is not about one task being especially fast. It is about being able to keep many things running on one machine at the same time.&lt;/p&gt;
&lt;h3 id=&#34;2-expansion-is-better-than-many-mini-pcs&#34;&gt;2. Expansion is better than many mini PCs
&lt;/h3&gt;&lt;p&gt;If you need to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;add NICs&lt;/li&gt;
&lt;li&gt;add an HBA&lt;/li&gt;
&lt;li&gt;add storage adapter cards&lt;/li&gt;
&lt;li&gt;experiment with storage and networking layouts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;then this kind of board is usually more interesting than a mini PC.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/1.webp&#34;
	width=&#34;480&#34;
	height=&#34;640&#34;
	srcset=&#34;https://knightli.com/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/1_hu_141c982829198c5e.webp 480w, https://knightli.com/2026/04/29/should-you-buy-xeon-d-1581-board-cpu-combos/1_hu_7037e0d8a5c33979.webp 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;75&#34;
		data-flex-basis=&#34;180px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-integrated-boardcpu-makes-setup-faster&#34;&gt;3. Integrated board+CPU makes setup faster
&lt;/h3&gt;&lt;p&gt;You do not need to match a separate CPU and motherboard, and there is less compatibility guessing.&lt;br&gt;
For people who like old-platform tinkering, that is genuinely useful.&lt;/p&gt;
&lt;h2 id=&#34;weaknesses&#34;&gt;Weaknesses
&lt;/h2&gt;&lt;h3 id=&#34;1-the-platform-is-old&#34;&gt;1. The platform is old
&lt;/h3&gt;&lt;p&gt;This is the biggest starting point.&lt;br&gt;
An old platform means weaker single-core performance, older interface standards, and no reason to expect modern power efficiency.&lt;/p&gt;
&lt;h3 id=&#34;2-it-is-not-a-great-front-end-daily-machine&#34;&gt;2. It is not a great front-end daily machine
&lt;/h3&gt;&lt;p&gt;16 cores and 32 threads sound powerful, but this kind of board behaves more like a background worker than a responsive daily desktop.&lt;br&gt;
If you try to use it as a main desktop PC, the feel will usually not make you happy.&lt;/p&gt;
&lt;h3 id=&#34;3-cheap-often-comes-with-risk&#34;&gt;3. Cheap often comes with risk
&lt;/h3&gt;&lt;p&gt;The common problem is not simply whether it powers on. It is more about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mixed or unclear board origins&lt;/li&gt;
&lt;li&gt;unstable BIOS and compatibility&lt;/li&gt;
&lt;li&gt;possible pickiness with memory, NICs, or PCIe devices&lt;/li&gt;
&lt;li&gt;needing to verify long-term stability yourself&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In plain terms, cheap does not mean low-maintenance.&lt;/p&gt;
&lt;h3 id=&#34;4-power-use-may-not-be-as-low-as-you-imagine&#34;&gt;4. Power use may not be as low as you imagine
&lt;/h3&gt;&lt;p&gt;A lot of people imagine this as &amp;ldquo;many threads, low power, great for 24/7 use.&amp;rdquo;&lt;br&gt;
Reality is not that simple. Total system behavior depends heavily on board design, cooling, and how much hardware you hang off it.&lt;/p&gt;
&lt;h2 id=&#34;who-it-fits-best&#34;&gt;Who It Fits Best
&lt;/h2&gt;&lt;p&gt;The best fit is pretty clear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people who want a low-cost &lt;code&gt;NAS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;people building a home lab&lt;/li&gt;
&lt;li&gt;people who want to run many containers or services&lt;/li&gt;
&lt;li&gt;people who accept old platforms and do not mind troubleshooting&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;who-it-does-not-fit-well&#34;&gt;Who It Does Not Fit Well
&lt;/h2&gt;&lt;p&gt;It is a poor fit for people who:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;want a main desktop machine&lt;/li&gt;
&lt;li&gt;want a cheap but hassle-free system&lt;/li&gt;
&lt;li&gt;care a lot about power, noise, and support&lt;/li&gt;
&lt;li&gt;do not want to troubleshoot things themselves&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;final-line&#34;&gt;Final Line
&lt;/h2&gt;&lt;p&gt;A &lt;code&gt;Xeon D-1581&lt;/code&gt; board like this is not impossible to buy. It is just &lt;strong&gt;only good value in the right use case&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you want threads, I/O, expansion, and a long-running service machine, it has real appeal.&lt;br&gt;
If you want a modern platform, strong single-core speed, low hassle, and a good main-machine experience, it probably is not for you.&lt;/p&gt;
&lt;p&gt;The shortest conclusion is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The upside is more threads, more ports, and more expansion. The downside is an old platform, mixed board quality, and more tinkering.&lt;/strong&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
