Czy bash może zsynchronizować się z systemem plików?

12

Być może nie sformułowałem poprawnie mojego pytania, ale dołożę wszelkich starań, aby wyjaśnić występujące objawy. Po pierwsze, dla kontekstu uruchamiam serwer Ubuntu (bez GUI), wersja 12.04.3 LTS (zgodnie z narzędziem lsb_release). Zasadniczo wykonuję całą pracę w tmux, łączę się z serwerem za pośrednictwem Putty i używam vima do wszystkich edycji tekstu.

Teraz objawy. Ponieważ używam tmux, zazwyczaj mam zawsze kilka otwartych okien. Jeden z nich zawiera serwer węzła, z którym się bawiłem, i znajduje się w podkatalogu strony głównej mojego konta użytkownika (konkretnie ~/battleship). Serwer wchodzi w interakcję ze stroną internetową, którą również hostuję poza serwerem za pomocą nginx, i cały kod strony mieszka w /usr/share/nginx/www/bs(mam również otwarte okno do edycji źródła klienta). Co się dzieje, że po kilku godzinach pozostawiania okna serwera bezczynnego i nietkniętego, wydaje się, że nie synchronizuje się. Mogę uruchomić lsi zobaczyć pliki oraz mogę je otworzyć do edycji ( vim server.js). Kiedy to robię, niezależnie od tego, czy wprowadzam zmiany i zapisuję, czy po prostu wychodzę natychmiast po uruchomieniulsponownie widzę plik .server.js.swp i żadna z moich zmian (jeśli je wprowadziłem) nie została utrzymana. Jeśli wyprowadzę się z tego katalogu, a następnie z powrotem do niego, sam się naprawi - mogę otworzyć plik i edytować go z sukcesem, nie pozostawiając po sobie pliku .swp po jego zamknięciu. Wspomniałem o źródłowej części klienta, ponieważ zauważyłem, że tak się nie dzieje w folderze / www (prawdopodobnie dlatego, że znajduje się poza katalogiem osobistym mojego konta użytkownika).

Po tej ścianie tekstu moje pytanie brzmi: czy ktoś wie, dlaczego tak się dzieje i jak temu zapobiec? Mogę sobie tylko wyobrazić, że jest jakiś sposób, biorąc pod uwagę, że nie jest to jedyny serwer Linux, z którym łączę się za pośrednictwem Putty i używam tmux / vim, a jednak to jedyne, w którym dzieje się to dziwne zachowanie. Każda pomoc będzie mile widziana.

Uwaga: oznaczyłem to tagiem bash, tmux i kit, ponieważ zakładam, że jednym z nich jest wina, ale tak naprawdę nie mam pojęcia, który.

Aktualizacja: To jest wynik cat /proc/mountżądany przez Gillesa (choć z moją nazwą użytkownika oraz wartościami ecryptfs_fnek_sigi ecryptfs_sigcenzurowanymi, ponieważ chociaż tak naprawdę nie wiem, co to za dwie rzeczy, wydają się one związane z szyfrowaniem i lepiej bezpieczne niż przykro).

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

Aktualizacja 2: Oto dane wyjściowe 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

Aktualizacja 3: Ukończyłem test memtest. Jest to wynik wspomnianego testu . Wygląda na to, że zakończyło się bez błędów, więc nie jestem pewien, czy to w czymś pomoże. Możesz również zobaczyć niektóre szczegóły sprzętu, które mogą pomóc w jakikolwiek sposób.

Alex
źródło
3
Nie, bash nie może „zsynchronizować się z systemem plików”, a i tak się nie dzieje. Bardziej przypomina to, że system plików nie synchronizuje się z systemem plików. To zdecydowanie problem, a przy tym dziwny. Z jakich systemów plików korzystasz (opublikuj dane wyjściowe cat /proc/mounts)? Prawdopodobnie jest to zwirtualizowany serwer, jakiego rodzaju wirtualizacji używa?
Gilles „SO- przestań być zły”
1
@Gilles Zaktualizowałem pytanie, aby uwzględnić dane wyjściowe cat /proc/mountsdla Ciebie. Mam nadzieję, że to coś dla ciebie znaczy - wciąż jestem całkiem nowy w Linuksie, więc wiele się nauczyłem, a ja jeszcze nie bawiłem się systemem plików (poza jego użyciem).
Alex
4
Problem występuje więc w systemie plików ecryptfs. Wygląda to na błąd w ecryptfs lub w innych częściach jądra lub w oprogramowaniu do wirtualizacji, jeśli dotyczy, lub na błąd sprzętowy. Czy działa to na twoim sprzęcie w pudełku lub szafie, czy jest to zwirtualizowany serwer z jakimś dostawcą hostingu? Jaka jest wydajność uname -a? Jeśli to twój sprzęt, podłącz konsolę i wykonaj test pamięci przy następnym uruchomieniu. Jeśli jest hostowany, skontaktuj się z dostawcą usług hostingowych i opisz te objawy.
Gilles „SO- przestań być zły”
1
Czy po uruchomieniu sudo syncpliki zostaną zaktualizowane?
Braiam
1
Spróbuj wykonać polecenie synchronizacji. Również df cmd jest przydatny, aby pokazać, gdzie mieszka dir. Jak / proc / mount, ale bardziej czytelne wyjście. Zrobić df -h /www ~/battleship /usr/share/nginx/www/bs. Czy problem dotyczy montowania encryptfs? Może potrzebne jest dodatkowe przetwarzanie SW w przypadku zapisów na tym dysku, więc występuje buforowanie lub coś się z tym dzieje?
gaoithe

Odpowiedzi:

1

Jedynym doświadczeniem, jakie widziałem z czymś takim, było usunięcie katalogu i utworzenie nowego. Systemy AIX i Solaris miały ten problem wiele lat temu. Jeśli masz otwartą sesję powłoki w usuniętym katalogu, możesz odzyskać nieprzewidywalne wyniki, które wyglądają jak zsynchronizowany system plików.

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

Zaszyfrowany system plików również brzmi jak coś do przejrzenia. Czy próbowałeś w niezaszyfrowanym systemie plików?

Niestety nie mogę jeszcze dodawać komentarzy. Nie wystarczająca ilość punktów.

Michael McGarrah
źródło
Jest to istotne z punktu widzenia pytania, w którym powłoka bash pozostała z domyślnym katalogiem, który nie istnieje i w którym nie można tworzyć plików.
ubfan1
1
Mogę wypróbować ten mały eksperyment, ale jestem dość pewny, że jest to problem z ecryptfs. Wspomniane katalogi zdecydowanie nadal istnieją; Mogę normalnie pracować po prostym, cd .gdy po pewnym czasie wracam na sesję. W tym momencie szczerze rozważam utworzenie kopii zapasowej wszystkiego, wyczyszczenie serwera i ponowną instalację bez zaszyfrowanego systemu plików. Nie trzymam na tym nic ważnego, więc nie martwię się zbytnio o szyfrowanie moich plików.
Alex
Opiekun / autor eCryptfs w Ubuntu bardzo reaguje na zgłoszenia błędów. Jeśli nie możesz znaleźć rozwiązania, prawdopodobnie warto go zapytać lub zgłosić błąd.
blujay
0

Możesz spróbować uruchomić polecenie synchronizacji między poleceniami bash.

sync - flush file system buffers

Nigdy nie znalazłem takiej potrzeby, ale znałem przynajmniej jedną osobę, która pisała to praktycznie jak co drugie polecenie! W przeszłości musiał być źle wypalony na wolnym dysku.

Internet wydaje się być lekki w dyskusji na temat użycia syncpolecenia. Oto link do bardzo krótkiego wpisu ręcznego dla sync: http://www.gnu.org/software/coreutils/manual/html_node/sync-invocation.html

syncgwarantuje, że dane są zapisywane z pamięci na urządzenie dyskowe. Dane mogą nadal znajdować się w pamięci podręcznej urządzenia dyskowego i nie zostać zapisane na dysk, jeśli samo urządzenie dyskowe jest wolne lub ma problem.

Używasz serwera Ubuntu. . . czy to komputer na twoim pulpicie? Czy jest w chmurze? Lub . . coś innego? Zobacz tutaj: /server/534627/what-does-the-sync-command-do powolnej synchronizacji pamięci z dyskiem związanej z problemami z dyskiem twardym LUB może z mniejszymi instancjami Amazon AWS.

gaoithe
źródło
1
Nie jestem pewien, czy syncsię przyda; Przekonałem się, że to i tak cd .łagodzi problem. Stworzyłem refdla niego pseudonim (wiem, że uratowanie jednej postaci jest trochę głupie), którego używam za każdym razem, gdy wracam do starej sesji. Jeśli chodzi o serwer, to moja stara wieża biurkowa (zbudowałem nową w zeszłym roku), która teraz mieszka w rogu mojego salonu z dystrybucją Ubuntu, więc mam pełny dostęp do sprzętu i władzy nad tym, co działa na tym.
Alex
0

FWIW problem jest wyświetlany przez polecenie ls, a nie przez bash.

Fakt, że widzisz plik oznacza, że ​​nadal tam jest. Nic nie jest zsynchronizowane z niczym innym, a żadna ilość uruchomionych synchronizacji nie powstrzyma Cię przed użyciem jedynej buforowanej kopii odpowiednich danych systemu plików. synchronizacja spowoduje, że dane zostaną zatwierdzone do trwałego przechowywania, a nie zmieni ich widok.

Czy korzystasz z sesji VIM? Nie znam sesji VIM, nigdy nie korzystałem z niej osobiście, ale wyobrażam sobie, że tmux może spowodować, że menedżer sesji VI nie zda sobie sprawy, że plik jest zamknięty i będzie śledził zmiany.

Johan
źródło