不得不承認centos6較centos5發生了很大的變化,在新部署的centos 6.4上又遇到nfs掛載的問題。問題現象是,在配置完nfs后,無論配置里指定的是何用戶,掛載成功后顯示的只能是nobody用戶,本想通過修改/etc/passwd和/etc/group對應的uid和gid號解決,發現重新掛載后,用戶仍然是nobody 。
造成該問題的原因是,在centos 6版本中默認使用的nfs-v4版本,其提供了稱為rpc.idmapd 的守護進程,並使用 /etc/idmapd.conf 的配置文件。當請求加載nfsv4 時,該守護進程將處理 UID 和 GID 映射。默認使用nis,沒有nis它會自動映射成nobody用戶。
既然找到了原因,找解決方法也就不難了,大致找了下網上的解決方法,分如下兩種。
方法一:mount中指定參數法
在mount掛載的時候指定使用v3版本去掛載,如下:
mount -t nfs -o vers=3 ip:/data1 /data1
顯然不推薦該方法,既然有了V4版本,其肯定較V3版本做了很多優化,如果再用V3,顯然跟不上時代的步伐 。
方法二:修改/etc/idmapd.conf文件
修改前,先看下為什么會mount成nobody,在/etc/idmapd.conf文件中,mapping配置下有如下兩句 。
[Mapping] Nobody-User = nobody Nobody-Group = nobody
有人肯定說,直接修改這兩句,變成想要的用戶和組不就行了 ? 當然沒這么簡單,這里改了后,會發現mount的目錄只有讀的權限,沒有寫的權限 。想在徹底的解決該文件,只需要客戶端和服務端各改一行就行了。修改方法為,取消/etc/idmapd.conf中如下行的注釋,改為你所使用的根域名:
#Domain = local.domain.edu
如:都改為:
Domain = 361way.com
更改完成后,重啟idmapd服務:
service rpcidmapd restart
至此,問題解決。記得是客戶端和服務端都要修改才行,只改一處,問題仍然無法解決 。另外在umount的過程中,還可能遇到無法umount的問題:
root@test:/# umount /data1/nfs/ umount.nfs: /data1/nfs: device is busy umount.nfs: /data1/nfs: device is busy
遇到該問題時只需要使用fuser命令就可以解決:
root@test:/# fuser -km /data1/nfs/ 或 root@test:/# fuser -f /data1/nfs/
執行完上面的操作后,再去umount就可以了。fuser上面用到的幾個參數的意義如下:
-f silently ignored (for POSIX compatibility)
-i ask before killing (ignored without -k)
-k kill processes accessing the named file
-m show all processes using the named filesystems
好文章,轉載分享