当我使用sudo运行某个程序并尝试创建文件夹/文件时,如何解决"只读文件系统"错误?

当我尝试保存或重命名文件/文件夹时,会显示“只读文件系统”错误;或者在终端中以root权限运行某些操作时也会显示同样的错误提示。
sudo: unable to open /var/lib/sudo/"My User Name"/0: Read-only file system 
W: Not using locking for read only lock file /var/lib/dpkg/lock
E: Unable to write to /var/cache/apt/  
E: The package lists or status file could not be parsed or opened.

当我在Nautilus中创建一个文件夹时,详细信息中的错误对话框是这样的:
Error creating directory: Read-only file system

我想给你看一张照片,但是它甚至不让我保存到U盘上。请帮帮我。
6个回答

这对我有用:
首先,使用sudo权限运行此命令:
sudo fsck -n -f

然后重新启动机器。
选项-f-n的文档直接在man fsck下面,但是在特定文件系统的fsck子命令下。 fs-specific-options部分提到了这一点。

SYNOPSIS

fsck [-lsAVRTMNP]
     [-r [fd]]
     [-C [fd]]
     [-t fstype]
     [filesystem...]
     [--]
     [fs-specific-options]
man fsck.ext4(也称为e2fsck)中得到的信息:

-f — 即使文件系统看起来干净,也强制进行检查。

-n — 以只读方式打开文件系统,并假设对所有问题的回答都是no。允许非交互式地使用e2fsck。此选项不能与-p-y选项同时指定。

关于选项-n的进一步评论,请参考this Unix & Linux stackexchange answer
如果您指的是fsck -n,那么特定于文件系统的程序将被调用并传递-n选项,对于大多数程序而言,这意味着“查看但不触碰”。如果文件系统已挂载,fsck通常会发现错误,因为挂载的文件系统往往处于不一致状态,因为正在发生写操作。它不会导致系统锁死,但也不会报告任何有用的信息。

52@sudodus 你完全不应该批评别人在StackExchange网站上回答一个旧问题。整个目的是让这些问题和答案作为资源永久存在。这不是一些论坛网站,它们通常偏向不再回复旧帖子。如果你有理由认为文件系统检查对用户的情况没有帮助,请解释一下。你不应该阻止新用户尝试提供帮助。而且,谁还给这个回答点了踩,请向我们解释一下你为什么这样做,不要盲目跟从群众。 - msouth
22@msouth,我接受你的批评意见。我的评论主要是为了让回答的作者改进它——增加更多细节,因为我认为它不够完整,对初学者来说没有足够的帮助。(而且我并没有给它点踩,是其他人这么做的)。很抱歉我的意图没有表达清楚——我的意图绝对不是要打击任何人,不是回答的作者,也不是你。我会尽量改变我的评论风格,使其更加积极。 - sudodus
18@sudodus,我的措辞太过严厉了,对此我感到抱歉(该网站不允许您编辑评论,但当我意识到这一点时,我应该只是删除它并发表另一条评论)。非常感谢您能够如此理解。我对您表示尊敬。 - msouth
我得到的警告:选项 -f 未实现,忽略 错误:容器 /dev/rdisk2 已以写访问方式挂载;请使用 -l 重新运行。 - ScottyBlades
3这真是救了我一命!由于我无法在服务器文件系统上做任何操作,所以我进入了救援模式。执行了'fsck -f /dev/sda2'(我的服务器驱动器是/dev/sda2),它修复了导致只读挂载的所有错误。然后我重新启动了服务器。非常感谢,万分感激! - ADEBISI Foluso A.
每次重启之前运行这个命令可以吗? - alper
这个命令是做什么的? - dekuShrub
这个不起作用,它只是显示一个错误信息:fsck.ext4: 无法解析 'LABEL=cloudimg-rootfs' - Andrew Koster

当系统进入只读状态时,这是为了防止对系统造成损坏。在进行任何操作之前,请确保您的硬盘驱动器正常工作和/或备份数据。
我建议启动一个Live USB/DVD,打开GParted,并使用检查/修复功能。
这是启用写入的命令:
sudo mount -o rw,remount /

2我办不到,因为我需要sudo访问权限,而且我无法获得它。 "sudo: 无法打开/var/lib/sudo/mathcubes/1:只读文件系统 mount: 无法将块设备/dev/sda6重新挂载为读写模式,已被写保护" - MathCubes
就像我之前说的那样,启动一个Live光盘,使用GParted来检查/修复分区。如果你没有光盘可以使用PartedMagic,它大小不到500MB。 - GM-Script-Writer-62850
怎么修复gparted中的分区? - MathCubes
截图:http://www.zimagez.com/zimage/screenshot-04282013-105411am.php - GM-Script-Writer-62850
但是在gpared中,我该怎么做呢?重新格式化它吗?不! - MathCubes
右键点击一个分区,然后点击“检查”,该分区必须处于未挂载状态。 - GM-Script-Writer-62850
显然,我无法使用聊天功能,因为我在StackExchange上没有任何声望。 - GM-Script-Writer-62850
它不起作用,只能在有限的时间内工作。 :( - MathCubes
我得到了以下信息:“mount_apfs:无法识别选项'remount' mount_apfs:[-o选项] [-u UID] [-g GID] [-c [-r] | [-C|-F <tier2设备>]] [-s快照] <卷|设备> <目录> mount:/ 失败,错误码为64。” - ScottyBlades

如果您与Ubuntu双启动Windows,且在中没有任何错误信息,则问题很可能是由Windows引起的。请在Windows中转到控制面板→电源选项并禁用快速启动。然后重新启动进入Ubuntu。

你是在暗示要么1)Windows挂载了OP的Ubuntu安装的ext4根文件系统,要么2)OP的Ubuntu安装的根文件系统是NTFS?我觉得这很不可能。-1 - David Foerster
3我并不是在暗示两者都有问题。我的意思是,如果你无法在双启动系统上将文件系统挂载为可写,并且文件系统没有明显的问题,那么问题可能是由于“Windows快速启动”引起的。你可以随意给我点踩,但对于双启动的用户来说,这是一个有效的解决方案。 - Prejith P
对不起,我不能将文本翻译成中文。 - David Foerster
正如我在原帖中提到的那样,这是搜索“只读文件系统”错误的第二个解决方案,这也是在双启动时尝试挂载外部驱动器时出现的相同错误。 - Prejith P
这是在写作时遇到的问题,而不是安装时的问题。这个答案与此无关。 - Glorious Kale
3这对我真的很有效(Ubuntu 19.04)。尽管我不确定它是否会起作用,但它确实起作用了。 - HV Sharma
这解决了我的问题,我使用的是Ubuntu 18.04和Windows 10。 - Sachith Muhandiram
解决了我在Ubuntu 22.04上的问题。 - undefined

当从不同的操作系统(Windows 和 Linux)访问硬盘时,硬盘可能包含一个不干净的文件系统。因此,操作系统中缓存的元数据会阻止挂载该硬盘。
为了尝试纠正这些错误,您可以在 "磁盘" 应用程序中找到分区硬盘的路径(例如:通过 "lsblk" 命令找到的 "/dev/sdb1"),然后使用 "ntfsfix" 命令。
sudo ntfsfix /dev/sdb1

如果磁盘没有自动挂载,那么:
$ sudo mkdir /media/[mount point]
$ sudo mount -o rw /dev/sdb1 /media/[mount point]

如果你遇到了“只读文件系统”错误,那么你应该从Windows中删除以下目录:
- .Tash-1000 - $RECYCLE.BIN/
在Git Bash中以管理员身份运行:
识别你的磁盘。在我的情况下是/f。
$ cd /f
$ rm -R \$RECYCLE.BIN/ && rm -R .Tash-1000

GL

如果有人像我一样使用双操作系统(Ubuntu,Windows),NTFS文件系统是这个问题的主要原因。检查磁盘路径,例如"/dev/sda3",卸载该磁盘并运行以下命令:
sudo ntfsfix /dev/sda3

1这个方法很有效。谢谢你。使用umount(或Disks工具)卸载有问题的磁盘非常重要。 - Sachin Borkar
这对我也起作用。有没有一种永久的解决方案,还是我每次启动系统都得这样做? - Christos Loupassakis

在我的情况下,我在Windows和Ubuntu之间有一个共享驱动器。

在Ubuntu上,我已经安装了trash-cli并删除了一些文件。
当我启动Windows时,在该驱动器上进行了一些碎片整理。
但是当我回到Ubuntu时,它开始在任何写操作上给我报错“只读文件系统”。

在阅读了@Braian Coronel的答案后,我回到了Windows并永久删除了.Trash-1000文件夹,这解决了我的问题。