Não foi possível criar / abrir o arquivo de bloqueio: /data/mongod.lock errno: 13 Permissão negada

187

Como faço para o mongo usar uma unidade montada no ec2? Eu realmente não entendo. Anexei um volume no ec2 formatado a unidade como root e inicio como root e ainda como root não consigo acessar? Estou executando no ubuntu 12.04. Nenhum outro mongo está sendo executado

Vejo que o mongo criou um diretório 'db' em / data, ou seja, / 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

Abaixo está se eu reiniciar ao remover um arquivo de bloqueio ....

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
fonte
1
Parece que o mongod foi encerrado mal na última vez em que foi executado e não foi capaz de limpar o arquivo mongod.lock criado. Este arquivo existe para impedir que várias instâncias mongod funcionem no arquivo. Se você excluir o arquivo e tente executar mongod novamente, você não deve ter problemas
ACE
2
Veja a pergunta atualizada. Mesmo problema se remover o arquivo de bloqueio
Tampa
Parece ainda haver um problema com o arquivo de bloqueio, quais são as permissões no diretório em que o arquivo de bloqueio está? TBH Eu só vi isso em 2 casos: 1) o arquivo de bloqueio já existe e 2) o mongod não tem permissões para criar o arquivo de bloqueio no local desejado.
ACE
1
Você deve se certificar de que o usuário mongo tenha acesso chown mongodb:mongodb on /var/lib/monogdb, também no diretório de dados.
Hans N. Hjort

Respostas:

117

Eu estava tendo o mesmo problema em uma instância do Ubuntu ec2. Eu estava seguindo este artigo da amazon na página 7:

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

O caminho do Mongodb /etc/mongodb.conffoi definido como /var/lib/mongodb(local de instalação principal e funcionando). Quando mudei para /data/db(volume EBS), recebi 'errno: 13 Permissão negada'.

  1. Primeiro eu corri sudo service mongodb stop.
  2. Então eu costumava ls -laver a qual grupo e proprietário o mongodb foi atribuído /var/lib/mongodb(caminho existente) e mudei o /data/db(novo caminho) com chowne chgrppara combinar. (exemplo sudo chown -R mongodb:mongodb /data/db:)
  3. Atualizei o caminho etc/mongodb.confpara /data/dbe excluí os antigos arquivos mongo no /var/lib/mongodbdiretório.
  4. Então eu corri sudo service mongodb starte esperei cerca de um minuto. Se você tentar se conectar ao 27017 imediatamente, não poderá.
  5. Após uma verificação minuciosa /data/db (volume EBS) e o mongo deve ter colocado um diário, mongod.lock, local.ns, local.0, etc. Se não, tente sudo service mongodb restartverificar um minuto depois.

Passei mais de uma hora com isso. Alterar o grupo e excluir os arquivos antigos provavelmente não é necessário, mas foi o que funcionou para mim.

Este é um ótimo vídeo sobre como montar um volume ebs na instância ec2:

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

Randy Swanson
fonte
8
Eu estava lutando com esse problema e percebi que se você listar sua pasta de destino com ls -lahZ, ele fornecerá o contexto de segurança, o contexto da pasta de dados mongo deve ser definido como: "sudo chcon -R -u system_u -t mongod_var_lib_t / folder / data "isto além das permissões óbvias e combinação usuário: grupo. Espero que ajude.
jmdiego
478

Eu uso esse método para resolver o problema:

sudo chown -R mongodb:mongodb /data/db
Haimei
fonte
8
Adicionar uma -Ropção e é perfeito :)
Adrien
7
isso é: sudo chown -R id -u/ data / db para os não iniciados. :)
rncrtr
8
Acontece que há um problema com as reticências. Tente executar em sudo chown $USER /data/dbvez do comando original.
Paymahn Moghadasian
7
Esta é realmente a resposta correta. @Tampa, você deve aceitar esta resposta. BTW - você não precisa do id -Uou $USERcoisas. O mongo tem seu próprio usuário / grupo. você pode e deve codificar mongodb: mongodb. então o comando é simplesmentesudo chown -R mognodb:mognodb /data/db
guy mograbi
11
O que isso realmente faz? Ele faz o trabalho, mas gostaria de entender :)
zero_cool
81

No meu caso (instância do AWS EC2, Ubuntu) ajudou:

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

E depois disso tudo funcionou bem.

Belhor
fonte
6
Esta é a melhor resposta, é mais provável um problema de permissões com o mongod correndo usuário
davo
2
Sim, esta é a melhor resposta
Vegan Sv
1
Estamos alterando / transferindo a propriedade de /data/dbparaUSERNAME
Saif
52

Você só precisa dar acesso à sua /data/dbpasta.

Digite sudo chown -R <USERNAME> /data/db, substitua <USERNAME>pelo seu nome de usuário.

Você pode encontrar seu nome de usuário digitando whoami.

julien bouteloup
fonte
12

Instalei o mongodb com o EBS em um EC2 com o Ubuntu 14.04, seguindo este tutorial:

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

Mas em vez do chown sugerido, fiz:

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

Para consertar o problema

Evers
fonte
2
Sim, parece que o proprietário deve ser "mongodb" em vez de "root" alguma coisa.
Imskull
10

Eu tive um problema semelhante, o motivo real era que já havia uma sessão mongod em execução na minha tentativa anterior.

Eu corri

killall mongod

e tudo correu exatamente como esperado.

killallO comando enviaria um sinal TERM a todos os processos com um UID real. Portanto, isso mata todas as instâncias em execução do mongod para que você possa começar o seu próprio.

Venky Soorisetty
fonte
Esta é literalmente a resposta mais curta e a única resposta que resolveu meu problema após inúmeras horas ... obrigado!
Moomoochen 9/1018
Fico feliz que ajudou! :) Gostaria que houvesse uma maneira de ajudar as pessoas a encontrarem essa resposta mais facilmente.
Venky Soorisetty
7

A partir de hoje, tentei fazer o caminho para criar / abrir o arquivo de bloqueio: /data/db/mongod.lock errno: 13 Permissão negada Uma instância do mongod já está em execução?, Finalizando e tentei todas as respostas postadas acima para resolver esse problema, portanto, nada funcionou adicionando

sudo chown -R mongodb: mongodb / data / db

A menos que eu tenha adicionado minha permissão de usuário atual ao caminho do local

sudo chown $ USER / data / db

Espero que isso ajude alguém. Também instalei o Mongo DB no meu pi. Felicidades!

Abdullah
fonte
Esta é a solução real para o problema
Sahil Nagpal
6

Eu tive um problema semelhante e segui todas as instruções acima em relação à alteração de proprietários usando o sudo chown etc. Ainda havia uma instância do mongodb em execução em segundo plano após as alterações. Corrida

ps auxw | grep mongo 

me mostrou outras tarefas usando o mongo em execução em segundo plano que não foram fechadas corretamente. Eu executei kill em todos os que estavam rodando e então pude iniciar meu servidor.

Eugene G
fonte
6

Para usuários de mac:
Execute ls -ld / data / db /
Output e algo como drwrx-xr-x 20 singh wheel 680 21 jul 05:49 / data / db /
Onde singh é o proprietário e wheel é o grupo ao qual pertence .
Run sudo chown -R singh: roda / dados / db
Run mongod

amanSingh
fonte
5

A remoção do arquivo mongodb.lock não foi o problema no meu caso. Fiz isso e recebi um erro sobre a porta estar em uso: [initandlisten] listen (): bind () falhou errno: 98 Endereço já em uso no soquete: 0.0.0.0:27017. Encontrei outra solução aqui: incapaz de iniciar o servidor local mongodb com instruções para interromper o processo:

  1. Descubra no netstat qual processo está executando a porta mongodb (27017)

    sudo netstat -tulpn | grep :27017

    A saída será: tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1412 / mongod

  2. Mate o processo apropriado.

    sudo kill 1412 (substitua 1412 pelo seu ID do processo encontrado na etapa 1)

E consegui iniciar o mongodb com sucesso novamente. Acredito que o meu ainda estava fugindo de um desligamento inadequado.

Casey Murray
fonte
4

Para aqueles que enfrentam esse erro no Windows usando o Gerenciador de tarefas, encerre a instância do "mongod.exe" que está sendo executada. Feito isso, exclua permanentemente o arquivo mongo.lock e execute o mongod.exe. Deve funcionar perfeitamente depois disso.

b_kik
fonte
3

Meu mongo (3.2.9) foi instalado no Ubuntu e meu arquivo de log tinha as seguintes linhas:

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 [inicandlisten] dbexit: rc: 100

Portanto, o problema estava nas permissões na pasta / var / lib / mongodb.

sudo chown -R mongodb:mongodb /var/lib/mongodb/
sudo chmod -R 755 /var/lib/mongodb
  • Reinicie o servidor

Corrigido, embora eu perceba que pode não ser muito seguro (é minha própria caixa de desenvolvimento, no meu caso), pouco após a alteração db e autenticação funcionadas.

Nestor Milyaev
fonte
2

No Mycase
No mongodb versão 2.6.11, o diretório de banco de dados padrão é/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

vijay
fonte
deve ser `id -u`
marcus
2

Eu tive o mesmo problema quando executei o comando mongod após instalá-lo no Windows10. Parei o serviço mongodb e o iniciei novamente. Trabalhando como um encanto

Comando para parar o serviço mongodb (no Windows): net stop mongodb

Comando para iniciar o servidor mongodb: mongod --dbpath PATH_TO_DATA_FOLDER

aditya
fonte
1

Em uma instância do Fedora 18 com Mongo 2.2.4, consegui solucionar um erro semelhante desativando o SELinux chamando setenforce 0como root.

BTW, este era um ambiente corporativo, não uma instância do Amazon EC2, mas os sintomas eram semelhantes.

GSP
fonte
1

No meu caso, o problema foi resolvido removendo o arquivo de log .

sudo rm /log/mongod.log

Embora a mensagem de erro se refira especificamente ao arquivo de bloqueio :

exception in initAndListen: 10309 Unable to create/open lock file: 
/data/mongod.lock errno:13 Permission denied 
Is a mongod instance already running?, terminating
Ian Mercer
fonte
Isso me apontou na direção certa. No meu servidor, tive que executar o sudo rm /var/log/mongodb/mongodb.log e o sudo rm /tmp/mongodb-27017.sock.
Keith John Hutchison
1

Depois de matar o mongod, tive o mesmo problema: não foi possível iniciar o 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

Depois de excluir o bloqueio diretamente, posso reiniciar o processo mongod.

$>  rm -rf /data/mongodbtest/replset/data/mongod.lock
Andy Dong
fonte
1

Isto é o que eu fiz para corrigir o problema:

$ sudo mkdir -p / data / db

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

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

e então começar o mongo ...

$ mongod

user4660857
fonte
1

Eu tive o mesmo problema.

Eu o resolvi alterando o status do selinux para permissivo com o comando abaixo:

setenforce 0
Maryam Jafari
fonte
0

Faça ls -lapara conhecer o usuário e o grupo de / var / log / mongodb. Então não sudo chown -R user:group /data/db agora executar sudo service mongodb start. Verifique o status comsudo service mongodb status

Tasneem Haider
fonte
0

No Windows, verifique se o console foi iniciado como administrador

Iacobescu Radu
fonte
0

Você pode tentar por essas maneiras. 1º.

sudo chown -R mongod: mongod / data / db

mas, algumas vezes, isso não é útil. 2nd. se a maneira acima não for útil, você pode tentar fazer isso:

mkdir / data / db # como o caminho de armazenamento do banco de dados

nohup mongod --dbpath / data / db &

ou digite:

mongod --dbpath / data / db

para obter o fluxo de saída

Wotchin
fonte
Considerando que esta é uma questão antiga, e sua resposta não acrescenta nada que já não esteja lá, você deve perguntar a si próprio se ele é valioso ...
Nic3500
0

Para mim no CentOS 6.x:

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

E constituí um costume db-pathno /etc/mongod.conf.

yangsibai
fonte
0

No servidor Centos

isso funciona para mim

chown -R mongod:mongod /var/lib/mongo
Rajiv Sharma
fonte
0

Ocorreu um erro semelhante, corrigido com a remoção de todos os registros (no meu diretório de casos journalse arquivo mongo.lock...), depois verifique a porta com sudo lsof -i:27017, se smth estiver sendo executada kill <PID of the process>, e tente executar ./mongodnovamente

chavy
fonte
-2

Consertar: sudo mongod

Eu tive o mesmo problema, executando mongod com privilégios sudo corrigido. Vindo de um ambiente Windows, usei apenasmongod para iniciar o daemon, parece que precisamos dos privilégios de superusuário para acessar / data / db.

Você também pode conceder aos usuários não raiz permissões de leitura e gravação para esse caminho. verifique as respostas acima para obter um guia!

aimuhire
fonte
Correndo mongod como root não é necessário e pode tornar o sistema mais vulnerável a ataques
qbert220
-2

Toda vez que você tenta iniciar o mongod, basta digitar

sudo mongod

ou se quiser consertar isso permanentemente, tente conceder rwx à pasta / data / db

 chmod +rwx data/
Shishir
fonte
Nenhuma dessas é uma boa ideia. O primeiro poderia tornar o sistema mais vulnerável a explorações de segurança. O segundo poderia permitir que usuários sem privilégios para mexer com seus bancos de dados mongo
qbert220