Невозможно создать / открыть файл блокировки: /data/mongod.lock errno: 13 Отказано в доступе


187

Как заставить Монго использовать установленный диск на ec2? Я действительно не понимаю. Я подключил том на ec2, отформатировал диск как root и запустил как root, и все же как root, я не могу получить доступ? Я работаю на Ubuntu 12.04. Ни один другой монго не работает

Я вижу, что Монго сделал директорию 'db' в / 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. Если вы удалите файл и снова запустите mongod, у вас не должно возникнуть проблем
ACE

2
Смотрите обновленный вопрос. Та же проблема, если удалить файл блокировки
Тампа

Кажется, все еще проблема с файлом блокировки, каковы разрешения для каталога, в котором находится файл блокировки? TBH Я видел это только в 2 случаях: 1) файл блокировки уже существует и 2) у mongod нет прав на создание файла блокировки в нужном месте.
ACE

1
Вы должны убедиться, что у пользователя Монго есть доступ chown mongodb:mongodb on /var/lib/monogdb, в том числе и к каталогу данных.
Ханс Н. Хьорт

Ответы:


117

У меня была такая же проблема на экземпляре Ubuntu ec2. Я следил за этой статьей амазонки на странице 7:

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

Путь Mongodb в /etc/mongodb.confбыл установлен в /var/lib/mongodb(первичная установка и работает). Когда я перешел на /data/db(том EBS), я получил «errno: 13 Permission denied».

  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и удалять старые Монго файлов в /var/lib/mongodbкаталоге.
  4. Затем я побежал sudo service mongodb startи подождал около минуты. Если вы попытаетесь подключиться к 27017 сразу, вы не сможете.
  5. После минутной проверки /data/db(том EBS) и mongo должны были поместить журнал, 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 / folder / data "это помимо очевидных разрешений и комбинации пользователь: группа. Надеюсь, поможет.
Jmdiego

478

Я использую этот метод для решения проблемы:

sudo chown -R mongodb:mongodb /data/db

8
Добавить -Rвариант, и это идеально :)
Адриен

7
это: sudo chown -R id -u/ data / db для непосвященных. :)
rncrtr

8
Оказывается, есть проблема с backticks. Попробуйте запустить sudo chown $USER /data/dbвместо оригинальной команды.
Пайман Могадасян

7
Это действительно правильный ответ. @ Тампа, ты должен принять этот ответ. Кстати - вам не нужны id -Uили $USERвещи. Монго имеет свой собственный пользователь / группу. Вы можете и должны жесткий код 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/dbUSERNAME
Saif

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" чего-то.
Imskull

10

У меня была похожая проблема, настоящая причина была в том, что с моей предыдущей попытки уже был запущен сеанс mongod.

Я побежал

killall mongod

и все остальное бежало так, как ожидалось.

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


Это буквально самый короткий ответ и единственный ответ, который решил мою проблему после бесчисленных часов ... спасибо!
moomoochen

Рад, что это помогло! :) Жаль, что есть способ помочь людям найти этот ответ легче.
Венки Соорисетти

7

На сегодняшний день я попытался проложить путь для создания / открытия файла блокировки: /data/db/mongod.lock errno: 13 Отказано в разрешении Экземпляр mongod уже запущен ?, завершил работу и попробовал все ответы, опубликованные выше, чтобы решить эту проблему, следовательно, ничего не получилось, добавив

Судо Чоун -R mongodb: mongodb / data / db

Если я не добавил свое текущее разрешение пользователя в путь к

Судо Чоун $ USER / data / db

Надеюсь, это кому-нибудь поможет. Также я только что установил Mongo DB на свой пи. Ура!


Это реальное решение проблемы
Сахил Нагпал

6

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

ps auxw | grep mongo 

показал мне другие задачи, использующие монго в фоновом режиме, которые не были закрыты должным образом. Затем я запустил kill на всех запущенных, а затем смог запустить мой сервер.


6

Для пользователей Mac:
Запустите ls -ld / data / db /
Output должно быть что-то вроде drwrx-xr-x 20 singh wheel 680 21 Jul 05:49 / data / db /
Где singh - владелец, а wheel - группа, к которой он принадлежит ,
Запустите sudo chown -R singh: wheel / data / db
Запустите mongod


5

Удаление файла mongodb.lock не было проблемой в моем случае. Я сделал это и получил ошибку об используемом порту: [initandlisten] listen (): bind () fail errno: 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. Это должно работать отлично после этого.


4

Мой Монго (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 I CONTROL [initandlisten] dbexit: rc: 100

Так что проблема была в разрешениях на папку / var / lib / mongodb.

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

Исправлено, хотя я понимаю, что это может быть не слишком безопасно (это мой собственный dev-бокс, я в моем случае), но после изменения работали и БД, и аутентификация.


2

В Mycase
В 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 (в окнах): net stop mongodb

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


1

На Fedora 18 с экземпляром Mongo 2.2.4 я смог обойти аналогичную ошибку, отключив SELinux, вызвав пользователя setenforce 0root.

Кстати, это была корпоративная среда, а не экземпляр 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

После того, как я убил mongod, у меня просто была та же самая проблема: не мог начать 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

После того, как я удалю блокировку напрямую, я могу перезапустить процесс mongod.

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

1

Вот что я сделал, чтобы решить проблему:

$ sudo mkdir -p / data / db

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

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

а потом начать монго ...

$ mongod


1

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

Я решил это, изменив статус selinux на разрешающий с помощью следующей команды:

setenforce 0

0

Ли ls -laзнать пользователя и группу / вар / журнал / MongoDB. Тогда sudo chown -R user:group /data/db теперь беги sudo service mongodb start. Проверьте статус сsudo service mongodb status



0

Вы можете попробовать этими способами. Первый.

судо чоун -R монгод: монгод / данные / дб

но иногда это бесполезно. Второй. Если вышеуказанный способ бесполезен, вы можете попробовать сделать это:

mkdir / data / db # как путь к хранилищу базы данных

nohup mongod --dbpath / data / db &

или введите:

mongod --dbpath / data / 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, если на нем что-то запущено kill <PID of the process>, и попробуйте запустить ./mongodснова


-2

Fix: sudo mongod

У меня была такая же проблема, запуск mongod с привилегиями sudo исправил ее. Исходя из среды Windows, я использовал только mongodдля запуска демона, похоже, нам нужны привилегии суперпользователя для доступа к / data / db.

Вы также можете дать пользователям без полномочий root чтение и запись для этого пути. проверьте ответы выше для руководства!


Запускать mongod от имени root не нужно, и это может сделать систему более уязвимой для эксплойтов
qbert220

-2

Каждый раз, когда вы пытаетесь запустить Mongod, просто введите

sudo mongod

или если постоянно хотите это исправить, просто попробуйте дать rwx право доступа к папке / data / db

 chmod +rwx data/

Ни одна из них не является хорошей идеей. Первый может сделать систему более уязвимой для угроз безопасности. Второй может позволить непривилегированным пользователям вмешиваться в ваши базы данных
Монго
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.