Невозможно создать / открыть файл блокировки: /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
Tampa
источник
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
Haimei
источник
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

И после этого все работало нормально.

Belhor
источник
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

amanSingh
источник
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. Это должно работать отлично после этого.

b_kik
источник
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, но симптомы были схожими.

GSP
источник
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

user4660857
источник
1

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

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

setenforce 0
Марьям Джафари
источник
0

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

Tasneem Haider
источник
0

В Windows убедитесь, что консоль запущена как администратор

Якобеску Раду
источник
0

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

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

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

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

nohup mongod --dbpath / data / db &

или введите:

mongod --dbpath / data / db

получить выходной поток

Wotchin
источник
Учитывая, что это старый вопрос, и ваш ответ не добавляет ничего, чего еще нет, вы должны спросить себя, является ли это ценным ...
Nic3500
0

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

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

И я установил обычай db-pathв /etc/mongod.conf.

yangsibai
источник
0

Если вам буквально нужна строка, эквивалентная командам в исходном вопросе, вы можете использовать псевдоним:

mongo --eval "db.getSiblingDB('admin').shutdownServer()"

https://stackoverflow.com/a/11777141/7160782

Мухаммед Баят
источник
0

В Centos Server

это работает для меня

chown -R mongod:mongod /var/lib/mongo
Раджив Шарма
источник
0

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

chavy
источник
-2

Fix: sudo mongod

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

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

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

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

sudo mongod

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

 chmod +rwx data/
Шишир
источник
Ни одна из них не является хорошей идеей. Первый может сделать систему более уязвимой для угроз безопасности. Второй может позволить непривилегированным пользователям вмешиваться в ваши базы данных
Монго