在Windows上安裝Oracle VM VirtualBox Linux系統,共享目錄的原理是什麼?

在Windows上安裝Oracle VM VirtualBox虛擬機,在虛擬機中安裝Linux系統,使用VirtualBox提供的共享目錄功能,在Linux中mount Windows上的共享目錄。這個原理是什麼?是Linux是通過虛擬機的虛擬網路訪問的嗎?還是直接讀Windows的硬碟?


剛才特意跑去實驗了一下,VirtualBox 的目錄共享是不依賴網路的。

注意一下你是怎麼掛載 VirtualBox 共享目錄的:

mount -t vboxsf [share name] [mount point]

這個命令背後的 backend 實際上就是 vboxsf,這是一個內核模塊,你 lsmod | grep vboxsf 就能看到。

原理實際上很簡單,VM 軟體藉助自己的雙重身份很容易做到這一點。其一,guest 的所有硬體訪問都要經過 VM 軟體;其二,VM 軟體在 host 上只是一個 user space 的普通程序 (暫時不管內核和內存的硬體虛擬化)。因此,VirtualBox 可以告訴 guest 說,vboxsf 就是一個硬體硬碟。但實際上,當 guest 去訪問這個「硬體」的時候,VirtualBox 就悄悄地把文件系統訪問影射到 host 對應的目錄中去了。

這裡只說了個大概,如果題主想詳細了解的話就得讀 vboxsf 模塊和 VirtualBox 相應組件的源碼了。


推薦閱讀:

Linux文件系統中/bin、/sbin、/usr/bin、/usr/sbin、/usr/local/bin、/usr/local/sbin文件夾的區別是什麼?
怎麼搭建學習Linux內核的運行、調試環境?
在現代的Unix操作系統上執行sudo rm -rf /會發生什麼?
有什麼理由選擇收費的RHEL而不用免費的Centos?
為什麼那麼多「國產」操作系統?

TAG:操作系統 | Linux | 甲骨文Oracle | 虛擬機 | VirtualBox |