设置自动 fsck:
bash 复制代码 sudo tune2fs -c 1 /dev/mmcblk0p2
这个代码会设置策略,使每经过1次启动,就触发检查文件系统完整性。
另外,整个SD卡是:/dev/mmcblk0 为什么我们检查文件系统完整性,只检查:/dev/mmcblk0p2?
因为:
文件系统是建立在分区(partition)上的,不是在整个物理设备(disk)上的。
换句话说:
👉 /dev/mmcblk0 是 整张 SD 卡(物理设备)
👉 /dev/mmcblk0p1、/dev/mmcblk0p2 才是 其中的分区(逻辑卷)
👉 而文件系统(ext4、vfat等)只存在于分区内部。
所以:
- 检查文件系统完整性(
fsck)时,我们检查分区; - 而不是整张卡(整张卡还包括分区表本身)。
这条命令:
sudo tune2fs -c 1 /dev/mmcblk0p2只是告诉系统:
“这块 ext4 文件系统 每挂载一次,就强制跑一次 fsck 检查。”
也就是把:
- 最大挂载次数(max mount count)
从默认的几十次,改成了
1。
每个 ext 文件系统都有两个触发检查的“计数器”:
| 名称 | 含义 | 默认值 | 修改命令 |
|---|---|---|---|
| Mount Count | 当前已经挂载了多少次 | 不固定 | sudo tune2fs -l /dev/mmcblk0p2 查看 |
| Max Mount Count | 超过多少次强制检查 | 通常是 20~30 | sudo tune2fs -c N /dev/mmcblk0p2 |
| Check Interval | 距离上次检查超过多久自动检查 | 通常 6 个月 | sudo tune2fs -i 6m /dev/mmcblk0p2 |
如果你执行:
sudo tune2fs -c 1 /dev/mmcblk0p2就相当于:
“每次挂载
/dev/mmcblk0p2后下次启动时都强制跑一次fsck。”
而不是“现在马上检查”。 它修改的其实是文件系统的元数据标志。
应该用:
sudo fsck -f /dev/mmcblk0p2说明:
-f表示“强制”检查;fsck才是真正执行扫描、修复的命令;tune2fs只是设置策略或阈值。
-
查看当前策略:
sudo tune2fs -l /dev/mmcblk0p2 | grep -E "Mount count|Check interval"
-
设置:
-
每 10 次挂载检查一次:
sudo tune2fs -c 10 /dev/mmcblk0p2
-
或者每 3 个月检查一次:
sudo tune2fs -i 3m /dev/mmcblk0p2
-
-
立刻手动检查一次(可在下次重启前):
sudo fsck -f /dev/mmcblk0p2
改回合理值即可,让它定期检查,而不是每次都跑:
sudo tune2fs -c 20 -i 3m /dev/mmcblk0p2
解释:
-c 20→ 每挂载 20 次触发一次;-i 3m→ 或者每 3 个月触发一次;- 两者满足任一条件都会执行。
这是树莓派等嵌入式设备的常见平衡配置:
✅ 启动快 ✅ 定期自检 ✅ 不会频繁卡启动
| 命令 | 用途 |
|---|---|
tune2fs -c N |
设置多少次挂载后强制 fsck |
tune2fs -i 6m |
设置多长时间后强制 fsck |
fsck -f |
立即检查修复文件系统 |
tune2fs -l |
查看当前文件系统参数 |