使用syncthing+树莓派搭建工作家庭同步盘

自从百度同步盘GG了以后,就再也没用同步盘工具了,东西都存在网盘,但拉取的速度实在太慢。

家里刚好有一块闲置的硬盘,一个树莓派4,来组一个家庭私有同步盘。

31a85541b1c6e37d42335260a9c45cf.jpg

一、给树莓派刷一个新的系统

微信截图_20210907205220.png

因为不需要用到图形界面,这里直接下载的Lite版。

微信截图_20210907210024.png

用Etcher写入镜像。刷完后在根目录下创建空白ssh文件,开启ssh访问。

路由器上找到树莓派的IP地址,用ssh登录后,先修改root密码

sudo passwd root

二、挂载硬盘

1、查看当前插入的硬盘

fdisk -l

image.png

可以看到此处盘符为:/dev/sda,包含了一个NTFS分区

2、格式化硬盘分区

sudo mkfs -t ext4 /dev/sda1

image.png

3、挂载硬盘

(1)创建挂载目录

mkdir /home/pi/wd

(2)赋权

chmod 777 /home/pi/wd
chown -R pi:pi /home/pi/wd

(3)挂载

mount /dev/sda1 /home/pi/wd

4、查看挂载情况

df -h

image.png

5、设置开机自动挂载

(1)查看硬盘的UUID

blkid

image.png

(2)记录下这个UUID:5d7cd7b7-bc96-428d-bb13-402cf50627b1

(3)打开编辑挂载文件

nano /etc/fstab

(4)在最后一行加入

UUID=5d7cd7b7-bc96-428d-bb13-402cf50627b1 /home/pi/wd            ext4    defaults 0       0

(5)保存退出

(6)执行挂载

sudo mount -a

image.png

(7)测试硬盘速度(可选)

安装hdparm

sudo apt install hdparm

执行测试

hdparm -tT --direct /dev/sda

image.png

三、安装syncthing

(一)到github上下载最新版

https://github.com/syncthing/syncthing/releases/latest

image.png

树莓派应选择arm版本,直接下载到树莓派上

(二)解压

tar -zxvf syncthing-linux-arm-v1.18.2.tar.gz

(三)重命名目录

mv syncthing-linux-arm-v1.18.2 syncthing

(四)进入 syncthing 目录

cd syncthing

(五)给主程序加上执行权限

chmod +x syncthing

(六)运行主程序

~/syncthing/syncthing

运行后按Ctrl+C退出,会自动生成一个配置文件

(七)修改配置文件

sudo nano /home/pi/.config/syncthing/config.xml

(八)将监听地址127.0.0.1:8384改为0.0.0.0:8384

(九)再次运行主程序

~/syncthing/syncthing

(十)配置开机启动

1.创建启动文件

sudo nano /etc/init.d/syncthing

2.粘贴以下内容(DAEMON_PATH为主程序地址,请根据实际情况修改)

#!/bin/sh
### BEGIN INIT INFO
# Provides:          Syncthing
# Required-Start:    $local_fs $remote_fs $network
# Required-Stop:     $local_fs $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Syncthing
# Description:       Syncthing is for backups
### END INIT INFO
  
# Documentation available at
# http://refspecs.linuxfoundation.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html
# Debian provides some extra functions though
. /lib/lsb/init-functions
  
DAEMON_NAME="syncthing"
DAEMON_USER=pi
DAEMON_PATH="/home/pi/syncthing/syncthing"
DAEMON_OPTS=""
DAEMON_PWD="${PWD}"
DAEMON_DESC=$(get_lsb_header_val $0 "Short-Description")
DAEMON_PID="/var/run/${DAEMON_NAME}.pid"
DAEMON_NICE=0
DAEMON_LOG='/var/log/syncthing'
  
[ -r "/etc/default/${DAEMON_NAME}" ] && . "/etc/default/${DAEMON_NAME}"
  
do_start() {
  local result
  
    pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
    if [ $? -eq 0 ]; then
        log_warning_msg "${DAEMON_NAME} is already started"
        result=0
    else
        log_daemon_msg "Starting ${DAEMON_DESC}" "${DAEMON_NAME}"
        touch "${DAEMON_LOG}"
        chown $DAEMON_USER "${DAEMON_LOG}"
        chmod u+rw "${DAEMON_LOG}"
        if [ -z "${DAEMON_USER}" ]; then
            start-stop-daemon --start --quiet --oknodo --background \
                --nicelevel $DAEMON_NICE \
                --chdir "${DAEMON_PWD}" \
                --pidfile "${DAEMON_PID}" --make-pidfile \
                --exec "${DAEMON_PATH}" -- $DAEMON_OPTS
            result=$?
        else
            start-stop-daemon --start --quiet --oknodo --background \
                --nicelevel $DAEMON_NICE \
                --chdir "${DAEMON_PWD}" \
                --pidfile "${DAEMON_PID}" --make-pidfile \
                --chuid "${DAEMON_USER}" \
                --exec "${DAEMON_PATH}" -- $DAEMON_OPTS
            result=$?
        fi
        log_end_msg $result
    fi
    return $result
}
  
do_stop() {
    local result
  
    pidofproc -p "${DAEMON_PID}" "${DAEMON_PATH}" > /dev/null
    if [ $? -ne 0 ]; then
        log_warning_msg "${DAEMON_NAME} is not started"
        result=0
    else
        log_daemon_msg "Stopping ${DAEMON_DESC}" "${DAEMON_NAME}"
        killproc -p "${DAEMON_PID}" "${DAEMON_PATH}"
        result=$?
        log_end_msg $result
        rm "${DAEMON_PID}"
    fi
    return $result
}
  
do_restart() {
    local result
    do_stop
    result=$?
    if [ $result = 0 ]; then
        do_start
        result=$?
    fi
    return $result
}
  
do_status() {
    local result
    status_of_proc -p "${DAEMON_PID}" "${DAEMON_PATH}" "${DAEMON_NAME}"
    result=$?
    return $result
}
  
do_usage() {
    echo $"Usage: $0 {start | stop | restart | status}"
    exit 1
}
  
case "$1" in
start)   do_start;   exit $? ;;
stop)    do_stop;    exit $? ;;
restart) do_restart; exit $? ;;
status)  do_status;  exit $? ;;
*)       do_usage;   exit  1 ;;
esac


3.加可执行权限

sudo chmod +x /etc/init.d/syncthing

4.添加默认启动

sudo update-rc.d syncthing defaults

5.启动服务

sudo service syncthing start

6.打开浏览器访问

image.png

7.更改默认文件夹

image.png

8.更改监控目录数量限制

echo "fs.inotify.max_user_watches=204800" | sudo tee -a /etc/sysctl.conf

9.配置nginx(这一步可以省略)

在server{}中

root /home/pi/wd;
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
charset utf-8,gbk;  # 避免中文乱码

10.搭建syncthing的中继服务器和全球发现服务器(对公网同步有需求)

参考:http://relyn.cn/share/69