少女祈祷中...

问题起因

今天在看论文时想顺便写一下笔记,但当我touch记事本的时候失败,告诉我read only文件系统。之前也遇到过同样的问题。

1
2
3
 ∅ /home/enana/ReadingPapers/pose prediction ▓▒░──────────────────────────░▒▓ 18:27:02 
❯ touch memo.txt
touch: cannot touch 'memo.txt': Read-only file system

检查和分析

1
2
3
~ ▓▒░────────────────────────────────────────────────────────────░▒▓ 18:23:39 
❯ mount | grep enana
/dev/sda1 on /home/enana type fuseblk (ro,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)

我发现挂载在/dev/sda1(我自己的1T磁盘)上的/home/enana(我存放所有文件的目录)不知道怎么会是变成了ro(read-only)状态了。

尝试umount后重新挂载,结果告诉我unclean file system,貌似是检测到windows系统了。

1
2
3
4
5
6
7
8
9
10
11
 ~ ▓▒░────────────────────────────────────────────────────────────░▒▓ 18:23:51 
❯ sudo umount /home/enana

~ ▓▒░────────────────────────────────────────────────────────────░▒▓ 18:24:14
❯ sudo mount -a
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
Could not mount read-write, trying read-only

这时候我突然意识到,可能是因为我这台主机是双系统,所以会有这样的问题。前几天,我打开windows进去用了一下光驱玩东方永夜抄,然后就正常关机(也有可能直接按电源键了?),然后重启切换到linux继续工作。

我怀疑在这个时候就出了点问题:我以为我关闭了windows,事实上windows在磁盘里写了一个挂起标志,用于下一次快速开机(fast boot)。后来查了一下,说是双系统必须要把security boot 和 fast boot关了才行,不然就可能出现这样的问题!


解决

关机。开机,按F2进入BIOS设置(不同主机的按键不一样)。首先找到Boot Configuration-security boot,关闭;然后找到Pre-boot Behavior-Fastboot,改为Minimal模式。

然后进入windows,在控制面板中将fast boot关闭,然后正常关闭windows。这一步之后,因为我们禁用了fast boot,因此windows关机时也就不会在磁盘内挂起了。理论上讲,这样的话windows系统就不会给linux系统制造迷惑了。

我们再次按下机箱上的电源键开机,回到linux,重新进行挂载。/home/enana变为rw模式,一切回归正常。

1
2
3
4
5
6
7
8
9
 ~ ▓▒░────────────────────────────────────────────────────────────░▒▓ 19:24:22 
❯ sudo mount -a

~ ▓▒░────────────────────────────────────────────────────────────░▒▓ 19:24:28
❯ mount | grep enana
/dev/sda1 on /home/enana type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)

~ ▓▒░────────────────────────────────────────────────────────────░▒▓ 19:24:57

(P.S:还有一种更加快捷的解决办法就是在linux里直接使用ntfsfix指令,把windows留在磁盘/dev/sda1里的挂起杀死。但这个ntfsfix可能会损坏windows系统下存放的一些数据或文件,并且下次启动windows后又会引发同样的问题,届时又要冒着风险ntfsdix一下,治标不治本,建议还是不要这么做。)