syncthing配置 高级配置使用记录 syncthing中文解释

## 版本选择

下载windows图形界面安装版本https://github.com/syncthing/syncthing-gtk/releases
 

syncthing配置在网络上没有什么资料  不得不说软件非常强大 同步几十万文件都不曾出错
如果需要安装教程可以参考  Debian 安装 Syncthing
这货比较耗CPU 特别是文件数量大时  之所以没有添加为服务的方式运行 想必也是这个问题  用完就退出
提醒使用者要注意它的安全性
如果用来做数据备份使用
可以自己写脚本在计划任务执行
定时执行任务时启动服务 在执行完毕后关闭
也可以修改图形界面默认端口 配置验证密码  提高安全性能
#### 文件同步 原理介绍
块:
块 文件被分成块。块目前是固定大小,128 KiB,除了文件中可能较小的最后一个。每个文件被分成多个这些块,并且计算每个块的SHA256散列。这将导致包含文件中所有块的偏移量,大小和散列的块列表。
要更新文件,Syncthing将文件当前版本的块列表与文件所需版本的块列表进行比较。然后,它尝试为不同的每个块找到一个源。如果另一个文件已经具有带有相同散列的块,或者它可能来自群集中的另一个设备,则这可能是本地的。在第一种情况下,块被简单地复制在磁盘上,在第二种情况下,它通过网络从其他设备被请求。

当从另一设备复制或接收块时,计算其SHA256散列并与期望值进行比较。如果匹配,块被写入文件的临时副本,否则它被丢弃,并且Syncthing尝试为块找到另一个源。

扫描策略:
Syncthing通过扫描检测文件更改。默认情况下,每60秒发生一次,但每个文件夹可以更改。增加扫描间隔使用较少的资源,并且例如在不频繁更改的大文件夹上是有用的。也可以使用syncthing-inotify(官方的一个工具 可以从github下载 ),当检测到更改时,Syncthing会告知Syncthing扫描更改的文件,从而减少对周期性扫描的需要。

在重新扫描期间,将检查现有文件的修改时间,大小或权限位的更改。如果基于那些属性检测到改变,则文件被“重新散列”,即为文件计算新的块列表。如果没有读取文件并为每个块计算新的SHA256散列,就不可能知道文件的哪些部分已经改变。
检测和散列的更改在每次重新扫描后传输到其他设备。
版本控制:
Syncthing跟踪每个文件的几个版本 - 它当前在磁盘上的版本,称为本地版本,所有其他连接的设备公布的版本,以及文件的“最好”(通常是最新的)版本。此版本称为全局版本,是每个设备努力实现的最新版本。 此信息保存在索引数据库中,该数据库存储在配置目录中,并称为index-vx.y.z.db(对于某些版本的x.y.z,可能不是您正在运行的Syncthing的版本)。 当从其他设备接收到新的索引数据时Syncthing重新计算每个文件的哪个版本应该是全局版本,并将其与当前本地版本进行比较。当两者不同时,Syncthing需要同步文件。比较块列表以构建所需块的列表,然后如上所述从网络请求或者本地复制。

临时文件: 
同步永远不会直接写入目标文件。而是对临时副本进行所有更改,然后将其移动到旧版本的适当位置。如果在复制或同步期间发生错误(例如必需的块不可用),则临时文件将保留最多一天。这是为了避免不必要地通过网络请求数据。 临时文件名为.syncthing.original-filename.ext.tmp或在Windows上〜〜syncthing〜original-filename.ext.tmp其中original-filename.ext是目标文件名。通常隐藏临时文件。如果由于添加了前缀和额外扩展而导致临时文件名太长,则将使用原始文件名的散列而不是实际的原始文件名。

~~~~~~~~~~
## 最常用的 文件夹的类型 说明
作用 分享的文件夹其中文件不期望在其他设备上改变
如果是主模式则可以保证  其他机器修改文件是不会覆盖到本机的 只有本机数据修改才会同步到其他机器
那么这个主模式可以用于对一些特殊需求
比如 数据库的定时备份 可以直接将数据库data目录下的指定数据库作为分享目录
设置3600秒扫描一次  并设置主模式  
这样就能保证数据库的备份副本可以达到1小时恢复的能力  提高数据的安全性能
~~~~~~~
## Syncthing 命令行
可以输入
syncthing /?
syncthing [-audit] [-browser-only] [-generate=<dir>] [-gui-address=<address>] [-gui-apikey=<key>]
          [-home=<dir>] [-logfile=<filename>] [-logflags=<flags>] [-no-browser]
          [-no-console] [-no-restart] [-paths] [-paused] [-reset] [-upgrade] [-upgrade-check]
          [-upgrade-to=<url>] [-verbose] [-version]
-audit事件写入审计文件。
-generate=<dir>生成指定的目录,然后退出键和配置。
-gui-address=<address>重写GUI地址。
-home=<dir>设置配置目录。默认配置目录为: $HOME/.config/syncthing。
-logfile=<filename>设定目标文件名记录(使用"-"了标准输出,这是默认选项)。
-logflags=<flags>选择日志行前缀信息,默认2 -logflags值以下的总和:
1:日期
2:时间
4:微秒时间
8:长文件名
16:短文件名
前缀带有日期和时间每个日志行,设置-logflags=3(1 + 2从上面)。值0用于禁用上述所有。默认是显示每次只(2)。
-no-browser不要启动浏览器。
-no-console隐藏控制台窗口。(仅在Windows上)
-no-restart不要重新启动; 刚刚退出。
-paths打印用于配置,钥匙,数据库,图形用户界面覆盖,默认同步文件夹和日志文件的路径。
-reset重置数据库。
-upgrade执行升级。
-upgrade-check检查可用升级。
-upgrade-to=<url>部队直接从指定的网址进行升级。
-verbose打印详细的日志输出。
-version显示的版本。
不提倡的选项
-gui-apikey=<key>覆盖GUI API密钥(弃用V0.13,在将来会被删除 - 不要使用)。
## 关于它为什么会用这么多的CPU?
当检测到新的或修改过的文件,或Syncthing首次启动时,您的文件是使用SHA-256散列处理。
被通过网络发送的数据是(任选)压缩并使用AES-128加密。当接收数据时,它必须被解密。
有看家一定量必须完成跟踪索引数据库中每个文件的当前和可用的版本。
默认情况下Syncthing使用周期性扫描每隔60秒检测文件更改。这意味着,检查每个文件的修改时间和比较它的数据库。这可能会导致CPU使用率尖峰对于大文件夹。
散列,压缩和加密需要CPU成本。此外,使用图形界面导致一定量额外的CPU使用率呈现的汇总数据。
## 文件冲突 会怎么处理
当两个设备同时修改一个文件时 会将比较旧一点的文件修改文件名为
文件名.sync-conflict-<date>-<time>.<ext>
最新的文件将会保存
## 要修改或移动共享文件夹的路径  正确做法
关闭Syncthing,移动磁盘上的文件夹,直接在配置文件中编辑路径保存,然后再次启动Syncthing
##配置多用户的方法
安装后在配置文件中定义不同的端口
## 自定义配置日志
命令行选项可用于指定用户定义的日志文件。  syncthing -paths-logfile

## 配置文件 详解:

配置文件目录位于 /root/.config/syncthing
所有的配置都会记录在这里 包括新建的文件夹共享 添加的远程设备等等。。
config.xml  配置文件,XML格式。
cert.pem, key.pem    RSA公钥和私钥。这些构成了装置ID的基础。该密钥必须保密。
https-cert.pem, https-key.pem   用于HTTPS连接的图形用户界面的证书和密钥。可以与HTTPS的自定义证书根据需要进行更换。
index-*.db  目录与元数据和目前磁盘上的文件的哈希值,并可以同步数据库。
csrftokens.txt  近日发布CSRF令牌的列表(针对浏览器的跨站请求伪造保护)
config.xml  配置文件中关键的配置项目说明:
<folder id="
/
</folder>
      以上区域设置共享文件夹配置  共享一个或多个目录 必须有一个或多个这样的区块
#### folder 区域重要参数 解析
ID,文件夹ID 必须是唯一的。(必写
label  , 用来描叙文件夹 可以任意设置 必写
path , 需要共享的文件夹 绝对路径 必写
type , readwrite 读写 或只读  必写
rescanIntervalS , 扫描时间间隔  大一点不占CPU  (必写)
ignorePerms , 是否忽略文件权限  默认是false 
autoNormalize , 自动在文件名中找到正确的UTF-8规范化错误  默认true,这样可以提示错误
#### device 重要参数 
id  , 就是远程设备ID号 共享时必须有
introducedBy ,可以为空  是一个标识与远程设备的元素
#### device下方的其他参数
minDiskFreePct ,默认值1,文件夹所在的磁盘空间的百分比 设置为0禁用。
copiers, pullers, hashers ,默认为0 系统自动设置  数量仅推荐高级用户配置的性能选项
order , ##### 排序 
     random 以随机顺序拉文件 有助于优化集群性能
     alphabetic  拉按文件名的字母顺序排序文件
     smallestFirst, largestFirst  拉按文件大小排序的文件; 最小和最大的优先分别。
     oldestFirst,newestFirst  拉按修改时间排序文件; 最老和最新的优先分别。
ignoreDelete ,默认false,如果为ture 这个设备会假装不去查看从其他设备删除文件的说明。
scanProgressIntervalS ,默认值0表示(两秒),推送到图形化界面同步时间。
pullerSleepS, pullerPauseS ,默认0,限制速率的设置,建议默认。
maxConflicts ,默认值-1,新版本为10,保存冲突的副本的最大数量,0为完全禁用冲突副本保存,默认为不限
disableSparseFiles ,默认false, 所有0块不会写,在支持稀疏的文件系统创建, 设置true 将不会创建稀疏文件 (只登记文件信息,而不占用存储空间),建议默认。
disableTempIndexes ,默认false, 设备交换关于在进行传输中的可用块的信息,如果ture 此类信息不会交换此文件夹。
fsync,默认ture, 从其他设备传输更新 文件会永久存储,然后将更改提交到内部数据库。
## 设备块元素 设置
id,设备ID。这必须用规范的形式,可以在配置文件查看。
name ,设备名称  写一个可以理解的描叙设备名。
compression ,默认metadata 压缩元,是否将数据发送到该设备时使用协议压缩
   metadata ,默认元数据压缩 ,是非常友好的压缩(元数据是指从信息资源中抽取出来的用于说明其特征、内容的结构化的数据)
   always ,压缩所有数据包,其中包括文件数据,比如文件夹及文件。
   never ,禁用所有压缩。
introducer ,默认false,被信任作为介绍人,连接时应该复制他们设备的文件夹列表。
skipIntroductionRemovals, 默认false,true 是只遵循介绍,而不是去介绍,我们不会删除我们引入的设备,即使原始介绍者不再列出已知的远程设备。
introducedBy ,默认为空,定义哪个设备介绍我们引入此设备。仅用于以下引用:
        元素必须存在,一个或多个地址 必须以前缀tcp://(双栈), tcp4://(仅限IPv4)或tcp6://  例如
tcp://192.0.2.1   默认端口22000
tcp://192.0.2.1:12345   使用端口12345
tcp://[2001:db8::23:1]   默认端口22000
tcp://[2001:db8::23:1]:12345  使用端口12345
主机名和端口tcp://fileserver:12345  能否连接 取决于名称解析。
dynamic  只填这个表示使用本地和全局搜索查找设备。
ignoredDevice,被特别忽视的设备ID,来自这些设备的连接尝试将会记录到控制台,但不会显示在Web GUI中。
## WEB GUI 元素 控制   图形界面控制配置
 enabled,默认是启动,如果false  GUI和API将不会启动
tls,默认false,如果设置为true,TLS(HTTPS)将被强制执行。非HTTPS请求将被重定向到HTTPS。为false,TLS连接仍然是可能的,但它不是必需的。
theme,web图形界面的主题选择
address,web图形界面 地址和端口地址格式为:IPv4地址和端口(127.0.0.1:8384)或IPV4/IPV6通配 (0.0.0.0:12345, [::]:12345, :12345)
user、password、apikey  ,用户名 密码 key
## 其他选项元素:
实例:
 <options>
        <listenAddress>default</listenAddress>
        <globalAnnounceServer>default</globalAnnounceServer>
        <globalAnnounceEnabled>true</globalAnnounceEnabled>
        <localAnnounceEnabled>true</localAnnounceEnabled>
        <localAnnouncePort>21027</localAnnouncePort>
        <localAnnounceMCAddr>[ff12::8384]:21027</localAnnounceMCAddr>
        <maxSendKbps>0</maxSendKbps>
        <maxRecvKbps>0</maxRecvKbps>
        <reconnectionIntervalS>60</reconnectionIntervalS>
        <relaysEnabled>true</relaysEnabled>
        <relayReconnectIntervalM>10</relayReconnectIntervalM>
        <startBrowser>true</startBrowser>
        <natEnabled>true</natEnabled>
        <natLeaseMinutes>60</natLeaseMinutes>
        <natRenewalMinutes>30</natRenewalMinutes>
        <natTimeoutSeconds>10</natTimeoutSeconds>
        <urAccepted>-1</urAccepted>
        <urUniqueID></urUniqueID>
        <urURL>https://data.syncthing.net/newdata</urURL>
        <urPostInsecurely>false</urPostInsecurely>
        <urInitialDelayS>1800</urInitialDelayS>
        <restartOnWakeup>true</restartOnWakeup>
        <autoUpgradeIntervalH>12</autoUpgradeIntervalH>
        <keepTemporariesH>24</keepTemporariesH>
        <cacheIgnoredFiles>false</cacheIgnoredFiles>
        <progressUpdateIntervalS>5</progressUpdateIntervalS>
        <symlinksEnabled>true</symlinksEnabled>
        <limitBandwidthInLan>false</limitBandwidthInLan>
        <minHomeDiskFreePct>1</minHomeDiskFreePct>
        <releasesURL>https://upgrades.syncthing.net/meta.json</releasesURL>
        <overwriteRemoteDeviceNamesOnConnect>false</overwriteRemoteDeviceNamesOnConnect>
        <tempIndexMinBlocks>10</tempIndexMinBlocks>
    </options>
说明:
 <options>
        <listenAddress>default</listenAddress> //用于同步的监听地址配置
        <globalAnnounceServer>default</globalAnnounceServer> //用于在全球查找服务器 也可以设置为HTTP或HTTPS网站
        <globalAnnounceEnabled>true</globalAnnounceEnabled> //是否在全球发布和查找服务器
        <localAnnounceEnabled>true</localAnnounceEnabled> //是否在局域网发布公告 使得可以找到其他设备
        <localAnnouncePort>21027</localAnnouncePort>  //在该端口监听和发送IPv4的广播通知
        <localAnnounceMCAddr>[ff12::8384]:21027</localAnnounceMCAddr> //该组地址和端口加入和发送IPv6组播公告
        <maxSendKbps>0</maxSendKbps> //传出的数据速率限制,以每秒kibibytes。
        <maxRecvKbps>0</maxRecvKbps> //输入的数据速率限制,以每秒kibibytes。
        <reconnectionIntervalS>60</reconnectionIntervalS> //每个试图连接到未连接的当前设备之间的等待秒数
        <relaysEnabled>true</relaysEnabled> //中继连接到并可能用于设备到设备的连接
        <relayReconnectIntervalM>10</relayReconnectIntervalM>//设置时间间隔,以分钟,中继重新连接尝试
        <startBrowser>true</startBrowser> //是否尝试启动浏览器来显示GUI Syncthing启动
        <natEnabled>true</natEnabled> //是否尝试执行传入同步连接的UPnP和NAT-PMP端口映射。
        <natLeaseMinutes>60</natLeaseMinutes> //要求这些分钟的租约; 设置0永久租约。
        <natRenewalMinutes>30</natRenewalMinutes> // nat续租分钟数,设置0为永久租约
        <natTimeoutSeconds>10</natTimeoutSeconds> //扫描UPnP设备时,请等待此响应时长
        <urAccepted>-1</urAccepted> //用户是否已经接受提交匿名使用数据 -1表示没有 0是没有做出选择
        <urUniqueID></urUniqueID> //与使用报告一起发送的唯一ID。启用使用情况报告时生成。
        <urURL>https://data.syncthing.net/newdata</urURL> //启用时发布使用情况报告数据的网址。
        <urPostInsecurely>false</urPostInsecurely>//为真时,UR URL可以是http来代替https,或有一个自签名的证书。默认值是false
        <urInitialDelayS>1800</urInitialDelayS>//从启动到正在发送的第一个使用报告等待的时间。允许系统在报告统计信息
        <restartOnWakeup>true</restartOnWakeup>//当检测,我们从睡眠模式唤醒(即折叠的笔记本电脑)是否执行Syncthing的重新启动。
        <autoUpgradeIntervalH>12</autoUpgradeIntervalH>//几个小时后检查新的版本。设置为零可禁用自动升级。
        <keepTemporariesH>24</keepTemporariesH>//保持临时失败传输这个小时数。时间内,它们包含的数据不需要再次传送。
        <cacheIgnoredFiles>false</cacheIgnoredFiles>//是否缓存忽略模式评估的结果 性能以内存为代价。默认为false
        <progressUpdateIntervalS>5</progressUpdateIntervalS>//以秒为单位,持续下载的进度传给GUI可用的频率。
        <symlinksEnabled>true</symlinksEnabled>//是否同步符号链接,如果系统支持。
        <limitBandwidthInLan>false</limitBandwidthInLan>//是否对与本地设备相同的广播域中的设备应用带宽限制。
        <minHomeDiskFreePct>1</minHomeDiskFreePct>//在包含配置和索引的分区上应该可用的空间的百分比
        <releasesURL>https://upgrades.syncthing.net/meta.json</releasesURL>//加载发布信息的URL,用于自动升级。
        <overwriteRemoteDeviceNamesOnConnect>false</overwriteRemoteDeviceNamesOnConnect>//真则设备名始终被每个连接上的远程设备指定的名称覆盖。
        <tempIndexMinBlocks>10</tempIndexMinBlocks>//当交换用于不完全传送的索引信息时,仅考虑具有至少这么多块的文件。
    </options>
databaseBlockCacheMiB,覆盖自动计算的数据库块高速缓存大小
静态中继地址(relay://192.0.2.42:22067?id=abcd123...)
Syncthing将通过指定的中继地址连接到并监听进入的连接。
动态中继地址池(dynamic+https://192.0.2.42/relays)
Syncthing将获取指定的HTTPS URL,解析它用于描述中继的JSON有效负载,从可用的中继选择一个中继,并通过它监听,如同指定为上面的静态中继。
警告:
在设备之间同步配置文件(使多个设备使用相同的配置文件)可能会导致问题。如果您在设备之间同步主文件夹,这很容易意外。同步配置文件的常见症状是两个设备以相同的设备ID结束。

如果要使用Syncthing备份配置文件,建议您要备份的文件位于文件夹主配置中,以防止其他设备覆盖每个设备配置。远程设备上的文件夹不应用作远程设备的配置。

如果要在非主控模式下同步主文件夹,可以将存储配置文件的文件夹添加到忽略列表中。如果您还想备份配置文件,请在主模式下为配置文件夹添加另一个文件夹。
### 高级配置
很少使用 不正当地使用时 非常危险 更改高级配置设置时要小心,并确保你理解所产生的影响和后果。
#### 文件夹选项
autoNormalize

autoNormalize是一个高级文件夹设置,会影响其名称中具有不正确的UTF-8规范化的文件的处理。设置时,在扫描期间将这些文件重命名为正确归一化的形式。
文件名可以以许多不同的方式表示。一些系统使用扩展ASCII字符集,如ISO-8859-1(拉丁文),其他系统可能使用不同的编码来表示中文,俄文等。现代标准是在UTF-8编码中使用Unicode,即使文件系统本身不指定格式,例如在大多数类Unix系统上的情况。 Syncthing将拒绝同步文件,其名称不是以UTF-8编码的。
为了避免此类问题,Syncthing在运行时会自动纠正规范化错误,除非禁用此选项。
ignoreDelete

ignoreDelete是影响传入索引更新处理的高级文件夹设置。设置时,将忽略设置了删除标志的传入更新。
假设两个设备“A”和“B”共享一个文件夹。A设置了这个选项,B没有设置,B删除了文件时 A这边不会删,但同样这种设置可能会带来一些问题,因为B看不到已经删除的文件。
如果A修改B已删除的任何文件,更新将发送到B,B将下载现在更新的文件。
忽略两个设备之间的双向删除可能是一个混乱的配置。
## 文件版本控制功能解析
当从群集中删除或替换为较新版本时,Syncthing支持归档文件的旧版本。这被称为“文件版本控制”,并使用下面描述的可用版本控制策略之一。每个文件夹配置文件版本控制,默认为“无文件版本控制”,即不保留文件的旧副本。
回收站文件版本 
此版本控制策略模拟常见的“回收站”方法。当文件由于远程设备上的更改而被删除或替换时,它会被移动到.stversions文件夹中的回收站。如果具有相同名称的文件已经在垃圾桶中,则会被替换。 配置选项可用于清除早于指定天数的文件中的回收站。如果这被设置为正数天,文件将被删除,当他们已经在回收站那么长。将此设置为零可防止任何文件自动从回收站中移除。
简单文件版本化 
在远程设备上替换或删除时,将“简单文件版本控制”文件移动到.stversions文件夹(在共享文件夹中)。此选项还在标题为“保留版本”的输入中使用值,该输入告诉Syncthing应保留多少旧版本的文件。例如,如果将此值设置为5,如果文件在远程设备上替换5次,则在共享同一文件夹的其他设备上的“.stversions”文件夹中,该文件上将显示5个时间戳版本。
阶段文件版本化
使用“交错文件版本控制”文件也会在远程设备上替换或删除时移动到不同的文件夹(类似于“简单文件版本控制”),但是,如果版本超过最大数量或超过数字的间隔中允许的文件。 使用此版本控制方法,可以指定存储版本的位置,默认值为常规文件夹路径中的.stversions文件夹。如果您设置了自定义版本路径,请确保它位于与常规文件夹路径相同的分区或文件系统上,因为移动文件可能会失败。您可以使用绝对路径(建议这样做)或相对路径。相对路径相对于Syncthing的当前或启动目录进行解释。
使用以下间隔,并且它们各自具有将为每个保留的文件的最大数目。 
1小时 对于第一个小时,最近的版本每30秒保留一次。 
1天 对于第一天,最新版本每小时保留一次。 
30天 在前30天,最新版本每天保留。 
直到最大  最新版本是每周保存。 最大 保留版本的最长时间(以天为单位)。
例如,要在“.stversions”文件夹中保留替换或删除的文件一整年,请使用365.
如果只有10天,请使用10.
注意:设置为0以永久保留版本。

外部文件版本控制
 此版本控制方法将对外部命令(程序或脚本)做什么的决定委派给它。唯一的配置选项是命令的名称。这应该是绝对路径名。就在更换文件之前,该命令将使用两个参数运行:文件夹的路径和文件夹中文件的路径。
Unix的示例 假设我想保留每个文件的最新版本,因为它们被替换或删除;基本上我想要一个“垃圾桶”的行为。为此,我创建以下脚本并将其存储为/Users/jb/bin/onlylatest.sh(即我的主目录中的bin目录):
我必须确保脚本有执行权限(chmod 755 onlylatest.sh),然后配置Syncthing与上述路径作为命令名称。 假设我在〜/ Sync中有一个“default”文件夹,那个文件夹中有一个文件docs / letter.txt正在被替换或删除。该脚本将被调用,如果我从命令行运行这个:
脚本代码:
#!/bin/sh
set -eu
# Where I want my versions stored
versionspath=~/.trashcan
# The parameters we get from Syncthing
folderpath="$1"
filepath="$2"
# First ensure the dir where we need to store the file exists
outpath=`dirname "$versionspath/$filepath"`
mkdir -p "$outpath"
# Then move the file there
mv -f "$folderpath/$filepath" "$versionspath/$filepath"
###启用调试
调试必须启用能够捕捉轮廓。要启用调试,打开高级设置:
启用“调试”,“图形用户界面”下的设置,然后向下滚动并保存。无需重新启动计算机。

非凡网 博客

我只是帮你筛选价值。

你也许喜欢

发表评论