web-dev-qa-db-fra.com

Bash peut-il être désynchronisé avec le système de fichiers?

Je ne reformule peut-être pas ma question correctement, mais je ferai de mon mieux pour expliquer les symptômes que je ressens. Premièrement, pour le contexte, j'utilise un serveur Ubuntu (sans interface graphique), version 12.04.3 LTS (selon l'utilitaire lsb_release). Je fais généralement tout mon travail dans tmux, je me connecte au serveur via PuTTY et j'utilise vim pour toutes les éditions de texte.

Maintenant pour les symptômes. Depuis que j'utilise tmux, quelques fenêtres sont ouvertes en permanence. L'un d'eux héberge un serveur de nœuds avec lequel je m'amuse, et il réside dans un sous-répertoire du domicile de mon compte d'utilisateur (plus précisément, ~/battleship). Le serveur interagit avec une page Web que je héberge également à l’aide de nginx, et tout le code du site Web se trouve dans /usr/share/nginx/www/bs (je garde également une fenêtre séparée ouverte pour modifier le source du client). En effet, après avoir laissé la fenêtre du serveur inactive et intacte pendant plusieurs heures, elle semble ne plus être synchronisée. Je peux exécuter ls et voir les fichiers, puis les ouvrir pour les éditer (vim server.js). Cependant, lorsque je fais cela, que je modifie et enregistre ou que je quitte simplement instantanément, lorsque je lance à nouveau ls, je vois un fichier .server.js.swp, et aucune de mes modifications (si tout) persistent. Si je sors de ce répertoire, puis que je reviens, il se corrige lui-même - je peux ouvrir le fichier et le modifier avec succès, sans laisser de fichier .swp lorsque je le ferme. J'ai mentionné la moitié de la source du client parce que j'ai remarqué que cela ne se produit pas dans le dossier/www (probablement parce que cela se trouve en dehors du répertoire de base de mon compte utilisateur).

Après ce mur de texte, ma question est la suivante: quelqu'un sait-il pourquoi que cela se produit et comment l'éviter? Je ne peux qu'imaginer qu'il existe un moyen, étant donné que ce n'est pas le seul serveur Linux auquel je me connecte via PuTTY et que j'utilise tmux/vim on, et pourtant c'est le seul où ce comportement étrange se produit. Toute aide serait appréciée.

Remarque: je l'ai étiqueté avec bash, tmux et PuTTY parce que je suppose que l'un d'entre eux est à blâmer, mais je n'ai vraiment aucune idée de quoi.

Mise à jour: Ceci est la sortie de cat /proc/mount comme demandé par Gilles (bien que mon nom d'utilisateur et les valeurs de ecryptfs_fnek_sig et ecryptfs_sig censuré, parce que, bien que je ne sache pas en réalité ce que sont ces deux choses, elles semblent liées au cryptage, et il vaut mieux prévenir que guérir).

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

Mise à jour 2: Voici le résultat de 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

Mise à jour 3: J'ai effectué un test de mémoire. Ceci est le résultat dudit test . Semble avoir terminé sans erreur, donc je ne suis pas sûr que cela finira par aider avec quoi que ce soit. Vous pouvez également voir certains détails matériels au cas où cela vous aiderait de quelque façon que ce soit.

12
Alex

La seule expérience que j'ai vue avec quelque chose comme ceci est celle où un répertoire a été supprimé et un nouveau créé. AIX et Solaris avaient ce problème depuis des années. Si vous avez une session Shell ouverte dans un répertoire supprimé, vous pouvez obtenir des résultats imprévisibles qui ressemblent à un système de fichiers désynchronisé.

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)???

Le système de fichiers cryptés ressemble à quelque chose à revoir également. Avez-vous essayé dans un système de fichiers non chiffré?

Désolé, je ne peux pas encore publier de commentaires. Pas assez de points.

1
Michael McGarrah

FWIW le problème est affiché par la commande ls, pas par bash.

Le fait de voir le fichier signifie qu'il est toujours là. Rien n'est désynchronisé avec rien d'autre et aucune synchronisation ne vous empêchera d'utiliser la seule copie en cache des données de système de fichiers pertinentes. la synchronisation entraînera simplement l’enregistrement permanent des données dans le stockage permanent, et ne changera pas votre vue.

Utilisez-vous VIM sessions? Je ne sais pas VIM session, je ne l'ai jamais utilisé moi-même, mais j'imagine que tmux pourrait empêcher le gestionnaire de session du VI de se rendre compte que le fichier est fermé et de garder vos modifications suivies.

0
Johan

Vous pouvez essayer d'exécuter la commande sync entre vos commandes bash.

sync - flush file system buffers

Je n’en ai jamais trouvé la nécessité moi-même, mais au moins une personne l’a dactylographiée pratiquement à la seconde commande! Doit avoir été gravement brûlé dans le passé avec un disque lent.

Internet semble éclairer la discussion sur l’utilisation de la commande sync. Voici un lien vers une entrée manuelle très courte pour sync: http://www.gnu.org/software/coreutils/manual/html_node/sync-invocation.html

sync garantit que les données sont écrites de la mémoire sur le disque. Les données peuvent toujours se trouver dans la mémoire cache du périphérique de disque et ne pas être écrites sur le disque si le périphérique de disque lui-même est lent ou a un problème.

Vous utilisez un serveur Ubuntu. . . est-ce une machine sur votre bureau? Ou est-ce dans un nuage? Ou . . . autre chose? Voir ici: https://serverfault.com/questions/534627/what-does-the-sync-command-do synchronisation lente de la mémoire au disque associée à des problèmes de disque dur OR peut-être avec des instances Amazon AWS plus petites.

0
gaoithe