Nie można utworzyć / otworzyć pliku blokady: /data/mongod.lock errno: 13 Odmowa dostępu


187

Jak zmusić Mongo do korzystania z zamontowanego napędu w EC2? Naprawdę nie rozumiem. Podłączyłem wolumin do ec2 sformatowany dysk jako root i start jako root, a jednak jako root Nie mogę uzyskać dostępu? Korzystam z systemu Ubuntu 12.04. Żadne inne mongo nie działa

Widzę, że mongo utworzyło katalog „db” w katalogu / data tj. / Data / db

cd /
ls -al
drwxr-xr-x  4 root root  4096 Mar  5 16:28 data

cd /data
ls -al
total 28
drwxr-xr-x  4 root root  4096 Mar  5 16:28 .
drwxr-xr-x 24 root root  4096 Mar  5 16:28 ..
drwxr-xr-x  2 root root  4096 Mar  5 16:28 db
drwx------  2 root root 16384 Mar  5 16:20 lost+found


sudo mkfs.ext3 /dev/xvdh
sudo mkdir /data
sudo su - -c 'echo "/dev/xvdh %s auto noatime 0 0" | sudo tee -a /etc/fstab'
sudo mount /data

sudo service mongodb start
mongodb start/running, process 17169

sudo ps -ef | grep mongod
ubuntu   15763 15634  0 16:32 pts/2    00:00:00 tail -f mongodb.log
ubuntu   18049 15766  0 16:43 pts/3    00:00:00 grep --color=auto mongod


Tue Mar  5 16:33:15 [initandlisten] MongoDB starting : pid=15890 port=27017 dbpath=/data 64-bit host=aws-mongo-server-east-staging-20130305161917
Tue Mar  5 16:33:15 [initandlisten] db version v2.2.3, pdfile version 4.5
Tue Mar  5 16:33:15 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Tue Mar  5 16:33:15 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue Mar  5 16:33:15 [initandlisten] options: { bind_ip: "10.157.60.27", config: "/etc/mongodb.conf", dbpath: "/data", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", replSet: "heythat" }
Tue Mar  5 16:33:15 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Tue Mar  5 16:33:15 dbexit: 
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to close listening sockets...
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to flush diaglog...
Tue Mar  5 16:33:15 [initandlisten] shutdown: going to close sockets...
Tue Mar  5 16:33:15 [initandlisten] shutdown: waiting for fs preallocator...
Tue Mar  5 16:33:15 [initandlisten] shutdown: lock for final commit...
Tue Mar  5 16:33:15 [initandlisten] shutdown: final commit...
Tue Mar  5 16:33:15 [initandlisten] shutdown: closing all files...
Tue Mar  5 16:33:15 [initandlisten] closeAllFiles() finished
Tue Mar  5 16:33:15 [initandlisten] shutdown: removing fs lock...
Tue Mar  5 16:33:15 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Tue Mar  5 16:33:15 dbexit: really exiting now

Poniżej znajduje się informacja o ponownym uruchomieniu po usunięciu pliku blokady ....

Tue Mar  5 16:59:15 [initandlisten] MongoDB starting : pid=21091 port=27017 dbpath=/data 64-bit host=aws-mongo-server-east-staging-20130305161917
Tue Mar  5 16:59:15 [initandlisten] db version v2.2.3, pdfile version 4.5
Tue Mar  5 16:59:15 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Tue Mar  5 16:59:15 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Tue Mar  5 16:59:15 [initandlisten] options: { bind_ip: "10.157.60.27", config: "/etc/mongodb.conf", dbpath: "/data", logappend: "true", logpath: "/var/log/mongodb/mongodb.log", replSet: "heythat" }
Tue Mar  5 16:59:15 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Tue Mar  5 16:59:15 dbexit: 
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to close listening sockets...
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to flush diaglog...
Tue Mar  5 16:59:15 [initandlisten] shutdown: going to close sockets...
Tue Mar  5 16:59:15 [initandlisten] shutdown: waiting for fs preallocator...
Tue Mar  5 16:59:15 [initandlisten] shutdown: lock for final commit...
Tue Mar  5 16:59:15 [initandlisten] shutdown: final commit...
Tue Mar  5 16:59:15 [initandlisten] shutdown: closing all files...
Tue Mar  5 16:59:15 [initandlisten] closeAllFiles() finished
Tue Mar  5 16:59:15 [initandlisten] shutdown: removing fs lock...
Tue Mar  5 16:59:15 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Tue Mar  5 16:59:15 dbexit: really exiting now

1
Wygląda na to, że mongod źle zamknął się podczas ostatniego uruchomienia i nie był w stanie wyczyścić utworzonego pliku mongod.lock. Ten plik istnieje, aby uniemożliwić wielu wystąpieniom mongod działanie na tym pliku. Jeśli usuniesz plik i spróbujesz ponownie uruchomić mongod, nie powinieneś mieć żadnych problemów
ACE

2
Zobacz zaktualizowane pytanie. Ten sam problem, jeśli usuniesz plik blokady
Tampa

Wygląda na to, że nadal występuje problem z plikiem blokującym, jakie są uprawnienia w katalogu, w którym znajduje się plik blokujący? TBH Widziałem to tylko w 2 przypadkach: 1) plik blokujący już istnieje i 2) mongod nie ma uprawnień do tworzenia pliku blokującego w wybranej lokalizacji.
ACE,

1
Należy upewnić się, że użytkownik mongo ma dostęp chown mongodb:mongodb on /var/lib/monogdb, również do katalogu danych.
Hans N. Hjort

Odpowiedzi:


117

Miałem ten sam problem z instancją Ubuntu ec2. Śledziłem ten artykuł o Amazonce na stronie 7:

http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

Ścieżka Mongodb w /etc/mongodb.confzostała ustawiona na /var/lib/mongodb(podstawowa lokalizacja instalacji i działa). Kiedy zmieniłem na /data/db(wolumin EBS), otrzymywałem komunikat „errno: 13 Odmowa dostępu”.

  1. Najpierw pobiegłem sudo service mongodb stop.
  2. Potem widziałem, ls -lado której grupy i właściciela mongodb przypisano /var/lib/mongodb(istniejącą ścieżkę) i zmieniłem /data/db(nową ścieżkę) za pomocą chowni, chgrpaby dopasować. (przykład sudo chown -R mongodb:mongodb /data/db:)
  3. Następnie zaktualizowałem ścieżkę etc/mongodb.confdo /data/dbi usunąłem stare pliki mongo w /var/lib/mongodbkatalogu.
  4. Potem pobiegłem sudo service mongodb starti czekałem około minuty. Jeśli spróbujesz natychmiast połączyć się z 27017, nie będziesz w stanie.
  5. Po minucie sprawdzenia /data/db(wolumin EBS) i mongo powinien był umieścić dziennik, mongod.lock, local.ns, local.0 itp. Jeśli nie, spróbuj sudo service mongodb restartjeszcze minutę później.

Spędziłem z tym ponad godzinę. Zmiana grupy i usuwanie starych plików prawdopodobnie nie jest konieczne, ale to działało dla mnie.

To jest świetne wideo na temat montowania wolumenu ebs w instancji ec2:

http://www.youtube.com/watch?v=gBII3o3BofU


8
Walczyłem z tym problemem i zdałem sobie sprawę, że jeśli podasz listę folderów docelowych z ls -lahZ, da ci to kontekst bezpieczeństwa, kontekst folderu danych mongo powinien być ustawiony w następujący sposób: „sudo chcon -R -u system_u -t mongod_var_lib_t / folder / data "to oprócz oczywistych uprawnień i kombinacji użytkownik: grupa. Mam nadzieję, że to pomoże.
jmdiego,

478

Używam tej metody do rozwiązania problemu:

sudo chown -R mongodb:mongodb /data/db

8
Dodaj -Ropcję i jest idealnie :)
Adrien

7
to: sudo chown -R id -u/ data / db dla niewtajemniczonych. :)
rncrtr

8
Okazuje się, że jest problem z backtickami. Spróbuj uruchomić sudo chown $USER /data/dbzamiast oryginalnej komendy.
Paymahn Moghadasian

7
To jest rzeczywiście poprawna odpowiedź. @Tampa powinieneś zaakceptować tę odpowiedź. btw - nie potrzebujesz id -Uani $USERrzeczy. mongo ma własnego użytkownika / grupę. możesz i powinieneś twardy kod mongodb: mongodb. więc polecenie jest po prostusudo chown -R mognodb:mognodb /data/db
facet mograbi

11
Co to właściwie robi? Działa, ale chciałbym to zrozumieć :)
zero_cool

81

W moim przypadku (instancja AWS EC2, Ubuntu) pomogła:

$ sudo mkdir -p /data/db/
$ sudo chown `USERNAME` /data/db

A potem wszystko działało dobrze.


6
To najlepsza odpowiedź, najprawdopodobniej jest to problem z uprawnieniami użytkownika uruchamiającego mongod
davo

2
Tak, to najlepsza odpowiedź
Vegan Sv

1
Zmieniamy / przenosimy własność /data/dbnaUSERNAME
Saif

52

Musisz tylko dać dostęp do swojego /data/dbfolderu.

Wpisz sudo chown -R <USERNAME> /data/db, zastąp <USERNAME>swoją nazwą użytkownika.

Możesz znaleźć swoją nazwę użytkownika, pisząc whoami.



10

Miałem podobny problem, faktyczny powód był taki, że sesja mongod działała już od mojej poprzedniej próby.

Pobiegłem

killall mongod

i wszystko inne działało zgodnie z oczekiwaniami.

killallpolecenie wysłałoby sygnał TERM do wszystkich procesów z prawdziwym UID. To zabija wszystkie uruchomione instancje mongod, abyś mógł założyć własne.


To dosłownie najkrótsza odpowiedź i jedyna odpowiedź, która rozwiązała mój problem po niezliczonych godzinach ... dzięki!
moomoochen,

Cieszę się, że pomogło! :) Szkoda, że ​​nie ma sposobu, aby ludzie mogli łatwiej znaleźć tę odpowiedź.
Venky Soorisetty

7

Na dzień dzisiejszy, starałem się dostać moją drogę przez stworzenia pliku / otwartego zamka: /data/db/mongod.lock errno 13 Permission denied jest instancją mongod już działa ?, kończące i próbowała wszystko odpowiedź pisał wyżej rozwiązać ten problem, dlatego nic nie działało przez dodanie

sudo chown -R mongodb: mongodb / data / db

Chyba że dodałem moje bieżące uprawnienia użytkownika do ścieżki lokalizacji przez

sudo chown $ USER / data / db

Mam nadzieję, że to komuś pomoże. Właśnie zainstalowałem Mongo DB na moim pi. Twoje zdrowie!


To jest rzeczywiste rozwiązanie problemu
Sahil Nagpal

6

Miałem podobny problem i postępowałem zgodnie ze wszystkimi powyższymi instrukcjami dotyczącymi zmiany właścicieli za pomocą sudo chown itp. Po zmianach nadal miałem w tle mongodb działający w tle. Bieganie

ps auxw | grep mongo 

pokazał mi inne zadania przy użyciu mongo działającego w tle, które nie zostały poprawnie zamknięte. Następnie uruchomiłem kill na wszystkich uruchomionych, a następnie mogłem uruchomić mój serwer.


6

Dla użytkowników komputerów Mac:
Uruchom ls -ld / data / db /
Output powinien być podobny do drwrx-xr-x 20 singh wheel 680 21 lipca 05:49 / data / db /
Gdzie singh jest właścicielem, a wheel jest grupą, do której należy .
Uruchom sudo chown -R singh: wheel / data / db
Uruchom mongod


5

Usunięcie pliku mongodb.lock nie było problemem w moim przypadku. Zrobiłem to i otrzymałem błąd związany z używanym portem: [initandlisten] listen (): bind () nie powiodło się errno: 98 Adres już używany dla gniazda: 0.0.0.0:27017. Znalazłem tutaj inne rozwiązanie: nie można uruchomić lokalnego serwera mongodb z instrukcjami, aby zakończyć proces:

  1. Dowiedz się z netstat, w którym procesie jest uruchomiony port mongodb (27017)

    sudo netstat -tulpn | grep :27017

    Wyjście będzie: tcp 0 0 0,0,0,0:27017 0,0,0,0:* LISTEN 1412 / mongod

  2. Zabij odpowiedni proces.

    sudo kill 1412 (zastąp 1412 swoim identyfikatorem procesu znalezionym w kroku 1)

I udało mi się ponownie uruchomić mongodb. Wydaje mi się, że mój wciąż uciekał przed niewłaściwym zamknięciem.


4

Dla tych z was, którzy doświadczają tego błędu w systemie Windows za pomocą Menedżera zadań, zakończ uruchomioną instancję „mongod.exe”. Gdy to zrobisz, trwale usuń plik mongo.lock i uruchom mongod.exe. Po tym powinno działać idealnie.


3

Mój mongo (3.2.9) został zainstalowany na Ubuntu, a mój plik dziennika zawierał następujące wiersze:

2016-09-28T11:32:07.821+0100 E STORAGE  [initandlisten] WiredTiger (13) [1475058727:821829][6785:0x7fa9684ecc80], file:WiredTiger.wt, connection: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied 
2016-09-28T11:32:07.822+0100 I -        [initandlisten] Assertion: 28595:13: Permission denied 
2016-09-28T11:32:07.822+0100 I STORAGE  [initandlisten] exception in initAndListen: 28595 13: Permission denied, terminating

2016-09-28T11: 32: 07.822 + 0100 I CONTROL [lista początkowa] dbexit: rc: 100

Problem polegał więc na uprawnieniach do folderu / var / lib / mongodb.

sudo chown -R mongodb:mongodb /var/lib/mongodb/
sudo chmod -R 755 /var/lib/mongodb
  • Uruchom ponownie serwer

Naprawiłem to, chociaż zdaję sobie sprawę, że może to nie być zbyt bezpieczne (w moim przypadku jest to własne okno deweloperów), nieco po zmianie zadziałało zarówno db, jak i uwierzytelnianie.


2

In Mycase
W mongodb wersja 2.6.11 domyślnym katalogiem bazy danych jest/var/lib/mongodb/

  1. $ sudo chown -R id -u/ var / lib / mongodb /

  2. $ sudo chown -R id -u/var/lib/mongodb/mongod.lock

  3. $ sudo /etc/init.d/mongod stop

  4. $ sudo /etc/init.d/mongod start


powinno być `id -u`
marcus

2

Ten sam problem wystąpił, gdy uruchomiłem polecenie mongod po zainstalowaniu go w systemie Windows10. Zatrzymałem usługę mongodb i uruchomiłem ją ponownie. Działa jak urok

Polecenie zatrzymania usługi mongodb (w systemie Windows): net stop mongodb

Polecenie uruchomienia serwera mongodb: mongod --dbpath PATH_TO_DATA_FOLDER


1

Na instancji Fedory 18 z Mongo 2.2.4 udało mi się obejść podobny błąd, wyłączając SELinux, wywołując setenforce 0jako root.

BTW, to było środowisko korporacyjne, a nie instancja Amazon EC2, ale objawy były podobne.


1

W moim przypadku problem został rozwiązany przez usunięcie pliku dziennika .

sudo rm /log/mongod.log

Chociaż komunikat o błędzie odnosi się konkretnie do pliku blokady :

exception in initAndListen: 10309 Unable to create/open lock file: 
/data/mongod.lock errno:13 Permission denied 
Is a mongod instance already running?, terminating

To wskazało mi właściwy kierunek. Na moim serwerze musiałem zrobić sudo rm /var/log/mongodb/mongodb.log i sudo rm /tmp/mongodb-27017.sock.
Keith John Hutchison

1

Po zabiciu Mongod miałem tylko ten sam problem: nie mogłem uruchomić Mongod.

$> sudo kill `pidof mongod`

2015-08-03T05:58:41.339+0000 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/mongodbtest/replset/data/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating

Po bezpośrednim usunięciu blokady mogę ponownie uruchomić proces mongod.

$>  rm -rf /data/mongodbtest/replset/data/mongod.lock

1

Oto, co zrobiłem, aby rozwiązać problem:

$ sudo mkdir -p / data / db

$ export PATH = / usr / local / Cellar / mongodb / 3.0.7 / bin: $ PATH

$ sudo chown -R id -u / data / db

a potem zacząć mongo ...

$ mongod


1

Miałem ten sam problem.

Rozwiązałem to, zmieniając status selinux na permissive za pomocą poniższego polecenia:

setenforce 0

0

Czy ls -laznać użytkownika i grupę / var / log / mongodb. Następnie zrób sudo chown -R user:group /data/db teraz Uruchom sudo service mongodb start. Sprawdź status za pomocąsudo service mongodb status



0

Możesz spróbować tymi sposobami. 1. miejsce

sudo chown -R mongod: mongod / data / db

ale w niektórych przypadkach nie jest to przydatne. 2. miejsce jeśli powyższy sposób nie jest przydatny, możesz spróbować to zrobić:

mkdir / data / db # jako ścieżka do bazy danych

nohup mongod --dbpath / data / db &

lub wpisz:

mongod --dbpath / data / db

aby uzyskać strumień wyjściowy


Biorąc pod uwagę, że jest to stare pytanie, a twoja odpowiedź nie dodaje niczego, czego już nie ma, powinieneś zadać sobie pytanie, czy jest to cenne ...
Nic3500,

0

Dla mnie na CentOS 6.x:

sudo chown -R mongodb:mongodb <db-path> sudo service mongod restart

I mam ustawić niestandardowy db-pathw /etc/mongod.conf.




0

Wystąpił podobny błąd, naprawiony przez usunięcie wszystkich rekordów (w moim katalogu sprawy journalsi pliku mongo.lock...), po czym sprawdź port z sudo lsof -i:27017, jeśli coś na nim działa kill <PID of the process>, i spróbuj uruchomić ./mongodponownie


-2

Naprawić: sudo mongod

Miałem ten sam problem, naprawiłem go uruchamiając mongod z uprawnieniami sudo. Ze środowiska Windows korzystałem właśniemongod do uruchomienia demona, wygląda na to, że potrzebujemy uprawnień administratora do dostępu / danych / db.

Możesz także przyznać użytkownikom innym niż root uprawnienia do odczytu i zapisu do tej ścieżki. sprawdź odpowiedzi powyżej, aby uzyskać przewodnik!


Uruchomienie mongod jako root nie jest konieczne i może uczynić system bardziej podatnym na exploity
qbert220 14.09.19

-2

Za każdym razem, gdy próbujesz uruchomić mongod, po prostu wpisz

sudo mongod

lub jeśli na stałe chcesz to naprawić, po prostu daj pierwszeństwo rwx w folderze / data / db

 chmod +rwx data/

Żaden z nich nie jest dobrym pomysłem. Pierwszy może uczynić system bardziej podatnym na exploity bezpieczeństwa. Drugi może pozwolić nieuprzywilejowanym użytkownikom na manipulowanie twoimi bazami danych mongo
qbert220
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.