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服务。
[root@localhost 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
[root@localhost 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
[root@localhost 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
[root@localhost 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
[root@localhost root]# service smb start
//启动samba服务
启动 SMB 服务: [ 确定 ]
启动 NMB 服务: [ 确定 ]
//重启samba服务:service smb restart
[root@localhost root]# pstree|grep mbd
//查看samba服务是否启动
|-nmbd
|-smbd
//samba有两个服务器一个是smb 一个是nmb
//查看samba服务器的运行状况:pgrep smbd
[root@localhost root]# pgrep smbd
6106
[root@localhost root]# pgrep nmbd
6110
//有时你的防火墙可能会把smbd服务器的端口封掉,所以我们应该打开smbd服务器所占用的端口,139和445
[root@localhost root]# netstat -tlnp|grep smb
//查看samba服务器的端口及防火墙
tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN
6106/smbd
//如果不知道怎么打开,可能你和我一样市新手,还是把防火墙规则清除掉也行
[root@localhost 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
[root@localhost 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没有密码直接回车
[root@localhost root]#cd /mnt/windows
//切换到windows目录
[root@localhost 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

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

[root@chen-190 ~]# 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、创建文件夹。然后把四个区域挂载到相应的文件夹

[root@chen-190 /]# mount /dev/sdb1 /share1

[root@chen-190 /]# mount /dev/sdb2 /share2

[root@chen-190 /]# mount /dev/sdb3 /share3

[root@chen-190 /]# mount /dev/sdb5 /share4

[root@chen-190 /]# mount /dev/sdc1 /share5

[root@chen-190 /]# mount /dev/sdc2 /share6

[root@chen-190 ~]# 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):

[root@chen-200 /]# mount -t nfs 192.168.1.190:/share2 /share2

[root@chen-200 /]# mount -t nfs 192.168.1.190:/share1 /share1

[root@chen-200 /]# mount -t nfs 192.168.1.190:/share3 /share3

[root@chen-200 /]# 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

你可能感兴趣的:(nfs)