“搭建了一个公司内部使用的个人资料分享服务器,使用千兆网络一分二分线器和比特米盒,刨除硬盘和人工,成本七八十,还是比较方便的。”
上图来自@画心人
本文关联文章:
吐槽一下,飞牛系统ARM版依然吃配置性能,发热量略大,即便是刷机后依次执行sudo-i和fnnas-swap 1甚至fnnas-swap 2也不行,有朋友表示比特米盒物理扩容到2G内存不卡顿,而原装1G内存不能启动Docker,否则随时崩溃,拔电重启正常,然后无限循环。
下图就是处理器温度71℃,处理器98%,可能精调风扇阈值也能继续用,需要深入研究,暂时搁置了。
目前比特米盒最稳定的NAS系统,还是HiNAS和CasaOS系统,本文示例为HiNAS系统,正常操作都要在终端后台,一通则百通。
实现最基础的需求,当主盘sda1数据更新,则副盘sdb1同步更新。也就是数据自动同步,不用考虑各种RAID模式。同时当两个硬盘都没有读写操作一段时间后,自动将硬盘休眠,延长硬盘寿命。
一、数据同步
HiNAS系统的相关命令与其他系统可能会有差异,但原理一致,在此记录并供参考。
首先查看当前磁盘的挂载情况,输入
df -H
磁盘文件系统路径为 /dev/sda1 和 /dev/sdb1 ,默认挂载路径为/mnt/sda1 和 /mnt/sdb1 ,这样也是最方便的,如果出现状况,挂载路径不一致,甚至出现了很长的挂载名称【一般是磁盘的序列号】,可以查看文章第二部分的修改挂载路径方法。
然后可以更新系统,可选前缀sudo保权限平安,并安装必备组件rsync和lsyncd 。
apt update && apt upgrade -y
apt install rsync -y
apt install lsyncd -y
HiNAS系统默认支持vim文本编辑器,如果不习惯用,可以安装nano文本编辑器,输入
apt install nano -y
下方代码仅能实现手动同步,需要自动同步可以跳过阅读分隔线之间的内容,但依然建议了解。
安装完毕后,创建并编辑一个脚本文件,输入
vim /root/sync_sda1_to_sdb1.sh
或者
nano /root/sync_sda1_to_sdb1.sh
这里我把文件新建于 /root 路径下,你也可以选择其他路径。
输入:
#!/bin/bash
rsync -av --delete --exclude=".*" /mnt/sda1/ /mnt/sdb1/
以上两个路径可以自由调整,实现仅被指定的文件夹可以被同步,其他文件夹不做备份,注意路径末尾的 / 符号不可删除,而 .* 表示排除隐藏文件,不要修改为 * 或者 *.* 。如果你的路径名称包含空格,还要注意添加双引号。
如果对两种文本编辑器都不熟悉,也可以使用cat命令进行输入,但还是需要先运行文本编辑命令,创建文件后直接保存退出。
依次输入以下四行:
cat > /root/sync_sda1_to_sdb1.sh << 'EOF'
#!/bin/bash
rsync -av --delete --exclude=".*" /mnt/sda1/ /mnt/sdb1/
EOF
给这个新文件添加权限,输入
chmod +x /root/sync_sda1_to_sdb1.sh
然后运行以下脚本,提前在sda1磁盘中放入几个文件作为测试
/root/sync_sda1_to_sdb1.sh
如果没有安装 rsync 会报错:
如果权限配置失败会报错:
成功则会同步正常,并显示如下:
配置lsyncd功能为自动同步,它仍然需要调用rsync功能,得提前安装好。
继续创建目录和配置文件,因为etc路径权限要求高,命令必须带有前缀 sudo ,输入:
sudo mkdir -p /etc/lsyncd/
sudo nano /etc/lsyncd/lsyncd.conf
加入文本并保存退出:
settings {
maxProcesses = 1
}
sync {
default.rsync,
source = "/mnt/sda1/",
target = "/mnt/sdb1/",
rsync = {
_extra = { "-av", "--delete", "--exclude=.*" }
},
delay = 10
}
maxProcesses = 1表示该进程只允许同时运行一个,防止重复同步。
然后测试同步运行效果,输入:
lsyncd /etc/lsyncd/lsyncd.conf
如何使其自动运行实时监控?
下图的命令可以略过,测试无效。
实际应该使用下方命令,适用于HiNAS系统,重启后自动运行lsyncd服务,实时监控文件变化并自动同步。
考虑到开机自动运行lsyncd时,磁盘可能还未挂载完成,导致lsyncd找不到 /mnt/sda1/和/mnt/sdb1 而退出命令,所以需要创建带延时和挂载检查的启动脚本。
启动 lsyncd 并输出日志:
cat > /root/start_lsyncd.sh << 'EOF'
#!/bin/sh
sleep 60
if mount | grep -q "/mnt/sda1" && mount | grep -q "/mnt/sdb1"; then
killall -9 lsyncd > /dev/null 2>&1
lsyncd /etc/lsyncd/lsyncd.conf
echo "[$(date)] lsyncd started successfully" >> /var/log/lsyncd.log
else
echo "[$(date)] Disks not mounted, lsyncd start failed" >> /var/log/lsyncd.log
fi
EOF
赋予执行权限:
chmod +x /root/start_lsyncd.sh
写入定时任务:
echo '@reboot root /root/start_lsyncd.sh >> /var/log/lsyncd.log 2>&1' >> /etc/crontab
验证运行状态:
cat /etc/crontab
双保险写法,建议两个都整上:
chmod +x /etc/rc.local
sed -i '/^exit 0/i \
sleep 60\n\
lsyncd /etc/lsyncd/lsyncd.conf\n\
' /etc/rc.local
查看和验证运行状态:
ps aux | grep lsyncd
tail -f /var/log/lsyncd.log
二、挂载路径
确保存在挂载路径,没有就新建,输入:
sudo mkdir -p /mnt/sda1
sudo mkdir -p /mnt/sdb1
接着查看硬盘信息,输入:
blkid
mmcblk1p1是内置存储的分区,sda1和sdb1是内置或者外挂的硬盘,记录对应的UUID。
然后输入:
sudo nano /etc/fstab
文本末尾输入并保存退出,注意修改为你自己的UUID和挂载路径。
# /mnt/sda1
UUID=22f063f5-9723-49ad-b158-b8259e43951d /mnt/sda1 ext4 defaults,noatime 0 0
# /mnt/sdb1
UUID=c19a93bb-8e89-41dd-ac46-40947e7e98ad /mnt/sdb1 ext4 defaults,noatime 0 0
ext4表示最稳定的linux文件系统,按需求修改,如果想要ntfs,可以修改为ntfs-3g;defaults表示默认的各种基础挂载选项;noatime表示关闭文件访问时间记录;最后两个0分别表示不使用dump工具备份和不进行开机文件系统检查。
卸载原来的挂载路径。
sudo unmount /media/devmon/XXXXXX
XXXXXX表示你当前的随机磁盘名,注意修改不要照抄。
重新挂载磁盘。
sudo mount -a
验证结果:
df -H
如果重启设备后仍然出现自动挂载,可以关闭devmon服务。
sudo systemctl stop devmon
sudo systemctl disable devmon
三、硬盘休眠
网络推荐两种服务,hdparm比较基本,而hd-idle可以识别读写状态。
| 维度 | hdparm | hd-idle | | --- | --- | --- | | 核心定位 | 硬盘参数配置工具(含休眠设置) | 专门监控磁盘 idle 时间并触发休眠的守护进程 | | 工作方式 | 一次性写入硬盘固件的 APM / 休眠时间 | 持续后台监控磁盘读写,空闲超时后发指令休眠 | | 休眠触发 | 硬盘内部固件控制,依赖硬盘自身逻辑 | 由系统进程监控,精确控制 idle 时间 | | 兼容性 | 对 SATA/IDE 硬盘兼容性好,部分 USB 硬盘不支持 | 对 SATA/USB 硬盘支持更广泛,可自定义指令 | | 自启复杂度 | 需要写脚本 + 自启,手动设置参数 | 可通过命令行 / 配置文件启动,自启更可控 | | 资源占用 | 无后台进程,仅设置时占用资源 | 轻量后台进程,几乎不占 CPU / 内存 | | 控制精度 | 只能设置 5 秒 / 30 分钟档位的时间 | 可精确到秒级(如 600 秒 = 10 分钟) | | 典型场景 | 快速设置硬盘休眠、手动强制休眠、查询状态 | 长期运行的 NAS / 服务器,需要精确控制 idle 时间 |
我这里选择使用hd-idle,安装输入:
sudo apt install hd-idle -y
至于hdparm,可以安装然后不调用它执行休眠,而是用于读取休眠状态。
sudo apt install hdparm -y
安装服务也有写法是
sudo apt-get install **** -y
直接写入配置文件,注意要确定你有/etc/default目录,如果没有就换一个有的目录。
cat > /etc/default/hd-idle << 'EOF'
HD_IDLE_DEVICES="/dev/sda /dev/sdb"
HD_IDLE_IDLE_TIME=600
HD_IDLE_VERBOSE=1
START_HD_IDLE=true
EOF
重启服务并允许。
/etc/init.d/hd-idle restart
/etc/init.d/hd-idle enable
测试安装结果:
which hd-idle
手动启动并查看报错,先停止可能残留的进程,然后前台启动,直接看输出。这段代码慎用,因为会运行很久。
killall -9 hd-idle > /dev/null 2>&1
hd-idle -i 600 -a /dev/sda -a /dev/sdb -d
强制运行的代码:
/etc/init.d/hd-idle start
ps | grep hd-idle
文件提权:
chmod +x /root/start_hd_idle.sh
写入新的自启动配置:
echo '@reboot root /root/start_hd_idle.sh >> /var/log/hd-idle.log 2>&1' >> /etc/crontab
如果需要清空旧的 hd-idle 自启配置:
sed -i '/hd-idle/d' /etc/crontab
写入方式二,可以都整上,先确保rc.local有执行权限。
chmod +x /etc/rc.local
sed -i '/^exit 0/i \
/root/start_hd_idle.sh\n\
' /etc/rc.local
手动启动服务:
/root/start_hd_idle.sh
查看启动日志:
cat /var/log/hd-idle.log
查看硬盘休眠状态(可选,需安装 hdparm)
hdparm -C /dev/sda
hdparm -C /dev/sdb
输出 standby 代表硬盘已休眠,active/idle 代表运行中。
重启机器后验证自启:
pgrep hd-idle
或者
ps | grep hd-idle
|
参数
|
作用
|
示例
|
| --- | --- | --- |
| -i 600 |
空闲时间(秒)
| -i 300
→ 5 分钟
|
| -a sda |
指定要监控的硬盘
| -a sdc
→ 监控 sdc
|
| -d |
调试模式(输出日志)
|
加在命令末尾即可
|
| -p |
后台运行(必加)
|
无替代参数
|
本公众号发表的所有内容仅代表个人观点,和任何机构、组织或者第三方都没有关系,绝对没有歌颂或抨击任何个体或群体的意图。
本公众号会尽力确保发布内容的准确性和完整性,但无法保障所有信息的及时性或者可靠性。分享的各种信息只是提供参考,不能当作专业的技术指导,是否有效还请自行判断。
本公众号会不定期分享一些资源链接,只是为了提供工作或生活的便利,各位读者使用这些资源的时候请自行承担风险,建议搭配沙盒软件或虚拟系统运行。如果因此导致各位读者的数据和隐私安全损害,本公众号无力负责。
本公众号发布的文字、图片、音乐、视频等素材,部分来源于互联网,在此尊重所有原创作者的合理权益,默认会鸣谢作者或提供原始链接,如有疏漏存在侵权请联系我删除。
本公众号保留随时对发布内容进行修改、删除或者更新的权利。
感谢各位读者的阅读、支持与理解,如果符合您的需求或爱好,烦请关注并「设为星标」。