一,用samba實現host與guest共享文件
Samba簡介:SMB(Server Messages Block,信息服務塊)是一種在局域網上共享文件和打印機的一種通信協議,它為局域網內的不同計算機之間提供文件及打印機等資源的共享服務。SMB協議是客戶機/服務器型協議,客戶機通過該協議可以訪問服務器上的共享文件系統、打印機及其他資源。
1,在host上創建共享文件夾,並設置權限。
Mkdir /var/share
Chmod 777 /var/share
我們訪問該共享文件夾都是以others用戶來訪問的,所以others組權限要設置為7.也就是對應的最后一個7。
2, 檢查是否已安裝samba: rpm -qa | grep samba
samba-common-3.6.9-151.el6_4.1.x86_64
samba-3.6.9-151.el6_4.1.x86_64
samba-winbind-clients-3.6.9-151.el6_4.1.x86_64
samba-client-3.6.9-151.el6_4.1.x86_64
samba-winbind-3.6.9-151.el6_4.1.x86_64
Samba安裝包說明:
samba-common-xx //主要提供samba服務器的設置文件與設置文件語法檢驗 程序
samba-client-xx//客戶端軟件,主要提供linux主機作為客戶端時,所需要 的工具指令集
samba-xx //服務器端軟件,主要提供samba服務器的守護程序,共享 文檔,日志的輪替,開機默認選項
否則,安裝samba軟件包:
Yum install samba
3,設置配置文件,添加一個共享文件夾,並設置權限。
vi smb.conf,在配置文件中添加如下內容:
[share]
path = /var/share //指定共享目錄
available = yes
browseable = yes //設置為no表示所有Samba用戶的宿主目錄不能被看到, 只有登錄用戶才能看到自己的宿主目錄共享;這樣設置 可以加強Samba服務器的安全性。
public = yes //該目錄對所有samba用戶可見
writeable =yes //設置共享目錄是否可寫
4,創建賬戶
Touch /etc/samba/smbpasswd
Useradd test1
Passwd test
Smbpasswd –a test1.
OK,創建好賬戶test1.
注意:smb賬戶首先必須是系統賬戶。所以先創建系統賬戶。
5,修改客戶機(例如xp)的C:\windows\system32\drivers\etc\lmhosts.sam
在文件最后添加如下內容:
10.0.2.4 smbserver
該操作可以增加訪問smb的IP。默認是10.0.2.2;
注:該步驟可省略。
6,重啟主機的samba服務。Service smb restart
7, 在host端通過命令啟動虛擬機,增加選項:-smb /var/share
8, 在客戶機運行中輸入: \\10.0.2.4或10.0.2.2訪問主機共享文件夾。
二,通過NFS來訪問主機端共享文件夾
NFS簡介:NFS,是Network File System的簡寫,即網絡文件系統。網絡文件系統是FreeBSD支持的文件系統中的一種,也被稱為NFS. NFS允許一個系統在網絡上與他人共享目錄和文件。通過使用NFS,用戶和程序可以像訪問本地文件一樣訪問遠端系統上的文件。
NFS最顯而易見的好處:
1>本地工作站使用更少的磁盤空間,因為通常的數據可以存放在一台機器上而且可以通 過網絡訪問到。
2>用戶不必在每個網絡上機器里頭都有一個home目錄。Home目錄 可以被放在NFS 服務器上並且在網絡上處處可用。
3>諸如軟驅,CDROM,和 Zip(是指一種高儲存密度的磁盤驅動器與磁盤)之類的存儲 設備可以在網絡上面被別的機器使用。這可減少整個網絡上的可移動介質設備的數量。
1,首先檢查NFS是否安裝
rpm -qa | grep nfs
nfs-utils-1.2.3-15.el6.x86_64
nfs-utils-lib-1.1.5-4.el6.x86_64 負責NFS命令與監控程序
rpcbind-0.2.0-8.el6.x86_64 支持安全NFS RPC服務的連接
注:centos5和redhat早期版本都是portmap服務,后期版本改名為rpcbind。
默認裝系統時會自動安裝。
若沒有安裝用yum install安裝。
簡單介紹NFS系統守護進程:
•nfsd:它是基本的NFS守護進程,主要功能是管理客戶端是否能夠登錄服務器;
•mountd:它是RPC安裝守護進程,主要功能是管理NFS的文件系統。當客戶端順利通過nfsd登錄NFS服務器后,在使用NFS服務所提供的文件前,還必須通過文件使用權限的驗證。它會讀取NFS的配置文件/etc/exports來對比客戶端權限。
•rpcbind:主要功能是進行端口映射工作。當客戶端嘗試連接並使用RPC服務器提供的服務(如NFS服務)時,rpcbind會將所管理的與服務對應的端口提供給客戶端,從而使客戶可以通過該端口向服務器請求服務。
2,配置NFS服務:
/etc/exports NFS服務的主要配置文件
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 客戶端的查看命令
/var/lib/nfs/etab 記錄NFS分享出來的目錄的完整權限設定值
/var/lib/nfs/xtab 記錄曾經登錄過的客戶端信息
創建共享文件夾 /var/share;
配置/etc/exports:
/var/share *(rw,no_root_squash)
第一項是共享文件夾路徑
*表示所有IP段可以訪問;也可以指定具體IP或IP段
Rw表示可讀寫。RO表示只讀
No_root_squash表示root權限訪問文件夾
3,啟動NFS服務
Service nfs restart
showmount -e //默認查看自己共享的服務,前提是要DNS能解析自己, 不然容易報錯
showmount -a //顯示已經與客戶端連接上的目錄信息
4,在windos端掛載nfs文件服務。默認windos是不支持該服務,
我們需要下載Microsoft Windows Services for UNIX 3.5 免費插件。下載地址如下:
http://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/SFU35SEL_EN.exe
解壓該程序到C:/SFU35SEL_EN,執行SFU_SETUP。這樣只會安裝Clien for NFS.
5, 檢查客戶端nfs for client服務是否啟動,否則啟動該服務。
6, 檢查客戶端user mapping服務是否啟動,否則啟動該服務。
通過計算機-管理-服務 來查看。
7, 打開Services for UNIX Administrator
* 設定User Name Mapping
在Configuration選項卡中選擇User Password and Group files
把要掛載的系統的文件夾中的/etc/passwd, /etc/group文件拷貝到C:
導入到Configuration中
* 設定Maps
在Advanced maps中選擇 Show User Maps
點擊List Windows User , List UNIX User(因為我們已經把passwd和group文件導入進來了)
在List中選擇Windows和UNIX下的用戶名。點擊Add后如下圖:.
8, 打開CMD,我們終於可以掛載共享文件夾了:
Cd C:/SFU/common
mount 192.168.16.xx:/var/share d:
d盤是將共享文件夾掛載到客戶端的盤符。
9, 注意:主機端共享文件夾權限設置要合理。默認是others只讀。客戶端訪問共享文件夾時都是以others用戶權限訪問,所以必要時給others用戶組寫權限。否則無法創建文本文檔等。
若以上步驟執行后還是不可寫,修改客戶端注冊表:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\default,增加兩項:AnonymousUid,AnonymousGid,然后重啟客戶端,再mount。
10, 在系統啟動時如果出現如下錯誤:
Client for NFS Service Failure
解決方法:
修改客戶端注冊表:添加RestoreConnection項並設置為0.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\
三,通過9p-virtio來訪問主機端共享文件夾
9p-virtio簡介: 英文全稱為:Plan 9 folder sharing over Virtio - I/O virtualization framework,是一種host和guest端共享文件夾的文件系統服務。目前guest端暫不支持windos系統(系統不支持virtio服務,且mount命令不支持掛載該格式的文件系統)。我測試guest端用的是ubuntu-13.10。
1, 檢查host端是否支持9p-virtio。如下圖是已經支持9p的:
lsmod | grep 9p
如果已經加載 9p.ko,9pnet_virtio.ko,9pnet.ko,說明已經支持virtio-9p。
如果不支持,需要重新編譯kernel或9p對應的模塊,並加載到host系統。編譯前需要在kernel中添加如下配置選項:
CONFIG_NET_9P=y
CONFIG_NET_9P_VIRTIO=y
CONFIG_9P_FS=y
CONFIG_9P_FS_POSIX_ACL=y
注:如果是模塊,將y換成m,建議編譯為驅動模塊,省時間,’安全性高’。
2,客戶端安裝linux系統, 我安裝的是ubuntu13-10版本。
測試時需要用到root賬戶,所以先把root賬戶密碼激活,
ubuntu默認root密碼不啟動,密碼激活:sudo passwd root 輸入你
裝系統時用戶的密碼,設置root 密碼。
將guest關機,通過host端命令啟動guest。
3,Host端啟動虛擬機命令參數如下:
qemu-kvm –cpu host -m 1024 -enable-kvm
-drive file=/var/lib/libvirt/images/zxc_linux1.img,cache=writeback,if=virtio -localtime
-fsdev local,id=test_dev,path=/var/share,security_model=none
-device virtio-9p-pci,fsdev=test_dev,mount_tag=testmount
-vnc 0.0.0.0:0 -vga cirrus -monitor stdio
啟用9p的參數解釋如下:
-fsdev fsdriver,id=[id],path=[pathtoshare]
,security_model=[mapped|passthrough|none][,writeout=writeout]
[,readonly][,socket=socket|sock_fd=sock_fd]
-device virtio-9p-pci,fsdev=[id],mount_tag=[mount tag]
Fsdriver: 該選項指定fs驅動端使用,目前支持”only”,”handle”,”proxy”文件 系統驅動。
Id: 用來關聯fsdev
Path:host端用來共享的文件夾。
Security_model:應該是共享權限,官方解釋是:有效選項被映射,一種是透傳模式,一種是none。Proxy文件系統驅動時不需要指定該選項。
-device 指定設備virtio-9p-pci.
Mount-tag:一個標識,用來在guest端mount時的tag。
4,在host端創建要和guest端共享的文件夾
Mkdir /var/share
5,在客戶端執行如下命令:
mount -t 9p -o trans=virtio testmount /tmp/shared/ -oversion=9p2000.L,posixacl,cache=loose
-t 標識mount 類型;
-o 標識共享傳輸方式;
Testmount是mount_tag;
/tmp/shared 是guest端將要掛載到host端共享文件夾的目錄。
-oversion是標識9p的版本信息。