Kilit dosyası oluşturulamıyor / açılamıyor: /data/mongod.lock errno: 13 İzin reddedildi


187

EC2'de takılı bir sürücüyü kullanmak için mongo nasıl edinilir? Ben gerçekten anlamıyorum. Ec2'de bir birimi sürücüye root olarak biçimlendirdim ve root olarak başladım ve root olarak erişemiyorum? Ubuntu 12.04 üzerinde koşuyorum. Başka mongo koşmuyor

Ben mongo / veri yani / data / db bir 'db' dir yaptı

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

Aşağıda bir kilit dosyasını kaldırdığımda yeniden başlatırsam ....

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
Görünüşe göre mongod son çalıştırıldığında kötü kapatıldı ve oluşturduğu mongod.lock dosyasını temizleyemedi. Bu dosya, birden çok mongod örneğinin dosya üzerinde çalışmasını önlemek için vardır. Dosyayı silip mongod'u tekrar çalıştırmayı denerseniz sorun yaşamamalısınız
ACE

2
Güncellenmiş soruya bakın. Kilit dosyası kaldırılırsa aynı sorun
Tampa

Lockfile ile ilgili hala bir sorun var gibi görünüyor, lockfile içinde dizinde izinleri nelerdir? TBH Bunu sadece 2 durumda gördüm: 1) kilit dosyası zaten var ve 2) mongodun, istenen yerde kilit dosyası oluşturma izinleri yok.
ACE

1
Mongo kullanıcısının chown mongodb:mongodb on /var/lib/monogdbveri dizininde de erişime sahip olduğundan emin olmalısınız .
Hans N. Hjort

Yanıtlar:


117

Aynı sorunu bir Ubuntu ec2 örneğinde yaşıyordum. Sayfa 7'deki amazon makalesini takip ediyordum:

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

Mongodb yolu, (birincil kurulum konumu ve çalışma) /etc/mongodb.confolarak ayarlandı /var/lib/mongodb. /data/db(EBS hacmi) olarak değiştirdiğimde 'errno: 13 İzin verilmedi' alıyordum.

  1. Önce koştum sudo service mongodb stop.
  2. Sonra ls -lahangi grup ve sahibi mongodb /var/lib/mongodb(mevcut yol) atandı görmek için kullanılır ve /data/db(yeni yol) ile chownve chgrpeşleştirmek için değiştirdim. (örnek: sudo chown -R mongodb:mongodb /data/db)
  3. Sonra yolu güncellenen etc/mongodb.confiçin /data/dbve eski Mongo dosyaları silindi /var/lib/mongodbdizine.
  4. Sonra koştum sudo service mongodb startve bir dakika kadar bekledim. 27017'ye hemen bağlanmaya çalışırsanız bağlanamazsınız.
  5. Bir dakika sonra kontrol /data/db(EBS hacmi) ve mongo bir günlük, mongod.lock, local.ns, local.0, vb yerleştirmiş olmalıdır. Değilse sudo service mongodb restartbir dakika sonra deneyin ve kontrol edin.

Bununla sadece bir saatten fazla zaman geçirdim. Grubu değiştirmek ve eski dosyaları silmek muhtemelen gerekli değildir, ama benim için işe yaradı.

Bu, bir ebs birimini ec2 örneğine monte etme hakkında harika bir video:

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


8
Bu sorunla mücadele ediyordum ve hedef klasörünüzü ls -lahZ ile listelerseniz size güvenlik bağlamı vereceğini fark ettiniz, mongo veri klasörünün bağlamı şu şekilde ayarlanmalıdır: "sudo chcon -R -u system_u -t mongod_var_lib_t / folder / data "ifadesinin yanı sıra bariz izinlerin ve user: grup kombinasyonunun yanında. Umarım yardımcı olur.
jmdiego

478

Sorunu çözmek için bu yöntemi kullanıyorum:

sudo chown -R mongodb:mongodb /data/db

8
Bir -Rseçenek ekleyin ve mükemmel :)
Adrien

7
bu: sudo chown -R id -u/ data / db başlatılmamış olanlar için. :)
rncrtr

8
Geri dönüşlerde bir sorun olduğu ortaya çıktı. sudo chown $USER /data/dbOrijinal komut yerine çalıştırmayı deneyin .
Paymahn Moghadasian

7
Bu gerçekten doğru cevap. @Tampa bu yanıtı kabul etmelisin. btw - id -Uveya $USERşeye ihtiyacınız yok . mongo'nun kendi kullanıcısı / grubu vardır. sabit kodunu yapabilirsiniz ve gerekir: mongodb: mongodb. sudo chown -R mognodb:mognodb /data/db
Yani

11
Bu aslında ne yapıyor? Çalışıyor, ancak anlamak
isterim

81

Benim durumumda (AWS EC2 örneği, Ubuntu) yardımcı oldu:

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

Ve ondan sonra her şey yolunda gitti.


6
Bu en iyi cevap, büyük olasılıkla mongod
davo

2
Evet, bu en iyi cevap
Vegan Sv

1
Biz sahipliğini aktarma / değişiyor /data/dbiçinUSERNAME
Saif

52

Sadece /data/dbklasörünüze erişim izni vermelisiniz .

Yazın sudo chown -R <USERNAME> /data/db, <USERNAME>kullanıcı adınızla değiştirin .

Kullanıcı adınızı yazarak bulabilirsiniz whoami.



10

Ben de benzer bir sorun vardı, asıl nedeni önceki denememde zaten çalışan mongod oturumu vardı.

Koştum

killall mongod

ve her şey beklendiği gibi koştu.

killallkomutu, gerçek bir UID ile tüm işlemlere bir TERM sinyali gönderir. Böylece bu, mongodun tüm çalışan örneklerini öldürür, böylece kendi başınıza başlayabilirsiniz.


Bu kelimenin tam anlamıyla en kısa cevap ve sayısız saatten sonra sorunumu çözen tek cevap ... teşekkürler!
moomoochen

Yardımcı oldu sevindim! :) İnsanların bu cevabı daha kolay bulmasına yardımcı olmanın bir yolu olmasını diliyorum.
Venky Soorisetty

7

Bugün itibariyle yolumu almaya çalıştı 13 İzinli bir mongod örneği zaten sonlandırma ?, mı çalışıyor yalanladı: /data/db/mongod.lock errno: oluşturmak / açık kilit dosyası ve tüm cevabı için yukarıda yayınlanan çalıştı Bu sorunu çözmek, böylece ekleyerek hiçbir şey işe yaramadı

sudo chown -R mongodb: mongodb / veri / db

Geçerli kullanıcı iznimi tarafından konum yoluna

sudo chown $ USER / data / db

Umarım bu birine yardımcı olur. Ayrıca sadece pi benim Mongo DB yükledim. Şerefe!


Bu sorunun asıl çözümü
Sahil Nagpal

6

Benzer bir sorun vardı ve sudo chown vb kullanarak sahipleri değiştirme ile ilgili yukarıdaki tüm talimatları takip etti. Hala değişikliklerden sonra arka planda çalışan mongodb bir örneği vardı. Koşu

ps auxw | grep mongo 

bana düzgün kapatılmayan arka planda çalışan mongo kullanarak diğer görevleri gösterdi. Sonra çalışan tüm öldürmek koştu ve sonra sunucumu başlatabilir.


6

Mac kullanıcıları için:
Run ls -ld / veri / db /
Çıktı gibi bir şey olmalıdır drwrx-xr-x 20 Singh tekerleği 680 21 Temmuz 05:49 / veri / db /
Nerede Singh sahibi ve tekerlek ait olduğu gruptur . Sudo chown
çalıştırmak -R singh: tekerlek / veri / db Mongod
çalıştırın


5

Benim durumumda mongodb.lock dosyasını kaldırmak sorun değildi. Bunu yaptım ve kullanımda olan bağlantı noktası hakkında bir hata aldım: [initandlisten] listen (): bind () başarısız errno: 98 Adres soket için zaten kullanılıyor: 0.0.0.0:27017. Burada başka bir çözüm buldum: mongodb yerel sunucuyu işlemi öldürme talimatları ile başlatamıyorum :

  1. Netstat'tan hangi işlemin mongodb portunu çalıştırdığını öğrenin (27017)

    sudo netstat -tulpn | grep :27017

    Çıktı: tcp 0 0 0.0.0.0:27017 0.0.0.0:* DİNLE 1412 / mongod

  2. Uygun işlemi öldür.

    sudo kill 1412 (1412'yi 1. adımda bulunan işlem kimliğinizle değiştirin)

Ve mongodb'a tekrar başarılı bir şekilde başlayabildim. Bence hala uygunsuz bir kapanıştan kaçıyordum.


4

Görev Yöneticisi'ni kullanarak Windows'ta bu hatayı yaşayanlar için çalışan "mongod.exe" örneğini sonlandırın. Bu yapıldıktan sonra mongo.lock dosyasını kalıcı olarak silin ve mongod.exe'yi çalıştırın. Bundan sonra mükemmel bir şekilde çalışmalıdır.


4

Mongo'um (3.2.9) Ubuntu'ya yüklendi ve günlük dosyamda şu satırlar vardı:

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

Sorun / var / lib / mongodb klasöründeki izinlerde idi.

sudo chown -R mongodb:mongodb /var/lib/mongodb/
sudo chmod -R 755 /var/lib/mongodb
  • Sunucuyu yeniden başlatın

Her ne kadar çok güvenli olmayabilir (benim durumumda benim kendi dev kutusu) fark, her ne kadar db ve kimlik doğrulama çalıştı biraz takip, düzeltildi.


2

Mycase'de
Mongodb sürüm 2.6.11'de varsayılan veri tabanı dizini/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


id -u olmalıdır
marcus

2

Windows 10'a yükledikten sonra mongod komutunu çalıştırdığımda da aynı sorunu yaşadım. Mongodb servisini durdurdum ve tekrar başladım. Bir cazibe gibi çalışmak

Mongodb hizmetini durdurma komutu (pencerelerde): net stop mongodb

Mongodb sunucusunu başlatma komutu: mongod --dbpath PATH_TO_DATA_FOLDER


1

Mongo 2.2.4 örneğine sahip bir Fedora 18'de, SELinux'u setenforce 0root olarak çağırarak benzer bir hatayla karşılaşabildim .

BTW, bu bir Amazon EC2 örneği değil, kurumsal bir ortamdı, ancak belirtiler benzerdi.


1

Benim durumumda günlük dosyası kaldırılarak sorun çözüldü .

sudo rm /log/mongod.log

Hata mesajı özellikle kilit dosyasına atıfta bulunsa da :

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

Bu beni doğru yönde gösterdi. Sunucumda sudo rm /var/log/mongodb/mongodb.log ve sudo rm /tmp/mongodb-27017.sock yapmak zorunda kaldım.
Keith John Hutchison

1

Mongodu öldürdükten sonra aynı problemi yaşadım: Mongod'a başlayamadım.

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

Kilidi doğrudan sildikten sonra, mongod işlemini yeniden başlatabilirim.

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

1

Sorunu çözmek için yaptığım şey bu:

$ sudo mkdir -p / data / db

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

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

ve sonra mongo'yu başlatmak için ...

$ mongod


1

Ben de aynı problemi yaşadım.

Aşağıdaki komutla izin vermek için selinux durumunu değiştirerek çözdüm:

setenforce 0

0

Do ls -la/ var / log / MongoDB ait kullanıcı ve grup bilmek. Sonra sudo chown -R user:group /data/db Şimdi çalıştırın sudo service mongodb start. Durumu şununla kontrol edin:sudo service mongodb status



0

Bu yollarla deneyebilirsiniz. 1 inci.

sudo chown -R mongod: mongod / veri / db

ancak bazı zamanlarda bu yararlı değildir. 2. yukarıdaki yol işe yaramazsa, bunu yapmaya çalışabilirsiniz:

veritabanı depolama yolu olarak mkdir / data / db #

nohup mongod --dbpath / data / db &

veya yazın:

mongod --dbpath / veri / db

çıkış akışını almak için


Bu göz önüne alındığında eski bir sorudur ve cevap o değerli olup olmadığına ... kendini sormalısınız, zaten yoksa bir şey katmıyor
Nic3500

0

Benim için CentOS 6.x'te:

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

Ve ben bir özel belirledik db-pathiçinde /etc/mongod.conf.



0

Centos Sunucusunda

bu benim için çalışıyor

chown -R mongod:mongod /var/lib/mongo

0

Benzer bir tüm kayıtları kaldırarak ile sabit hata, (benim durumumda dizinde var journalsve dosyayı mongo.lock...o çek portu sonra) sudo lsof -i:27017yetiremediğin üzerinde çalışan eğer, kill <PID of the process>ve çalıştırmayı ./mongodtekrar


-2

Düzeltme: sudo mongod

Aynı sorunu yaşadım , mongod'u sudo ayrıcalıklarıyla çalıştırmak sorunu çözdü . Windows ortamından geldim,mongod arka plan programını başlatmak için , görünüşe göre / data / db'ye erişmek için süper kullanıcı ayrıcalıklarına ihtiyacımız var.

Ayrıca, kök olmayan kullanıcılara bu yola Okuma ve Yazma izinleri de verebilirsiniz. bir rehber için yukarıdaki cevapları kontrol edin!


Mongod'u root olarak çalıştırmak gerekli değildir ve sistemi istismarlara karşı daha savunmasız hale getirebilir
Qbert220

-2

Mongod'u başlatmaya çalıştığınızda her zaman şunu yazın

sudo mongod

veya bunu kalıcı olarak düzeltmek istiyorsanız / data / db klasörüne rwx premission vermeye çalışın

 chmod +rwx data/

Bunların hiçbiri iyi bir fikir değil. Birincisi, sistemi güvenlik açıklarına karşı daha savunmasız hale getirebilir. İkincisi, ayrıcalıksız kullanıcıların mongo veritabanlarınızı kurcalamasına izin verebilir
qbert220
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.