本帖最后由 yinzhennan 于 2020-6-9 10:26 编辑
0. 前言
这是我第三次折腾 树莓派装搞智能家装了,希望也是最后一次. 这个希望就是来自于本篇的内容 overlayfs只读文件
总之,在几次ssh到树莓派,运行命令出些莫名其妙的错误,然后重装系统之后,问题的原因最终锁定在了意外断电上(之前还以为是sd不好,重新买了sd卡)
在考量过魔改mini充电宝,购买小型ups,电池扩展等方案后,最后发现还是 overlayfs 最香。
(本文参考: https://blog.csdn.net/zhufu86/article/details/78906046 原理什么的可以进去看下,我这里只写操作步骤)
作为一个系列,会包含以下篇章:
虽然是系列里的一篇,但稳定的需求是独立的。你也可以在你已经完备的树莓派系统上搞起只读,以备不测。
不兜圈子了,下面搞起:
1. 禁用交换空间
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove
2. 更新系统,保证系统为最新状态
如果你是刚从系统篇那里搞完跳过来的,这步可以略过
sudo apt-get update
sudo apt-get upgrade
3. 初始化脚本
wget https://gitee.com/yinzhennan/script-share/raw/master/overlayRoot.sh
sudo cp overlayRoot.sh /sbin/overlayRoot.sh
sudo chmod a+x /sbin/overlayRoot.sh
4. 追加启动命令
cp /boot/cmdline.txt /boot/cmdline.txt.bak
sed -i 's/\($\)/ init=\/sbin\/overlayRoot.sh/g' /boot/cmdline.txt
5. 修改/boot只读
cp /etc/fstab /etc/fstab.bak
sed -i 's/\/boot vfat defaults/\/boot vfat defaults,ro/g' /etc/fstab
6. 重启,激活只读
好了,现在你的树莓派已经无敌了。无论是油炸还是火烤都无所畏惧了(免责声明...)。
随便改点什么内容,然后reboot或者直接拔电,会发现之前改的内容都还原了。一方面系统只读了,另一方面就是不再惧怕意外断电了(目的所在)。
当然,我们后面还有需要装其他软件或者更新系统,所以下面是切换 可写/只读 两种模式的方法:
切换可写
sudo mount -o remount,rw /boot
sed -i 's/ init=\/sbin\/overlayRoot.sh//g' /boot/cmdline.txt
reboot
切换只读
sudo mount -o remount,rw /boot
sed -i 's/\($\)/ init=\/sbin\/overlayRoot.sh/g' /boot/cmdline.txt
reboot
我们可以把这两个切换的命令定义成函数(注意在可写模式下操作) :
cat << EOF >> ~/.bashrc
function reboot_rw(){
sudo mount -o remount,rw /boot
sed -i 's/ init=\/sbin\/overlayRoot.sh//g' /boot/cmdline.txt
reboot
}
function reboot_ro() {
sudo mount -o remount,rw /boot
sed -i 's/\($\)/ init=\/sbin\/overlayRoot.sh/g' /boot/cmdline.txt
reboot
}
EOF
这样直接执行 reboot_rw/reboot_ro 就可以在可写和只读间切换了,这比插拔跳线什么的方便的多.
看到这里相信你已经明白了,只读模式下是安全的,不怕意外断电。但是只读模式下所有的修改重启后就会被还原。
可写模式下修改能够真正生效,但是可写模式下惧怕意外断电。所以可写模式操作完成之后,应尽快切换回只读模式reboot重启,以保证数据安全。
另外,为了能方便分清楚当前是只读还是可写模式,我们加两行脚本。 (注意在可写模式下操作):
cat << EOF >> ~/.bashrc
find_overlay=\`mount | grep overlay\`
if [ \${#find_overlay} -gt 0 ]; then
PS1="[OVL] \$PS1"
fi
EOF
切换到只读模式下,命令行前面就会出现 [OVL] 表示当前是只读模式,效果如下
好了,本篇就到这了。有了稳定可靠的环境,下一篇我们开始通过docker装hass和nodered。
|