Linux: Read-only file system

无论是通过touch创建文件,还是通过vi编辑文件都失败,出现报错提示:Read-only file system

可以通过lsblk命令查询可用块设备信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# touch aaa
touch: aaa: Read-only file system
# ls
mosquitto.acl mosquitto.conf mosquitto.password
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
mmcblk0 179:0 0 29.2G 0 disk
|-mmcblk0p1 179:1 0 256M 0 part /bootloader
|-mmcblk0p2 179:2 0 256M 0 part
|-mmcblk0p3 179:3 0 1G 0 part /
|-mmcblk0p4 179:4 0 1G 0 part
|-mmcblk0p5 179:5 0 128M 0 part /var/lib/bluetooth
| /overlay
`-mmcblk0p6 179:6 0 26.5G 0 part /data

然后通过blkid命令查询块设备详细信息:

1
2
3
4
5
6
7
# blkid 
/dev/mmcblk0p5: LABEL="overlay" UUID="539c8a51-988a-486c-a8b2-784fb3c01c68" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="overlay" PARTUUID="87e24609-8c57-4272-bf30-a4d2f4ccf9a9"
/dev/mmcblk0p3: BLOCK_SIZE="131072" TYPE="squashfs" PARTLABEL="rootfs0" PARTUUID="a674b333-bab4-4478-b465-7e5d11caedc4"
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL_FATBOOT="bootloader" LABEL="bootloader" UUID="97B1-A458" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="boot0" PARTUUID="5d814d14-f6ed-435b-a41c-da4dd10befd8"
/dev/mmcblk0p6: LABEL="data" UUID="78f990db-9a78-4f44-95ea-9d04d36071d1" BLOCK_SIZE="1024" TYPE="ext4" PARTLABEL="data" PARTUUID="5e6f234c-fd9b-4a90-b75b-37fb26a39b27"
/dev/mmcblk0p4: BLOCK_SIZE="131072" TYPE="squashfs" PARTLABEL="rootfs1" PARTUUID="c538f7af-32d1-4ec0-9300-8df1da9fcabf"
/dev/mmcblk0p2: BLOCK_SIZE="131072" TYPE="squashfs" PARTLABEL="rescue" PARTUUID="3fe85d82-227d-454b-a3d6-bd589772098a"

对比两者,发现 / 目录对应的 mmcblk0p3 的类型是 squashfs(即只读)。

一般解决方法:

1
2
3
4
# 将 / 目录重新挂载,且类型为可读写
mount -o remount,rw /
# 重新加载,使上面配置生效
systemctl daemon-reload