У меня есть 120 ГБ SSD-накопитель с двумя разделами (NTFS с Windows и ext4 с Ubintu) и жесткий диск NTFS объемом 2 ТБ, общий для Windows и Ubuntu.
Я настроил мой жесткий диск для правильной установки при загрузке системы:
# /etc/fstab: static file system information.
UUID=B400515500512022 /media/B400515500512022 ntfs-3g auto,users,uid=1000,gid=1001,fmask=113,dmask=002,utf8 0 0
Я также создал специальную группу (gid=1001
) для обработки разрешений и добавил mongodb
пользователя к нему:
Итак, теперь группа ntfsdrive
имеет надлежащие разрешения (rw
для файлов и rwx
для каталогов) для всего диска, включая папку mongodb
:
drwxrwxr-x 1 leonid ntfsdrive 4096 Feb 6 12:51 mongodb
Но mongodb все еще отказывается работать на этом диске:
Wed Feb 6 12:51:31 [initandlisten] MongoDB starting : pid=7480 port=27017 dbpath=/media/B400515500512022/mongodb 64-bit host=ubuntu
Wed Feb 6 12:51:31 [initandlisten] db version v2.2.3, pdfile version 4.5
Wed Feb 6 12:51:31 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Wed Feb 6 12:51:31 [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
Wed Feb 6 12:51:31 [initandlisten] options: { config: "/etc/mongodb.conf", dbpath: "/media/B400515500512022/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log" }
Wed Feb 6 12:51:31 [initandlisten] journal dir=/media/B400515500512022/mongodb/journal
Wed Feb 6 12:51:31 [initandlisten] recover : no journal files present, no recovery needed
Wed Feb 6 12:51:31 [initandlisten] info preallocateIsFaster couldn't run due to: couldn't open file /media/B400515500512022/mongodb/journal/tempLatencyTest for writing errno:1 Operation not permitted; returning false
Wed Feb 6 12:51:31 [initandlisten] exception in initAndListen: 13516 couldn't open file /media/B400515500512022/mongodb/journal/j._0 for writing errno:1 Operation not permitted, terminating
Wed Feb 6 12:51:31 dbexit:
Wed Feb 6 12:51:31 [initandlisten] shutdown: going to close listening sockets...
Wed Feb 6 12:51:31 [initandlisten] shutdown: going to flush diaglog...
Wed Feb 6 12:51:31 [initandlisten] shutdown: going to close sockets...
Wed Feb 6 12:51:31 [initandlisten] shutdown: waiting for fs preallocator...
Wed Feb 6 12:51:31 [initandlisten] shutdown: lock for final commit...
Wed Feb 6 12:51:31 [initandlisten] shutdown: final commit...
Wed Feb 6 12:51:31 [initandlisten] shutdown: closing all files...
Wed Feb 6 12:51:31 [initandlisten] closeAllFiles() finished
Wed Feb 6 12:51:31 [initandlisten] journalCleanup...
Wed Feb 6 12:51:31 [initandlisten] removeJournalFiles
Wed Feb 6 12:51:31 [initandlisten] shutdown: removing fs lock...
Wed Feb 6 12:51:31 dbexit: really exiting now
У меня нет проблем с запуском mongodb с той же конфигурацией (включая права доступа к папке mongodb
) на моем диске ext4
.
Есть ли способ решить эту проблему, или мой единственный вариант - добавить раздел ext4
на мой жесткий диск?
После того, как я сам это воспроизвел, оказалось, что использование указанных вами параметров монтирования позволяет пользователю mongodb
выполнять запись в том NTFS, но есть кое-что конкретное, что MongoDB пытается сделать с файлами, которые не разрешены этими опции; возможно, он не может установить umask или владельца для своих файлов именно так, как он хочет.
Решение состоит в том, чтобы использовать опцию permissions
при монтировании тома NTFS, а не указывать владельца явно. Для получения дополнительной информации см. Справочную страницу ntfs-3g .
Таким образом, /etc/fstab
будет выглядеть следующим образом:
UUID=B400515500512022 /media/B400515500512022 ntfs-3g defaults,locale=en_US.UTF-8,permissions 0 0
На новом томе NTFS, смонтированном в /media/B400515500512022
, вы можете запустить:
sudo mkdir /media/B400515500512022/mongodb
sudo chown mongodb:mongodb /media/B400515500512022/mongodb
перед запуском: [ 1112]
sudo -u mongodb mongod --dbpath /media/B400515500512022/mongodb
Вы можете проверить, не вызывает ли это проблем при доступе к файлам из Windows.
В качестве временного решения я переконфигурировал mongodb
скрипт upstart. Я настроил его для запуска mongodb
, используя моего собственного пользователя вместо mongodb
пользователя.
Для этого я изменил следующую строку в файле /etc/init/mongodb.conf
:
if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --chuid mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf; fi
Оба параметра --chuid mongodb:ntfsdrive
и --chuid leonid
привели к одной и той же ошибке, поэтому я полностью удалил параметр --chuid
Исходя из этого:
if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --quiet --exec /usr/bin/mongod -- --config /etc/mongodb.conf; fi
Запуск mongodb
с использованием моего собственного пользователя не является хорошим решением, поэтому я думаю, что разделю свой жесткий диск, чтобы предотвратить подобные проблемы.