![fat-fs(mmcblk0p1): 卷未正确卸载。某些数据可能已损坏。请运行 fsck](https://linux22.com/image/223961/fat-fs(mmcblk0p1)%3A%20%E5%8D%B7%E6%9C%AA%E6%AD%A3%E7%A1%AE%E5%8D%B8%E8%BD%BD%E3%80%82%E6%9F%90%E4%BA%9B%E6%95%B0%E6%8D%AE%E5%8F%AF%E8%83%BD%E5%B7%B2%E6%8D%9F%E5%9D%8F%E3%80%82%E8%AF%B7%E8%BF%90%E8%A1%8C%20fsck.png)
我的定制系统启动时有这个报警,说明我mmcblk0p1
关机时没有卸载分区。如何修改/etc/fstab
为停电时自动卸载?
部分打印dmesg
:
...
[ 6.488912] CAN device driver interface
[ 6.502179] f81604_probe: Fintek F81604 driver version: v1.19
[ 6.550910] f81604 1-8:1.0: Channel #0 registered as can0
[ 6.597869] f81604_is_hw_disable: ch: 1, i: 100, r: 100
[ 6.597872] f81604 1-8:1.0: f81604_probe: channel 1 is h/w diabled
[ 6.597905] usbcore: registered new interface driver f81604
[ 6.613718] EXT4-fs (mmcblk0p2): recovery complete
[ 6.614116] EXT4-fs (mmcblk0p2): mounted filesystem fbc7620b-3aec-4ad5-8f01-b1d8f2006a4c r/w with ordered data mode. Quota mode: none.
[ 6.615305] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[ 6.637649] i2c i2c-0: ioctl, cmd=0x705, arg=0x7ffc39b81308
[ 6.637663] i2c i2c-0: ioctl, cmd=0x703, arg=0x74
[ 6.637667] i2c i2c-0: ioctl, cmd=0x720, arg=0x7ffc39b812d0
...
块:
root@dobot:~# blkid
/dev/mmcblk0p3: UUID="2692a861-c28c-4127-a037-dd1756b28da0" TYPE="ext4"
/dev/mmcblk0p2: UUID="fbc7620b-3aec-4ad5-8f01-b1d8f2006a4c" TYPE="ext4"
/dev/mmcblk0p1: UUID="C377-C6E3" TYPE="vfat"
/etc/fstab:
root@dobot:~# cat /etc/fstab
#device mount-point type options dump fsck order
UUID=2692a861-c28c-4127-a037-dd1756b28da0 / ext4 defaults 0 1
UUID=fbc7620b-3aec-4ad5-8f01-b1d8f2006a4c /boot ext4 defaults 0 1
UUID=C377-C6E3 /boot/efi vfat umask=0077 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /var tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs default 0 0
mdev /dev ramfs defaults 0 0
devpts /dev/pts devpts defaults 0 0
答案1
由于市场上没有可以预测的设备全部在断电真正发生之前,解决这个问题的典型方法就是使用不间断电源(简称 UPS)。
当外部电源出现故障时,UPS 会向系统发出警报,然后系统可以在 UPS 电池耗尽之前以受控方式关闭。
如果您不想要这样的解决方案,那么有一个解决方法无法提供完整的保护,但可能就足够了:
/boot/efi
仅在两种情况下需要:
- 启动时(只读访问权限就足够了)
- 更新引导加载程序时(需要读写访问权限)
如果您可以向系统更新机制添加功能,/boot/efi
以便在安装引导加载程序更新时进行挂载,然后卸载它,则可以在正常使用中将其保留为卸载状态(只需noauto
在 中为其添加一个挂载选项/etc/fstab
)。
如果您使用包管理器向自定义系统提供更新,则只需将预安装脚本添加到引导加载程序包中以测试是否/boot/efi
已安装,如果没有,则安装它并设置一个标志以记住它已这样做;如果预安装脚本设置了该标志,则安装后脚本将再次卸载它。
如果您有类似的内容grub.cfg
,/boot/efi
您可能还需要修补grub2-mkconfig
或类似的启动配置更新工具,以便/boot/efi
在需要时自动安装和卸载。
这应该大大减少文件系统需要安装和写入的时间/boot/efi
,从而阻止此错误的发生,除非在更新引导加载程序或其配置期间断电。这种情况应该是极其罕见的。
您可能还想将 的fsck order
数字字段/etc/fstab
从 0 更改为 2 /boot/efi
。如果您的系统上有/sbin/fsck.vfat
,这可能允许系统在断电后下次启动时自动修复此错误。