»
(008)CubeIDE实现USB外设*
(018)C99 的指针*
(019)C99 只有值赋值,没有move*
(022)POSIX线程库pthread的同步锁*
(023)POSIX线程库pthread的多线程*
(027)C99标准库中的计时与等待 *
(028)C语言中的高精度计算库GMP *
(029)C语言中的Web服务*
(030)C语言中的字符转码ICU*
(031)从几个方面显然C语言比C++效率高*
🖥️(001)异机备份低功耗自用Git服务器搭建
本文仅提供在家办公的程序员一个代码备份的方案:搭建异机备份代码的路由器U盘Git仓库。
搭建过程需要的设备为一台中等性能以上的路由器和一个高速耐用的U盘。
如果您的路由器原本不支撑OpenWrt路由器系统,请移步百度搜索在您的现有路由器上安装OpenWrt的解决方案。
如果您的路由器原本就是OpenWrt路由器,恭喜您,您的路由器可以做很多有用的事情。
先看吸引你的地方:
不论是远程的Git仓库还是本地的Git仓库,Git仓库的管理不是服务程序,而是静态的命令行命令,比如:git push命令和git pull命令。远程的git仓库下载到本地用的是linux自带的ssh服务。
以下是在OpenWrt路由器上安装和使用最简git服务的过程:
安装步骤为:
1、putty连接路由器的操作系统OpenWrt
用户名为root
密码为您的路由器的管理员密码
2、在路由器中插入U盘,判断U盘是哪个分区:
打入命令:df
显示内容中的U盘为/dev/sda4:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda4 30687104 32 30687072 0% /tmp/mountd/disk1_part1
3、判断U盘的文件系统路由器是否支持读写:
cd /tmp/mountd/disk1_part1
mkdir aaaaa
4、只有在必要的时候,再给U盘格式化(谨慎操作,如果U盘是FAT32文件系统,则不需要做以下操作,OpenWRT默认支持FAT32文件系统)
mkfs.ext4 /dev/sda4
5、自动挂载U盘为外置硬盘文件夹:
1)创建文件系统挂载点:mkdir /mnt/usb
2)修改/etc/config/目录下的fstab文件,加入U盘的自动挂载:
config mount
option target /mnt/usb
option device /dev/sda4
option fstype vfat
option options rw,sync
option enabled 1
配置完成后执行如下命令让其生效:
/etc/init.d/fstab enable
3)重启路由器
4)验证U盘已自动挂载入系统
df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/root squashfs 43776 43776 0 100% /rom
tmpfs tmpfs 245936 400 245536 0% /tmp
/dev/ubi0_2 ubifs 175124 24984 145300 15% /overlay
overlayfs:/overlay overlay 175124 24984 145300 15% /
tmpfs tmpfs 512 0 512 0% /dev
/dev/sda4 vfat 30687104 56 30687048 0% /mnt/usb
/dev/sda4 vfat 30687104 56 30687048 0% /tmp/mountd/disk1_part1
6、如果您的路由器硬盘FLASH特别小,需要挂载U盘为opkg的节点
1)修改/etc/opkg.conf
加入:
dest usb /mnt/usb
2)安装git程序到U盘
opkg install git --dest usb
注意:如果您的路由器特别强悍,相当于一台ARM主机(硬盘也足够大),那么可以直接在OpenWrt系统的界面 应用程序->软件包 中搜索并安装git。
7、继续注意:git基于ssh、不需要开启任何服务。
本地git会通过ssh调用服务器上的git命令来解析git-receive-pack、git-upload-pack等文件,来实现git文件的推送和拉取。
8、在OpenWrt的Linux服务器上初始化git仓库
cd /mnt/usb/git-repo
git init --bare project1
9、使用OpenWrt的root账号上传代码到路由器挂载的备份U盘
1)在笔记本电脑上,使用PuTTYGen生成双钥
2)生成之后,在OpenWrt路由器 -> luci -> 系统 -> 管理权 -> SSH密钥 中添加PuTTYGen生成的公钥:
(注意:是Public Key for passing into OpenSSH authorized keys file:中的那一段key)
比如:ssh-ed25519 A************************************************************************************hq eddsa-key-20240924
3)本地代码库中运行:
git remote remove origin
git remote add origin root@192.168.x.x:/mnt/usb/git-repo/project1
4)使用git
git add .
git commit -m "关联备份仓库"
git push --set-upstream origin master
输入root的密码即可上传代码
10、使用工具上传代码
1)可在TortoiseGit中配置origin的url为root@192.168.x.x:/mnt/usb/git-repo/project1
2)指定使用PuTTYGen生成的私钥ppk
3)保存配置后,即可使用TortoiseGit来上传和下载代码了
至此,以上已完成外挂U盘当Git仓库的操作。
以下观看Fat32的读写性能有多低:
11、外挂Fat32格式U盘写速度检测:
time dd if=/dev/zero of=test.dbf bs=8k count=100
100+0 records in
100+0 records out
real 0m 6.29s
user 0m 0.00s
sys 0m 0.04s
实际写速度:8k*100/6.29s=127k/s
12、外挂Fat32格式U盘读速度检测:
time dd if=/dev/sda4 of=/dev/null bs=8k count=1280
100+0 records in
100+0 records out
real 0m 0.03s
user 0m 0.00s
sys 0m 0.00s
实际读速度:8k*1280/0.03s=330M/s
13、U盘格式化为ext4格式后,写速度:
time dd if=/dev/zero of=./test.dd bs=8k count=1280
1280+0 records in
1280+0 records out
real 0m 0.03s
user 0m 0.00s
sys 0m 0.03s
8k*1280/0.03s=330M/s
14、U盘格式化为ext4格式后,读速度:
time dd if=./test.dd of=/dev/null bs=8k count=1280
1280+0 records in
1280+0 records out
real 0m 0.01s
user 0m 0.00s
sys 0m 0.00s
8k*1280/0.01s=1000M/s
15、更改为ext4格式后的U盘的读写速度有飞跃式地提高,读速度达到1GB/s,写速度达到33MB/s,基本上等于U盘的读写速度。
又一个需要注意的点是:git只适合存储代码等文本文件,不适合保存大文件,大文件用Samba,Samba比起git飞速。
16、使用其他账号来上传代码:
(这一章节原本打算继续深入归纳总结的,但是,不想写了,也不想深入去总结了,个人开发、自己用,以上配置过程已经足够了)
1)创建git组及git用户:
adduser git
addgroup git
adduser git git
(如果需要删除用户和组,则使用命令:deluser、delgroup)
2)禁用git用户的shell登录
编辑/etc/passwd中的以下行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
17、OpenWrt挂载U盘当Git或Samba服务器的其他注意内容:
1)外挂U盘自动挂载的功能需要在OpenWrt的软件仓库中安装block-mount模块,而后进行/etc/config/fstab文件的配置。
2)OpenWrt支持的所有配置功能的命令,都在/etc/init.d/目录下。
3)为了达到秒级的定时任务,需要以以下方式实现:
sync-per-5s.sh:
#!/bin/sh
while true
do
sync
sleep 5
#echo “synced” > /mnt/usb/synced.log
done
并在rc.local中加入:
/etc/sync-per-5s.sh 2>&1 > /dev/null &
4)为了防止OpenWrt的硬件CPU过热,还需要加入ARM64的CPU温度监测程序。
5)还有一个有用工具是调整分区大小的工具:fdisk和parted
18、树莓派4B硬件搭建无线AP(Access Point)的方法:
1)OpenWrt相关网络知识:
一个硬件设备<-必须对应->唯一的一个物理接口
逻辑接口的例子:loopback接口
(1)一个物理接口或者一个逻辑接口<->就是一个设备<->一个设备只有一个Mac地址,用于物理通信
(2)一个硬件接口(Interface)也就是一个Mac地址,可以绑定多个IP地址
(3)网卡的Mac地址是硬件串口交换数据的硬件地址,所以,一个网卡只有一个Mac地址,也就是对应一个硬件接口(Interface)
(4)地址解析协议,ARP协议:解析网络层地址来找寻数据链路层地址的网络传输协议,以通过物理串口发送数据
(5)局域网中的ARP广播:问当前网络中的所有节点,告诉自己在当前网络中谁的IP地址是xxx.xxx.xxx.xxx
(6)局域网中,一个网卡可以多次响应不停IP地址的ARP请求广播:告诉网络中的其他设备,自己的多个IP地址绑定
2)OpenWrt配置无线接入点(Access Point)步骤:
(1)增加网桥IP地址作为管理端IP比如:192.168.x.1/24以及192.168.x.2/24,修改网桥默认IP为192.168.1.2以区别上级路由器IP地址。
(2)配置网桥的网关地址为路由器地址:192.168.1.1。
(3)配置无线网卡的硬件通信Master服务,树莓派4B的Channel选择5240MHz(实际传输速率360Mbit/s,也就是45MByte/s,这个通道很稳定,速度也不慢)。
(4) 给无线网卡的Master服务配置一个接口,并给这个接口设置IP地址用于数据的TCP/IP传输,例如IP地址设置为192.168.2.3(必须与路由器的IP地址不在同一个网段上),网关设置为191.168.1.1(也就是上级路由器的IP地址)。
19、OpenWrt搭建Samba服务器,一定要在/etc/config/samba***中配置用户和密码:
option user ‘user’
option password ‘password’
20、爱国者U盘是好U盘。
对于创意,别人可以仿造;对于程序代码,会写的不只有我一个。所以,对于未创业的个人,何必担心盗贼的偷抢?代码完全可以放到装有其他应用的OpenWrt路由器的Git上。
21、树莓派4B硬件与高速移动硬盘有硬件冲突,所以,树莓派4B上没法使用高速硬盘,特别是没法在树莓派4B上使用SanDisk高速移动硬盘。
22、爱国者的U盘够用也足够快。