Bootstrap

存储的基本知识

 一.位(bit)、字节(byte)、字符关系

1、位:
     数据存储的最小单位。每个二进制数字0或者1就是1个位;
2、字节:
     8个位构成一个字节;即:1 byte (字节)= 8 bit(位);
     1 KB = 1024 B(字节);
     1 MB = 1024 KB;   (2^10 B)
     1 GB = 1024 MB;  (2^20 B)
     1 TB = 1024 GB;   (2^30 B)
它们完全不是一个位面的概念,所以两者之间没有“区别”这个说法。不同编码里,字符和字节的对应关系不同:
①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。
②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。
③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。
④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。
⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。
View Code

二.Linux硬盘基础知识

  参考 参考二

  2.1简介

硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。

硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。

  2.2基本参数

转速
转速(Rotational Speed 或Spindle speed),是硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。转速的快慢是标示硬盘档次的重要参数之一,它是决定硬盘内部传输率的关键因素之一,在很大程度上直接影响到硬盘的速度。硬盘的转速越快,硬盘寻找文件的速度也就越快,相对的硬盘的传输速度也就得到了提高。硬盘转速以每分钟多少转来表示,单位表示为RPM,RPM是Revolutions Per minute的缩写,是转/每分钟。RPM值越大,内部传输率就越快,访问时间就越短,硬盘的整体性能也就越好。
硬盘的主轴马达带动盘片高速旋转,产生浮力使磁头飘浮在盘片上方。要将所要存取资料的扇区带到磁头下方,转速越快,则等待时间也就越短。因此转速在很大程度上决定了硬盘的速度。
家用的普通硬盘的转速一般有5400rpm、7200rpm几种高转速硬盘也是台式机用户的首选;而对于笔记本用户则是4200rpm、5400rpm为主,虽然已经有公司发布了10000rpm的笔记本硬盘,但在市场中还较为少见;服务器用户对硬盘性能要求最高,服务器中使用的SCSI硬盘转速基本都采用10000rpm,甚至还有15000rpm的,性能要超出家用产品很多。较高的转速可缩短硬盘的平均寻道时间和实际读写时间,但随着硬盘转速的不断提高也带来了温度升高、电机主轴磨损加大、工作噪音增大等负面影响。

平均访问时间
平均访问时间(Average Access Time)是指磁头从起始位置到到达目标磁道位置,并且从目标磁道上找到要读写的数据扇区所需的时间。
平均访问时间体现了硬盘的读写速度,它包括了硬盘的寻道时间和等待时间,即:平均访问时间=平均寻道时间+平均等待时间。
硬盘的平均寻道时间(Average Seek Time)是指硬盘的磁头移动到盘面指定磁道所需的时间。这个时间当然越小越好,硬盘的平均寻道时间通常在8ms到12ms之间,而SCSI硬盘则应小于或等于8ms。
硬盘的等待时间,又叫潜伏期(Latency),是指磁头已处于要访问的磁道,等待所要访问的扇区旋转至磁头下方的时间。平均等待时间为盘片旋转一周所需的时间的一半,一般应在4ms以下。

传输速率
传输速率(Data Transfer Rate)硬盘的数据传输率是指硬盘读写数据的速度,单位为兆字节每秒(MB/s)。硬盘数据传输率又包括了内部数据传输率和外部数据传输率。
内部传输率(Internal Transfer Rate) 也称为持续传输率(Sustained Transfer Rate),它反映了硬盘缓冲区未用时的性能。内部传输率主要依赖于硬盘的旋转速度。
外部传输率(External Transfer Rate)也称为突发数据传输率(Burst Data Transfer Rate)或接口传输率,它标称的是系统总线与硬盘缓冲区之间的数据传输率,外部数据传输率与硬盘接口类型和硬盘缓存的大小有关。
Fast ATA接口硬盘的最大外部传输率为16.6MB/s,而Ultra ATA接口的硬盘则达到33.3MB/s。2012年12月,两80后研制出传输速度每秒1.5GB的固态硬盘。

缓存
缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。

容量
硬盘的容量以兆字节(MB/MiB)、千兆字节(GB/GiB)或百万兆字节(TB/TiB)为单位,而常见的换算式为:1TB=1024GB,1GB=1024MB而1MB=1024KB。但硬盘厂商通常使用的是GB,也就是1G=1000MB,而Windows系统,就依旧以“GB”字样来表示“GiB”单位(1024换算的),因此我们在BIOS中或在格式化硬盘时看到的容量会比厂家的标称值要小。

尺寸分类
3.5英寸台式机硬盘;风头正劲,广泛用于各种台式计算机。
2.5英寸笔记本硬盘;广泛用于笔记本电脑,桌面一体机,移动硬盘及便携式硬盘播放器。
1.8英寸微型硬盘;广泛用于超薄笔记本电脑,移动硬盘及苹果播放器。
1.3英寸微型硬盘;产品单一,三星独有技术,仅用于三星的移动硬盘。
1.0英寸微型硬盘;最早由IBM公司开发,MicroDrive微硬盘(简称MD)。因符合CFⅡ标准,所以广泛用于单反数码相机。
0.85英寸微型硬盘;产品单一,日立独有技术,已知用于日立的一款硬盘手机,前Rio公司的几款MP3播放器也采用了这种硬盘。
View Code

  2.3工作原理

机械硬盘(HDD ):即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间
          的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由
          电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤。

固态硬盘(SSD ):固态硬盘的存储介质分为两种,一种是采用闪存(FLASH芯片)作为存储介质,另外一种是采用DRAM作为存储介质。由控制单元和存储单元(FLASH 芯片、DRAM 芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,

数据的记录方式
    数据的记录在同一盘组上存放时,应先集中放在一个柱面上,然后再顺序存放在相邻的柱面上,对应同一柱面,则应该按盘面的次序顺序存放。
    需要注意的是:数据记录从上到下,然后从外到内。数据的读/写按柱面进行,而不按盘面进行

固态磁盘读写原理:
  磁盘读数据时,将磁离子转换为电脉冲信号的方式
机械磁盘读写原理:
  磁头在读写数据时,是先读一个盘面正磁道的数据,接下来读下一个盘面相同半径磁道的数据,即按柱面来读写数据。因为磁头的切换是电子切换,这个切换速度很快,而切换不同的磁道或柱面,则需要寻道,寻道就是切换磁道,那么切换磁道是机械切换,
  也就是需要通过步进电机来移动磁头,做径向运动。
   具体操作:
    系统从上到下,然后从外到内顺序读取柱面上面的扇区。读出数据时通过告诉磁盘控制器要读出扇区所在的柱面号、磁头号和扇区号(物理地址的三个组成部分)进行。磁盘控制器则 直接使磁头部件步进到相应的柱面,选通相应的磁头,等待要求的扇区移动
     到磁头下。在扇区到来时,磁盘控制器读出每个扇区的头标,把这些头标中的地址信息与期待检出的磁头和柱面号做比较(即寻道),然后,寻找要求的扇区号。待磁盘控制器找到该扇区头标时,根据其任务是写扇区还是读扇区,来决定是转换写电路, 还是
    读出数据和尾部记录。找到扇区后,磁盘控制器必须在继续寻找下一个扇区之前对该扇区的信息进行后处理。如果是读数据,控制器计算此数据的ECC码,然 后,把ECC码与已记录的ECC码相比较。如果是写数据,控制器计算出此数据的ECC码,与数据一起存
    储。在控制器对此扇区中的数据进行必要处理期间,磁盘继续旋转。

访盘请求完成过程 :
  1.确定磁盘地址(柱面号,磁头号,扇区号),内存地址(源/目)
    当需要从磁盘读取数据时,系统会将数据逻辑地址传给磁盘,磁盘的控制电路按照寻址逻辑将逻辑地址翻译成物理地址,即确定要读的数据在哪个磁道,哪个扇区。
  2.为了读取这个扇区的数据,需要将磁头放到这个扇区上方
      1)首先必须找到柱面,即磁头需要移动对准相应磁道,这个过程叫做寻道,所耗费时间叫做寻道时间,
      2)然后目标扇区旋转到磁头下,即磁盘旋转将目标扇区旋转到磁头下。这个过程耗费的时间叫做旋转时间。
  3.即一次访盘请求(读/写)完成过程由三个动作组成:
      1)寻道(时间):磁头移动定位到指定磁道 
      2)旋转延迟(时间):等待指定扇区从磁头下旋转经过 
      3)数据传输(时间):数据在磁盘与内存之间的实际传输
  因此在磁盘上读取扇区数据(一块数据)所需时间:
  Ti/o=tseek 为寻道时间+tla 为旋转时间+ n *twm为传输时间
View Code

    2.4 linux内存查看

[root@node1 ~]# free -m
total used free shared buff/cache available
Mem: 3790 127 3345 8 318 3400
Swap: 3967 0 3967

1.linux系统的特性是将系统不用的物理内存缓存起来参考

  Buffer 缓冲区:  是块设备的读写缓冲区,buffer 是I/O 缓存,用于内存和硬盘(或其他 I/O设备)之间的数据交换的速度而设计的。

   Cache高速缓存 :cache是高速缓存,用于cpu与内存之间的缓冲。主要原因是cpu与memory,由于cpu快,memory跟不上,且有些值使用次数多,所以放入cache中,主要目的是,使用内存来缓存可能被再次访问的数据。  Cache 经常被使用在I/O 请求上   为提高系统性能。

2.sync命令将内存中的数据写入到磁盘
View Code

   2.5 cpu,内存,磁盘的关系

   2.6 物理结构

disk 磁盘 
head 磁头 
sector 扇区 
track 磁道 
cylinder 柱面 
units 单元快(柱面的容量) 
block 数据块 
inode 索引节点

  磁头
磁头是硬盘中最昂贵的部件,也是硬盘技术中最重要和最关键的一环。传统的磁头是读写合一的电磁感应式磁头,但是,硬盘的读、写却是两种截然不同的操作,为此,这种二合一磁头在设计时必须要同时兼顾到读/写两种特性,从而造成了硬盘设计上的局限。而MR磁头(Magnetoresistive heads),即磁阻磁头,采用的是分离式的磁头结构:写入磁头仍采用传统的磁感应磁头(MR磁头不能进行写操作),读取磁头则采用新型的MR磁头,即所谓的感应写、磁阻读。这样,在设计时就可以针对两者的不同特性分别进行优化,以得到最好的读/写性能。另外,MR磁头是通过阻值变化而不是电流变化去感应信号幅度,因而对信号变化相当敏感,读取数据的准确性也相应提高。而且由于读取的信号幅度与磁道宽度无关,故磁道可以做得很窄,从而提高了盘片密度,达到每平方英寸200MB,而使用传统的磁头只能达到每平方英寸20MB,这也是MR磁头被广泛应用的最主要原因。MR磁头已得到广泛应用,而采用多层结构和磁阻效应更好的材料制作的GMR磁头(Giant Magnetoresistive heads)也逐渐开始普及。

  磁道
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。这些磁道用肉眼是根本看不到的,因为它们仅是盘面上以特殊方式磁化了的一些磁化区,磁盘上的信息便是沿着这样的轨道存放的。相邻磁道之间并不是紧挨着的,这是因为磁化单元相隔太近时磁性会相互产生影响,同时也为磁头的读写带来困难。一张1.44MB的3.5英寸软盘,一面有80个磁道,而硬盘上的磁道密度则远远大于此值,通常一面有成千上万个磁道。磁道的磁化方式一般由磁头迅速切换正负极改变磁道所代表的0和1。

  扇区
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。1.44MB3.5英寸的软盘,每个磁道分为18个扇区。
  

  柱面
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘单面上的磁道数是相等的。无论是双盘面还是单盘面,由于每个盘面都只有自己独一无二的磁头,因此,盘面数等于总的磁头数。所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数*磁头数*扇区数*512B。
View Code

  2.7 磁盘接口类型

磁盘接口是磁盘与主机系统间的连接部件,作用是在磁盘缓存与主机内存之间的数据传输,不同的磁盘接口决定着磁盘与计算机之间的链接速度。

在整个操作系统中,磁盘接口的优劣直接影响之程序运行的快慢的系统系能的好坏

  IDE
全称 Integrated Drive Electronics,即“电子集成驱动器”,俗称PATA并口。
 ATA(属于IDE)
    ATA 全称 Advanced Technology Attachment,是用传统的40-pin 并口数据线连接主板与硬盘的,外部接口速度最大为133MB/s,因为并口线的抗干扰性太差,且排线占空间,不利计算机散热,将逐渐被SATA 所取代。
 SATA
    2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的Serial ATA委员会正式确立了Serial ATA 1.0规范,2002年,虽然串行ATA的相关设备还未正式上市,但Serial ATA委员会已抢先确立了Serial ATA 2.0规范。Serial ATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查如果发现错误会自动矫正。
 SATA Ⅱ
    SATA Ⅱ是芯片巨头Intel英特尔与硬盘巨头Seagate希捷在SATA的基础上发展起来的,其主要特征是外部传输率从SATA的150MB/s进一步提高到了300MB/s,此外还包括NCQ(Native Command Queuing,原生命令队列)、端口多路器(Port Multiplier)、交错启动(Staggered Spin-up)等一系列的技术特征。但是并非所有的SATA硬盘都可以使用NCQ技术,除了硬盘本身要支持NCQ之外,也要求主板芯片组的SATA控制器支持NCQ。
 SATA Ⅲ
    正式名称为“SATARevision3.0”,是串行ATA国际组织(SATA-IO)在2009年5月份发布的新版规范,主要是传输速度翻番达到6Gbps,同时向下兼容旧版规范“SATARevision2.6”(也就是现在俗称的SATA3Gbps),接口、数据线都没有变动。SATA3.0接口技术标准是2007上半年英特尔公司提出的,由英特尔公司的存储产品架构设计部技术总监Knut Grimsrud负责。Knut Grimsrud表示,SATA3.0的传输速率将达到6Gbps,将在SATA2.0的基础上增加1倍。
 SCSI
    SCSI的英文全称为“Small Computer System Interface”(小型计算机系统接口),是同IDE(ATA)完全不同的接口,IDE接口是普通PC的标准接口,而SCSI并不是专门为硬盘设计的接口,是一种广泛应用于小型机上的高速数据传输技术。SCSI接口具有应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,但较高的价格使得它很难如IDE硬盘般普及,因此SCSI硬盘主要应用于中、高端服务器和高档工作站中。
 光纤通道
     光纤通道的英文拼写是Fibre Channel,和SCSI接口一样光纤通道最初也不是为硬盘设计开发的接口技术,是专门为网络系统设计的,但随着存储系统对速度的需求,才逐渐应用到硬盘系统中。光纤通道硬盘是为提高多硬盘存储系统的速度和灵活性才开发的,它的出现大大提高了多硬盘系统的通信速度。光纤通道的主要特性有:热插拔性、高速带宽、远程连接、连接设备数量大等。
    光纤通道是为在像服务器这样的多硬盘系统环境而设计的,能满足高端工作站、服务器、海量存储子网络、外设间通过集线器、交换机和点对点连接进行双向、串行数据通讯等系统对高数据传输率的要求。
 SAS
SAS(Serial Attached SCSI)即串行连接SCSI,是新一代的SCSI技术,和现在流行的Serial ATA(SATA)硬盘相同,都是采用串行技术以获得更高的传输速度。并通过缩短连结线改善内部空间等。SAS是并行SCSI接口之后开发出的全新接口。此接口的设计是为了改善存储系统的效能、可用性和扩充性,并且提供与SATA硬盘的兼容性。
 RAID的优点
传输速率高。在部分RAID模式中,可以让很多磁盘驱动器同时传输数据,而这些磁盘驱动器在逻辑上又是一个磁盘驱动器,所以使用RAID可以达到单个的磁盘驱动器几倍的速率。因为CPU的速度增长很快,而磁盘驱动器的数据传输速率无法大幅提高,所以需要有一种方案解决二者之间的矛盾。 2. 更高的安全性。相较于普通磁盘驱动器很多RAID模式都提供了多种数据修复功能,当RAID中的某一磁盘驱动器出现严重故障无法使用时,可以通过RAID中的其他磁盘驱动器来恢复此驱动器中的数据,而普通磁盘驱动器无法实现,这是使用RAID的第二个原因 
 RAID的分类
RAID 0,无冗余无校验的磁盘阵列。数据同时分布在各个磁盘上,没有容错能力,读写速度在RAID中最快,但因为任何一个磁盘损坏都会使整个RAID系统失效,所以安全系数反倒比单个的磁盘还要低。一般用在对数据安全要求不高,但对速度要求很高的场合,如:大型游戏、图形图像编辑等。此种RAID模式至少需要2个磁盘,而更多的磁盘则能提供更高效的数据传输。

 磁盘性能关注点:
  1.主轴转数 (转速越快,读取速度越快)
  2.磁盘接口和接口类型 (接口类型影响着传输效率) 
View Code

  2.8 磁盘内部相关知识

1。磁盘内部结构为:
磁头组件(磁头,磁头臂,传动轴,前置控制电路,数据转换器)
盘片组建(盘片(2-14片),主轴(转数衡量磁盘性能),马达)
每个盘片的有效盘面都会对应一个读写磁头,一般每个盘片对应两个有效盘面,所以盘片数*2等于对应的磁头数。从0开始依次排序,不同的磁盘盘面在逻辑上被分为磁道,柱面,以及扇区。

2.磁头
主要作用就是将存储在硬盘盘片上的磁信息转化为电信号向外传输。磁头在不工作的时候是停在靠近主轴接触盘片的表面,即线速度最小的地方(角速度最大),这个位置不存放任何数据,称为启停区或者着陆区,启停区以外是数据区。

3.0磁道
在磁盘的最外圈,离主轴最远的地方是0磁道,也是磁盘存放数据开始的地方。既然磁盘的最外圈是存放数据的,而在停止的时候,磁头在最内圈的启停区,name次透视如何找到0磁道的那?因为磁盘中还有一个用来完成磁盘初始定位的‘0磁道检测器构件’,由这个构件来完成对0此道的定位。
那么磁头如何来定位0磁道的那?
  在磁盘不工作的时候,磁头会自动的停留在启停区,在磁盘需要读写数据的时候,磁盘主轴盘片才开始旋转,旋转速度达到定额的时候,磁头就会因旋转产生的气流而抬起,这时‘0磁道检测器构件才会带动磁头向存放数据的区域移动并开始读取数据’,
  需要注意的是,磁头与盘片是不接触的,距离大概是0.005um-0.01um,不接触的原因是怕损坏磁头和盘片

4.盘片
    磁道
     磁道是磁盘在格式化的时候理论上会被分成很多同心圆,这些同心圆的轨迹就叫磁道(Track),磁道是又盘面从外向内依次从0开始顺序编号。
   扇区
     磁盘的每一个盘面一般有300-1024个磁道,新的大容量的磁盘每个盘面的磁道数可能会更多。信息以脉冲串的形式记录在这些轨迹里面,这些同心圆轨迹不是连续的记录数据,而是被分成一段段的圆弧,这些圆弧的角速度一样,但是由于径向长度不同,
     所以线速度不同,外圈的线速度要大于内圈的线速度,即在同样的转速下,外圈在同样的时间里要比内圈的画过的圆弧大(但是读取的数据是一样的)。
     这样的圆弧被称为扇区,从1开始编号,当然某个盘面上的每个磁道所拥有的扇区数量是相等。磁盘驱动器在向磁盘读取和写入数据时,要以扇区为单位。1.44MB3.5英寸的软盘,每个磁道分为18个扇区。
      扇区是硬盘的最小存储单元,记住是硬盘的也就是磁盘的最小存储单元,并不是文件系统的最小存储单元(文件系统的小存储单元是block,可以人为设置)。一般扇区大小为512bytes。
     操作系统一般是以扇区(Sector)为单位将信息存储在磁盘上,一个扇区主要有两部分:存储数据地点的标识符和存储数据的数据段,要注意的是扇区也有编号的
     
    扇区分为两部分:
    1.头标:
      扇区的三维地址(也叫标识符):磁道或柱面号,磁头或盘面,扇区在磁道上的位置即扇区号
      还有个字段是显示器是否能储存可靠信息或者是否发现某个故障而不宜使用的标记,冗余校验(CRC)值
    2.数据段
      数据
      保护数据的纠错码(ECC),再出事准备期间,计算机用512的虚拟信息字节和这些虚拟信息字节相应的ECC数字填入这个部分
 5.柱面
 硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘单面上的磁道数是相等的。无论是双盘面还是单盘面,由于每个盘面都只有自己
 独一无二的磁头,因此,盘面数等于总的磁头数。所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数*磁头数*扇区数*512B。
 一块磁盘的柱面数(或者是每个盘面的磁道数)取决于磁道的宽窄和磁头的大小
 也是说柱面数 = 某个盘面的磁道数。

 磁盘分区实际上就是在划分柱面号和扇区号

 other
 1.盘面数=磁头数=盘片数*2
 2.柱面数 = 某个盘面的磁道数。
 3.硬盘的容量=柱面数*磁头数*扇区数*512B。
 4.在磁盘突然停止的时候,磁盘的盘片在高速旋转,很可能会造成磁盘损毁,激活磁盘减少寿命
 5.0磁道非常重要,系统的引导程序就在0柱面0磁道1扇区的前446bytes里面。如果0磁道坏掉了,这块磁盘就坏掉了。
 6.MBR的起始位置在0柱面0磁道1扇区上,分为三个部分
   主引导程序
   分区表
   结束标志
 7. 
  磁道:盘片上以盘片的圆心为圆心,不同半径的圆形轨迹就是磁道。磁道是圆形形状。
  扇区:磁道上不同半径把磁道分成的圆弧,每个圆弧就是一个扇区。每个扇区大小512bytes。
  柱面:不同盘面的相同半径的磁道组成的圆柱形轨迹就是柱面。一个盘面的磁道数和磁盘的柱面数相等。柱面分区的基本单位。
  盘片“一个磁盘有2-14片不等,一个盘片一般有两个有效面,盘面是从0开始从上到下依次编号,和磁头的编号一样。
  磁头:一个盘片一般有两个有效盘面,那么一个盘面就会对应一个有效磁头。磁头数等于盘面数,等于盘片数乘2
View Code

详细参考 详细参考

  2.9 磁盘容量的计算

扇区,磁道(柱面),和磁头数构成了磁盘结构的基本参数,所以根据这些参数也可以是算出磁盘的容量,公式为:
计算方法一:
  磁盘容量=磁头数*柱面数(磁道数)*扇区大小【512*扇区数】
计算方法二:
  磁盘容量=柱面数(磁道数)*柱面大小(扇区大小【512*扇区数】*磁头数*)
[root@rodbate ~]# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x0001d8fb

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 1306 9972736 8e Linux LVM

根据以上信息可以得出,该硬盘总容量为10.7 GB 。 
1255 heads表示255个磁头(即有效盘面数为255), 
263 sectors/track表示每个磁道有63个扇区,1305 cylinders表示该磁盘有1305个柱面,即每个磁面有1305个磁道。 
3,其中Units = cylinders of 16065 * 512 = 8225280 bytes表示柱面的容量,即柱面容量 = 柱面数(1305) * 磁道容量(磁道容量 = 扇区数[63] * 扇区大小[512bytes]) = 1305 * 63 * 512 = 8225280 bytes。 
4,Sector size (logical/physical): 512 bytes / 512 bytes 扇区大小物理和逻辑都是512bytes。 
5,I/O size (minimum/optimal): 512 bytes / 512 bytes 表示磁盘最小I/O读写大小512bytes。 
6,Disk identifier: 0x0001d8fb表示硬盘标识符。 
7,磁盘分区其实是通过分磁盘柱面实现的,每个磁盘分区都有起始柱面和结束柱面,而分区的容量也可以通过这个来计算的,上面已经得出了柱面的大小,要得到硬盘分区的容量大小只需: 磁盘分区大小 = 柱面大小 * 分区拥有的柱面数量 即可。
View Code

  2.10 磁盘存储逻辑结构图

硬盘分区

硬盘分区:将一个磁盘逻辑的分为几个区,每个区当做独立磁盘,以方便使用和管理,不同分区的名称一般为:设备名称+分区号。
例如:第一块硬盘的第一个分区叫sda1,第一块硬盘的第二个分区sda2
     第二块硬盘的第一个分区叫sdb1,第二块硬盘的第二个分区叫sdb2

*分区并不是硬盘的物理功能,而是软件功能
*主流的分区机制分为MBR(每个分区最大为2T)和GPT两种

MBR是PC架构计算机中使用的最为广泛的分区机制。
View Code

主引导记录:MBR

主引导记录:MBR
    MBR(Master Boot Record)是传统的分区机制,应用于绝大多数使用BIOS引导的PC设备(苹果使用EFI的方式);很多Server服务器即支持BIOS也支持EFI的引导方式在MBR硬盘中,
  分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)
    特点
    优点:MBR支持32bit和64bit系统;
    缺点:1) MBR支持的分区数量有限制;2)MBR只支持不超过2TB的硬盘,超过2TB的硬盘只能使用2TB的空间(但是有第三方解决方法),因为MBR的寻址空间只有32bit长;

    MBR结构:占用硬盘最开头的512字节,主引导记录位于磁盘的0磁头,0磁道,1扇区(0柱面,0磁头,1扇区)的位置,在硬盘里面是唯一的。windows的主引导记录在0磁头,1磁道,1扇区。故MBR不属于DOS扇区,DOS不能直接访问。
    前446字节为:主引导记录(Bootstrap Code Area)(引导不同的操作系统;不同操作系统,引导代码是不一样的)
    接下来的64字节:分别对应4个主分区表信息(Primary Partition Table),由于每个分区记录区占16个字节,所以一块硬盘最多能分成4个分区(主分区+逻辑分区:一个扩展分区会占用一个主分区的位置)
    最后2个字节:为启动标示(也是分区结束标志)(Boot Signature),永远都是55和AA;55和AA是个永久性的标示,代表这个硬盘是可启动

    MBR分区
    主分区:一块硬盘最多只能创建4个主分区(因为在MBR分区表结构中中最多可以创建4个主分区表信息,也就是4个16字节的空间,如上图)
    扩展分区:一个扩展分区会占用一个主分区的位置
    逻辑分区:
      1)是基于扩展分区创建出来的,先有扩展分区,然后在扩展分区的基础上再创建逻辑分区;也就是说我们要使用逻辑分区,必须先要创建扩展分区;
      2)扩展分区的空间是不能被直接使用的,我们必须在扩展分区的基础上去建立逻辑分区,才能够被使用;
      3)Linux最多支持63个IDE分区和15个SCSI分区
View Code

 全局唯一标识磁盘分区表:GPT

GUID磁盘分区表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的
一32bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。 

它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一个扇区来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2TB
(2 × 10^12字节)的分区,然而,一些硬盘制造商(诸如希捷和西部数据)注意到了这个局限性,并且将他们的容量较大的磁盘升级到了4KB的扇区,这意味着MBR的有效容量上限提升到了16 TB。 这个看似“正确的”解决方案,在临时地降低了人们对改进磁盘
分配表的需求的同时,也给市场带来了关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bits给逻辑块地址,因而使得最大分区大小在2^64-1个扇区成为了可能。对于每个扇区大小为512字节的磁盘,那意味着可
以有9.4ZB(9.4 x 10^21字节)或18 E 个512字节(9,444,732,965,739,290,426,880字节 或 18,446,744,073,709,551,6152^64-1)个扇区 x 512(=2^9)字节每扇区)。
截止至2010年,大多数操作系统对GPT均有所支持,尽管包括Mac OS X和Windows在内的一些仅支持在EFI基础上自GPT分区启动。
GPT分区表的结构。此例中,每个逻辑块(LBA)为512字节,每个分区的记录为128字节。负数的LBA地址表示从最后的块开始倒数,−1表示最后一个块。

特点:
1)支持超过2TB的磁盘:GPT有64bit寻址空间;而MBR对硬盘空间地址寻址最多只支持32bit,2的32次方,硬盘空间是以地址方式来被识别的,所以MBR只支持容量为2TB以内的磁盘
2)向后兼容MBR
3)但是底层硬件必须支持UEFI(Intel提出的取代BIOS的新一代的引导系统)才能使用,也就是底层硬件必须使用UEFI
4)必须使用64位操作系统
5)Mac、LInux系统都能支持GPT分区格式
6)Windows 7 64bit、Windows Server2008 64bit支持GPT
View Code

注意:主引导扇区在整个硬盘里是唯一的。下面是0磁头,0磁道,1扇区的放大图示

分区表信息16字节里面的放大图

 0磁头,0磁道1扇区的信息图

dd if=/dev/sda of=mbr.bin bs=512 count=1 导出分区表信息
od -ax
mbr.bin 查看分区表内容

硬盘分区结构信息

参考

  2.11 磁盘分区

根据对分区表的了解,分区实质就是设置64字节的分区表(4个分区表)信息,最重要的就是指定分区所在硬盘的起始扇区的柱面号

注意:分完主分区之后再分扩展分区,之后扩展分区再分逻辑分区之后,就不能再分主分区了

1.对0磁头,0磁道,1扇区的主引导记录的446字节后面的64字节的分区表进行设置
2.一块自盘的分区表只有64自己的大小,只能支持4个分区表信息(主分区+扩展分区)
3.磁盘分区的最小单位是柱面
4.扩展分区不能直接使用,必须的在扩展分区上创建逻辑分区
5.扩展分区也有自己的分区表,扩展分区下的逻辑分区可以有很多个,IDE接口的硬盘逻辑分区大概有5-64个,SATA接口的硬盘逻辑分区大概有5-16个
6.分区工具有fdisk和parted
fdisk适合小于2T的磁盘分区,parted适合大于2T的磁盘分区

fdisk分区参考:https://www.cnblogs.com/rosepotato/p/8177988.html
parted分区参考:https://www.jianshu.com/p/8b13f4459a83

注意:Primary为主分区,Extended为扩展分区
扩展分区实际上并不是一个真正意义上的分区,相当于硬盘分完主分区之后的空间又虚拟出来的小磁盘,并且扩展分区的分区表也不存在64字节的分区表中。

再通过fdisk和parted等工具进行分区时,只是修改了分区表中的柱面的信息,和对应的数据没关系,因此,理论上,调整分区大小,并不会对分区内数据删除
View Code

磁盘分区的设备名

IDE硬盘    /dev/hd[a-d]
SCSI/STAT/USB硬盘    /dev/sd[a-p]
U盘    dev/sd[a-p] (与STAT相同)
软驱    dev/fd[0-1]
打印机    25针: /dev/lp[0-2] USB: /dev/usb/lp[0-15]
鼠标         PS2: /dev/psaux USB: /dev/usb/mouse[0-15]
当前CD ROM/DVD ROM    /dev/cdrom
当前鼠标    /dev/mouse
--------------------- 
/dev/hda1(IDE 硬盘接口):hd 表示(IDE)硬盘接口,a 表示第一个硬盘(b、c分别为第二三个硬盘,依次类推),1 表示第一个分区
/dev/sda1(SCSI 硬盘接口、SATA 硬盘接口):sd 表示(SCSI / SATA)硬盘接口
磁盘分区设备名

fdisk -l 详解

Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 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: 0x184c9ada

Device Boot      Start         End        Blocks           Id           System
/dev/sda1   *           1        5100    40965718+       c     W95 FAT32 (LBA)
/dev/sda2            5101       38914   271605099+   f     W95 Ext'd (LBA)
/dev/sda5            5101       12749    61440561     7    HPFS/NTFS
/dev/sda6           12750       21237    68174173+   7    HPFS/NTFS
/dev/sda7           25499       32239    54142440    7     HPFS/NTFS
/dev/sda8           32239       38318    48828416    83   Linux
/dev/sda9           38318       38914     4786176     82    Linux swap / Solaris
/dev/sda10          21237       25317    32777216   83    Linux
/dev/sda11          25318       25498     1453056    82    Linux swap / Solaris

前面一段意思是:硬盘总大小320G,255个磁面,63个扇区,38913个柱面,每个柱面单位是8225280 byets,磁盘标识符是0x184c9ada.

*  , 代表活动分区。活动分区只能是主分区,一个硬盘只能有一个活动的主分区。+,代表多个的意思
Device:是什么接口类型的磁盘ide->hd1....x,scsi->sd1...x
Boot:示引导分区,在上面的例子中 sda1 是引导分区
Start (开始):表示的一个分区从X cylinder(柱面)开始;
End (结束):表示一个分区到 Y cylinder(柱面)结束;
id:各种分区的文件系统不同,如有ntfs分区,fat32分区,ext3分区,swap分区等。每一种文件系统都有一个代号,对应这里的Id。
    f:FAT32 Extend,只限于扩展分区。
    86:NTFS。
    7:HPFS/NTFS
    b:FAT32。
    83:Linux Ext2。
    82:Linux 交换区。
System:
    HPFS(高性能文件系统)是IBMOS/2操作系统的一种文件系统。Fdisk把HPFS和NTFS视为一类.
    LBA是win95引入的,为了能使用大于8.4G的硬盘,中文名是“逻辑块存取”,EXT'd意思是“扩展分区”
    W95 Ext'd (LBA)是分区的一个识别符,表示扩展分区.

id和system是同一个意思
View Code

磁盘分区方案一   磁盘分区方案二 fdisk分区  parted分区   磁盘介绍文章

2.x other

1.在企业中如果是备份服务器或测试服务器等相对于不太追求读写的用SATA类型的硬盘,在线上服务器要使用SAS类型的硬盘
2.企业生产环境主流磁盘的相关信息对比

  普及程度:sas>ata>ssd
  单位容量对比性能,价格:ssd>sas>sata
  单位价格购买磁盘容量:sata>sas>ssd
3.SSD固态盘的优势和缺点

  优势:随机读取速度快,噪音小,功耗低,防震,重量轻,特别是存取性能
  缺点:容量小,价格高,读写寿命短,数据恢复难
4.磁盘使用小结:

  线上的业务(对外提供服务),用sas磁盘
  线下的业务(不对外提供服务),用sata磁盘
  线上高并发,小容量的业务:ssd磁盘
  根据数据的访问热度,智能分析分层(在sata和ssd上面进行数据的转移)
  企业来做线上高并发的数据或者数据库的存储业务要使用sata(raid5)或者sas(raid10)
5. 磁盘分区的最小单位是柱面
  操作系统一般是以扇区(Sector)为单位将信息存储在磁盘上
磁盘驱动器在向磁盘读取和写入数据时,以扇区为单位
6. 注意:分完主分区之后再分扩展分区,之后扩展分区再分逻辑分区之后,就不能再分主分区了
7.最多有一个扩展分区,这是操作系统的限制,最多有4个主分区+扩展分区,这是磁盘的限制,
8.分区实质:就是修改分区表,划分起始柱面号和扇区号
 fdisk分区原理:修改64字节分区表,但是不能对大于2t的磁盘分区,包括raid
 parted分区原理:GNU分区工具,支持大于2t的分区
9.分区的建议:
  常规分区:web集群节点
    /boot 100-200m
    swap 内存的1.5倍,一般不分,不分可能会宕机,分的话可能会降低性能
    / 剩余分区
  数据库和存储:
    / 80-200g
    /data 数据分区
  门口网站:
    /boot 100-200m
    swap 内存的1.5倍,一般不分,不分可能会宕机,分的话可能会降低性能
    / 80-200g
    / 剩余不分,留着将来使用

 

三.Linux文件系统

  3.1 文件系统简介

文件系统是一个存储设备上的数据和元数据进行组织的一种机制。

通俗来讲,文件系统是组织存储文件和数据的方法,目的是易于查询和存储数据。要注意的是文件系统是基于存储设备的。磁盘可以不分区,但是不能没有文件系统。磁盘必须格式化操作创建文件系统才能存放数据,不同的分区只能有一种文件系统。

linux上常见的文件系统包括:ext2(简单,性能好,cnd公司蓝汛在用),ext3(有日志功能,centos5默认文件系统),ext4,ufs,zfs,xfs,reiserfs(小文件几十k-几百k首选,centos不支持,需要单独安装)

windows上常见的文件系统包括ntfs,fat,fat32

文件系统也可以说是虚拟数据和网络数据存储的方法比如:nfs(图片等分布式),mfs,gfs(云计算等方面)

  3.2 文件系统选型

1)SAS/SATA硬盘文件系统选择

  reiserfs:大量小文件业务首选

  xfs:数据库业务,门户案列

  ext4:视频下载,流媒体,数据库,小文件业务也可以

  centos5.x系列:常规应用默认ext3

  centos6.x系列:常规应用默认ext4

  centos7.x系列:常规应用默认xfs

ps:

  centos的默认文件系统都是比较优秀的

  xfs/reiserfs的文件系统都需要单独安装,默认是不支持的,维护可能不方便。

  大并发的业务并不是过多的做磁盘的优化,而是在前端增加缓存

2)SSD硬盘文件系统选择

  ext4/reiserfs可以作为SSD的文件系统。但未对SSD做优化,不能充分发挥SSD性能,并影响SSD的使用时间 

产看系统内核版本
[root@VM_168_159_centos log]# uname -r
3.10.0-693.el7.x86_64
[root@VM_168_159_centos log]# 

查看当前支持的文件系统
[root@VM_168_159_centos log]# ll /usr/src/kernels/3.10.0-693.el7.x86_64/fs  or   ll /lib/modules/3.10.0-693.el7.x86_64/build/fs
total 316
drwxr-xr-x. 2 root root 4096 Jan  9  2018 9p
drwxr-xr-x. 2 root root 4096 Jan  9  2018 adfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 affs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 afs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 autofs4
drwxr-xr-x. 2 root root 4096 Jan  9  2018 befs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 bfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 btrfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 cachefiles
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ceph
drwxr-xr-x. 2 root root 4096 Jan  9  2018 cifs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 coda
drwxr-xr-x. 2 root root 4096 Jan  9  2018 configfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 cramfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 debugfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 devpts
drwxr-xr-x. 2 root root 4096 Jan  9  2018 dlm
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ecryptfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 efivarfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 efs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 exofs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 exportfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ext2
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ext3
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ext4
drwxr-xr-x. 2 root root 4096 Jan  9  2018 f2fs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 fat
drwxr-xr-x. 2 root root 4096 Jan  9  2018 freevxfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 fscache
drwxr-xr-x. 2 root root 4096 Jan  9  2018 fuse
drwxr-xr-x. 2 root root 4096 Jan  9  2018 gfs2
drwxr-xr-x. 2 root root 4096 Jan  9  2018 hfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 hfsplus
drwxr-xr-x. 2 root root 4096 Jan  9  2018 hostfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 hpfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 hppfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 hugetlbfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 isofs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 jbd
drwxr-xr-x. 2 root root 4096 Jan  9  2018 jbd2
drwxr-xr-x. 2 root root 4096 Jan  9  2018 jffs2
drwxr-xr-x. 2 root root 4096 Jan  9  2018 jfs
-rw-r--r--. 1 root root 6820 Aug 23  2017 Kconfig
-rw-r--r--. 1 root root 7372 Aug 23  2017 Kconfig.binfmt
drwxr-xr-x. 2 root root 4096 Jan  9  2018 kernfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 lockd
drwxr-xr-x. 2 root root 4096 Jan  9  2018 logfs
-rw-r--r--. 1 root root 4407 Aug 23  2017 Makefile
drwxr-xr-x. 2 root root 4096 Jan  9  2018 minix
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ncpfs
drwxr-xr-x. 5 root root 4096 Jan  9  2018 nfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 nfs_common
drwxr-xr-x. 2 root root 4096 Jan  9  2018 nfsd
drwxr-xr-x. 2 root root 4096 Jan  9  2018 nilfs2
drwxr-xr-x. 2 root root 4096 Jan  9  2018 nls
drwxr-xr-x. 5 root root 4096 Jan  9  2018 notify
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ntfs
drwxr-xr-x. 5 root root 4096 Jan  9  2018 ocfs2
drwxr-xr-x. 2 root root 4096 Jan  9  2018 omfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 openpromfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 overlayfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 proc
drwxr-xr-x. 2 root root 4096 Jan  9  2018 pstore
drwxr-xr-x. 2 root root 4096 Jan  9  2018 qnx4
drwxr-xr-x. 2 root root 4096 Jan  9  2018 qnx6
drwxr-xr-x. 2 root root 4096 Jan  9  2018 quota
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ramfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 reiserfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 romfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 squashfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 sysfs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 sysv
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ubifs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 udf
drwxr-xr-x. 2 root root 4096 Jan  9  2018 ufs
drwxr-xr-x. 2 root root 4096 Jan  9  2018 xfs
查看linux支持的文件系统

  

NFS网络文件系统

   4.1 NFS

通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录内的数据。(一般共享视频,图片等静态数据),这个再往简单点,就相当于windows里面共享文件,然后其他主机把这个共享文件映射成了本地盘使用一样。

它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS服务器可以允许NFS客户端将远端NFS服务器端的共享目录挂载到本地的NFS客户端中。在本地的NFS客户端的机器看来,NFS服务器端共享的目录就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端一样比较好。
View Code

  4.2 为什么集群需要共享存储的结构?

  如果没有共享存储的话,在web集群的每台机器上都要存储文件,所以在中小型互联企业里面,使用架构NFS共享存储,有利于节省资源和缓解网站压力

  4.3 NFS文件系统的原理

NFS工作原理
通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录内的数据。
当我们在nfs服务器设置好一个共享目录/data后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。因为挂载在本地的/data目录,其实就是服务器端的/data目录。如果服务器端配置的客户端只读,
那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。

挂载后,NFS客户端查看磁盘信息命令:#df –h
NFS是通过网络来进行服务端和客户端之间的数据传输。两者之间要传输数据就要有想对应的网络端口来进行传输。NFS服务器到底使用什么网络端口来传输数据的,NFS服务器端其实是随机选择端口来进行数据传输
那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议
/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,
之后再利用这些端口(centos5小于1024,
centos6随机的端口都很大)来进行数据的传输。

理解:NFS的RPC服务最主要功能就是记录每个NFS功能所使用对应的端口号,并且在NFS客户端请求是将该端口和功能对应的信息传给客户端,从而可以确保客户端可以连接到正确的NFS端口上去,达到实现数据交互传输目的,RPC相当于NFS服务端和客户端的中介
PS:哦,原来是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。


RPC工作原理
注意:如果RPC服务不开启的话,NFS服务启动也是无法进行工作的,所以一定是rpc服务先开始启动,后停止

工作流程
1.先开启rpc服务,RPC服务在centos5上是portmap,centos6和7上叫做rpcbind。默认是开启的
2.开启NFS服务,并向RPC服务注册端口
3.客户请求NFS服务,不管读写
4.RPC服务返回给客户RPC服务的端口
5.客户使用RPC返回的地址和端口与NFS服务建立连接


a.执行顺序:1(注册端口)--à2(达成协议)-à3(直接建立联系)--à4(达成协议)--à5(建立连接)

b.那为啥rpc能够找到对应的port呢?这是因为当服务器在启动NFS时会随机取用数个port,并且主动的向RPC注册,因此RPC可以知道每个NFS的port对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并汇报客户端的正确的port。  

  4.5 NFS服务优缺点

优点
    a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
    b.简单容易上手
    c.方便部署非常快速,维护十分简单
缺点
    a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
    b.在高并发下NFS效率/性能有限
    c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
    d.NFS的数据是明文的,对数据完整性不做验证
    e.多台机器挂载NFS服务器时,连接管理维护麻烦
View Code 

  4.6 centos7安装NFS服务

安装注意
    1.服务器和客户端至少要有rpc服务
    2.关闭防火墙,设置好也可以
    3.关闭selinux
    4.注意:一定是先要rpc服务开启

版本信息
    [root@node1 /]# cat /etc/redhat-release 
        CentOS Linux release 7.4.1708 (Core) 
    [root@node1 /]# uname -r
        3.10.0-693.el7.x86_64
    [root@node1 /]# uname -m
        x86_64

查看rpc服务和nfs服务是否安装
[root@node1 /]# rpm -qa nfs-utils rpcbind

安装过程
  服务端: 
       yum -y install nfs-utils              nfs-utils含rpc.nfsd rpc.mountd两个daemons和相关文档说明及执行命令文件等(因为centos7自带了rpcbind,所以不需要安装rpcbind,否则要执行yum -y install nfs-utils rpcbind)
       ss -tnulp | grep 111                  查看rpc服务是否自动启动,如果没有启动,就systemctl start rpcbind 启动rpc服务(rpc监听在111端口)
       /etc/exports                          打开nfs配置文件并添加配置如下
       “/server 192.168.10.0/24(rw,async)”   给什么网段共享什么目录提供什么样的执行权限  详细的配置文件在/var/lib/nfs/etab
          rw:可读写,ro:只读
            sync,将内存写入到磁盘(buffer到磁盘),同步
            async,写入缓存
            192.168.10.0/24,整个网段
       rpcinfo -p 192.168.10.231             查看rpc注册信息
       showmount -e 192.168.10.231           显示指定NFS服务器连接NFS客户端的信息,如果正常返回,说明服务端的nfs服务没问题
       chown -R nfsnobody.nfsnobody /server  修改/server的目录权限,因为默认我的/server目录为/root权限,如果不修改的话,客户端挂载过去的也是root权限,就算在服务端的nfs配置文件里面给了rw权限,在服务端也不能写入和删除
       systemctl reload nfs              重启  

  客户端:
        yum -y intall nfs-utils (客户端上不需要启动nfs服务,只是为了使用showmount工具,可以只安装rpcbind)
        ss -tnulp | grep 111
        showmount -e 192.168.10.231 检查服务端的nfs服务是否启动,如果不正常,telnet 192.168.10.231 111 查看服务端的rpc服务是否开启,如果还是不正常说明防火墙或者selinux没配置,或者网络不通
        mount -t nfs 192.168.10.231:/server /mnt  挂载到本地目录
        [root@node2 /mnt/scripts]# df -h
            Filesystem Size Used Avail Use% Mounted on
            /dev/mapper/centos-root 50G 1.2G 49G 3% /
            devtmpfs 1.9G 0 1.9G 0% /dev
            tmpfs 1.9G 12K 1.9G 1% /dev/shm
            tmpfs 1.9G 8.5M 1.9G 1% /run
            tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
            /dev/sda1 1014M 143M 872M 15% /boot
            /dev/mapper/centos-home 445G 33M 445G 1% /home
            tmpfs 380M 0 380M 0% /run/user/0
            192.168.10.231:/server 50G 1.2G 49G 3% /mnt

     测试是否可读写删除等 ls vi
        umount /mnt                           卸载
        
    开启自启
        systemctl enable nfs
        systemctl enable rpcbind
        
注意:
    1.客户端“192.168.10.231:/server 50G 1.2G 49G 3% /mnt” 重启系统或者服务的时候,/mnt会丢失掉,解决办法是放在rc.local或者放在fatab里面开机自动挂载
       echo "mount -t nfs 192.168.10.231:/server /mnt" >>/etc/rc.local
    2.umount /mnt/可能会出现device is busy的问题。
        解决办法
            安装fuser yum install psmisc
            
            fuser -m -v /mnt  查看是谁在占用/mnt
            [root@localhost /]# fuser -m -v /data/
                                用户     进程号 权限   命令
            /data/:             root       2798 ..c.. bash
                                root       2996 ..c.. su
            
            如上所示,有两个进程占用了,将其kill掉,再重新取消挂载。
            [root@localhost /]# kill -9 2798
            [root@localhost /]# kill -9 2996
            [root@localhost /]# umount /mnt
            [root@localhost /]#
            
            然后umount ,如不行 umount –lf /mnt/nfs强行卸载。
            再不行重新启动nfsd,再执行上述命令umount文件系统。
View Code

  4.7 进程管理

[root@nfsserver /]# ps -ef | grep -E 'rpc|nfs'
rpc       3631     1  0 21:29 ?        00:00:00 rpcbind                rpc服务   
root      3688     2  0 21:31 ?        00:00:00 [rpciod/0]
root      3824     1  0 21:32 ?        00:00:00 rpc.rquotad            磁盘配额进程        
root      3828     1  0 21:32 ?        00:00:00 rpc.mountd             权限管理进程
root      3834     2  0 21:32 ?        00:00:00 [nfsd4]
root      3835     2  0 21:32 ?        00:00:00 [nfsd4_callbacks]
root      3836     2  0 21:32 ?        00:00:00 [nfsd]
root      3837     2  0 21:32 ?        00:00:00 [nfsd]
root      3838     2  0 21:32 ?        00:00:00 [nfsd]
root      3839     2  0 21:32 ?        00:00:00 [nfsd]                 NFS主进程
root      3840     2  0 21:32 ?        00:00:00 [nfsd]
root      3841     2  0 21:32 ?        00:00:00 [nfsd]
root      3842     2  0 21:32 ?        00:00:00 [nfsd]
root      3843     2  0 21:32 ?        00:00:00 [nfsd]
root      3869     1  0 21:32 ?        00:00:00 rpc.idmapd
rpcuser   20875     1  0 Nov02 ?        00:00:00 /usr/sbin/rpc.statd   检查文件一致性进程
root      4039  3260  0 21:43 pts/1    00:00:00 grep -E rpc|nfs

nfsd(rpc.nfsd):主要功能是管理NFS客户端是否能登录BFS服务端的主机,其中还包括登陆者的id、判别
mountd(rpc.mountd):主要功能则是管理NFS文件系统,当NFS客户端顺利的通过rpc.nfsd登入NFS客户端主机之后,在它可以使用NFS服务器提供数据之前,他会去读取NFS的配置文件/etc/exports来对比NFS客户端权限,当通过这一关之后
            ,还会经过NFS服务端本地文件系统的使用权限(owner,group,other权限)的认证程序,如果都通过后,NFS客户端就可以使用NFS服务端文件权限。
            注意:这个/etc/exports文件也是我们用来管理NFS共享目录的使用权限和安全设置的地方
            特别注意:NFS本身是指的是网络共享的权限,整个共享目录的权限还和目录自身有关
lockd(rpc.lockd):非必要,可用来锁定文件,用于多客户端同时写入
ststd(rpc.statd):检查文件的一致性,与rpc.lockd有关

以上的进程查看均可以执行“man 进程名”来查看进程的功能细节
[root@nfsserver /]# man rpcbind     #查看rpcbind的信息
[root@nfsserver /]# man nfsd        #查看nfsd的信息
View Code

    4.8 NFS常用命令以及文件介绍

/ect/exports:NFS服务主配置文件,配置NFS具体共享服务的文件,默认为空,行为单位,实际上配置NFS服务就是来管理exports,有的linux可能不提供此文件,需要手动创建
  [root@node1 /server/scripts]# cat /etc/exports
  cat /etc/exports#shared server dir for 192.168.10.232 by p0st at 20181103
  /server 192.168.10.0/24(rw,sync) 10.10.10.0/24(rw,sync) 要共享的目录 能访问到的IP段 客户端访问的权限
/etc/sbin/exportfs:NFS服务的命令,主要体现了一个平滑启动的概念
  例如:exportfs -rv   -v显示输出 等价于systemctl reload nfs
  expoetfs不但可以加载NFS配置生效,还可以直接配置NFS共享目录,即无需配置/etc/exports实现共享,但是重启之后就会失效
/usr/sbin/showmount:常用来在客户端查看NFS配置及挂载结果的命令 
  [root@node2 ~]# showmount -e 192.168.10.231
  Export list for 192.168.10.231:/server 
  192.168.10.0/24
/var/lib/nfs/etab:NFS配置文件完成整参数设定的文件(有很多没有配置但是默认就有的NFS参数),在客户端执行mount命令也可以查看到
/var/lib/nfs/xtab:适合centos5.x记录挂载过的NFS客户端的信息,包括ip地址等,cents5.x以上就不提供此文件了
/var/lib/nfs/rmtab:适合centos5.x查看当前挂载了那些NFS客户端的信息,包括ip地址等,cents5.x以上就不提供此文件了
nfsstat:可以查看nfs状态
View Code

    4.9 NFS配置文件的写法

man exports
EXAMPLE
       # sample /etc/exports file
       /               master(rw) trusty(rw,no_root_squash)
       /projects       proj*.local.domain(rw)
       /usr            *.local.domain(ro) @trusted(rw)
       /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
       /pub            *(ro,insecure,all_squash)
       /srv/www        -sync,rw server @trusted @external(ro)
       /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
       /build          buildhost[0-9].local.domain(rw)[root@node1 /server/scripts]# cat /etc/exports
cat /etc/exports#shared server dir for 192.168.10.232 by p0st at 20181103
/server 192.168.10.0/24(rw,sync) 10.10.10.0/24(rw,sync) 要共享目录的绝对路径(注意目录的本地权限) 能访问到的IP段 客户端访问的权限
重启NFS服务 systemctl reload nfs

指定NFS客户端地址的配置详细说明
  授权单一客户端访问NFS   10.0.0.30       一般情况下,生产环境中此配置不多
  授权整个网段可访问NFS   10.0.0.0/24     其中的/24表示掩码为255.255.255.0.在生产环境中最常见的配置。
  授权整个网段           10.0.0.*        指定网段的另外写法(需要验证)
  授权单个个域名         www.baidu.com   生产环境中用的很少
  授权整个域名           *.baidu.com     生产环境中用的很少
指定NFS客户端参数的配置详细说明
 *rw:可读可写
  ro:只读权限
 *sync:同步写入,从内存写到磁盘。
      sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件。sync命令的作用是,将有关文件系统的存储器常驻信息送入物理介质内。说明了就是发送端等待接收端接收到才断开连接。
      好处:实时写入,不会造成数据丢失 坏处:写入太多会对磁盘寿命有影响,占用资源过多
 *asnyc:异步写入
      async 说明了就是发送端不等待接收端接收到就断开连接。
      好处:快速,只是写到了接收端的内存缓冲区里面 坏处:不太可靠,容易丢失数据,同步异步可以去了解一下队列的概念
  no_root_squash:访问nfs server共享目录的用户如果是root的话,它对该目录具有root权限。这个配置原本为无盘用户准备的。用户应避免使用!
  root_squash:对于访问NFS server共享目录的用户,如果是root的话会被压缩成为nobody用户身份。
  anonuid:就是匿名的uid和gid。说明客户端以什么权限来访问服务端,在默认情况下是nfsnobody。Uid65534.但是uid必须存在于/etc/passwd中,通过这个可事实不同的客户端写入的数据对所有的客户端有相同的权限
  anongid:同anonuid区别就是把uid(用户id)换成gid(组id)
  *all_squash:不管访问nfs server共享目录的用户身份如何包括root,它的权限都将被压缩成为匿名用户,同时他们的udi和gid都会变成nobody或nfsnobody账户的uid,gid。在多个nfs客户端同时读写nfs server数据时,这个参数很有用***可以确保大家写入的数据的权限是一样的。
         但不同系统有可能匿名用户的uid,gid不同。因为此处我们需要服务端和客户端之间的用户是一样的。比如说:服务端指定匿名用户的UID为2000,那么客户端也一定要存在2000这个账号才可以
  secure:不允许客户端使用大于1024的端口,此时客户端一定要使用root账户才能mount远端的服务器,通常使用issecure
   issecure:允许客户端自行决定自己机使用的端口,通常都会设定这个,如此非root账户的client才能mount远端的服务器
   nohide:在exports里面设定的要共享的目录里面包含子目录的话,使用这个参数,客户端在mount的时候,也会把子目录mount进去
   hide:当mount根目录的时候,export出的子目录需要自己明确在挂载
  
配置NFS注意事项:
  1,确保所有客户端服务器对NFS共享目录具备相同的权限
    a。添加all_squash参数,将所有客户端访问的用户压缩成匿名用户
    b。匿名用户就是anonuid和anongid指定的uid和gid的用户,默认为nfsnobody用户,uid和gid都是65534
  2.所有客户端和服务端都需要有同一个相同的uid和gid,即nfsnobody(uid必须相同)

查看客户端挂载的参数
  可以使用mount查看客户端挂载参数,也可以使用cat /proc/mounts来查看
View Code

     4.10 NFS客户端挂载

mount -t nfs 192.168.10.231:/server /mnt(必须提前存在)  #客户端挂载,重启后失效
解决办法:
1.将挂载命令写入到/etc/rc.local里面
   查看mount命令的目录
  [root@node2 ~]# which mount
  /usr/bin/mount
  将、usr/bin/挂载命令写入到rc.local
  [root@node2 ~]# echo "/usr/bin/mount -t nfs 192.168.10.231:/server /mnt" >>/etc/rc.local
  注意:在使用/etc/rc.local的时候,你必须执行“chmod +x /etc/rc.d/rc.local”来确保确保这个脚本在引导时执行。
2.将磁盘挂载写入到/etc/fatab里面
  echo "192.168.10.231:/server  /mnt                    nfs     defaults        0 0">>/etc/fstab #真正使用时,按照命令写入到/etc/fstab中
  192.168.10.231:/server  /mnt                    nfs     defaults      0      0
  要挂载的                挂载到哪里                 类型     参数默认      不备份 不检查     

注意:一般写到rc.local里面,就算nfs服务器不存在了,客户端重启之后也可以起来。
   但是fstab里面就会出问题,因为在linux启动过程磁盘的加载要优先于网络的。但是好像通常也是可以挂载上的,不知道为什么。df -h查看不到信息,所以可以使用mount命令查看挂载情况。

mount -a 挂载所有的在fstab里面的磁盘,会自动检查里面的命令

mount挂载的参数,使用-o,注意有些参数要添加到/etc/fatab里面
  *为性能安全的重要选项
  *async:所有涉及到文件I/O操作的都是异步处理,既不会同步到磁盘,此参数会提该服务器性能,但会减低数据安全
  atime:在每一次访问数据的是,同步更新访问文件的inode的时间,是默认选项,在高并发的情况下,要加上noatime来取消默认项,不更新文件时间戳,已达到提升IO性能,优化IO
  *noatime:不更新访问文件的inode的访问时间,高并发环境,应该要使用这个参数,提升性能
  nodirtime:不更新访问目录的directory inode的访问时间,高并发环境,应该要使用这个参数,提升性能
  *noexec:及时设置了noexec,shell,php还是可以执行的
  *nosuid:不允许在共享文件系统中设置suid 
  nouser:禁止一个普通用户瓜挂载该文件系统,这是默认挂载时的默认选项
  auto:能够被自动挂载通过-a选项,相当于问是不是要执行mount -a
  defaults:这是缺省值,包括:rw,suid,dev,exec,auto,nouser,async。 /etc/fstab下的default的默认值也差不多就是这些
  *exec:允许执行二进制文件,取消这个参数,会提升系统安全
  remount:尝试重新挂载一个已经挂载的文件系统,通常被永爱改变一个文件系统的挂挂载标志,从而使得一个只读的文件系统变得可写,这个动作不会改变设备的挂载点。
       当系统故障时进入single或rescus模式修复系统时,通常发现根文件系统会变成只读文件系统,不允许修改,使用 mount -o remount,rw / 命令将跟系统重新挂载使得可写。
       一般在mount -o rw,remount只是在系统文件不可读时,使用维护模式或者救援模式是使用

mount挂载时的其他参数:
  在实际使用时nfs服务端和客户端的耦合度很高,当服务端的nfs停掉之后,客户端会产生很大影响,为了解决这个问题,还有一些其他参数,可以使用mount查看客户端挂载参数,也可以使用cat /proc/mounts来查看
  fg/bg 默认:fg
       当执行挂载时,该挂载行为是在前台(fg)还是在后台(bg)执行。若在前台执行,则mount会持续尝试链接,直到成功或time out为止。若为在后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的程序操作。
    如果网络联机不稳定,或是服务器常常需要开关机。建议使用bg比较妥当。
  soft/hard 默认:hard
    使用挂载时会使用RPC呼叫。如果是hard的情况,那么当两者之间有任何一台主机离线,那RPC会持续呼叫,直到对方恢复联机为止。而soft,只是在RPC time out后重复呼叫。而非持续呼叫。
    因此系统的延迟会不这么明显,如果服务器经常开开关关的话,建议使用soft。在生产环境中推荐使用hard,intr这样的方式来挂载。
  intr 默认:没有
    当使用hard方式挂载时,若加上intr参数,则RPC的持续呼叫是可以被中断的
  rsize/wsize 默认:rsize=1024,wsize=1024
    读出(rsize)和写入(wsize)的区块大小。这个设置值可以影响客户端与服务器端传输数据的缓冲存储容量。一般来说,如果在局域网内(LAN),并且客户端与服务器都具有足够的内存,这个值可以设置大一点,比如说32768,提升缓冲区块将可提升NFS文件系统的传输能力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。

  下面为客户端mount挂载时不重要的参数:
  suid/nosuid 默认:suid
    允许设置suid、不允许在共享文件系统中设置suid 
  rw/ro 默认:rw
    读写权限,或者是只读。
  dev/nodev 默认:dev
    解释设备上的设备/不解释字符或块特殊文件系统上的设备
  exec/noexec 默认:exec
    不允许在共享文件系统中直接执行任何二进制文件。
  user/nouser 默认:user
    允许用户去挂载和卸载这个共享目录。并且这个选项也意味着noexec, nosuid, and nodev这个选项,除非后面有覆盖指定。
  auto/noauto 默认:auto
    这个auto指的是“mount -a”时会不会挂载的项目,如果不需要这个分区被随时挂载,可以设置为noauto

企业生产环境中nfs挂载注意:
  服务端
    1.将把NFS的rpc服务启动命令和nfs服务的启动命令写入到/etc/rc.local
      systemctl start rpcbind
      systemctl start nfs
     注意:rpc一定要优先于nfs启动
  客户端
    1.把NFS的rpc服务启动命令和挂载命令都放入到/etc/rc.local里面,然后通过监控软件监控开机启动的挂载情况
      systemctl start rpcbind
      /usr/bin/mount -t nfs 192.168.10.231:/server /mnt
    2.根据情况来添加以上参数,做系统优化

mount(-t,-o,-a) umonut(-l,-f) showmount(-e,-d,) exportfs(-rv,-o) rpcinfo(-p主机) ping(-c次数,-t连续)
View Code

     4.11 NFS客户端挂载参数优化

1.客户端
 有关客户端挂载的安全参数
  mount -t nfs -o nosuid,noexec,nodev,rw,192.168.10.231:/server /mnt
   结论:
    a。nosuid,noexec对于shell脚本,PHP脚本的执行也生效。但是通过sh + shell脚本或者/application/php/bin/php + php文件,这样执行也是生效的。
    b。对于二进制程序,如cat,生效。将/usr/bin/cat放到/mnt里面,/mnt/cat + 文件,也是可以执行的
  对于客户端最重要的性能优化参数是:rsize和wsize,还有协议,协议最新,性能越高
   umonut -lf /mnt 强制卸载
 有关客户端挂载的性能参数
  mount -t nfs -o noatime,nodirtime,rsize=越大越好,wsize=越大越好 192.168.10.213:/server/script /mnt 
  结论:
    a。noatime,nodirtime(前两个是针对小文件,高并发的情况),rsize=越大越好,wsize=越大越好 是客户端性能参数的最终要体现
2.有关服务器端性能优化的参数
  nfs 服务器端默认的挂载参数
    [root@node1 ~]# cat /var/lib/nfs/etab 
    /server    192.168.10.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,secure,root_squash,no_all_squash)
  nfs 客户器端默认的挂载参数
    [root@node2 /mnt]# cat /proc/mounts 
    192.168.10.231:/server /mnt nfs4 rw,nosuid,nodev,noexec,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.232,local_lock=none,addr=192.168.10.231 0 0
3.有关NFS服务器和客户端内核优化  
  调整NFS服务器的接收(rmem)/发送(wmem)套接字缓冲区大小,也可以提升性能,NFS官方优化建议是:rmem_default:8388608,rmem_max:16777216 
    [root@node1 ~]# cat /proc/sys/net/core/rmem_default 
    212992
    [root@node1 ~]# cat /proc/sys/net/core/rmem_max 
    212992 
   一般通过命令调整重启之后会失效,可以追加到/etx/sysctl.conf里面去 
4.可以使用下面的命令来测试以上参数添加或者不添加的执行时间   
  time dd=/dev/ of=/mnt/123.txt bs=9k count=2000 
5.生产场景NFS共享存储优化
  1.使用sas/ssd磁盘,要使用多块做raid10,raid0是最优的,但是没有冗余
  2.从NFS服务器优化参数,all_squash,async,设置服务器和客户端接收(rmem)/发送(wmem)套接字缓冲区大小
  3.客户端挂载参数优化,如果强调性能都的话rsize和wsize,noatime,nodirtime,如果兼顾安全的话,nosuid,noexec,如果降低耦合的话可以使用soft(hard init),最佳的挂载:mount -t nfs 性能参数 192.168.10.231:/server /mnt
View Code

      4.12 NFS服务在企业中生产场景应用说明

NFS作用: 可以让不同客户端挂载使用同一个目录,作为共享存储使用,这样做可以保证不同节点客户端数据的一致性,在集群环境中经常遇到

优点
    a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
    b.简单容易上手,方便部署非常快速,维护十分简单
    c.从软件层面上看,数据可靠性高
缺点
    a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
    b.在高并发下NFS效率/性能有限(2000pv/天的网页浏览量使用nfs不是问题)
    c.客户端没用用户认证机制(是通过ip和主机名),权限是通过用户id来识别的,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
    d.NFS的数据是明文的,对数据完整性不做验证
    e.多台机器挂载NFS服务器时,连接管理维护麻烦,尤其是NFS服务器端出问题时候,所有NFS客户端都挂掉,可以使用autofs来解决自动挂载(耦合度太高,架构师的重要职责就是解耦)
View Code

 五文件系统性能对比

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

啦啦啦

转载于:https://www.cnblogs.com/p0st/p/9779408.html

;