如何修复“sudo: unable to open ... Read-only file system”错误?

标题可能不够描述性,但我想不出更好的了。
我的服务器文件系统变成了只读模式。我不明白为什么会这样,也不知道如何解决。
我可以通过SSH登录到服务器,但是当我尝试启动apache2时,出现以下错误:
username@srv1:~$ sudo service apache2 start
[sudo] password for username:
sudo: unable to open /var/lib/sudo/username/1: Read-only file system
 * Starting web server apache2                                                                                                                                                                                                               (30)Read-only file system: apache2: could not open error log file /var/log/apache2/error.log.
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

当我尝试重新启动服务器时,我得到以下信息:
username@srv1:~$ sudo shutdown -r now
[sudo] password for username:
sudo: unable to open /var/lib/sudo/username/1: Read-only file system

一旦我手动重新启动它,它就会无任何警告或错误信息地重新启动。
我希望有人能指引我解决这个问题的正确方向。

1我建议给 @John 将答案改成 Bibhas 最后发布的答案,因为它实际上是有效的,而其他答案实际上没有任何帮助。 - Joshua Robison
关于MicroSD卡:http://askubuntu.com/questions/213889/microsd-card-is-set-to-read-only-state-how-can-i-write-data-on-it - Ciro Santilli OurBigBook.com
1大家好,这个问题是关于服务器的,而不是PC。如果你在双系统的PC上遇到了这个问题,请检查Windows控制面板中的“电源选项”中的“快速启动”选项。我在AWS上的Ubuntu也遇到了同样的问题。 - vanduc1102
我也有这个问题,但是没有任何解决方案对我有效。我使用的是Ubuntu 18.04,不知道是什么原因导致了这个问题。我需要重新启动系统,然后会显示一个包含(initramfs)的页面。在那里,我运行fsck /dev/sda1 -y并重新启动操作系统,然后问题就解决了。但是30分钟到1小时后,问题又会出现。 - Parisa.H.R
如果磁盘是NTFS格式并且被Windows使用 - 从中运行shutdown /f /r /t 0命令,这对我有帮助。 - CodeBy
在我的情况下,问题是由于Windows引起的,可能是由于Windows更新或不正确的关机。我只是回到Windows并让Windows安装更新并重新启动。就这样。不确定,但可能是Windows有点锁定了分区。 - Airy
20个回答

文件系统在运行时通常会进入只读模式,如果存在文件系统一致性问题。这在fstab中被指定为errors=remount-ro,并且当文件系统访问失败或通过Alt+SysRq+U请求紧急只读重新挂载时会发生。您可以运行:
sudo fsck -Af -M

强制检查所有文件系统。正如其他答案所述,查看 dmesg 也非常有帮助。

编辑:不要忘记命令行中的 -M

注意: 如 Bibhas 在他的回答中提到的链接1:如果 fsck 在其版本标语之后卡住:

$ sudo fsck -Af -M
fsck from util-linux 2.20.1

您可能想要尝试使用针对EXT4特定的fsck。
$ sudo fsck.ext4 -f /dev/sda1

假设所讨论的分区是/dev/sda1,它是一个ext4文件系统。

5我认为你不应该强制对其他读写挂载的文件系统进行检查。这可能会损坏你的数据。添加-M选项以跳过挂载的文件系统。(来自FSCK(8)的-M 不检查挂载的文件系统并对挂载的文件系统返回退出代码0。 - gertvdijk
41这没什么帮助,当我尝试运行那个命令时,我只是得到了相同的错误。sudo: 无法打开 /var/lib/sudo/kuplack/1: 只读文件系统 fsck 来自 util-linux 2.20.1 - Mark Kramer
1但是... -M 将跳过挂载的文件系统,包括 /dev/sda1(或任何包含 /var/lib/sudo/... 的已挂载驱动)。@MarkKramer:我强烈建议在安装 Linux 时始终设置 root 密码,使用 sudo su; passwd。然后您可以使用 su -c fsck -Af -M - naught101
3对我来说,我需要移除-M选项,因为/dev/sda1已经挂载了。为了让你的生活更轻松,可以加上-Afy选项(其中y表示对所有提示都回答是)。我在虚拟机中玩得比较随意,所以通常对这种解决方案还算满意。但如果这是没有备份的硬件,可能需要采取不同的方法并阅读dmesg日志。 - FreeSoftwareServers
在挂载的文件系统上运行fsck并不是一个好主意。 - Darshan Chaudhary
3@DarshanChaudhary -M 标志会导致 fsck 跳过已挂载的文件系统。请参阅 fsck(8) 手册页。 - nanofarad
重启系统后,命令执行成功。 - Sinan Gül
UP!对于“如果文件系统存在一致性问题,系统运行时通常会进入只读模式。” - Eduardo Lucio
这个答案对我无效。执行建议的命令后,我收到了 fsck from util-linux 2.29.2 的消息。 - birdman
5这实际上确实损坏了我的文件系统 :( - Blairg23
@hexafraction 许多人的笔记本电脑键盘上都没有"SysRq"按键,我也是其中之一。我该怎么办? - Pranav
@PrabeshBhattarai SysRq键与PrintScreen键是相同的(物理)按键,即使您的笔记本制造商没有在上面实际打印“SysRq”。或者您可能需要按下Fn+[某个键]。话虽如此,您不需要按下该组合键;我提到这个键盘快捷方式只是作为导致文件系统只读失败的示例,而不是您需要采取的步骤。 - nanofarad
sudo fsck -Af -M 给我返回了以下错误信息:fsck: 非法选项 -- A fsck: ?选项? - ScottyBlades
fsck from util-linux 2.20.1 给我返回的是:fsck用法:fsck [-fdnypqL] [-l number] - ScottyBlades
使用命令sudo fsck.ext4 -f /dev/sda1时出现了sudo: fsck.ext4: command not found的错误提示。 - ScottyBlades
@ScottyBlades 这个回答已经七年了,而且国旗可能已经改变-我没有 util-linux 2.20.1 版本的 fsck 的副本,我的版本可以很好地处理 -A,所以我没有什么很好的建议,除了手动调用每个需要检查的卷。 - nanofarad
@hexafraction,真酷。我刚开始学网页开发,所以我犯了一些明显或基础的错误,而这些错误对于经验丰富的开发者来说可能是小事。我的解决办法:当我点击“另存为”时,我保存的是根目录,而不是我想要保存的目录。确保我保存到正确的位置解决了这个问题。 - ScottyBlades
1@ScottyBlades 已经理解。看起来你的情况与实际文件系统损坏大多无关,这意味着没有必要涉及到 fsck。 - nanofarad
@hexafraction,好了解 - ScottyBlades
谢谢,我遇到了snappy守护进程的问题,尝试了很多方法。你的sudo fsck.ext4 -f /dev/sda1(在我的情况下是sda2)救了我一命。 - Òscar Raya

hexafraction的答案对我没用。每次我尝试执行sudo fsck -Af -M,它都只是显示
$ sudo fsck -Af -M
fsck from util-linux 2.20.1

仅返回翻译文本,无其他内容。对我来说,引导至活动光盘并执行此操作有效 -

sudo fsck.ext4 -f /dev/sda1

假设所讨论的分区 /dev/sda1 是一个 ext4 文件系统。

6-M的意思是不要挂载文件系统。您的文件系统/dev/sda1已经被挂载(我猜测在/上)。因此它被跳过了。 - dalore
3sudo fsck.ext4 -f /dev/sda1 是有效的。但仍然需要重新启动。 - efkan
1它在我使用的Ubuntu 16.04.3上起作用。谢谢你。 - Rosário Pereira Fernandes
谢谢!这个有效!:) - Muhammad bin Yusrat
谢谢您的帮助:我急需从我的问题安装中提取文件,这真的帮了我很大忙!顺便说一下,我通过我的"(Initramfs)" shell 运行了 fsck.ext4,并且它完美地工作了! - lightonphiri

这是解决我的问题的命令:
mount -o remount /

超过重新启动sudo fsck -Af

26如果操作系统将您的磁盘设为只读,以防止可能的损坏,那就更好了。 - Drew Noakes
5不仅如此,只有root用户才能重新挂载文件系统,如果文件系统是只读的,sudo命令也无法使用。 - Nathan Osman
15没用,我还是得到了同样的消息:sudo: 无法打开 /var/lib/sudo/kuplack/1: 只读文件系统 mount: 无法重新挂载块设备 /dev/sda2 为读写模式,因为它是写保护的 - Mark Kramer
3哦,是的,这个有效。 - R T
10mount: cannot remount /dev/sda8 read-write, is write-protected - Rishabh Agrahari
mount_apfs: unrecognized option 'remount' - ScottyBlades
我在虚拟机(KVM VPS)上遇到了这个错误:“mount: /: 无法重新挂载 /dev/mapper/vg_jh-root 为读写模式,因为是只读的。” - Salem F
如果有人需要将磁盘重新挂载为读写模式,请尝试以下操作:$ sudo mount -vo remount,rw / - Coconut

如果你想强制将根文件系统重新挂载为读写模式,可以按照以下步骤操作。
mount -o remount,rw /

1这解决了我的问题,我使用Hetzner云服务,带有160GB的SSD,以前从未遇到过这样的错误。 - Fathur Rohim
1太棒了,兄弟 - Farid Chowdhury
这对我很有用,当我的非品牌MP3播放器突然切换到“只读”模式时。 - Sarato
4我收到的错误信息是:无法将/dev/sda2以读写方式重新挂载到根目录/,因为它被写保护了。 - flm
这解决了我的问题,我只是重新挂载了分区,即sudo mount -o remount,rw 0A4819AC48393 - Fathy

尝试运行dmesg | grep "EXT4-fs error",看看是否有与文件系统/日志系统本身相关的问题。我建议您重新启动系统。此外,ObsessiveSSOℲ提供的sudo fsck -Af答案也不会有任何损害。

请注意,有时候这可能是由于计算机忘记了系统时间而引起的 - 磁盘检查失败是因为日志中的日期在未来!
对我来说,设置BIOS时间(并检查BIOS电池)解决了这个问题,而无需进行任何磁盘恢复。

欢迎来到Ask Ubuntu!我建议你编辑这个答案,加入关于如何做到这一点的具体细节。(另请参阅如何撰写一个好答案?以获取有关在Ask Ubuntu上被认为最有价值的答案类型的一般建议。) - David Foerster
我相当确定这正发生在我身上,因为我的电脑告诉我它今天早上忘记了时间。 - nomen

如果您的计算机同时使用Ubuntu和Windows进行双启动,并且出现此问题,那是因为Windows更改了文件系统,在这种情况下可能会有所帮助。 尝试禁用快速启动

控制面板 > 硬件和声音 > 电源选项 > (在左侧)选择关闭盖子时的操作 > 更改当前不可用的设置 > 取消选中“打开快速启动”

现在重新启动进入Ubuntu将解决此问题。希望对您有所帮助!

https://youtu.be/KJ-0KPZhAFo


(删除之前的回答)
编辑:主要问题出在Windows系统上。在更新了我的Windows 10之后,“快速启动”选项自动启用了。再次禁用该选项,并重新启动机器后,问题消失了。Windows 10让我头疼了好几天 :(
“快速启动”选项可以在控制面板的“电源选项”中找到。一定要禁用它!!! :)

只有一个是有效的。以启动速度为代价。 - NelsonGon
没起作用,但我觉得是Windows引起了这个问题。 - Heisenberg
1为什么Windows(对ext4一无所知)会让ext4文件系统重新挂载为只读?唯一可能不一致的文件系统应该是Windows所在的NTFS。 - Paul Stelian

如果您有图形用户界面,请转到磁盘应用程序,选择出现问题的驱动器,点击齿轮图标,然后选择修复文件系统选项。不到一秒钟,问题就会被解决。

enter image description here


1这个回答应该有更多的赞同。它是最可靠的选择,对用户的理解要求较低。谢谢。 - kyriakosSt
那删掉了我所有的文件...如果你不知道自己在做什么,就别尝试了。 - undefined

对我来说,重新启动系统可以解决这个问题。
sudo reboot

当他提到这件事时。
记住:
作为系统管理员,重新启动应该是最新的解决方案。

2注意!我正在修理一台远程服务器,在重新启动后它没有开机,这让事情变得更加困难。我建议在尝试重新启动之前先测试其他解决方案,特别是如果你不在电脑旁边。在工程界,关掉再打开这个方法第一次成为了一个大问题,而不是解决方案 :( - Mark E
@MarkE 重新启动以解决可用性问题应该是最新的解决方案。 - Zaman Oof