1. 程式人生 > 實用技巧 >samba以及nfs的自動掛載

samba以及nfs的自動掛載

一:samba的自動掛載的實現

Samba的概述

1.1:SMB協議

它是Microsoft和Intel在1987年開發的,該協議可以用在TCP/IP之上,也可以用在其他網路協議(如IPX和NetBEUI)之上。通過SMB協議,客戶端 應用程式可以在各種網路環境下讀、寫伺服器上的檔案,以及對伺服器程式提出服務請求。此外通過SMB協議,應用程式還可以訪問遠端伺服器端的檔案和印表機等資源 。

image

1.2:Samba服務

Linux使用一個被稱為Samba的程式集來實現SMB協議。通過Samba,可以把Linux系統變成一臺SMB伺服器,使Windows95以上的Windows使用者能夠使用Linux的共享檔案和印表機,同樣的Linux使用者也可以通過SMB客戶端使用Windows上的共享檔案和印表機資源 。

image

目前Samba的最新版本是3.0.26,它的主要功能如下。

(1)提供Windows風格的檔案和印表機共享。Windows 95、Windows 98、Windows NT、Windows 2000、Windows XP、Windows 2003等作業系統可以利用Samba共享Linux等其他作業系統上的資源,而從外表看起來和共享Windows的資源沒有區別。

(2)在Windows網路中解析NetBIOS的名字。為了能夠利用區域網上的資源,同時使自己的資源也能被別人所利用,各個主機都定期地向區域網廣播自己的身份資訊。負責收集這些資訊,提供檢索的伺服器也被稱為瀏覽伺服器,而Samba能夠實現這項功能。同時在跨越閘道器的時候Samba還可以作為WINS伺服器使用。

(3)提供SMB客戶功能。利用Samba程式集提供的smbclient程式可以在Linux中以類似於FTP的方式訪問Windows共享資源。

(4)提供一個命令列工具,利用該工具可以有限制地支援Windows的某些管理功能。

1.3:Samba服務工作原理

image

Samba服務的具體工作過程如圖所示。

① 首先客戶端傳送一個SMB negprot請求資料報,並列出它所支援的所有SMB協議版本。伺服器收到請求資訊後響應請求,並列出希望使用的協議版本。如果沒有可使用的協議版本則返回0XFFFFH,結束通訊。

② 協議確定後,客戶端程序向伺服器發起一個使用者或共享的認證,這個過程是通過傳送SesssetupX請求資料報實現的。客戶端傳送一對使用者名稱和密碼或一個簡單密碼到伺服器,然後伺服器通過傳送一個SesssetupX應答資料報來允許或拒絕本次連線。

③ 當客戶端和伺服器完成了磋商和認證之後,它會發送一個Tcon或TconX SMB資料報並列出它想訪問網路資源的名稱,之後伺服器會發送一個TconX應答資料報以表示此次連線是否被接受或拒絕。

④ 連線到相應資源後,SMB客戶端就能夠通過open SMB開啟一個檔案,通過read SMB讀取檔案,通過write SMB寫入檔案,通過close SMB關閉檔案。

image


開啟linux系統終端,檢視是否安裝sabma服務。
[[email protected] root]# rpm -qa|grep samba
samba-2.2.7a-7.9.0
redhat-config-samba-1.0.4-1
samba-common-2.2.7a-7.9.0
samba-client-2.2.7a-7.9.0

[[email protected] root]# service smb start
啟動 SMB 服務: [ 確定 ]
啟動 NMB 服務: [ 確定 ]
檢視windows xp的IP配置,開始--執行(WIN+R)--cmd --ipconfig/all
windows xp IP:172.19.23.21
windows xp的子網掩碼:255.255.254.0
回到linux中,配置linux IP
[root @ localhost root]#ifconfig eth0 172.19.23.11 netmask 255.255.254.0

//修改IP:172.19.23.11 netmask:255.255.254.0
[[email protected] root]# ifconfig
//檢視配置是否成功
eth0 Link encap:Ethernet HWaddr 00:0C:29:64:79:7C
inet addr:172.19.23.11 Bcast:172.19.255.255 Mask:255.255.254.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:781 errors:0 dropped:0 overruns:0 frame:0
TX packets:48 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:115746 (113.0 Kb) TX bytes:7822 (7.6 Kb)
Interrupt:10 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:37746 errors:0 dropped:0 overruns:0 frame:0
TX packets:37746 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2581594 (2.4 Mb) TX bytes:2581594 (2.4 Mb)
//ping網路是否通暢,ping -c 4 172.19.23.21
[[email protected] root]# ping -c 4 172.19.23.21
//選項-c 引數為4,傳送4次資料包
PING 172.19.23.21 (172.19.23.21) 56(84) bytes of data.
64 bytes from 172.19.23.21: icmp_seq=1 ttl=64 time=0.887 ms
64 bytes from 172.19.23.21: icmp_seq=2 ttl=64 time=0.153 ms
64 bytes from 172.19.23.21: icmp_seq=3 ttl=64 time=0.132 ms
64 bytes from 172.19.23.21: icmp_seq=4 ttl=64 time=0.113 ms
--- 172.19.23.21 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 0.113/0.321/0.887/0.327 ms
[[email protected] root]# service smb start
//啟動samba服務
啟動 SMB 服務: [ 確定 ]
啟動 NMB 服務: [ 確定 ]
//重啟samba服務:service smb restart
[[email protected] root]# pstree|grep mbd
//檢視samba服務是否啟動
|-nmbd
|-smbd
//samba有兩個伺服器一個是smb 一個是nmb
//檢視samba伺服器的執行狀況:pgrep smbd
[[email protected] root]# pgrep smbd
6106
[[email protected] root]# pgrep nmbd
6110
//有時你的防火牆可能會把smbd伺服器的埠封掉,所以我們應該開啟smbd伺服器所佔用的埠,139和445
[[email protected] root]# netstat -tlnp|grep smb
//檢視samba伺服器的埠及防火牆
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
6106/smbd
//如果不知道怎麼開啟,可能你和我一樣市新手,還是把防火牆規則清除掉也行
[[email protected] root]# iptables -F

[root @localhost root]#/sbin/iptables -F
//在windows xp建立一個資料夾,如在d:盤建立一個test,在test資料夾,並設為共享。然後再test資料夾中建立一個test.txt檔案。


現在我們開始在linux下藉助於smbmount命令來實現網路驅動器對映,具體命令是:
smbmount //windowsHostName/ShareName /mnt/smbdir -U administrator


說明:此處的sharename指代windows共享目錄名稱,smbdir指代掛載點名稱,U指代登陸windows系統的使用者名稱,administrator指代登陸windows主機下的共享資料夾a對映為/mnt/winshare.目錄,具體步驟是:
在實現網路驅動對映前,首先在linux下建個資料夾:
[root @localhost root]#mkdir /mnt/windows
在終端命令視窗,執行:smbmount //172.19.23.21/a /mnt/windows -U administrator
[[email protected] root]# smbmount //172.19.23.21/test /mnt/windows -U administrator/mnt/windows: invalid option -- U
6253: session request to 172.19.23.21 failed (Called name not present)
6253: session request to 172 failed (Called name not present)
Password: //則進入系統,系統會要求輸入使用者密碼,此時輸入windows系統的密碼,回車。如果windows沒有密碼直接回車
[[email protected] root]#cd /mnt/windows
//切換到windows目錄
[[email protected] windows]# ll
//檢視是否有剛才建立的資料夾test.txt
總用量 0
-rwxr-xr-x 1 root root 0 1月 4 11:50 test.txt

二:nfs的自動掛載

NFS服務的概述

NFS最早是由Sun公司於1984年開發出來的,其目的就是讓不同計算機不同作業系統之間可以彼此共享檔案。由於NFS使用起來非常方便,因此很快得到了大多數的UNIX/Linux系統的廣泛支援,而且還被IETE(國際網際網路工程組)制定為RFC1904、RFC1813和RFC3010標準。

NFS採用客戶/伺服器工作模式。在NFS伺服器上將/nfs/public目錄設定為輸出目錄(即共享目錄)後,其他客戶端就可以將這個目錄掛載到自己系統中的某個目錄下,這個目錄可以與伺服器上的輸出目錄和其他客戶機中的目錄不相同,例如圖中的客戶機PC1與PC2的掛載目錄就不相同。如果某使用者登入到客戶機PC1並進入/mnt/nfs目錄,那麼他就可以看到NFS伺服器內/nfs/public目錄下的所有子目錄及檔案,只要具有相應的許可權,就可以使用cp、cd、mv、rm和df等命令對磁碟或檔案進行相應的操作。

image

使用NFS服務,至少需要啟動以下3個系統守護程序。

(1)rpc.nfsd

(2)rpc.mountd

(3)portmap

一,檢查

在伺服器上檢查安裝包
rpm -qa |grep portmap
rpm -qa |grep nfs
cat /proc/filesystem中檢視有沒有nfsd服務
ntsysv 選項中選中nfs

二,配置


exports檔案是NFS的共享目錄配置檔案,主要是指定共享目錄和共享策略。使用vi命令編輯,在檔案中加入類似下面的內容:
vim /etc/exprot中新增引數:/home/nfsdata *(rw,root_squash,no_all_squash,sync,insecure)
#引數下面有詳解


三,啟動服務


/etc/init.d/portmap start
/etc/init.d/nfslock start
/etc/init.d/nfs start
開啟伺服器端的NFS服務,再從客戶端上檢視一下NFS伺服器的情況:
Showmount –a顯示出NFS伺服器192.168.1.123的共享目錄被客戶端192.168.122掛載到/home中;
Showmount –e顯示出NFS伺服器192.168.1.123上有兩個共享目錄:/tmp和/home/nfs-share
Showmount –d顯示出NFS伺服器的共享目錄被掛載到了/home這個掛載點上。
檢視啟動情況:
/etc/init.d/portmap status
/etc/init.d/nfs status


四,掛載


Linux:客戶端的portmap的服務一定要啟動,然後執行命令:
mount -t nfs 10.1.0.13:/home/nfsdata /nfs
Mac:系統自帶服務,直接mount_nfs -o resvport 10.1.0.13:/home/nfsdata /nfs_11

五,問題

1、提示:mount to NFS server '172.20.67.203' failed: server is down.
解決方案:可能是NFS伺服器的防火牆有問題;
2、提示:mount: RPC: Timed out
解決方案:由於RPC協議沒執行;啟動portmap服務;
也有可能是防火牆問題;Server/Client均有可能。
解釋:
引數:
下面是一些NFS共享的常用引數:
ro 只讀訪問
rw 讀寫訪問
sync 所有資料在請求時寫入共享
async NFS在寫入資料前可以相應請求
secure NFS通過1024以下的安全TCP/IP埠傳送
insecure NFS通過1024以上的埠傳送
wdelay 如果多個使用者要寫入NFS目錄,則歸組寫入(預設)
no_wdelay 如果多個使用者要寫入NFS目錄,則立即寫入,當使用async時,無需此設定。
hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的許可權(預設)
no_subtree_check 和上面相對,不檢查父目錄許可權
all_squash 共享檔案的UID和GID對映匿名使用者anonymous,適合公用目錄。
no_all_squash 保留共享檔案的UID和GID(預設)
root_squash root使用者的所有請求對映成如anonymous使用者一樣的許可權(預設)
no_root_squas root使用者具有根目錄的完全管理訪問許可權
anonuid=xxx 指定NFS伺服器/etc/passwd檔案中匿名使用者的UID

新掛載分割槽建立NFS

server:192.168.1.190

client:192.168.1.200

1、通過fdisk工具,劃分出四個區域

sdb1,sdb2,sdb3,sdb4,sdb5(sdb4為擴充套件總分割槽,此分割槽不可用)

sdc1,sdc2

------------------------------

[[email protected] ~]# fdisk /dev/sdb

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOS disklabel. Changes will remain in memory only,

until you decide to write them. After that, of course, the previous

content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): p

Disk /dev/sdb: 4294 MB, 4294967296 bytes

255 heads, 63 sectors/track, 522 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

Command (m for help):

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (1-522, default 1):

Using default value 1

Last cylinder or +size or +sizeM or +sizeK (1-522, default 522): +500M

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 2

First cylinder (63-522, default 63):

Using default value 63

Last cylinder or +size or +sizeM or +sizeK (63-522, default 522): +500M

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 3

First cylinder (125-522, default 125):

Using default value 125

Last cylinder or +size or +sizeM or +sizeK (125-522, default 522): +1000M

Command (m for help): n

Command action

e extended

p primary partition (1-4)

e

Selected partition 4

First cylinder (248-522, default 248):

Using default value 248

Last cylinder or +size or +sizeM or +sizeK (248-522, default 522):

Using default value 522

Command (m for help): n

First cylinder (248-522, default 248):

Using default value 248

Last cylinder or +size or +sizeM or +sizeK (248-522, default 522): +1000M

Command (m for help): p

Disk /dev/sdb: 4294 MB, 4294967296 bytes

255 heads, 63 sectors/track, 522 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System

/dev/sdb1 1 62 497983+ 83 Linux

/dev/sdb2 63 124 498015 83 Linux

/dev/sdb3 125 247 987997+ 83 Linux

/dev/sdb4 248 522 2208937+ 5 Extended

/dev/sdb5 248 370 987966 83 Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

-----------------------

2、把劃分出來的區域,格式化成linux可識別的EXT3格式。

mkfs -t ext3 -c /dev/sdb1

mkfs -t ext3 -c /dev/sdb2

mkfs -t ext3 -c /dev/sdb3

mkfs -t ext3 -c /dev/sdb5

mkfs -t ext3 -c /dev/sdc1

mkfs -t ext3 -c /dev/sdc2

3、建立資料夾。然後把四個區域掛載到相應的資料夾

[[email protected] /]# mount /dev/sdb1 /share1

[[email protected] /]# mount /dev/sdb2 /share2

[[email protected] /]# mount /dev/sdb3 /share3

[[email protected] /]# mount /dev/sdb5 /share4

[[email protected] /]# mount /dev/sdc1 /share5

[[email protected] /]# mount /dev/sdc2 /share6

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

5.8G 2.8G 2.7G 51% /

/dev/sda1 99M 11M 83M 12% /boot

tmpfs 544M 0 544M 0% /dev/shm

/dev/sdb1 471M 412M 35M 93% /share1

/dev/sdb2 471M 412M 35M 93% /share2

/dev/sdb3 950M 869M 34M 97% /share3

/dev/sdb5 950M 869M 34M 97% /share4

/dev/sdc1 1.9G 35M 1.8G 2% /share5

/dev/sdc2 3.1G 69M 2.9G 3% /share6

4、設定剛才的分割槽開機自動掛載,修改/etc/fstab表:

server端/etc/fstab新增以下內容:

/dev/sdb1 /share1 ext3 defaults 0 0

/dev/sdb2 /share2 ext3 defaults 0 0

/dev/sdb3 /share3 ext3 defaults 0 0

/dev/sdb5 /share4 ext3 defaults 0 0

/dev/sdc1 /share5 ext3 defaults 0 0

/dev/sdc2 /share6 ext3 defaults 0 0

client端、etc/fstab;

192.168.1.190:/share1 /share1 nfs defaults 0 0

192.168.1.190:/share2 /share2 nfs defaults 0 0

192.168.1.190:/share3 /share3 nfs defaults 0 0

192.168.1.190:/share4 /share4 nfs defaults 0 0

192.168.1.190:/share5 /share5 nfs defaults 0 0

192.168.1.190:/share6 /share6 nfs defaults 0 0

client端/etc/rc.local:

mount -t nfs 192.168.1.190:/share1 /share1

mount -t nfs 192.168.1.190:/share2 /share2

mount -t nfs 192.168.1.190:/share3 /share3

mount -t nfs 192.168.1.190:/share4 /share4

mount -t nfs 192.168.1.190:/share5 /share5

mount -t nfs 192.168.1.190:/share6 /share6

5、設定nfs與portmap自動啟動,在server端/etc/rc.local中新增以下:

service nfs start

exportfs -rv

service portmap start

6、修改server端/etc/exports 配置檔案,新增以下內容:

/share1 192.168.1.200/24(rw)

/share2 192.168.1.200/24(rw)

/share3 192.168.1.200/24(rw)

/share4 192.168.1.200/24(rw)

/share5 192.168.1.200/24(rw)

/share6 192.168.1.200/24(rw)

7、啟動掛載NFS所需的程序

server端:

載入exports目錄

exportfs -rv

啟動portmap服務:

service portmap start[restart]

啟動NFS服務:

service nfs start[restart]

client 端

建立掛載目錄

mkdir /share1

mkdir /share2

mkdir /share3

mkdir /share4

mkdir /share5

mkdir /share6

啟動portmap服務:

service portmap start[restart]

掛載伺服器端的共享目錄(假設伺服器端192.168.1.190):

[[email protected] /]# mount -t nfs 192.168.1.190:/share2 /share2

[[email protected] /]# mount -t nfs 192.168.1.190:/share1 /share1

[[email protected] /]# mount -t nfs 192.168.1.190:/share3 /share3

[[email protected] /]# mount -t nfs 192.168.1.190:/share4 /share4

此時,如果伺服器端的防火牆有開著的話,將會提示錯誤,如:

mount: mount to NFS server '192.168.0.10' failed: System Error: No route to host.

檢視防火牆狀態:service iptables status

停止防火牆:service iptables stop

轉載於:https://blog.51cto.com/liuguirong/992871