第十六章 网络管理
一、修改主机名
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、性能优化挂载参数
性能优化:写文件一般是调整rsize和wsize参数,读文件时还应加上noatime和nodiratime
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)不加noatime和nodiratime参数
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共享目录,加noatime和nodiratime参数
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