2013年10月28日

解決mount cifs時出現"is not a valid block device"的問題


 

最近在 Linux (CentOS 5.5) 測試要掛載 CIFS時遇上了奇怪的問題,
這邊假設我們要掛載的 CIFS 資料夾是 //10.0.0.1/aaa/bbb,
其中 //10.0.0.1/aaa 是設定分享的資料夾,而 bbb 則是其中的子資料夾,
此時如果要直接掛載 //10.0.0.1/aaa/bbb,可能就會遇上以下錯誤:
[root@localhost ~]# mount -t cifs //10.0.0.1/aaa/bbb /mnt -o user=u,pass=p
mount: //10.0.0.1/aaa/bbb is not a valid block device

此時若下dmesg | tail,就會看到這樣的錯誤:
[root@localhost ~]# dmesg | tail
 CIFS VFS: cifs_mount failed w/return code = -6

然而相同的指令,直接掛載分享的 //10.0.0.1/aaa 資料夾卻可以成功:
[root@localhost ~]# mount -t cifs //10.0.0.1/aaa /mnt -o user=u,pass=p
[root@localhost ~]# 

在仔細比對指令除了資料夾路徑外沒有差別後,我開始找資料看到底是哪兒發生錯誤,
最後找到這篇:mount: //10.52.0.102/Jim/dpc is not a valid block device
其中最關鍵的一句在這兒:
Hi, I would assume that you need to modify the XP share to point to the Jim/dpc, 
not only dpc. (or add a 2nd share for the Jim/dpc).
I believe you can only directly mount what is shared, but not any contents of that share.
也就是說在預設的情況下我們只能直接掛載分享的那個資料夾,而不能掛子資料夾。

雖然知道預設不能掛子資料夾,但這也太麻煩了吧!
所以又找了一些資料,後來查到只要安裝特定的套件即可,
若要確認是否已安裝了套件,可以用以下指令來確認:
(因為裝完套件後就能支援mount.cifs的用法了,若找不到就是還沒裝)
[root@localhost ~]# mount.cifs
-bash: mount.cifs: command not found

至於要怎麼安裝所需的套件呢?在CentOS可以下接下來的指令:
[root@localhost ~]# yum install samba-client

若和我一樣無法連網路,那麼就得先下載所需的 rpm 檔後再自行安裝,
因為我的仍是舊版的 CentOS 5.5,所需套件可至vault.centos.org下載,
當然因為不是透過 yum,一開始得自行解決 dependency 的問題:
[root@localhost ~]# rpm -iUhv samba-client-3.0.33-3.28.el5.x86_64.rpm 
error: Failed dependencies:
 samba-common = 0:3.0.33-3.28.el5 is needed by samba-client-3.0.33-3.28.el5.x86_64
[root@localhost ~]# rpm -iUhv samba-client-3.0.33-3.28.el5.x86_64.rpm 
error: Failed dependencies:
 samba-common = 0:3.0.33-3.28.el5 is needed by samba-client-3.0.33-3.28.el5.x86_64
[root@localhost ~]# rpm -iUhv samba-common-3.0.33-3.28.el5.x86_64.rpm 
error: Failed dependencies:
 libsmbclient = 0:3.0.33-3.28.el5 is needed by samba-common-3.0.33-3.28.el5.x86_64

我們看到這次所需的有三個套件,由最後面的開始安裝即可:
[root@localhost ~]# rpm -iUhv libsmbclient-3.0.33-3.28.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:libsmbclient           ########################################### [100%]
[root@localhost ~]# rpm -iUhv samba-common-3.0.33-3.28.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:samba-common           ########################################### [100%]
[root@localhost ~]# rpm -iUhv samba-client-3.0.33-3.28.el5.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:samba-client           ########################################### [100%]

裝完後再下 mount.cifs 就找得到指令了,而且掛載 cifs 的子資料夾也正常囉!

for Ubuntu:
sudo apt-get install smbfs


本文出自符碼記憶,請勿全文轉載,部份轉載請註明出處 關鍵字:CentOS, Ubuntu, mount, cifs, mount.cifs, is not a valid block device, yum, rpm, samba-client,  smbfs
參考資料:


更多精選推薦文章