bash 会与文件系统不同步吗?

Ale*_*lex 11 bash putty tmux

我可能没有正确表达我的问题,但我会尽力解释我遇到的症状。首先,对于上下文,我正在运行 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 和 putty 标记了它,因为我假设其中一个是罪魁祸首,但我真的不知道是哪一个。

更新:这是输出cat /proc/mount由吉尔的要求(虽然我的用户名和值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
Run Code Online (Sandbox Code Playgroud)

更新 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
Run Code Online (Sandbox Code Playgroud)

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

小智 0

我见过的唯一一次类似的经历是删除一个目录并创建一个新目录时。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)???
Run Code Online (Sandbox Code Playgroud)

加密文件系统听起来也需要审查。您是否尝试过未加密的文件系统?

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


gao*_*the -1

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

sync - flush file system buffers
Run Code Online (Sandbox Code Playgroud)

我自己从未发现有必要这样做,但至少认识一个人,几乎每隔一个命令就输入一次它!过去一定是由于磁盘速度慢而被严重烧毁的。

互联网上似乎很少讨论该sync命令的使用。以下是非常简短的手动输入的链接synchttp://www.gnu.org/software/coreutils/manual/html_node/sync-inspiration.html

sync保证数据从内存写入磁盘设备。如果磁盘设备本身速度较慢或有问题,数据可能仍位于磁盘设备高速缓存中,而不会写入磁盘。

您正在运行 ubuntu 服务器。。。那是你桌面上的一台机器吗?或者它在云端?或者 。。。还有别的东西吗?请参阅此处: https: //serverfault.com/questions/534627/what-does-the-sync-command-do从内存到光盘的同步速度较慢,与硬盘问题相关,或者可能与 Amazon AWS 较小的实例相关。