我有 120 GB 的 SSD 驱动器,其中有两个分区(Windows 的 NTFS 和 Ubintu 的 ext4)以及在 Windows 和 Ubuntu 之间共享的 2TB NTFS HDD。
我将我的硬盘配置为在系统启动时正确安装:
# /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:x:1001:leonid,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
我的硬盘驱动器添加分区?
答案1
我自己复制了此操作后,看来使用您指定的挂载选项允许用户mongodb
写入 NTFS 卷,但 MongoDB 试图对这些文件执行一些这些选项不允许的特定操作;也许它无法按照它想要的方式设置其文件的 umask 或所有权。
解决方案是在挂载 NTFS 卷时使用该permissions
选项,而不是明确指定所有者。请参阅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
跑步前:
sudo -u mongodb mongod --dbpath /media/B400515500512022/mongodb
您可能希望检查这不会在从 Windows 访问文件时造成问题。
答案2
作为临时解决方案,我重新配置了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
不是一个好的解决方案,所以我想我会对我的硬盘驱动器进行分区以防止类似的问题。