Не вдається створити / відкрити файл блокування: /data/mongod.lock errno: 13 Дозвіл відхилено


187

Як змусити монго використовувати змонтований привід на ec2? Я справді не розумію. Я додав том на формат ec2, який відформатував диск як корінь і запустив як root, а ще як root я не можу отримати доступ? Я працюю на ubuntu 12.04. Жоден інший монго не працює

Я бачу, що монго зробив 'db' dir в / data, тобто / 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

Нижче, якщо я перезавантажуюсь, коли видаляю файл блокування ....

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
Схоже, mongod погано вимикався востаннє, коли він запускався, і не зміг очистити створений ним файл mongod.lock. Цей файл існує, щоб запобігти роботі декількох екземплярів монгоду. Якщо ви видалите файл і спробуйте запустити mongod ще раз, у вас не виникне проблем
ACE

2
Дивіться оновлене запитання. Та сама проблема, якщо видалити файл блокування
Тампа

Здається, проблема з файлом блокування залишається проблемою, які дозволи в каталозі, в якому знаходиться файл блокування? TBH Я бачив це лише у 2 випадках: 1) файл блокування вже існує і 2) mongod не має дозволу на створення файлу блокування у потрібному місці.
ACE

1
Ви повинні переконатися, що користувач mongo має також доступ chown mongodb:mongodb on /var/lib/monogdbдо каталогу даних.
Hans N. Hjort

Відповіді:


117

У мене була така ж проблема в екземплярі Ubuntu ec2. Я слідкував за цією статтею Amazon на сторінці 7:

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

Шлях до Mongodb в /etc/mongodb.confбуло встановлено на /var/lib/mongodb(основне місце встановлення та роботу). Коли я змінив /data/db(об'єм EBS), я отримував "помилково: 13 дозволу відмовлено".

  1. Спочатку я побіг sudo service mongodb stop.
  2. Тоді я ls -laбачив, якій групі та власнику mongodb призначений /var/lib/mongodb(існуючий шлях), і я змінив /data/db(новий шлях) на chownта chgrpна відповідність. (приклад sudo chown -R mongodb:mongodb /data/db:)
  3. Потім я оновив шлях etc/mongodb.confдо /data/dbта видалив старі файли mongo в /var/lib/mongodbкаталозі.
  4. Потім я побіг sudo service mongodb startі почекав хвилину. Якщо ви спробуєте негайно підключитися до 27017, ви не зможете.
  5. Після хвилинної перевірки /data/db(обсяг EBS) і монго повинні були розмістити журнал, mongod.lock, local.ns, local.0, і т. Д. Якщо не спробувати, sudo service mongodb restartперевірте хвилину пізніше.

Я просто провів з цим понад годину. Зміна групи та видалення старих файлів, ймовірно, не потрібна, але саме це працювало для мене.

Це чудове відео про встановлення тома ebs до екземпляру ec2:

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


8
Я боровся з цією проблемою, і зрозумів, що якщо ви будете перераховувати список своїх цільових папок з ls -lahZ, це дасть вам контекст безпеки, контекст для папки даних mongo повинен бути встановлений таким чином: "sudo chcon -R -u system_u -t mongod_var_lib_t / папка / дані "це, крім очевидних дозволів та комбінації користувача: група. Сподіваюся, це допомагає.
jmdiego

478

Я використовую цей метод для вирішення проблеми:

sudo chown -R mongodb:mongodb /data/db

8
Додайте -Rваріант і це ідеально :)
Адрієн

7
ось: sudo chown -R id -u/ data / db для непосвячених. :)
rncrtr

8
Виявляється, є проблема із задніми посиланнями. Спробуйте запустити sudo chown $USER /data/dbзамість оригінальної команди.
Могхадасіан Пейхман

7
Це справді правильна відповідь. @Tampa, ви повинні прийняти цю відповідь. btw - вам не потрібно id -Uабо $USERречі. У mongo є власний користувач / група. можна і потрібно жорсткий код mongodb: mongodb. тому команда простаsudo chown -R mognodb:mognodb /data/db
хлопець mograbi

11
Що це насправді робить? Це працює, але хотілося б зрозуміти :)
zero_cool

81

У моєму випадку (екземпляр AWS EC2, Ubuntu) допомогло:

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

А після цього все спрацювало нормально.


6
Це найкраща відповідь. Це, швидше за все, проблема з дозволом для користувача, який працює mongod
davo,

2
Так, це найкраща відповідь
Vegan Sv

1
Ми змінюємо / передаємо право власності /data/dbнаUSERNAME
Сайф

52

Вам просто потрібно надати доступ до своєї /data/dbпапки.

Введіть sudo chown -R <USERNAME> /data/db, замініть <USERNAME>своїм іменем користувача.

Ви можете знайти своє ім’я користувача, ввівши whoami.


12

Я встановив mongodb з EBS на EC2 за допомогою Ubuntu 14.04, дотримуючись цього підручника:

http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/

Але замість запропонованого чууна я зробив:

sudo chown -R mongodb:mongodb /data /log /journal

Щоб виправити проблему


2
Так, здається, власник повинен бути "mongodb", а не "root".
Імскулл

10

У мене був аналогічний випуск, фактична причина полягала в тому, що сесія монгоду працювала вже з моєї попередньої спроби.

Я побіг

killall mongod

а все інше пройшло так, як очікувалося.

killallкоманда надсилатиме сигнал TERM всім процесам з реальним UID. Таким чином, це вбиває всі запущені екземпляри mongod, щоб ви могли почати свій власний.


Це буквально найкоротша відповідь і єдина відповідь, яка вирішила мою проблему після незліченних годин ... дякую!
moomoochen

Рада, що це допомогло! :) Хочеться, щоб люди могли легше знайти цю відповідь.
Venky Soorisetty

7

На сьогоднішній день я намагався пройти шлях до створення / відкриття файлу блокування: /data/db/mongod.lock errno: 13 Дозвіл відхилено Чи є екземпляр mongod вже запущений ?, завершується , і спробував усі відповіді, розміщені вище на вирішити цю проблему, отже, нічого не вийшло, додавши

sudo chown -R mongodb: mongodb / data / db

Якщо я не додав свого поточного дозволу користувача до шляху до місцезнаходження

sudo chown $ USER / дані / дб

Сподіваюся, що це комусь допоможе. Крім того, я щойно встановив DB Mongo на моєму пі. Ура!


Це власне рішення проблеми
Сахіл Нагпал

6

У мене була подібна проблема, і я дотримувався всіх інструкцій вище щодо зміни власників, які використовують sudo chown тощо. У мене все ще був екземпляр mongodb, який працює у фоновому режимі після змін. Біг

ps auxw | grep mongo 

показав мені інші завдання з використанням монго, який працює у фоновому режимі, який не був належним чином закритий. Потім я побіг убивати всіх запущених, а потім міг запустити свій сервер.


6

Для користувачів Mac:
Виконати ls -ld / data / db /
Вихід повинен бути чимось на зразок drwrx-xr-x 20 singh колесо 680 21 липня 05:49 / data / db /
Де singh є власником, а колесо - до групи, до якої належить .
Виконати sudo chown -R singh: колесо / дані / db
Run mongod


5

Видалення файлу mongodb.lock не було проблемою в моєму випадку. Я зробив це і отримав помилку з приводу того, що порт використовується: [initandlisten] прослухати (): bind () не вдалося помилково: 98 Адреса вже використовується для сокета: 0.0.0.0:27017. Тут я знайшов інше рішення: не вдалося запустити локальний сервер mongodb з інструкціями вбити процес:

  1. Дізнайтеся з netstat, який процес запущений порт mongodb (27017)

    sudo netstat -tulpn | grep :27017

    Вихід буде: tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1412 / mongod

  2. Вбийте відповідний процес.

    sudo kill 1412 (замініть 1412 своїм ідентифікатором процесу, знайденим у кроці 1)

І мені вдалося знову запустити mongodb. Я вважаю, що моє все ще бігало від неправильного відключення.


4

Для тих, хто відчуває цю помилку в Windows за допомогою диспетчера завдань, закінчується екземпляр "mongod.exe", який працює. Після цього остаточно видаліть файл mongo.lock і запустіть mongod.exe. Це повинно працювати ідеально після цього.


3

Мій монго (3.2.9) був встановлений на Ubuntu, і мій файл журналу мав такі рядки:

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 Я КОНТРОЛЬ [initandlisten] dbexit: rc: 100

Тож проблема полягала в дозволах на папку / var / lib / mongodb.

sudo chown -R mongodb:mongodb /var/lib/mongodb/
sudo chmod -R 755 /var/lib/mongodb
  • Перезавантажте сервер

Виправлено це, хоча я розумію, що це може бути не надто захищено (це моя власна скринька для розробників, я в моєму випадку), але біт слідкував за зміною як db, так і автентифікації.


2

У Mycase
In mongodb версії 2.6.11 каталог за замовчуванням є/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


повинен бути `ідентифікатор -u`
Marcus

2

У мене виникла та сама проблема, коли я запустив команду mongod після її установки на Windows10. Я припинив службу mongodb і запустив її знову. Працює як шарм

Команда для припинення служби mongodb (у windows): net stop mongodb

Команда для запуску сервера mongodb: mongod --dbpath PATH_TO_DATA_FOLDER


1

У Fedora 18 з монтом 2.2.4, я зміг подолати подібну помилку, відключивши SELinux за допомогою виклику setenforce 0 як root.

До речі, це було корпоративним середовищем, а не Amazon EC2, але симптоми були схожі.


1

У моєму випадку проблему було вирішено, видаливши файл журналу .

sudo rm /log/mongod.log

Хоча повідомлення про помилку стосується конкретно файлу блокування :

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

Це вказувало мені в правильному напрямку. НА своєму сервері мені довелося зробити sudo rm /var/log/mongodb/mongodb.log та sudo rm /tmp/mongodb-27017.sock.
Кіт Джон Хатчісон

1

Після того, як я вбив монгода, у мене виникла та сама проблема: не могла почати монгода.

$> 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

Після прямого видалення блокування я можу відновити процес mongod.

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

1

Ось що я зробив, щоб виправити проблему:

$ sudo mkdir -p / data / db

$ export PATH = / usr / local / льох / mongodb / 3.0.7 / bin: $ PATH

$ sudo chown -R id -u/ дані / дб

а потім почати монго ...

$ mongod


1

У мене була така ж проблема.

Я вирішив це, змінивши статус selinux на дозвільний із командою нижче:

setenforce 0

0

Потрібно ls -laзнати користувача та групу / var / log / mongodb. Потім виконайте sudo chown -R user:group /data/db тепер біг sudo service mongodb start. Перевірте станsudo service mongodb status



0

Ви можете спробувати цими способами. 1-й.

sudo chown -R mongod: mongod / data / db

але в деяких випадках це не корисно. 2-й. якщо вищезгаданий спосіб не корисний, ви можете спробувати це зробити:

mkdir / data / db # як шлях зберігання бази даних

nohup mongod --dbpath / дані / db &

або введіть:

mongod - dbpath / дані / db

щоб отримати вихідний потік


Враховуючи це давнє запитання, і ваша відповідь не додає нічого, чого вже немає, ви повинні запитати себе, чи є він цінним ...
Nic3500

0

Для мене на CentOS 6.x:

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

І я встановив звичай db-pathв /etc/mongod.conf.




0

Отримала подібну помилку, виправлену при видаленні всіх записів (у моєму випадку journalsта файлі mongo.lock...), після цього перевірте порт sudo lsof -i:27017, якщо smth працює на ньому kill <PID of the process>, і спробуйте запустити ./mongodще раз


-2

Виправити: sudo mongod

У мене була така ж проблема: запуск монгоду з привілеями судо виправлений. Виходячи з середовища Windows, я використовував лише mongodдля запуску демон, добре, схоже, нам потрібні привілеї суперпользователя для доступу / data / db.

Ви також можете надати некористувацьким користувачам права читання та запису на цей шлях. Перевірте відповіді вище для керівництва!


Запускати mongod як root не потрібно, і це може зробити систему більш вразливою до подвигів
qbert220

-2

Щоразу, коли ви намагаєтеся запустити mongod, просто наберіть

sudo mongod

або якщо постійно хочете виправити це, просто спробуйте надати rwx папку в папку / data / db

 chmod +rwx data/

Жодне з них не є хорошою ідеєю. Перший може зробити систему більш вразливою до подвигів безпеки. Другий може дозволити непривілейованим користувачам підробляти ваші бази даних mongo
qbert220,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.