Linux报错Read-only file system的问题处理
前言
吐槽完赚钱宝二代(ws1508)的鸡肋配置以后,今天还是不太甘心,想来想去,最后给它刷了支持nand的那版固件,基于debian 10(buster),内核3.10。
这版固件有很多先天不足:
- 内核太老
- 只能识别4GB的nand存储空间(虽然我俩机器的包装盒上都标了32GB的nand存储)
- debian 10(buster)已经EOL,源仓库已经不再更新,里面的包都太老了
但如果能接受以上这些缺点,似乎也算是一个不错的选择。毕竟那个珍贵的usb2.0接口需要用来外挂数据盘。
装samba测试了一下,可以跑满百兆带宽,也不会出现缓存写满以后卡io导致系统假死的问题。但就算跑满了百兆也就10~12MB/s而已,不堪大用。
但是
没错,重点来了,系统直刷nand,我体验了2天以后,最大的问题是:nand很容易出现坏块!!!!
这个问题非常致命,当系统检测到nand坏块以后会报错errors,然后这版固件/etc/fstab
配置的挂载参数中,有一个errors=remount-ro
,也就意味着一旦使用过程中碰到坏块的block,整个系统立刻就会重新挂载为只读(readonly)模式保护数据。
而赚钱宝二代这玩意是2015~2016年的设备,产品定位就是为了跑pdcn,至少是7年的老矿机了,nand出现坏块几乎是必然。
解决方案
系统盘进入只读保护模式以后,任何写操作都会报错,提示如下:
Read-only file system
解决办法就是文件系统修复。先用df -hT
查看根目录挂载的分区和格式。
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 231M 0 231M 0% /dev
tmpfs tmpfs 48M 4.0M 44M 9% /run
/dev/data ext4 2.8G 795M 1.9G 30% /
tmpfs tmpfs 238M 0 238M 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 238M 0 238M 0% /sys/fs/cgroup
tmpfs tmpfs 238M 4.0K 238M 1% /tmp
/dev/sda1 ext4 459G 4.3G 431G 1% /data
/dev/zram0 ext4 49M 2.1M 43M 5% /var/log
根目录/
挂载的分区是/dev/data
文件系统格式是ext4
。执行修复命令:
fsck.ext4 -y /dev/data
等命令跑完,提示如下:
ROOTFS: ***** FILE SYSTEM WAS MODIFIED *****
ROOTFS: ***** REBOOT SYSTEM *****
ROOTFS: 25275/157872 files (0.2% non-contiguous), 204658/724992 blocks
按照提示重启系统,一般情况下文件系统就恢复正常了。如果重启以后依然提示只读,那就再跑一次然后再重启。是的我就碰到跑一次没解决又跑一次才恢复。
还有一点要注意,fsck
命令执行以后,有些存储在坏块上的数据会丢失,注意检查自己的软件是否运行正常,数据是不是完整。