优秀网页翻译:将您的 Raspberry Pi 文件系统设为只读 (Raspbian Buster)

原文链接:
https://medium.com/swlh/make-your-raspberry-pi-file-system-read-only-raspbian-buster-c558694de79

在这里插入图片描述
Raspberry Pi 通常用于信息面板应用程序,其唯一目的是将预加载的 HTML5 内容从 SD 卡提供到其连接的 HDMI 屏幕。这是一种非常常见的设置,但有时您会遇到因 SD卡损坏而导致的奇怪问题。

本指南最初是为 Raspbian Stretch 创建的,并已针对 Raspbian Buster 进行了更新。您仍然可以在[此处](https://medium.com/@andreas.schallwig/how-to-make-your-raspberry-pi-file-system-read-only-raspbian-stretch-80c0f7be7353)找到 Raspbian Stretch 的指南。

在我们的案例中,通常在大约 6 个月后,我们会遇到随机崩溃并找到如下日志消息:

end_request: I/O error, dev mmcblk0, sector 148225
mmcblk0: error -110 transfering data, sector 148226, nr 254, response 0x900, card status 0xb00

这里发生了什么?!

后来通过谷歌快速搜索,我们知道这些是 SD 卡坏的典型迹象。这些卡不是为 24/7 运行而设计的,并且会在一段时间后开始积累坏扇区。

此外,kiosk 应用程序通常没有正确关闭,而是简单地拔掉了电源。重复此操作会增加文件系统损坏的风险。

幸运的是,在 Raspbian Buster 上,您可以强制文件系统进入“只读模式”。在只读模式下,系统无法将任何数据写入您的 SD 卡,从而显着延长卡的使用寿命。

为此,我们需要采取以下步骤:

  • 配置操作系统以将所有临时文件写入驻留在内存中的“tmpfs”文件系统。
  • 配置其他服务以也使用 tempfs 文件系统。
  • 将所有系统日志文件重定向到内存。
  • 添加一些可选脚本以打开/关闭只读模式

让我们开始吧

重要提示:在学习本教程之前,您绝对应该创建 SD 卡的备份映像。我已经在无数 Pi 上成功地使用了这种方法,但您仍然需要自担风险。如果有任何问题不要怪我😉

准备工作

通过 SSH 登录到您的 Raspberry。我建议您首先再次更新您的 Pi 以获取所有最新的软件包:

sudo apt-get update && apt-get upgrade

做一些整理并删除以下软件包。如果一开始没有安装这些,则跳过此步骤:

sudo apt-get remove --purge triggerhappy logrotate dphys-swapfile

清理你的包:

sudo apt-get autoremove --purge

禁用交换和文件系统检查并将其设置为只读

编辑文件 /boot/cmdline.txt 并在行尾添加以下三个单词:

fastboot noswap ro

该行现在应该类似于:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 lift=deadline rootwait fastboot noswap ro

更换您的日志管理器

我们希望避免将任何系统日志文件写入 SD 卡。因此,我们会将日志文件的标准 syslog 输出删除到 /var/log,并用busybox内存记录器替换它:

sudo apt-get install busybox-syslogd
sudo apt-get remove --purge rsyslog

提示:从现在开始使用 sudo logread 检查您的系统日志。

将文件系统设为只读并添加临时存储

更新文件 /etc/fstab 并将 ,ro 标志添加到所有块设备。更新后的文件应如下所示:

proc                  /proc     proc    defaults             0     0
PARTUUID=fb0d460e-01  /boot     vfat    defaults,ro          0     2
PARTUUID=fb0d460e-02  /         ext4    defaults,noatime,ro  0     1

还要在文件末尾添加临时文件系统的条目:

tmpfs /tmp tmpfs nosuid,nodev 0 0
tmpfs /var/log tmpfs nosuid,nodev 0 0
tmpfs /var/tmp tmpfs nosuid,nodev 0 0

将一些系统文件移动到临时文件系统

注意:这部分不同于以前的 Raspbian 版本(Stretch 等)。在 Raspbian Buster 上,不要移动 /var/lock 和 /var/run 目录,因为它们已经符号链接到 tmpfs 目录。您可以在 Debian Buster tmpfs 文档中阅读有关这些更改的更多信息。
sudo rm -rf /var/lib/dh​​cp /var/lib/dh​​cpcd5 /var/spool /etc/resolv.conf
sudo ln -s /tmp /var/lib/dh​​cp
sudo ln -s /tmp /var/lib/dh​​cpcd5
sudo ln -s /tmp /var/spool
sudo touch /tmp/dhcpcd.resolv.conf
sudo ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf

更新 systemd 随机种子

将随机种子文件链接到 tmpfs 位置:

sudo rm /var/lib/systemd/random-seed
sudo ln -s /tmp/random-seed /var/lib/systemd/random-seed

编辑服务配置文件 /lib/systemd/system/systemd-random-seed.service 以在启动时创建该文件。在 [Service] 部分下添加行 ExecStartPre=/bin/echo "" >/tmp/random-seed

修改后的 [Service] 部分应如下所示:

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/echo "" >/tmp/random-seed
ExecStart=/lib/systemd/systemd-random-seed load
ExecStop=/lib/systemd/systemd-random-seed save
TimeoutSec=30s

此时重新启动后,您应该有一个处于只读模式的工作 Raspberry Pi 👋 👋 👋。干杯🍺!
可选:添加一些有用的命令来在 RO 和 RW 模式之间切换

此步骤是可选的,但在您需要更新或调试系统时,可以更方便地在只读和读写模式之间切换。

在这里,我们创建了两个 shell 命令 ro(只读)和 rw(读写),可以随时在模式之间切换。此外,它还会在您的命令提示符中添加一个指示器以显示当前模式。

编辑文件 /etc/bash.bashrc 并在末尾添加以下行:

set_bash_prompt() {    
fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p")    
PS1='\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
}
alias ro='sudo mount -o remount,ro / ; sudo mount -o remount,ro /boot'
alias rw='sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot'

PROMPT_COMMAND=set_bash_prompt

最后确保文件系统在您注销后恢复为只读状态。编辑(或创建)文件 /etc/bash.bash_logout 并在末尾添加以下行:

mount -o remount,ro /
mount -o remount,ro /boot

你完成了!现在只需重新启动系统:

sudo reboot

❤️ 非常感谢您的阅读! I️如果您有任何意见或建议,请在评论中开始对话。 ❤️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值