解決VirtualBox的共用資料夾無法建立軟連結

我的電腦我習慣上桌面還是用Windows,但是開Server下指令還是Linux系統方便多了,所以開發時需要執行東西我會用VirtualBox開Ubuntu來進行。

VirtualBox有個方便的功能稱為共用資料夾(shared folder),因此我習慣將在Windows的workspace利用共用資料夾分享到Ubuntu (VM)裡面,然後由Ubuntu來開server。

但是最近開始玩Node.js發現,VirtualBox共用資料夾安裝是無法增加軟連結(Symbolic link)。因為安裝npm package的時候經常需要增加軟連結的權限,因此安裝的最後就會出現錯誤訊息!

npm ERR! Error: EROFS, symlink '../express/bin/express'
npm ERR! If you need help, you may report this log at:
npm ERR!
npm ERR! or email it to:
npm ERR!     

npm ERR! System Linux 2.6.38-13-generic
npm ERR! command "/PATH-To-NODE/bin/node" "/PATH-To-NODE/bin/npm" "install" "express"
npm ERR! cwd /media/sf_SHARED_FOLDER/test
npm ERR! node -v v0.8.15
npm ERR! npm -v 1.1.66
npm ERR! path ../express/bin/express
npm ERR! code EROFS
npm ERR! errno 56
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /media/sf_SHARED_FOLDER/test/npm-debug.log
npm ERR! not ok code 0

而在console執行建立軟連結的指令也會錯誤

$ ln -sf /SOME_PATH/SOME_FILE /media/sf_SHARED_FOLDER/A_SYMBOLIC_LINK
ln: creating symbolic link `/media/sf_SHARED_FOLDER/A_SYMBOLIC_LINK': Read-only file system

google之後看到這篇文章發現原來python virtualenv也有類似的問題。總之在HOST OS為Windows 7、Client OS (VM)為 Ubuntu Linux的時候,共用資料夾就會發生軟連結無法寫入的情況!

修正方法如下,請在HOST (Windows) 開啟cmd (需要管理員權限開啟):

> c:OracleVirtualBoxVBoxManage setextradata YOURVMNAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/YOURSHAREFOLDERNAME 1

上面的參數請視情況修改:

  • c:OracleVirtualBox : 這是VirtualBox的預設資料夾,如果安裝在不同資料夾,請自行修改。
  • YOURVMNAME : 請修改為你要開啟的VM名稱。
  • YOURSHAREFOLDERNAME :修改為VM設定中共用資料夾的名稱

確認是不是設定成功了,可以用這個指令查看:

> c:OracleVirtualBoxVBoxManage getextradata YOURVMNAME enumerate

設定完畢後就可以順利使用了!

如果設定後出現這樣的錯誤:

ln: failed to create symbolic link `LINKNAME': Protocol error

表示你的VirtualBox不是用管理員權限打開。