bash可以与文件系统不同步吗?


12

我可能没有正确表达我的问题,但我会尽力解释我遇到的症状。首先,就上下文而言,我正在运行Ubuntu服务器(无GUI),版本为12.04.3 LTS(根据lsb_release实用程序)。我通常在tmux中完成所有工作,通过Putty连接到服务器,并使用vim进行所有文本编辑。

现在为症状。由于我使用的是tmux,因此通常会一直打开几个窗口。其中一个包含一个我一直在玩耍的节点服务器,它位于用户帐户主目录的子目录中(特别是~/battleship)。服务器与我也是使用nginx从服务器托管的网页进行交互,并且所有网站代码都位于其中/usr/share/nginx/www/bs(我还打开了一个单独的窗口来编辑客户端源代码)。发生的情况是,在使服务器窗口闲置数小时并保持不变之后,它似乎不同步。我可以运行ls并查看文件,也可以打开文件进行编辑(vim server.js)。但是,当我执行此操作时,无论我进行更改并保存还是立即退出,ls再次,我看到一个.server.js.swp文件,并且所有更改(如果进行了更改)都不会持久。如果我移出该目录然后再​​移回,它会自行修复-我可以打开文件并成功编辑它,而在关闭文件时不会留下.swp。我提到了客户端源代码的一半,因为我注意到这在/ www文件夹中不会发生(大概是因为它不在我的用户帐户的主目录中)。

在那堵墙之后,我的问题是:有人知道为什么会发生这种情况,以及如何防止这种情况发生吗?我只能想象有某种方法,考虑到这不是我通过Putty连接到的唯一使用tmux / vim的Linux服务器,但是它是唯一发生这种奇怪行为的服务器。任何帮助,将不胜感激。

注意:我用bash,tmux和腻子标记了这个标签,因为我假设其中之一是要怪,但我真的不知道是哪一个。

更新:这是cat /proc/mountGilles要求的输出(尽管使用了我的用户名以及和的值,ecryptfs_fnek_sigecryptfs_sig进行了审查,因为虽然我实际上并不知道这两件事是什么,但它们似乎与加密有关,并且比遗憾更安全)。

rootfs / rootfs rw 0 0
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,relatime,size=2008532k,nr_inodes=502133,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,relatime,size=807840k,mode=755 0 0
/dev/disk/by-uuid/2da27263-f079-47ba-90ad-66e4c3a53810 / ext4 rw,relatime,errors=remount-ro,data=ordered 0 0
none /sys/fs/fuse/connections fusectl rw,relatime 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
none /sys/kernel/security securityfs rw,relatime 0 0
none /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=5120k 0 0
none /run/shm tmpfs rw,nosuid,nodev,relatime 0 0
/home/[username]/.Private /home/[username] ecryptfs rw,relatime,ecryptfs_fnek_sig=[censored],ecryptfs_sig=[censored],ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs 0 0

更新2:这是输出uname -a

Linux [server-name] 3.5.0-39-generic #60~precise1-Ubuntu SMP Wed Aug 14 15:38:41 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

更新3:我完成了memtest的传递。这是上述测试的结果。似乎已经完成,没有错误,所以我不确定是否最终会有所帮助。您还可以查看一些硬件详细信息,以防万一。


3
不,bash不能“与文件系统不同步”,这不是正在发生的事情。这更像是文件系统与文件系统不同步。这绝对是一个问题,而且很奇怪。您正在使用什么文件系统(发布的输出cat /proc/mounts)?这可能是虚拟化服务器,它使用哪种虚拟化?
吉尔斯(Gillles)“所以-别再邪恶了”

1
@Gilles我更新了问题,以包括您的输出cat /proc/mounts。希望这对您意味着什么-我对Linux还是很陌生,所以边做边学很多东西,而且我还没有研究文件系统(除了使用它之外)。
亚历克斯

4
因此,问题发生在ecryptfs文件系统上。这看起来像是ecryptfs,内核的其他部分,虚拟化软件(如果适用)中的错误或硬件故障。这是在机箱中还是在机架上的自己硬件上运行,或者这是带有某些托管服务提供商的虚拟服务器?输出是uname -a什么?如果是您的硬件,请插入控制台并在下次启动时进行内存测试。如果已托管,请与您的托管提供商联系并描述这些症状。
吉尔(Gilles)'“ SO-别再作恶了”

1
如果运行sudo sync,文件是否会更新?
Braiam

1
请尝试使用sync命令。df cmd还可方便地显示目录所在的位置。与/ proc / mount类似,但输出更具可读性。做df -h /www ~/battleship /usr/share/nginx/www/bs。cryptofs安装是否有问题?也许对该磁盘的写入需要额外的sw处理,以便进行缓存或与此有关的事情?
2014年

Answers:


1

我看到的唯一的经历就是删除目录并创建了一个新目录。AIX和Solaris早在几年前就出现过此问题。如果在已删除的目录中有一个开放的Shell会话,则可能会返回不可预测的结果,就像文件系统不同步一样。

bash1: mkdir test1
bash2: cd test1
bash1: touch test1/testfile
bash1: ls test1
testfile
bash2: ls
testfile
bash1: rm -rf test1
bash2: ls
???(unknown results)???

加密的文件系统听起来也像是要检查的东西。您是否尝试过未加密的文件系统?

抱歉,我还不能发表评论。积分不足。


这与问题有关,bash shell保留了一个默认目录,该目录不存在,并且无法在其中创建文件。
ubfan1 2014年

1
我可以尝试这个小实验,但是我对此很有信心,这是一个ecryptfs问题。这些目录肯定仍然存在;cd .一段时间后回到会话后,我可以正常工作。现在,说实话,我只是考虑备份所有内容,擦除服务器,然后在没有加密文件系统的情况下重新安装。我并没有保留任何遥不可及的重要内容,因此我不太担心加密文件。
Alex

Ubuntu中的eCryptfs维护者/作者对错误报告的响应非常迅速。如果找不到解决方案,可能值得询问他或提交错误报告。
blujay 2014年

0

您可以尝试在bash命令之间运行sync命令。

sync - flush file system buffers

我自己从来没有发现过这样的需要,但至少认识一个人,几乎每隔一秒钟便输入一次!一定是过去使用慢速磁盘严重烧毁。

互联网似乎很少讨论该sync命令的使用。这是非常简短的手册条目的链接synchttp : //www.gnu.org/software/coreutils/manual/html_node/sync-invocation.html

sync确保将数据从内存写入磁盘设备。如果磁盘设备本身速度较慢或有问题,则数据仍可能保留在磁盘设备缓存中,而无法写入磁盘。

您正在运行ubuntu服务器。。。那是您台式机上的一台机器吗?还是在云中?要么 。。。还有什么吗 请参阅此处:https : //serverfault.com/questions/534627/what-does-the-sync-command-do将与硬盘问题或与Amazon AWS较小实例相关的从内存到光盘的同步缓慢。


1
我不确定是否sync有用。我发现cd .无论如何都可以缓解问题。我为此做了一个别名ref(我知道,保存一个字符有点愚蠢),这是我每次回到旧会话时都习惯使用的习惯。至于服务器是什么,那是我的旧台式机塔楼(我去年建造了一座新的塔楼),现在住在运行Ubuntu发行版的客厅角落,因此我可以完全访问硬件和运行电源在上面。
Alex

0

FWIW问题通过ls命令而不是bash显示。

您看到文件的事实意味着它仍然存在。没有任何事物与其他事物不同步,并且没有任何数量的运行同步会阻止您使用相关文件系统数据的唯一缓存副本。同步只会导致数据提交到永久存储,而不会更改您的视图。

您正在使用VIM会话吗?我不知道VIM会话,我自己从未使用过它,但是我想tmux可能会导致VI会话管理器无法意识到文件已关闭并无法跟踪更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.