Gedit 不会在 VirtualBox 共享上保存文件:文本文件繁忙

Gedit 不会在 VirtualBox 共享上保存文件:文本文件繁忙

我有一个文本文件,可以使用其他应用程序更改该文件(例如openoffice)。但是当我尝试使用更改并保存它时gedit,我收到错误gedit

Could not save the file /media/sf_Ubuntu/BuildNotes.txt.
Unexpected error: Error renaming temporary file: Text file busy

BuildNotes.txt的权限如下:

-rwxrwx--- 1 root vboxsf  839 2012-10-26 12:08 BuildNotes.txt

用户 ID 是:

m@m-Linux:/media/sf_Ubuntu$ id
uid=1000(m) gid=1000(m) groups=4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare),1000(m),1001(vboxsf)

有什么问题以及如何解决它?

答案1

这个问题自 2009 年以来就已被报道过(例子[已归档])。可怕的是,目前还没有解决办法。 VirtualBox 和 Gedit 的开发者都不愿意为此承担责任,而是满足于三年多来互相指责。

您可以将编辑器首选项设置为“创建备份”,然后保存两次。非常痛苦,但确实有效。

其他一些编辑不会报告该问题。然而,例如,当我测试 Kate 和 nano 时,它们只是在每次保存时默默地删除该文件。这比 gedit 的情况还要糟糕......

答案2

“文本文件忙”在这里可能会令人困惑:它实际上与文本文件无关,而是与可执行文件有关。可执行文件被称为文本文件,因为……嗯,实际上,我不知道为什么

该消息的真正含义是“该文件已被正在使用它的另一个程序锁定,并且不能让它在其眼皮子底下被修改,因此您无法写入它。”在文本文件中看到此消息是很不寻常的:unix 系统通常不赞成对文件进行强制锁定,并且应用程序没有任何工具可以阻止其他人修改文件。 (Unix 有咨询锁:它们可用于通过协作程序同步对文件的并发访问。)当您看到“文本文件忙”( ETXTBUSY) 时,最常见的情况是您尝试修改正在运行的可执行文件:内核锁定它。另一种可能性是挂载的磁盘映像,再次被内核锁定。

在您的情况下,考虑到文件的位置/media/sf_Ubuntu和组的所有权vboxsf,我的猜测是位于 VirtualBox 文件共享文件系统上的文件被锁定在主机操作系统中。假设主机是一台 Windows 计算机,并且您还可以在其中的编辑器中打开该文件。您需要先关闭主机上的文件,然后才能在虚拟机的编辑器中保存。

答案3

问题根本在于 glib 及其保存到临时文件然后重命名的方式。该错误已记录为:https://bugzilla.gnome.org/show_bug.cgi?id=656225

答案4

检查lsof文件是否被其他应用程序打开

lsof /media/sf_Ubuntu/BuildNotes.txt

或者使用fuser

fuser -km /media/sf_Ubuntu/BuildNotes.txt

相关内容