Linux运维学习笔记之九:网络管理和磁盘管理

时间:2022-05-01 21:51:19

第十六章 网络管理

一、修改主机名

1、临时修改(重启失效)

(1)hostname  主机名

hostname chuji001

(2)hostname查看

hostname

chuji001

(3)退出shell重新登陆即可生效,重启后失效

[root@ chuji001 ~]

2、永久修改:方法一
(1)修改/etc/sysconfig/network文件中的HOSTNAME

vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=mylinux

(2)修改/etc/hosts文件中对应的主机名

vi /etc/hosts

127.0.0.1 localhostlocalhost.localdomain localhost4 localhost4.localdomain4mylinux

10.11.12.13 mylinux

(3)重启后生效

/etc/init.d/network restart或source /etc/sysconfig/network均无法生效。

2、永久修改:方法二
(1)setup命令
(2)选择Network configuration
(3)选择DNS configuration
(4)修改Hostname
(5)说明:

在CentOS5中setup修改完保存退出后立刻生效,并且/etc/sysconfig/network和/etc/hosts均被修改。

在CentOS6中setup修改完保存退出后并没有立刻生效,并且只改了/etc/sysconfig/network文件,

/etc/hosts文件没有被修改。

3、生产环境修改主机名并永久生效
(1)说明:生产环境一般不能随便重启服务器。
(2)首先:用hostname临时修改主机名
(3)其次:修改/etc/sysconfig/network文件和/etc/hosts文件
(4)如果不改/etc/hosts文件中的127.0.0.1后面的主机名,则会导致系统启动非常慢。

如:sendmail服务启动缓慢

ldap服务解析缓慢

sudo切换用户缓慢

二、网卡配置

1、网卡配置文件目录/etc/sysconfig/network-scripts/ 
2、网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0 

    cat/etc/sysconfig/network-scripts/ifcfg-eth0

   DEVICE=eth0                  #网卡设备名称,第1块网卡为eth0,第二块为eth1...

   ONBOOT=yes                   #启动时是否激活 yes | no

   BOOTPROTO=static             #协议类型 dhcp bootp none

   IPADDR=192.168.1.90          #网络IP地址

   NETMASK=255.255.255.0        #网络子网地址

   GATEWAY=192.168.1.1          #网关地址

   BROADCAST=192.168.1.255      #广播地址

   HWADDR=00:0C:29:FE:1A:09 #网卡MAC地址

   TYPE=Ethernet                #网卡类型为以太网

DNS1=192.168.1.10              #DNS1

DNS2=192.168.2.10              #DNS2

3、网卡操作命令

/etc/init.d/network restart      :重启所有网卡 (stop | reload)

ifdown eth0 && ifup eth0     :重启eth0网卡

ifdown eth0                        :关闭eth0网卡

ifup eth0                          :打开eth0网卡

ifconfig eth0                    :临时配置etho网卡IP

4、临时配置网卡IP
(1)配置网卡eth0:

ifconfig eth0 192.168.1.91

(2)给网卡eth0配置第二个IP

ifconfig eth0:1 192.168.1.92/24

ifconfig eth0:1 192.168.1.92 netmask 255.255.255.0 up

ifconfig

eth0      Linkencap:Ethernet  HWaddr00:50:56:A3:61:79 

          inet addr: 192.168.1.91  Bcast: 192.168.1.255  Mask:255.255.255.0

eth0:1    Linkencap:Ethernet  HWaddr00:50:56:A3:61:79 

          inet addr: 192.168.1.92  Bcast: 192.168.1.255  Mask:255.255.255.0

(3)删除网卡eth0配置第二个IP

ifconfig eth0:1 down

三、DNS配置

1、/etc/resolv.conf: 本地客户端DNS文件

cat /etc/resolv.conf

# Generated by NetworkManager

domain openstacklocal

search openstacklocal

nameserver 192.168.90.161

nameserver 192.168.58.2

2、/etc/hosts: 设定用户IP与名字(或域名)的对应解析表,相当于本地局域网的DNS文件

cat /etc/hosts

    127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4

    ::1     localhost localhost.localdomain localhost6localhost6.localdomain6

    192.168.8.198  study.linux.rhel

    192.168.8.198  localhost

3、注意事项

CentOS6中要在网卡配置文件ifcfg-eth0中配置DNS,如果在resolv.conf文件中配置,则重启网卡服务后,

系统会自动从网卡配置文件ifcfg-eth0中同步DNS,并将resolv.conf文件中的配置项替换。

CentOS5中要在/etc/resolv.conf,不要在网卡配置文件ifcfg-eth0中配置DNS否则有可能出现问题。

四、网关配置

1、网卡配置文件中配置网关(优先级高)

vi /etc/sysconfig/network-scripts/ifcfg-eth0

GATEWAY=192.168.1.1            #网关地址

2、在/etc/sysconfig/network文件中配置网关(优先级低)

vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=LS-B

GATEWAY=192.168.1.1

3、网关查找顺序

首先在网卡配置文件中查找网关,没找到的话才会到/etc/sysconfig/network文件中查找

4、查看网关

route  #最后一条就是默认网关

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.1.0     *               255.255.255.0   U    0      0        0 eth0

link-local      *               255.255.0.0     U    1002   0        0 eth0

default        192.168.1.1     0.0.0.0         UG   0      0        0 eth0

5、删除默认网关

route del default gw 192.168.1.1

6、添加默认网关

route add default gw 192.168.1.1

五、网络检查

1、网络检查
(1)ping命令

ping www.baidu.com

(2)traceroute命令

traceroute www.baidu.com

(3)telnet命令

telnet 192.168.8.12 1521

(4)nmap命令

nmap 192.168.8.12

2、查看DNS解析
(1)dig命令

dig www.baidu.com

(2)nslookup命令

nslookup www.baidu.com

(3)host命令

host www.baidu.com

3、tcpdump抓包命令

tcpdump -i eth1

六、网络排错

1、局域网的机器无法上网排错
基本检查思路:

(1)查检物理链路是否通畅

(2)本机IP、路由、DNS的设置是否正确

(3)测试到网关或路由器的网络通畅情况。先测网关再测路由,一级一级的测

(4)测试ping到其它IP的网络通畅情况

(5)测试DNS的通畅情况

(6)根据每一级的结果来排查,还可以在网关路由上逐级排查

2、网站服务器访问慢,打不开排错
基本检查思路:

(1)首先判断是否是路由的问题,由于不同地的ISP有不同的DNS地址,所以有可能是路由器或网卡无法与ISP的DNS服务连接,若是这种情况,可将路由器重启一下,更换一个IP试试。

(2)DNS解析时间。DNS解析包括往返解析的次数及每次解析所花费的时间,它们两者的积是DNS解析所消耗的时间,

(3)网络防火墙的问题,若是网络防火墙设置不当,不小心把IE放进了阻止访问列表也会出现这样的问题,我们可直接关掉防火墙或降低防火墙的安全等级再试试能否恢复。

第十七章 磁盘管理

一、磁盘基础

1、磁盘选型

(1)线上业务:SAS磁盘(15K/分)。

主要是对外提供服务,如:数据库服务、存储业务、图片业务、及相关高并发业务。如没有特殊要求,SAS盘是生产环境首选。

(2)线下业务:SATA磁盘(7200-10K/分)

主要是应用在不对外提供服务的应用,如备份,并发访问不是很大的业务应用,对性能要求不高。

(3)线上高并发、小容量业务:SSD盘

(4)根据数据访问热度,智能分析分层存储:SATA+SSD

智能分析:一般作法是数据的每次访问都进行记录,一旦发现该数据访问非常频繁,就将其移到SSD盘中。当数据访问热度降下来后,就将其移回SATA盘里.如淘宝的服务器就是SATA500G+SSD80G。

解决大规模并发的问题,一般采用SSD+内存缓存的技术,也就是在SSD盘前面加上内存缓存。大的公司还会在内存缓存的前面再加上一层全局缓存CDN。

CDN的全称是ContentDelivery Network,即内容分发网络。依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

2、磁盘选型特别注意事项(生产案例8)

千万不要用SATA磁盘来做在线高并发服务的数据存储或数据库业务,这是有血的教训。某公司曾经采用SATA盘做数据库的存储盘,结果导致数据库连续宕机一个月。

解决办法是:将SATA(RAID5)换成SAS(RAID10)

3、磁盘相关名词翻译

序号

英文

中文

1

Disk

磁盘

2

Head

磁头

3

Sector

扇区

4

Track

磁道

5

Cylinder

柱面

6

Units

单元块(一个柱面的大小)

7

Block

数据块

8

Inode

索引节点

4、计算Linux系统挂载磁盘的大小
(1)公式

磁盘大小 = 柱面数 × 柱面大小

= 柱面数 × (磁头数 × 磁道大小)

= 磁道数 × 磁头数 × 磁道大小    

= 磁道数 × 磁头数 × (512字节 × 扇区数)

= cylinders × heads × 512 × sectors/track

说明:柱面数 = 磁道数,

Linux系统分区的扇面大小因固定为512字节

(2)计算

a、查看磁盘信息

fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

b、计算

磁盘大小 = 磁道数 × 磁头数 × (512字节 × 扇区数)

= cylinders × heads × 512 × sectors/track

= 5221 * 255 *512 * 63

= 42944186880

 

用Linux命令计算:

echo 5221*255*512*63 | bc    或echo $((5221*255*512*63))

42944186880

与fisk –l出来的42949672960稍稍有点误差。大盘有点误差,但如果用几百兆的小盘是没有误差的了。

5、磁盘读写原理小结
(1)从上到下,然后从外到内。数据的读/写按柱面进行,而不先按盘面进行

系统将文件存储到磁盘上时,按柱面、磁头、扇区的方式进行,即最先是第1磁道的第一磁头下(也就是第1盘面的第一磁道)的所有扇区,然后,是同一柱面的下一磁头,……,一个柱面存储满后就推进到下一个柱面,直到把文件内容全部写入磁盘。也就是文件的记录在同一盘组上存放是应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上,对应同一柱面,则应该按盘面的次序顺序存放。

系统也以相同的顺序读出数据。读出数据时通过告诉磁盘控制器要读出扇区所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。磁盘控制器则直接使磁头部件步进到相应的柱面,选通相应的磁头,等待要求的扇区移动到磁头下。在扇区到来时,磁盘控制器读出每个扇区的头标,把这些头标中的地址信息与期待检出的磁头和柱面号做比较(即寻道),然后,寻找要求的扇区号。待磁盘控制器找到该扇区头标时,根据其任务是写扇区还是读扇区,来决定是转换写电路,还是读出数据和尾部记录。找到扇区后,磁盘控制器必须在继续寻找下一个扇区之前对该扇区的信息进行后处理。如果是读数据,控制器计算此数据的ECC码,然后,把ECC码与已记录的ECC码相比较。如果是写数据,控制器计算出此数据的ECC码,与数据一起存储。在控制器对此扇区中的数据进行必要处理期间,磁盘继续旋转。

(2)不同磁头间的切换是电子切换(如果不作磁头切换,则是所有磁头同时读同一柱面),而不同磁道的间的切换(寻道)需要磁头做径向运动,需要步进电机调节,这个动作是机械切换,效率最差。

二、CDN百度百科

1、简介

CDN的全称是ContentDelivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

2、服务模式

内容分发网络(CDN)是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。

简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。

总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。

3、应用对比

首先简单表述一下传统的动态系统的访问方法:用户的请求过程是,用户经过网络中的路由A、B的传输,最终将发送的请求交于动态系统来处理,但是由于IP网络本身的“尽力而为的原则”、网络链路中复杂的环境及硬件的不可靠性的确实存在,致使用户要出现重复发送的请求的现状,所以最终导致用户的请求在提交的过程中出现等待、数据加载时间过长的一些现象的普遍存在,这些在线提交式系统的缓慢直接地影响到办公人员的工作效率,这也是制约着很多大型企业在协同办公OA、ERP、SAP等信息化建设中,出现最多的问题。

而CDN分发解决方案解决了与静态网站相关的性能和可靠性问题,而在当今在线业务体验中,与分发静态和动态元素和应用相关的独特挑战,则由速网的动态网站加速(动态网站加速)来解决。

4、关键技术

(1)内容发布:它借助于建立索引、缓存、流分裂、组播(Multicast)等技术,将内容发布或投递到距离用户最近的远程服务点(POP)处;

(2)内容路由:它是整体性的网络负载均衡技术,通过内容路由器中的重定向(DNS)机制,在多个远程POP上均衡用户的请求,以使用户请求得到最近内容源的响应;

(3)内容交换:它根据内容的可用性、服务器的可用性以及用户的背景,在POP的缓存服务器上,利用应用层交换、流分裂、重定向(ICP、WCCP)等技术,智能地平衡负载流量;

(4)性能管理:它通过内部和外部监控系统,获取网络部件的状况信息,测量内容发布的端到端性能(如包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳的运行状态。

5、主要特点

1、本地Cache加速 提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度,并大大提高以上性质站点的稳定性

2、镜像服务 消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量。

3、远程加速 远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程访问的速度

4、带宽优化 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点WEB服务器负载等功能。

5、集群抗攻击 广泛分布的CDN节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种D.D.o.S攻击对网站的影响,同时保证较好的服务质量 。

6、产品优势

CDN能几乎涵盖国内所有线路。而在可靠性上, CDN 在结构上实现了多点的冗余,即使某一个节点由于意外发生故障,对网站的访问能够被自动导向其他的健康节点进行响应。CDN能轻松实现网站的全国铺设,不必考虑服务器的投入与托管、不必考虑新增带宽的成本、不必考虑多台服务器镜像同步、不必考虑更多的管理维护技术人员。

三、磁盘分区基础

1、导出分区表(备份分区表)
(1)导出

dd if=/dev/sda of=mbr.bin bs=512 count=1

1+0 records in

1+0 records out

512 bytes (512 B) copied, 0.000469442 s, 1.1 MB/s

(2)查看导出的文件类型

file ~/mbr.bin

/root/mbr.bin: x86 boot sector; GRand Unified Bootloader, stage1version 0x3, boot drive 0x80, 1st sector stage2 0x849e8, GRUB version 0.94;partition 1: ID=0x83, active, starthead 32, startsector 2048, 1024000 sectors;partition 2: ID=0x8e, starthead 221, startsector 1026048, 82860032 sectors,code offset 0x48

(3)查看文件内容(二进制文件用od命令查看,不常用)

od –ax mbr.bin

0000000   k   H dle dle so   P   < nul  0   8 nul nul  so  X  so   @

           48eb    1090   d08e    00bc    b8b0   0000    d88e    c08e

0000020   {   > nul  |   ? nul ack   9 nul stx  s   $   j   !ack nul

           befb    7c00   00bf    b906    0200   a4f3    21ea    0006

0000040 nul   >   > bel  8 eot   u  vt etx  F dle soh   ~   ~ bel  u

           be00    07be   0438    0b75    c683   8110    fefe    7507

...

0000760 nul nul nul nul nul nul nul nul nul nul nul nul nul nul   U   *

           0000    0000   0000    0000    0000   0000    0000    aa55

2、fdisk分区命令:只能对小于2T的磁盘进行分区
(1)查看系统磁盘情况

fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x000c4f1d

 

   Device Boot      Start        End      Blocks  Id  System

/dev/sda1   *           1          64      512000  83  Linux

Partition 1 does not end on cylinder boundary.

/dev/sda2              64        5222   41430016   8e  Linux LVM

 

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

(2)查看指定磁盘情况

fdisk -l /dev/sdb

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x00000000

(3)分区

a、对新加磁盘/dev/sdb进行分区

fdisk /dev/sdb

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

Building a new DOS disklabel with disk identifier 0x476481da.

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 correctedby w(rite)

 

WARNING: DOS-compatible mode is deprecated. It's stronglyrecommended to

         switch off the mode(command 'c') and change display units to

         sectors (command'u').

Command (m for help):

b、输入m,打开帮助

Command (m for help): m

Command action

   a   toggle a bootable flag

   b   edit bsd disklabel

   c   toggle the dos compatibility flag

   d   delete a partition

   l   list known partition types

   m   print this menu

   n   add a new partition

   o   create a new empty DOS partition table

   p   print the partition table

   q   quit without saving changes

   s   create a new empty Sun disklabel

   t   change a partition's system id

   u   change display/entry units

   v   verify the partition table

   w   write table to disk and exit

   x   extra functionality (experts only)

Command (m for help):

c、输入n,创建一个新分区

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

d、输入p,创建一个主分区

p

Partition number (1-4):

e、输入1,为新创建的主分区指定分区号

Partition number (1-4): 1

First cylinder (1-130, default 1):

f、输入1,也可以直接回车(默认为1),为新创建的主分区指定起始柱面号

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):

g、输入+100M(终止柱面号不好判断,直接通过大小来指定),指定新创建的主分区的大小

Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):+100M    

Command (m for help):

h、输入p,打印查看新创建的主分区

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x476481da

 

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1          14      112423+ 83  Linux

 

Command (m for help):

i、输入n,创建一个新分区(扩展分区)

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

j、输入e,创建一个扩展分区

e

Partition number (1-4):

k、输入2,为新创建的扩展分区指定分区号

Partition number (1-4): 2

First cylinder (15-130, default 15):

l、直接回车(默认从15号柱面开始),为新创建的扩展分区指定起始柱面号

First cylinder (15-130, default 15):

Using default value 15

Last cylinder, +cylinders or +size{K,M,G} (15-130, default 130):

m、直接回车(默认从130号柱面结束,也就是把全部剩余空间全给该分区),为创建的扩展分区指定结束柱面号

Last cylinder, +cylinders or +size{K,M,G} (15-130, default 130):

Using default value 130

Command (m for help):

n、输入p,打印查看新创建的分区

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x6e0db631

 

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1          14      112423+ 83  Linux

/dev/sdb2              15         130      931770   5  Extended

o、输入n,在扩展分区上创建新的逻辑分区

Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)

p、输入l,创建一个逻辑分区

l

First cylinder (15-130, default 15):

q、直接回车(默认从15号柱面开始),为新创建的逻辑分区指定起始柱面号

First cylinder (15-130, default 15):

Using default value 15

Last cylinder, +cylinders or +size{K,M,G} (15-130, default 130):

r、输入+400M,指定新创建的逻辑分区的大小

Last cylinder, +cylinders or +size{K,M,G} (15-130, default 130):+400M

Command (m for help):

s、输入p,打印查看新创建的分区

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x6e0db631

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1          14      112423+ 83  Linux

/dev/sdb2              15         130      931770   5  Extended

/dev/sdb5              15          66      417658+ 83  Linux

Command (m for help):

t、输入n,再在扩展分区上创建新的逻辑分区

Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)

u、输入l,再创建一个新逻辑分区

l

First cylinder (67-130, default 67):

v、直接回车,为新创建的逻辑分区指定起始柱面号

First cylinder (67-130, default 67):

Using default value 67

Last cylinder, +cylinders or +size{K,M,G} (67-130, default 130):

w、直接回车,指定新创建的逻辑分区的大小

Last cylinder, +cylinders or +size{K,M,G} (67-130, default 130):

Using default value 130

Command (m for help):

x、输入p,打印查看新创建的分区

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x6e0db631

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1          14      112423+ 83  Linux

/dev/sdb2              15         130      931770   5  Extended

/dev/sdb5              15          66      417658+ 83  Linux

/dev/sdb6              67         130      514048+ 83  Linux

Command (m for help):

y、输入w,保存新创建的分区

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

z、查看指定磁盘/dev/sdb分区情况

fdisk -l /dev/sdb

Disk /dev/sdb: 1073 MB, 1073741824 bytes

255 heads, 63 sectors/track, 130 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk identifier: 0x6e0db631

 

   Device Boot      Start         End      Blocks  Id  System

/dev/sdb1               1          14      112423+ 83  Linux

/dev/sdb2              15         130      931770   5  Extended

/dev/sdb5              15          66      417658+ 83  Linux

/dev/sdb6              67         130      514048+ 83  Linux

(4)通知操作系统分区表已发生变化

a、方法一:重启操作系统

b、使用partprobe命令

partprobe 

Warning: WARNING: the kernel failed to re-read the partition tableon /dev/sda (Device or resource busy). As a result, it may not reflect all of your changes until after reboot.

partprobe /dev/sdb

注:partprobe如不接磁盘,有时会出现Warning,最好是接上磁盘名,通知系统指定磁盘的分区表已发生变化。

c、查看设备文件

ll /dev/sd*

brw-rw----. 1 root disk 8,  0Feb  6 22:57 /dev/sda

brw-rw----. 1 root disk 8,  1Feb  6 22:00 /dev/sda1

brw-rw----. 1 root disk 8,  2Feb  6 22:00 /dev/sda2

brw-rw----. 1 root disk 8, 16 Feb 6 22:59 /dev/sdb

brw-rw----. 1 root disk 8, 17 Feb 6 22:59 /dev/sdb1

brw-rw----. 1 root disk 8, 18 Feb 6 22:59 /dev/sdb2

brw-rw----. 1 root disk 8, 21 Feb 6 22:59 /dev/sdb5

brw-rw----. 1 root disk 8, 22 Feb 6 22:59 /dev/sdb6

(5)改变分区格式

a、fdisk分区所在的磁盘

fdisk /dev/sdb

b、输入t,进行分区格式修改

Command (m for help): t

c、输入5,对5号分区进行修改

Partition number(1-6):5

d、输入L,列出Linux所支持的所有分区格式

Hex code (type L to List codes):L

e、输入8e,修改分区格式为 Linux LVM

Hex code (type L to List codes):8e

f、输入p,打印查看新创建的分区

g、输入w,保存改变

(6)删除分区

a、fdisk分区所在的磁盘

fdisk /dev/sdb

b、输入d,表示要删除分区

Command (m for help): d

c、输入5,对5号分区进行删除

Partition number(1-6):5

d、输入p,打印查看新创建的分区

f、输入w,保存改变

(7)格式化分区

mkfs.ext4 /dev/sdb1

(8)取消文件系统的自动检查

tune2fs -c -l /dev/sdb1

(9)挂载分区

mount /dev/sdb1 /data/bak1

3、parted分区命令:适合于对大于2T的磁盘进行分区,且必须将磁盘转为GPT格式
(1)通过parted命令查看磁盘信息

parted /dev/sdc

GNU Parted 2.1

使用 /dev/sdc

Welcome to GNU Parted! Type 'help' to view a list of commands.

(parted)

(2)输入help,查看parted帮助

(parted) help                                                            

  align-check TYPE N                        check partition N forTYPE(min|opt) alignment

  check NUMBER                             do a simple checkon the file system

  cp [FROM-DEVICE] FROM-NUMBERTO-NUMBER   copy file system to anotherpartition

  help [COMMAND]                           print general help,or help on COMMAND

  mklabel,mktableLABEL-TYPE               create a newdisklabel (partition table)

  mkfs NUMBER FS-TYPE                      make a FS-TYPE filesystem on partition NUMBER

  mkpart PART-TYPE [FS-TYPE]START END     make a partition

  mkpartfs PART-TYPE FS-TYPESTART END     make a partition with afile system

  move NUMBER START END                    move partition NUMBER

  name NUMBER NAME                         name partition NUMBERas NAME

  print[devices|free|list,all|NUMBER]    display the partition table, available devices, free space, all foundpartitions, or a particular partition

  quit                                     exit program

  rescue START END                         rescue a lostpartition near START and END

  resize NUMBER START END                  resize partition NUMBER andits file system

  rm NUMBER                                delete partition NUMBER

  select DEVICE                            choose the deviceto edit

  set NUMBER FLAG STATE                    change the FLAG onpartition NUMBER

  toggle [NUMBER [FLAG]]                   toggle the state of FLAG onpartition NUMBER

  unit UNIT                                set the defaultunit to UNIT

  version                                  display theversion number and copyright information of GNU Parted

(parted)

(3)输入p,查看指定磁盘分区信息

(parted) p                                                               

Model: VMware Virtual disk (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

 

Number  Start   End    Size    Type      File system  标志

 1      32.3kB 1069MB  1069MB  extended

 5      64.5kB 535MB   535MB   logical

 6      535MB  1069MB  535MB   logical

(parted) 

(4)输入rm加磁盘Number,删除指定分区,如查磁盘已mount,则必须先umount

(parted) rm 6                                                             

(parted)          

(5)输入p,查看是否删除成功

(parted) p                                                               

Model: VMware Virtual disk (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

 

Number  Start   End    Size    Type      File system  标志

 1      32.3kB 1069MB  1069MB  extended

 5      64.5kB 535MB   535MB   logical

(parted)  

(6)同理输入rm 5和rm 1,删除5号分区和1号分区

(parted) rm 5                                                            

(parted) rm 1                                                            

(parted)

(7)输入p,查看是否删除成功

(parted) p                                                               

Model: VMware Virtual disk (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: msdos

Number  Start  End Size  Type  File system 标志

(parted)

(8)输入mklabel gpt,修改磁盘分区标识,将磁盘转换为gpt格式

(parted) mklabel gpt                                                      

警告: The existing disk label on /dev/sdcwill be destroyed and all data on this disk will be lost. Do you want tocontinue?

是/Yes/否/No? yes  

(parted)

(7)输入p,查看转换后的磁盘信息                                                     

(parted) p                                                                

Model: VMware Virtual disk (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number  Start  End Size  File system  Name  标志

(parted)  

(9)输入mkpart命令,创建一个500M主分区(默认为MB)

(parted) mkpart primary 0 500                                            

警告: The resulting partition is notproperly aligned for best performance.

忽略/Ignore/放弃/Cancel? Ignore

(parted)

(10)再次输入mkpart命令,创建一个500M逻辑分区

(parted) mkpart logical 501 1000

(parted)

(11)输入p,查看分区信息      

(parted) p                                                               

Model: VMware Virtual disk (scsi)

Disk /dev/sdc: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

 

Number  Start   End     Size  File system  Name     标志

 1      17.4kB 500MB   500MB               primary

 2      501MB  1000MB  499MB               logical

(parted)

(12)输入quit,直接退出(与fdisk不同,parted是直接修改,不需保存)

(parted) quit                                                            

信息: You may need to update/etc/fstab.    

(13)在Linux系统查看设备文件

ll /dev/sdc*

brw-rw----. 1 root disk 8, 32 2月   7 12:37 /dev/sdc

brw-rw----. 1 root disk 8, 33 2月   7 12:30 /dev/sdc1

brw-rw----. 1 root disk 8, 34 2月   7 12:30 /dev/sdc2

(14)格式化分区sdc1

mkfs -t ext4 /dev/sdc1

mkfs -t ext4 /dev/sdc2

(15)挂载/dev/sdc1到/tmp

mount /dev/sdc1 /tmp

4、parted命令:使用脚本进行非交互式分区

vi /server/scripts/parted.sh

parted /dev/sdb mklabel gpt

parted /dev/sdb mkpart primary 0 500

parted /dev/sdb mkpart logical 501 1000

parted /dev/sdb p

mkfs -t ext4 /dev/sdc1 /dev/sdc2

mount /dev/sdc1 /tmp

5、分区的建议

(1)有数据的单个业务服务要分出数据分区。如/data

(2)存放重要数据业务的服务器要分出数据分区。如/data

四、文件系统基础

1、常见文件系统类型
(1)常用操作系统一般所使用的文件系统

Windows:FAT、FAT32、NTFS

Linux/Unix:UFS、ext2、ext3、ext4、zfs、xfs、Reiserfs

网络文件系统:NFS、MFS、GFS(MFS和GFS属于分布式文件系统)

(2)查看Linux系统支持的文件系统

ll /lib/modules/2.6.32-358.el6.i686/kernel/fs/

drwxr-xr-x. 2 root root  409612月  1 2014 autofs4

drwxr-xr-x. 2 root root  409612月  1 2014 btrfs

drwxr-xr-x. 2 root root  409612月  1 2014 cachefiles

drwxr-xr-x. 2 root root  409612月  1 2014 cifs

drwxr-xr-x. 2 root root  409612月  1 2014 configfs

drwxr-xr-x. 2 root root  409612月  1 2014 cramfs

drwxr-xr-x. 2 root root  409612月  1 2014 dlm

drwxr-xr-x. 2 root root  409612月  1 2014 ecryptfs

drwxr-xr-x. 2 root root  409612月  1 2014 exportfs

drwxr-xr-x. 2 root root  409612月  1 2014 ext2

drwxr-xr-x. 2 root root  409612月  1 2014 ext3

drwxr-xr-x. 2 root root  409612月  1 2014 ext4

drwxr-xr-x. 2 root root  409612月  1 2014 fat

drwxr-xr-x. 2 root root  409612月  1 2014 fscache

drwxr-xr-x. 2 root root  409612月  1 2014 fuse

drwxr-xr-x. 2 root root  409612月  1 2014 gfs2

drwxr-xr-x. 2 root root  409612月  1 2014 jbd

drwxr-xr-x. 2 root root  409612月  1 2014 jbd2

drwxr-xr-x. 2 root root  409612月  1 2014 jffs2

drwxr-xr-x. 2 root root  409612月  1 2014 lockd

-rwxr--r--. 1 root root 12592 1月  30 2013 mbcache.ko

drwxr-xr-x. 2 root root  409612月  1 2014 nfs

drwxr-xr-x. 2 root root  409612月  1 2014 nfs_common

drwxr-xr-x. 2 root root  409612月  1 2014 nfsd

drwxr-xr-x. 2 root root  409612月  1 2014 nls

drwxr-xr-x. 2 root root  409612月  1 2014 squashfs

drwxr-xr-x. 2 root root  409612月  1 2014 ubifs

drwxr-xr-x. 2 root root  409612月  1 2014 udf

(3)查看Linux系统默认安装的文件系统

ll /sbin/mkfs.*

-rwxr-xr-x. 1 root root 22476 1月   9 2013 /sbin/mkfs.cramfs

-rwxr-xr-x. 5 root root 61072 10月 13 2012 /sbin/mkfs.ext2

-rwxr-xr-x. 5 root root 61072 10月 13 2012 /sbin/mkfs.ext3

-rwxr-xr-x. 5 root root 61072 10月 13 2012 /sbin/mkfs.ext4

-rwxr-xr-x. 5 root root 61072 10月 13 2012 /sbin/mkfs.ext4dev

lrwxrwxrwx. 1 root root     712月  1 2014 /sbin/mkfs.msdos -> mkdosfs

lrwxrwxrwx. 1 root root     712月  1 2014 /sbin/mkfs.vfat -> mkdosfs

2、文件系统选择
(1)SAS/SATA硬盘:

Reiserfs:大量小文件业务首选

xfs      :数据库业务(如MySQL)

ext4     :视频下载、流媒体、数据库、小文件业务

ext2     :蓝汛cache业务(CDN网站加速业务)

(2)SSD硬盘:

a、ext4和Reiserfs可以做为SSD盘的文件系统,但没对SSD做优化,不能充分发挥SSD盘的性能,并影响SSD盘的使用时间。

b、Btrfs对SSD盘做了优化,由mount通过参数启用。但Btrfs仍处于实验阶段,生产环境需谨慎使用。

c、JFFS2、Nilfs2和YAFFS是常见的falsh filesystem,在嵌入式环境中广泛应用,建议使用。性能目前还未做测试评估。

(3)选择时的注意事项:

a、ext2是没有日志功能,ext3和ext4是有日志的,如查损坏比较容易恢复(蓝讯CDN)。

b、xfs和reiserfs 文件系统是需要单独安装的。默认不支持的。所以维护起来可能不方便。

xfs:数据库、淘宝

reiserfs:大量小文件(10K到几百K)的首选

c、大并发并不是过多的做硬盘的优化,而是在前端加缓存(架构师的能力)。

d、CentOS默认的文件系统都是比较优秀的。

对于CentOS5.x系列,常规应用就选默认的ext3文件系统即可。

对于CentOS6.x系列,常规应用就选默认的ext4文件系统即可。

五、NFS网络文件共享服务基础

1、NFS简介
(1)NFS(Network FileSystem)即网络文件系统.

它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。但并发比较大的时候,NFS的性能不是太好。

(2)各NFS协议版本的主要区别( 主要是V3相对V2): 
a、文件尺寸 
V2最大只支持32BIT的文件大小(4G),而NFS V3新增加了支持64BIT文件大小的技术。 
b、文件传输尺寸
 V3没有限定传输尺寸,V2最多只能设定为8k,可以使用-rsize and -wsize 来进行设定。 
c、完整的信息返回 
V3增加和完善了许多错误和成功信息的返回,对于服务器的设置和管理能带来很大好处。 
d、增加了对TCP传输协议的支持 
V2只提供了对UDP协议的支持,在一些高要求的网络环境中有很大限制,V3增加了对TCP协议的支持 
e、异步写入特性 
f、改进了SERVER的mount性能 
g、有更好的I/O WRITES 性能。 
h、更强网络运行效能,使得网络运作更为有效。 
i、更强的灾难恢复功能。
2、NFS的应用场景及优缺点
(1)NFS的应用场景

NFS服务可以让不同的客户端挂载使用同一个目录,作为共享存储使用,可以保证不同节点客户端数据的一致性,NFS一般用于企业集群架构的工作场景中,用来存储共享视频、图片、附件等静态资源文件(一般用户上传的文件都放在NFS共享里,例如BBS的图片、附件、头像,但网站BBS程序不要放在NFS共享里),NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站公司应用频率很高。大公司、大网站的门户除了使用NFS外,还可能会使用MFS、GFS、FASTFS、TFS等分布式文件系统。

中小型网站(每天2000万PV以下)线上应用,都有用武之地。门户网站也会有其它方面的应用,当然未必是线上存储使用。(一般网上定义大网站为100万IP/天以上)

(2)NFS的优点

a、简单。容易上手,容易掌握,数据是文件系统之上的(文件看得到,不象分布式的gfs、mfs,文件是看到见的)。

b、方便。部署快速,维护简单。

c、可靠。从软件层面上看,数据可靠性高,经久耐用。

d、稳定。这个稳定依赖于操作系统的。

(3)NFS的缺点

a、局限性是存在单点故障。如果NFSServer宕机了,所有客户端都不能访问共享目录。需要通过负载均衡及高可用方案来弥补。

b、在高并发的场合,NFS效率和性能有限。一般几千万以下PV的网站不是瓶颈,除非网站架构太差(参考值:2000万PV/天)。

c、客户端认证基于IP和主机名,权限是根据ID来识别的,安全性一般(用于内网问题不大)。

d、NFS的数据是明文的,对数据完整性不作验证。

e、多台机器挂载NFS服务器时,连接管理维护麻烦。耦合度太高(架构师的重要职责就是解耦),尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可以使用autofs自动挂载解决,生产环境一般不会用autofs)。

3、NFS挂载的原理
(1)挂载命令格式

mount 参数 IP:目录 本地目录

(2)RPC服务

由于NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS在传输数据时使用的端口会随机选择,无法固定。那么NFS客户端是如何知道NFS服务端使用哪个端口呢?答案就是RPC(Remote Procedure Call,中文意思是远程过程调用)协议/服务来实现的。

NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而可以确保客户端可以连接到正确的NFS端口上,达到数据传输、交互的目的。这个RPC服务很类似于在NFS服务端和NFS客户端之间的一个中介。

CentOS5.x的随机端口一般小于1024,RPC服务名是portmap

CentOS6.4的随机端口都比较大,RPC服务名是rpcbind

4、NFS服务流程
(1)服务端启动NFS服务

首先,启动rpcbind服务,等待接收NFS服务端口信息

然后,启动NFS服务,向rpcbind服务注册相应服务端口

(2)客户端使用NFS服务

首先,客户端通过RPC服务,向服务羰的RPC服务的111端口发起NFS存取请求。

其次,服务端的RPC服务找到对应的已注册的NFS服务端口后,通知客户端的RPC服务。

然后,客户端就获取到服务端NFS服务的正确端口,直接与服务端NFS服务进行数据操作。

最后,客户端完成操作后,将结果通知用户。

5、NFS软件包
(1)nfs-utils:NFS服务的主程序

包括rpc.nfsd、rpc.mountd两个daemons和相关文档说明及执行命令文件等。

(2)portmap/rpcbind:RPC的主程序

CentOS5.x的RPC服务名是portmap

CentOS6.x的RPC服务名是rpcbind

6、NFS常用参数
(1)访问权限选项

ro:设置输出目录只读

rw:设置输出目录读写

(2)用户映射选项

all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);

no_all_squash:与all_squash取反(默认设置);

root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);

no_root_squash:与rootsquash取反,如果是root用户使用NFS时,对共享目录有root权限(权限过大);

anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);

anongid=xxx:将远程访问用户组都映射为匿名用户组账户,指定该匿名用户组账户为本地用户组账户(GID=xxx);

(3)其它选项

secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

insecure:允许客户端从大于1024的tcp/ip端口连接服务器;

sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

no_wdelay:若有写操作则立即执行,应与sync配合使用;

subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);

no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

7、NFS服务器的配置

NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。

NFS的常用目录

/etc/exports               NFS服务的主要配置文件

/usr/sbin/exportfs          NFS服务的管理命令

/usr/sbin/showmount         客户端的查看命令

/var/lib/nfs/etab           记录NFS分享出来的目录的完整权限设定值

/var/lib/nfs/xtab           记录曾经登录过的客户端信息

8、NFS的权限问题:

nfs的权限由两部分组成

1.远端主机对该目录的权限(rw,ro),在exports中决定,这是第一扇门;

2.被共享目录在nfs服务器端的权限,由该目录的属组,属主,权限大小决定,这是第二扇门

注意:如果,第一扇门的权限是ro,即使第二扇门的权限是777,那么这个目录也是不可写的。

如果,第一扇门的权限是rw,客户端的用户在该目录的权限就和客户端用户的身份和该目录本身的权限,属主,属组有关,客户端用户的身份会被折射到服务器端:比如:客户端以along的身份登录,而在服务器端改目录的属主也是along,客户端和服务器端along的UID也要一样,那么客户端就可以在该目录为所欲为;如果客户端是以root的身份登录,因为服务器端默认有root_squash参数,所以root的身份会被压缩成nfsnobody,假如改目录的属主是along,权限是755,那么客户端的权限是只读。

9、NFS的挂载
(1)查看是否可以查看服务端共享

showmount –e 192.168.1.8

(2)通过mount命令挂载(重启后失效)

mount –t nfs 192.168.1.8:/data /mnt/nfs

(3)查看挂载是否成功

df –h

(4)挂载永久生效的办法

a、方法一:写入/etc/rc.local文件

vi /etc/rc.local

/bin/mount –t nfs 192.168.1.8:/data /mnt/nfs

b、方法二:写入/etc/fstab文件

vi /etc/fstab

192.168.1.8:/data   /mnt/nfs    nfs    default   0    0

注意:最后2个选项必须用0(不备份,不做磁盘检查),不能用1,否则很有可能启不来

c、两种方法的优缺点

(i)写入/etc/rc.local文件中:

优点是不会影响系统的启动,当NFS服务出现问题时,系统可以正常启动

缺点是偶尔开机会挂载不了

(ii)写入/etc/fstab文件中:

缺点上当NFS服务端处于不可用状态时,那么客户端开机后可能会导致系统无法启动的风险。因为fstab可能会优先于网络启动,此时还连不上NFS,所以尽量不要将NFS放在/etc/fstab文件中挂载。

d、永久挂载方法的建议

把NFS的rpc 服务的启动命令和挂载命令均放入/etc/rc.local文件中,然后通过nagios监控软件监控开机后的挂载情况。

tail -2 /etc/rc.local

/etc/init.d/rpcbind start

/bin/mount –t nfs 192.168.1.8:/data /mnt/nfs

e、经验:统一开机启动位置的规范。

要么把所有开机启动服务放到rc.local中。相当于把/etc/rc.local当作服务器的档案,所有服务器启动配置都放到档案里,做好注释。

要么写好启动脚本,都用chkconfig管理。

10、客户端mount挂载参数
(1)-t vfstype 指定文件系统的类型

Windows NT ntfs文件系统:ntfs 

UNIX(LINUX) 文件网络共享:nfs

(2)-o 参数

async:异步处理,不会同步写磁盘,会提高性能,但会降低数据安全。不推荐使用

atime:每次访问时,更新访问时间,是默认选项,在高并发时,建议明确加上noatime,取消此默认项,提升IO。

auto:能够被自动挂载通-a选项。相当于mount -a了一次

defaults:缺省值包括rw、suid、dev、auto、nouser、async

noatime:不更新文件访问时间。(常用优化参数)

nodiratime:不更新目录访问时间。高并发建议使用.(常用优化参数)

noauto:不会自动挂载文件系统。

noexec:挂载的文件系统里不能执行二进制文件

nosuid:不允许有 suid   , 防止远程用户运行setuid程序获得更高权限

nouser:使用者可以执行umount 的动作

user:使用者可以执行 mount 的动作

owner:

remount:重新挂载一个已挂载的文件系统,且不会改变设备或挂载点。当系统故障进入single或rescue模式修复系统时,会发现根文件常常变只读,不允许修改,这时可以mount -oremount,rw /,将/设为读写。

suid:允许设置suid

sync:同步(常用优化参数)

ro:采用只读方式挂接设备

rw:采用读写方式挂接设备
bg: 如果安装失败(服务器没有响应),在后台一直尝试,继续发其它的安装请求
hard :以硬方式安装文件系统(这是默认情况)。如果服务器当机,让试图访问它的操作被阻塞,直到服务器恢复为止。
soft: 以软方式安装文件系统。如果服务器当机,让试图访问它的操作失败,返回一条出错消息。这项功能对于避免进程“挂”在无关紧要的安装操作上来说非常有用。(常用优化参数)
intr: 允许用户中断被阻塞的操作(并且让它们返回一条出错消息)(常用优化参数)
nointr: 不允许用户中断
retrans=n :指定在以软方式安装的文件系统上,在返回一条出错消息之前重复发出请求的次数。
timeo=n :设置请求的超时时间(以十分之一秒为单位)
rsize=n :设置读缓冲的大小为n字节。对TCP和UDP安装都适用,32K较好。(常用优化参数)
wsize=n: 设置写缓冲的大小为n字节。对TCP和UDP安装都适。(常用优化参数)
nfsvers=n 设置NFS协议的版本 2 或者 3 (在正常情况下是自动的)
tcp: 选择通过TCP来传输。默认选择UDP
fg 和bg正好相反,是默认的参数

mountport :设定mount的端口

(3)客户端查看NFS挂载的参数(/proc/mounts文件中)

grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0

192.168.1.8:/wddg/nfs /mnt/nfs nfs4rw,relatime,vers=4,rsize=262144,

wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.158.168,minorversion=0,local_lock=none,addr=192.168.1.80 0

六、NFS操作实践

1、检查环境
(1)服务端

cat /etc/redhat-release

Red HatEnterprise Linux Server release 6.8 (Santiago)

uname -r

2.6.32-642.el6.x86_64

uname -m

x86_64

(2)客户端

cat /etc/redhat-release

Red Hat EnterpriseLinux Server release 6.4 (Santiago)

uname -r

2.6.32-358.el6.i686

uname -m

i686

(3)安装NFS软件包

方法一:安装NFS服务组

yum groupinstall"NFS file server" -y  #可先通过yum grouplist查看程序组名

方法二:安装rpm包

yum installnfs-utils rpcbind -y

(4)查看NFS软件包

rpm -qa nfs-utils portmap rpcbind

服务端:

rpcbind-0.2.0-12.el6.x86_64

nfs-utils-1.2.3-70.el6.x86_64

客户端:

nfs-utils-1.2.3-36.el6.i686

rpcbind-0.2.0-11.el6.i686

2、启动NFS服务
(1)服务端

a、启动服务,先启动rpcbind,后启动nfs

/etc/init.d/rpcbind start

/etc/init.d/nfs start

b、查看服务是否启动

/etc/init.d/rpcbind status

/etc/init.d/nfs status

c、查看本机rpc中注册的服务

rpcinfo -plocalhost

   program vers proto   port service

    100000   4   tcp    111 portmapper

    100000   3   tcp    111 portmapper

    100000   2   tcp    111 portmapper

    100000   4   udp    111 portmapper

    100000   3   udp    111 portmapper

    100000   2   udp    111 portmapper

    100011   1   udp    875 rquotad

    100011   2   udp    875 rquotad

    100011   1   tcp    875 rquotad

    100011   2   tcp    875 rquotad

    100005   1   udp  33814 mountd

    100005   1   tcp  38970 mountd

    100005   2   udp  50071 mountd

    100005   2   tcp  51864 mountd

    100005   3   udp  52190 mountd

    100005   3   tcp  37160 mountd

    100003   2   tcp   2049 nfs

    100003   3   tcp   2049 nfs

    100003   4   tcp   2049 nfs

    100227   2   tcp   2049 nfs_acl

    100227   3   tcp   2049 nfs_acl

    100003   2   udp   2049 nfs

    100003   3   udp   2049 nfs

    100003   4   udp   2049 nfs

    100227   2   udp   2049 nfs_acl

    100227   3   udp   2049 nfs_acl

d、将nfs和rpcbind服务设置为开机自启动

chkconfig nfson                 

chkconfigrpcbind on

chkconfig --listnfs

chkconfig --listrpcbind

e、如果RPC服务没启动的报错信息

service rpcbindstop

Stopping rpcbind:[  OK ]

rpcinfo -plocalhost

rpcinfo: can't contact portmapper: RPC: Remote system error -Connection refused

(2)客户端

a、启动服务,只需启动rpcbind

/etc/init.d/rpcbind start

b、查看服务是否启动

/etc/init.d/rpcbind status

c、将rpcbind服务设置为开机自启动               

chkconfig rpcbindon

chkconfig --listrpcbind

3、服务端配置nfs
(1)配置文件:/etc/exports
(2)创建需共享的目录

mkdir /mnt/nfs#nfs的权限为755,后面新建文件时会报错的

ll

drwxr-xr-x. 2root root 4096 Jan 22 13:38 nfs

(3)编辑配置文件/etc/exports

vi /etc/exports

/mnt/nfs       192.168.16.0/24(rw,sync)

(4)重启nfs服务

/etc/init.d/nfsreload

注:不要用restart,要用reload。restart是将所有连接直接断开后重启,reload是已请求的正常运行,没请求的则不能在连接了,所有操作完毕后才会重启,用户体验较好。reload等同于exportfs -r

(5)本机检查目录是否被共享出来

showmount -elocalhost

Export list forlocalhost:

/mnt/nfs        192.168.16.0/24

4、客户端挂载nfs
(1)客户端检查目录是否可以共享

showmount -e 192.168.58.22

Export list for 192.168.58.22:

/mnt/nfs        192.168.16.0/24

(2)挂载

mount -t nfs 192.168.58.22:/mnt/nfs/tmp

(3)查看

df -h

192.168.58.22:/mnt/nfs   50G 8.4G   39G  19% /tmp

5、客户端操作nfs
(1)查看nfs目录

ls -l /tmp   #成功

(2)创建文件

touch /tmp/a.txt

报错是:touch: cannot touch `a.txt': Permission denied

(3)报错原因

文件的权限分为两种,一种是本地访问权限,另一种是网络访问权限。两者必须都有权限,才能进行相应的操作。

在/etc/exports文件内容中的/mnt/nfs   192.168.16.0/24(rw,sync),rw表示网络访问有读写权限,

但/mnt/nfs目录的权限是755,由于nfs访问默认用户是nfsnobody,属于其它组,没有写权限。

(4)查看对nfs目录进行操作的用户

a、先将服务端/mnt/nfs目录权限改为777

chmod 777/mnt/nfs

b、客户端创建文件

touch /tmp/a.txt#成功

c、查看新创建的文件a.txt的属主和属组

ls -l /tmp/a.txt

-rwxrwxrwx. 1 nfsnobodynfsnobody 0 Jan 22 13:38 a.txt

d、通过/etc/passwd文件查看nfsnobody用户信息

grep nfsnobody/etc/passwd

nfsnobody:x:65534:65534:AnonymousNFS User:/var/lib/nfs:/sbin/nologin

e、通过/var/lib/nfs/etab文件中生成nfs实例的配置信息

cat/var/lib/nfs/etab

/mnt/nfs

192.168.220.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,ro,root_squash,no_all_squash)

f、修改nfs目录的权限并修改其属主和属组

chmod 755/mnt/nfs

chmod -R nfsnobody.nfsnobody/mnt/nfs

g、客户端创建文件

touch /tmp/b.txt#成功

6、查看系统启动的rpc和nfs服务进程
 (1)查询服务进程

ps -ef | grep -E "rpc|nfs"

rpcuser   2720     1  0Jan16 ?        00:00:00 rpc.statd

root      3234     2  0Jan16 ?        00:00:00 [rpciod/0]

root      3235     2  0Jan16 ?        00:00:00 [rpciod/1]

root      3236     2  0Jan16 ?        00:00:00 [rpciod/2]

root      3237     2  0Jan16 ?        00:00:00 [rpciod/3]

root      3238     2  0Jan16 ?        00:00:00 [rpciod/4]

root      3239     2  0Jan16 ?        00:00:00 [rpciod/5]

root      3240     2  0Jan16 ?        00:00:00 [rpciod/6]

root      3241     2  0Jan16 ?        00:00:00 [rpciod/7]

root      3242     2  0Jan16 ?        00:00:00 [rpciod/8]

root      3243     2  0Jan16 ?        00:00:00 [rpciod/9]

root      3244     2  0Jan16 ?        00:00:00 [rpciod/10]

root      3245     2  0Jan16 ?        00:00:00 [rpciod/11]

root      3246     2  0Jan16 ?        00:01:46 [rpciod/12]

root      3247     2  0Jan16 ?        00:00:00 [rpciod/13]

root      3248     2  0Jan16 ?        00:00:00 [rpciod/14]

root      3249     2  0Jan16 ?        00:00:00 [rpciod/15]

root      3251     2  0Jan16 ?        00:00:50 [nfsiod]

rpc      11191     1  0Feb08 ?        00:00:00 rpcbind

root     11236     1  0Feb08 ?        00:00:00 rpc.rquotad

root     11241     1  0Feb08 ?        00:00:00 rpc.mountd

root     11247     2  0Feb08 ?        00:00:00 [nfsd4]

root     11248     2  0Feb08 ?        00:00:00 [nfsd4_callbacks]

root     11249     2  0Feb08 ?        00:00:00 [nfsd]

root     11250     2  0Feb08 ?        00:00:00 [nfsd]

root     11251     2  0Feb08 ?        00:00:00 [nfsd]

root     11252     2  0Feb08 ?        00:00:00 [nfsd]

root     11253     2  0Feb08 ?        00:00:00 [nfsd]

root     11254     2  0Feb08 ?        00:00:00 [nfsd]

root     11255     2  0Feb08 ?        00:00:00 [nfsd]

root     11256     2  0Feb08 ?        00:00:00 [nfsd]

root     11287     1  0Feb08 ?        00:00:00 rpc.idmapd

(2)各服务进程说明

a、rpcbind:rpc服务主进程 #CnetOS5.x是portmap

b、rpc.rquotad:磁盘配额进程

c、rpc.mountd:NFS权限管理进程

rpc.mountd的主要功能是管理NFS文件系统。当NFS客户端顺利通过rpc.nfsd登入NFS主机后,在它可以使用NFS服务器提供是数据之前,会去读NFS的配置文件/etc/exports来比对NFS客户羰的权限。通过后,再经过NFS服务器本地文件系统的权限验证,才能读取数据。

d、nfsd:NFS服务主进程

nfsd也叫rpc.nfsd,主要功能是管理NFS客户端是否能够登入NFS服务端主机,其中还包含登入者的ID判别。

e、rpc.statd:检查文件一致性进程(非必要)

rpc. statd的主要功能是用来检查文件一致性进程,与rpc.lockd有关,需要客户端和服务端同时开启才有效。是非必要进程

f、rpc.lockd:锁定文件进程(非必要)

rpc.locked的主要功能是用来锁定文件进程,用于多客户端的同时写入。是非必要进程

(3)查看进程帮助的方法

man rpc.statd

man rpc.mountd

man nfsd

man rpc.rquotad

man rpcbind

七、NFS服务常用命令、路径文件和格式说明

1、NFS配置文件说明

NFS常用路径

说明

/etc/exports

NFS服务主配置文件,配置NFS具体共享服务,默认内容为空。以行为单位。

格式:目录  IP1/子网(权限1, 权限2,...) IP2/子网(权限1, 权限2,...)

如:/data 10.11.12.13/24(rw,sync)

/usr/sbin/exportfs

NFS服务的管理命令。可以加载NFS配置生效和,还可以直接配置NFS共享目录,也就是无需配置/etc/exports实现共享(但重启后失效)

如:exportfs -rv :加载配置生效,等价于/etc/init.d/nfs reload

/usr/sbin/showmount

查看NFS配置及挂载结果的命令

如:服务端查看:showmount -e localhost

    客户端查看:showmount -e 服务端IP

/var/lib/nfs/etab

NFS配置文件的完整参数设定的文件(会自动加上默认参数)

/var/lib/nfs/xtab

CentOS5.x曾经挂载过的NFS客户端信息,包括IP等信息。CentOS6.x有此文件,但是空文件。

2、NFS服务常用查看命令

(1)mount:客户端可以查看NFS挂载情况

(2)nfsstat:查看nfs服务状态

3、NFS配置文件/etc/exports的格式说明
(1)格式

共享目录 主机1/子网(权限1, 权限2,...) 主机2/子网(权限1, 权限2,...)

(2)各列含义

a、第1列共享目录:是NFS服务端实际要共享的目录,要用绝对路径。

b、第2列客户端地址:是NFS服务端授权的可访问共享目录的NFS客户端地址。

客户端地址可是是单独的IP或主机名、域名,也可以是整个网段,还可以用*号匹配所有客户端服务器,

配置写法如下:

客户端地址要求

具体地址例子

说明

授权单一客户端访问

10.11.12.13

一般情况,生产环境中此配置不多

授权整个网段客户端访问

10.0.0.0/24

24等同于255.255.255.0,生产环境最常用配置,简单且维护方便

授权整个网段客户端访问

10。0。0。*

指定网段的另外一个写法(需要验证)

授权某个域名客户端访问NFS

kk.dd.cn

不常用

授权整个域名客户端访问NFS

*.dd.cn

不常用

c、第3列权限参数集:对授权的NFS客户端的访问权限进行设置。

4、关于NFS服务的防火墙控制
(1)一般NFS都在企业内部网络,一般情况下是不用开防火墙的。如查非要开,可在防火墙中有两种方法设置。
(2)方法一:仅允许IP段访问

iptables –A INPUT –s 192.168.1.0/24 –j ACCEPT

(3)方法二:允许IP段加端口访问

iptables –A INPUT –i eht1 –p tcp –s 192.168.1.0/24 –dport 111 –jACCEPT

iptables –A INPUT –i eht1 –p udp –s 192.168.1.0/24 –dport 111 –jACCEPT

iptables –A INPUT –i eht1 –p udp –s 192.168.1.0/24 –dport 2049 –jACCEPT

iptables –A INPUT –i eht1 –p udp –s 192.168.1.0/24 –j ACCEPT

 

5、注意事项

(1)共享目录要用绝对路径。

(2)要注意共享目录的本地权限。如查需要读写共享,就一定要让本地目录被NFS服务用户nfsnobody可以读写。

(3)如果应用是有多台NFS服务器共用一个共享目录,需确保所有服务器对NFS共享目录具务相同的权限。

a、首先使用all_squash参数,把所有客户端都压缩成匿名用户

b、其次使用anonuid和anongid参数,使用指定的UID和GID用户

(4)所有客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody用户(UID和GID必须相同)。

八、客户端NFS挂载时的参数选择和优化

1、安全优化挂载参数

mount –t nfs –o nosuid,noexec,nodev,rw 192.168.1.8:/data /mnt/nfs

2、安全优化参数测试演示
(1)将原有挂载的nfs目录取消挂载

umount /mnt/nfs

(2)查看是否取消成功

df –h

(3)指定安全参数挂载

mount –t nfs –o nosuid,noexec,nodev,rw 192.168.1.8:/data /mnt/nfs

(4)查看是否挂载成功

df –h | tail -1

192.168.1.8:/wddg/nfs  35G  3.5G   30G 11% /mnt/nfs

(5)查看挂载参数

grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0

192.168.1.8:/wddg/nfs /mnt/nfs nfs4rw,nosuid,nodev,noexec,relatime,vers=4,

rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.9,minorversion=0,local_lock=none,addr=192.168.1.80 0

(6)向NFS共享目录中写入可执行脚本,并赋予可执行权限

echo 'echo Today is $(date +%F)' >/mnt/nfs/test.sh

vi /mnt/nfs/test.sh   

echo Today is $(date +%F)

chmod +x /mnt/nfs/test.sh

(7)查看/mnt/nfs/test.sh的权限

ls -l /mnt/nfs

-rwxr-xr-x 1 nobody nobody 26 Feb 11 21:09 test.sh

(8)服务端执行test.sh成功

./test.sh

Today is 2017-02-11

(9)服务端执行test.sh报错,提示无权限

./test.sh

-bash: ./test.sh: Permission denied

(10)原因是因为客户端在mount时使用noexec参数,不允许在NFS共享目录中执行程序
(11)使用解释器(sh等)来执行test.sh则可以成功执行

sh /mnt/nfs/test.sh

Today is 2017-02-11

3、性能优化挂载参数

性能优化:写文件一般是调整rsizewsize参数,读文件时还应加上noatimenodiratime

4、性能优化参数写测试演示
(1)将原有挂载的nfs目录取消挂载

umount /mnt/nfs

(2)查看是否取消成功

df –h

(3)指定性能参数挂载(先将rsize和wsize调小)

mount -t nfs -o noexec,rsize=1024,wsize=1024,rw 192.168.1.8:/wddg/nfs/mnt/nfs

(4)查看是否挂载成功

df –h | tail -1

192.168.1.8:/wddg/nfs  35G  3.5G   30G 11% /mnt/nfs

(5)查看挂载参数

grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefsrpc_pipefs rw,relatime 0 0

192.168.1.8:/wddg/nfs /mnt/nfs nfs4rw,nosuid,noexec,relatime,vers=4,

rsize=1024,wsize=1024,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.9,minorversion=0,local_lock=none,addr=192.168.1.80 0

(6)用dd测试文件系统,用time查看运行时间

time dd if=/dev/zero of=/mnt/nfs/test.txt bs=9k count=200

200+0 records in

200+0 records out

1843200 bytes (1.8 MB) copied, 12.6434 s, 146 kB/s

 

real    0m12.727s

user    0m0.000s

sys     0m0.067s

(7)重新挂载nfs共享目录,扩大rsize和wsize参数的值(无须写这2个参数,使用系统默认值)

umount /mnt/nfs

mount -t nfs -o noexec,rw 192.168.1.8:/wddg/nfs /mnt/nfs

(8)查看挂载参数

grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefsrpc_pipefs rw,relatime 0 0

192.168.1.8:/wddg/nfs /mnt/nfs nfs4rw,noexec,relatime,vers=4,rsize=262144,

wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.158.168,minorversion=0,local_lock=none,addr=192.168.1.80 0

(9)再次用dd测试文件系统,用time查看运行时间

time dd if=/dev/zero of=/mnt/nfs/test.txt bs=9k count=200

200+0 records in

200+0 records out

1843200 bytes (1.8 MB) copied, 11.9824 s, 154 kB/s

 

real    0m12.077s

user    0m0.000s

sys     0m0.042s

(10)虚拟机网络问题,测试失败。下回再测
5、性能优化参数读测试演示
(1)将原有挂载的nfs目录取消挂载

umount /mnt/nfs

(2)查看是否取消成功

df –h

(3)不加noatimenodiratime参数

mount -t nfs -o rw 192.168.1.8:/wddg/nfs /mnt/nfs

(4)查看是否挂载成功

df –h | tail -1

192.168.1.8:/wddg/nfs  35G  3.5G   30G 11% /mnt/nfs

(5)查看挂载参数

grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0

192.168.158.198:/wddg/nfs /mnt/nfs nfs4rw,relatime,vers=4,rsize=262144,

wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.158.168,minorversion=0,local_lock=none,addr=192.168.158.1980 0

(6)测试文件系统读性能,用time查看运行时间

time for ((i=1;i<20000;i++));do cat /mnt/nfs/test.sh>/dev/null;done

real    0m24.590s

user    0m0.921s

sys     0m17.638s

(7)重新挂载nfs共享目录,加noatimenodiratime参数

umount /mnt/nfs

mount -t nfs -o rw,noatime,nodiratime 192.168.1.8:/wddg/nfs /mnt/nfs

(8)查看挂载参数

grep nfs /proc/mounts

sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0

192.168.158.198:/wddg/nfs /mnt/nfs nfs4rw,noatime,nodiratime,vers=4,rsize=262144,

wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.158.168,minorversion=0,local_lock=none,addr=192.168.158.1980 0

(9)再次用dd测试文件系统,用time查看运行时间

time for ((i=1;i<20000;i++));do cat /mnt/nfs/test.sh>/dev/null;done

real    0m24.468s

user    0m1.042s

sys     0m18.126s

6、优化建议

(1)对于CentOS5.8_x86_64:

mount -t nfs –onoatime,nodiratime,rw,bg,soft,rsize=32768,wsize=32768  192.168.1.8:/wddg/nfs /mnt/nfs

(2)对于CentOS6.5_x86_64:

mount -t nfs –onoatime,nodiratime,rw,bg,soft,rsize=131072,wsize=131072  192.168.1.8:/wddg/nfs /mnt/nfs

九、mount和/etc/fstab配置故障现象说明

1、磁盘没有格式化

mount /dev/sdb1 /mnt时报错:mount:you must specify the filesystem type

2、/etc/fstab配置了检查文件系统,但指定的挂载磁盘或目录有问题,导致无法进入系统
(1)查看/etc/fstab文件中的挂载项

tail -1 /etc/fstab

/dev/sdb1    /mnt    ext4   default  0    1

最后一列的1,表示对/dev/sdb1要进行文件系统检查。

(2)重新服务器,报错,无法进入系统。

由于/dev/sdb1没有格式化,检查文件系统时会报错,无法进入系统。

(3)进入维护模式,修改/etc/fstab文件。

这是在系统提示下,输入root用户进行维护模式,文件系统也自动进入只读模式,无法编辑/etc/fstab文件。

(4)重新挂载根目录

mount –o remount,rw / 

(5)再次修改/etc/fstab文件

vi /etc/fstab

tail -1 /etc/fstab

/dev/sdb1    /mnt    ext4   default  0    0

(6)重启服务器,进入系统

十、NFS故障及解决思路

1、NFS故障常见报错提示
(1)启动NFS服务时报错

a、操作命令:启动NFS服务

/etc/init.d/nfs start

b、错误提示

Starting NFS services:  [  OK  ]

Starting NFS quotas: Cannot register service: RPC: Unable toreceive; errno = Connection refused

rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS,udp).[FAILED]

Starting NFS mountd: [FAILED]

Stopping RPC idmapd: [ OK  ]

Starting RPC idmapd: [ OK  ]

Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno111 (Connection refused)

rpc.nfsd: unable to set any sockets for nfsd[FAILED]

c、错误原因

NFS服务先于rpcbind服务启动

d、解决方法

先启动rpcbind服务,再启动nfs服务

/etc/init.d/rpcbind start

/etc/init.d/nfs start

(2)mount NFS文件系统时,文件访问拒绝

a、操作命令:mount NFS

mount -t nfs 192.168.158.198:/wddg/nfs /mnt/nfs

b、错误提示

mount.nfs:access denied by server while mounting. 192.168.1.8:/nfs/mnt

c、错误原因

/etc/exports文件中没有共享目录

d、解决方法

修改/etc/exports文件,

(3)showmount NFS时,提示程序没注册

a、操作命令:showmount NFS

showmount –e 192.168.1.8

b、错误提示

clnt_create: RPC: Program not registered

c、错误原因

NFS服务启动后,rpcbind服务因为其它原因重启

d、解决方法

重启nfs服务

/etc/init.d/nfs restart

(4)showmount NFS时,提示无法找到主机

a、操作命令:showmount NFS

showmount –e 192.168.1.8

b、错误提示

clnt_create:RPC:Port mapper failure – Unable to receive;errno 113(Noroute to host)

c、错误原因

如果网络没问题,一般是防火墙开启的原因

d、解决方法

检查防火墙,如果打开则将其关闭

/etc/init.d/iptables status

/etc/init.d/iptables stop

/etc/init.d/ip6tables stop

(5)启动NFS服务时,连接被拒绝

a、操作命令:启动NFS服务

/etc/init.d/nfs start

b、错误提示

Cannot register service:RPC: Unable to receive;errno = Connectionrefused

c、错误原因

要么是rpc服务没有启动,要么是防火墙的阻挡

d、解决方法

检查rpc服务是否启动,检查防火墙是否关闭

rpcinfo –p localhost

service iptables status

2、NFS故障的一般解决思路
(1)首先,检查服务端的rpcbind和nfs服务是否开启,客户端rpcbind服务是否开启

/etc/init.d/rpcbind status

/etc/init.d/nfs status

(2)其次,通过ping命令,检查网络是否通畅。

ping 192.168.1.8

(3)然后,通过telnet命令,检查rpc服务端口是否正常。如mount时无反映

telnet 192.168.1.8 111  

(4)然后,检查防火墙是否关闭

/etc/init.d/iptables status

防火墙开了,一般会遇到下面的报错:

showmount –e 192.168.1.8

clnt_create:RPC:Port mapper failure – Unable to receive;errno 113(Noroute to host)

(5)最后,通过showmount和mount来检查配置是否正常

showmount –e localhost  #查看服务端配置是否正常

showmount –e 192.168.1.8 #查看客户端是否能正常获取服务端的共享目录列表

mount –t nfs 192.168.1.8:/data /mnt #测试服务端是否能正常持载。服务端自已挂载自己

mount –t nfs 192.168.1.8:/data /mnt/nfs #测试客户端是否能正常挂载。

十一、基于NFS网络文件系统的Linux内核优化实战(官方建议)

1、与NFS性能相关的系统参数

rmem_default:指定接收套接字缓冲区大小的缺省值(以字节为单位,缺省值:112640)

rmem_max :指定接收套接字缓冲区大小的最大值(以字节为单位,缺省值:112640)

wmem_default:指定发送套接字缓冲区大小的缺省值(以字节为单位,缺省值:110592)

wmem_max :指定发送套接字缓冲区大小的最大值(以字节为单位,缺省值:131071)

2、查看与NFS性能相关的系统参数

cat /proc/sys/net/core/rmem_default

112640

cat /proc/sys/net/core/rmem_max

112640

3、根据官方建议临时调整相关参数

echo 8388608 > /proc/sys/net/core/rmem_default

echo 16777216 > /proc/sys/net/core/rmem_max

4、查看是否生效

cat /proc/sys/net/core/rmem_default

8388608

cat /proc/sys/net/core/rmem_max

16777216

5、测试查看效果
(1)调整前的效果

time for ((i=1;i<20000;i++));do cat /mnt/nfs/test.sh>/dev/null;done

real    0m24.468s

user    0m1.042s

sys     0m18.126s

(2)调整后的效果

time for ((i=1;i<20000;i++));do cat /mnt/nfs/test.sh>/dev/null;done

real    0m22.579s

user    0m0.467s

sys     0m8.391s

6、根据调整效果,将相关参数写入系统配置文件/etc/sysctl.conf,永久生效

cat >> /etc/sysctl.conf << EOF

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_default = 8388608

net.core.wmem_max = 16777216

EOF

sysctl –p

7、生产环境NFS共享存储优化
(1)硬件:SAS/SSD磁盘,做raid0/raid10。网卡要好。
(2)服务端参数:rw,async,all_squash,anonuid=xxx,anongid=xxx

/wddg/nfs192.168.1.0/24(rw,async,all_squash,anonuid=555,anongid=555)

(3)客户端参数:rsize,wsize,noatime,nodirtime,nosuid,noexec,soft(or hard,intr)

mount -t nfs –o noatime,nodiratime,rsize=131072,wsize=131072  192.168.1.8:/snfs /cnfs

(4)内核调优(不仅仅针对NFS,对其它文件系统也有用)

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_default = 8388608

net.core.wmem_max = 16777216

十二、NFS的状态信息和相关知识小结

1、通过/var/lib/nfs/etab文件中生成nfs实例的配置信息

cat /var/lib/nfs/etab

/mnt/nfs

192.168.220.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,ro,root_squash,no_all_squash)

2、CentOS5.x中还可能通过通过/var/lib/nfs/rmtab文件查看当前有哪此客户端在挂载NFS Server

cat /var/lib/nfs/rmtab

192.168.1.9:/snfs:0x00000001

3、NFS相关命令及常用参数

(1)mount: –t –o –a

(2)umount: -l –f

(3)showmount: -e

(4)exportfs: -rv -o

(5)rpcinfo: -p

(6)ping: -c -t

(7)telnet

4、NFS相关文件

(1)/etc/fstab

(2)/etc/exports

(3)/var/lib/nfs/etab

(4)/proc/mounts

(5)/etc/mtab

5、其它注意事项

(1)NFS的开机自动挂载一定要放在/etc/rc.local中,并要带注释。不要放在fstab中,因为nfs的挂载是需要网络的,加载fstab时,网络还没有启动。

(2)NFS服务端的共享目录可写时,不要给777权限。只要修改属主和属组为nfsnobody就行了,可读进,权限不需要改,默认就行了。

(3)由于NFS的默认用户为nfsnobody,且uid和gid均为65534,所以需要确保所有服务器的nfsnobody用户的uid和gid为65534

十三、NFS客户端自动挂载(autofs)部署。只需了解

1、为什么会需要autofs?

autofs可以实现当用户访问的时候才挂载,如果没有用户访问,会在一定时间后自动卸载。可以解决服务器和客户端紧密耦合的问题。缺点是用户请求才挂载,所以在开始请求的瞬间效率较差。

autofs一般用于测试环境,或并发很低的生产环境(如家目录漫游LDAP)。一般的企业不用它。

2、只需在客户端安装autofs服务(CentOS5.x默认已安装,CentOS6.x默认没有安装)

yum install autofs -y

3、配置autofs
(1)配置/etc/auto.master

a、格式

/mnt /etc/auto.misc --timeout 60

b、说明

/mnt:表示挂载点所在的目录 

/etc/auto.misc:定义mount的动作

--timeout 60:超时时间60秒.在/etc/sysconfig/autofs设置的默认值为300秒

(2)配置/etc/auto.misc文件

a、格式

cnfs    -fstype=nfs     192.168.1.8:/data

b、说明

cnfs:共享目录名,将被挂载到/etc/auto.master文件中配置的/mnt目录下。即/mnt/cnfs

-fstype= nfs:挂载的文件系统和参数

192.168.1.8:/data:服务端的共享目录

4、启动autofs服务

/etc/init.d/autofs start

5、操作演示
(1)查看系统挂载信息,未发现nfs

df -h

Filesystem           Size  Used Avail Use% Mounted on

/dev/sda3            35G   14G  20G  41% /

tmpfs               1012M   72K 1012M  1% /dev/shm

/dev/sda1            485M   36M  424M  8% /boot

(2)查看/mnt目录,未发现cnfs

ls -l /mnt

(3)直接进入/mnt/cnfs目录,操作成功,可以进入/mnt/cnfs

cd /mnt/cnfs

(4)再次查看系统挂载信息,发现nfs挂载

df -h

Filesystem           Size  Used Avail Use% Mounted on

/dev/sda3            35G  14G   20G  41% /

tmpfs               1012M   72K 1012M   1% /dev/shm

/dev/sda1            485M   36M  424M  8% /boot

192.168.1.8:/data   50G  8.5G  39G  19% /mnt/cnfs