硬盘512E、4KN的解读

传统的硬盘是以512字节大小的扇区为单位分割进行读写, 512字节的空间不全用来存数据,还存放这一些功能性代码,如ECC校验、Gap、Sync/Address Mark的代码,所以真正的存储空间大概不到90% ,整个磁盘空间的利用率大概在88%左右。

为了提升硬盘可用容量,硬盘厂商把每一个磁盘单位(sector format)扇区格式改为4K(512 Bytes x 8),这种格式又叫做(Advanced Format)高级格式,8个(sector format)共用一个 同步/分隔区域和一个容量稍大的 ECC 校验区 (即功能性代码部分,这部分约占用一百多字节),真正的存储空间使用率能达到97%。

但是现有操作系统对4K这种高级格式支持度还不够,为了过渡,硬盘厂商为4K扇区格式的硬盘准备了512e(emulation)的硬盘固件, 利用固件来把传统的对于512字节扇区的逻辑访问转换为对于4K字节扇区的物理访问。

新硬盘还有另一种固件直接支持 4K字节扇区的访问,这种硬盘称之为4Kn(Native)。传统格式的硬盘被称之为512n(Native),原生就是512字节的扇区。

当我们将大于4K的数据块写入512e硬盘时,由于一次写入的扇区大小就是4K,所以写操作的性能会有较大提升。但是如果写入512e硬盘的数据块小于4K时,操作系统就必需经过读取再修改再写入的过程,这会造成比较明显的性能下降。一些传统应用(如数据库系统)的I/O操作最小单位仍小于 4KB,使用原生 512 byte 扇区硬盘可以保证最好的性能,采用 512e 硬盘容易产生性能影响。

信锐无线网络故障处理说明

网络拓扑大致为出口防火墙,下接上网行为管理,下接核心交换机,交换机上单臂部署信锐无线控制器和AP等。

现有部分用户反应,接入某无线信号后获取不到IP地址,无法上网。

查询无线用户认证日志得知,该终端接入时从vlan 90上获取IP,但是获取不到地址,查看无线控制器配置,得知终端用户获取IP的vlan配置在无线控制器上,但是未配置vlan 90,所以获取不到IP,修改该无线信号的配置,将vlan 90改成其他vlan号。

但是用户仍旧反应不能上网,再次查看无线信号的配置,发现该无线信号还启用了mac白名单的设置,但是未勾选相关的mac白名单,将mac白名单配置好后,用户看正常接入无线信号,正常上网。



VSAN主机磁盘出错处理步骤



在vsan的vcenter控制台界面,发现有主机磁盘出错的告警信息,但是在服务器上并未出现任何告警。

此时点击报错主机,在监控——问题——所有问题下,查看告警信息,在监控——任务与事件中,查看具体告警信息,在具体的告警信息中,可以看到告警硬盘的UID号和NAA号。

点击群集,在配置——VSAN——磁盘管理下,可以看到告警主机的磁盘组,在磁盘组中可以根据NAA号定位出告警硬盘。

将该磁盘从磁盘组中移除,移除时点击将所有数据撤出到其他主机。

由于故障硬盘采用raid0配置,所以还需要关机更换硬盘。如果不采用raid,采用HBA或者JBOD这种直通模式,则可在线更换硬盘。

将该主机上的所有运行中的虚拟机迁移到其他主机上,迁移时选择更改计算资源和存储,如果DRS状态是全自动,可以将DRS状态改为手动,否则迁移后,虚拟机可能会根据DRS再次迁回至该主机。

将该主机关机,更换硬盘,将新硬盘配置成raid0,启动主机,在vcenter的vsan配置中,将新硬盘加入到vsan磁盘组中。

查看vsan容量,vsan故障磁盘处理完成。



LINUX TC(TRAFFIC CONTROL) 简介

众所周知,在互联网诞生之初都是各个高校和科研机构相互通讯,并没有网络流量控制方面的考虑和设计,IP协议的原则是尽可能好地为所有数据流服务,不同的数据流之间是平等的。然而多年的实践表明,这种原则并不是最理想的,有些数据流应该得到特别的照顾,比如,远程登录的交互数据流应该比数据下载有更高的优先级。

      针对不同的数据流采取不同的策略,这种可能性是存在的。并且,随着研究的发展和深入,人们已经提出了各种不同的管理模式。IETF已经发布了几个标准,如综合服务(Integrated Services)、区分服务(Diferentiated Services)等。其实,Linux内核从2.2开始,就已经实现了相关的流量控制功能。本文将介绍Linux中有关流量控制的相关概念, 用于流量控制的工具TC的使用方法,并给出几个有代表性实例。

一、相关概念
      报文分组从输入网卡(入口)接收进来,经过路由的查找,以确定是发给本机的,还是需要转发的。如果是发给本机的,就直接向上递交给上层的协议,比如TCP,如果是转发的,则会从输出网卡(出口)发出。网络流量的控制通常发生在输出网卡处。虽然在路由器的入口处也可以进行流量控制,Linux也具有相关的功能,但一般说来,由于我们无法控制自己网络之外的设备,入口处的流量控制相对较难。因此我们这里处理的流量控制一般指出口处的流量控制。流量控制的一个基本概念是队列(Qdisc),每个网卡都与一个队列(Qdisc)相联系,每当内核需要将报文分组从网卡发送出去,都会首先将该报文分组添加到该网卡所配置的队列中,由该队列决定报文分组的发送顺序。因此可以说,所有的流量控制都发生在队列中。

       有些队列的功能是非常简单的,它们对报文分组实行先来先走的策略。有些队列则功能复杂,会将不同的报文分组进行排队、分类,并根据不同的原则,以不同的顺序发送队列中的报文分组。为实现这样的功能,这些复杂的队列需要使用不同的过滤器(Filter)来把报文分组分成不同的类别(Class)。这里把这些复杂的队列称为可分类(Classiful)的队列。通常,要实现功能强大的流量控制,可分类的队列是必不可少的。因此,类别(Class)和过滤器(Filter)也是流量控制的另外两个重要的基本概念。

     类别(Class)和过滤器(Filter)都是队列的内部结构,并且可分类的队列可以包含多个类别,同时,一个类别又可以进一步包含有子队列,或者子类别。所有进入该类别的报文分组可以依据不同的原则放入不同的子队列 或子类别中,以此类推。而过滤器(Filter)是队列用来对数据报文进行分类的工具,它决定一个数据报文将被分配到哪个类别中。

二、使用TC
      在Linux中,流量控制都是通过TC这个工具来完成的。通常,要对网卡进行流量控制的配置,需要进行如下的步骤:

  ◆ 为网卡配置一个队列;

  ◆ 在该队列上建立分类;

  ◆ 根据需要建立子队列和子分类;

  ◆ 为每个分类建立过滤器。

      在Linux中,可以配置很多类型的队列,比如CBQ、HTB等,其中CBQ 比较复杂,不容易理解。HTB(Hierarchical Token Bucket)是一个可分类的队列, 与其他复杂的队列类型相比,HTB具有功能强大、配置简单及容易上手等优点。在TC中,使用”major:minor”这样的句柄来标识队列和类别,其中major和minor都是数字。

      对于队列来说,minor总是为0,即”major:0″这样的形式,也可以简写为”major: “比如,队列1:0可以简写为1:。需要注意的是,major在一个网卡的所有队列中必须是惟一的。对于类别来说,其major必须和它的父类别或父队列的major相同,而minor在一个队列内部则必须是惟一的(因为类别肯定是包含在某个队列中的)。举个例子,如果队列2:包含两个类别,则这两个类别的句柄必须是2:x这样的形式,并且它们的x不能相同,比如2:1和2:2。

      下面,将以HTB队列为主,结合需求来讲述TC的使用。假设eth0出口有100mbit/s的带宽,分配给WWW、E-mail和Telnet三种数据流量,其中分配给WWW的带宽为40Mbit/s,分配给Email的带宽为40Mbit/s,分配给Telnet的带宽为20Mbit/S。

      需要注意的是,在TC 中使用下列的缩写表示相应的带宽:

      ◆ Kbps : kilobytes per second,千字节每秒 ;

      ◆ Mbps : megabytes per second,兆字节每秒 ,

      ◆ Kbit : kilobits per second,千比特每秒 ;

      ◆ Mbit : megabits per second, 兆比特每秒 。

三、创建HTB队列
      有关队列的TC命令的一般形式为:

tc qdisc [add | change | replace | link] dev DEV [parent qdisk-id |root] [handle qdisc-id] qdisc [qdisc specific parameters]

      首先,需要为网卡eth0配置一个HTB队列,使用下列命令:

      #tc qdisc add dev eth0 root handle 1:htb default 11

      这里,命令中的”add”表示要添加,”dev eth0”表示要操作的网卡为eth0。”root”表示为网卡eth0添加的是一个根队列。”handle 1:”表示队列的句柄为1: 。”htb”表示要添加的队列为HTB队列。命令最后的”default 11”是htb特有的队列参数,意思是所有未分类的流量都将分配给类别1:11。

四、为根队列创建相应的类别
      有关类别的TC 命令的一般形式为:

tc class [add | change | replace] dev DEV parent qdisc-id [classid class-id] qdisc [qdisc specific parameters]

      可以利用下面这三个命令为根队列1创建三个类别,分别是1:1 1、1:12和1:13,它们分别占用40、40和20mb[t的带宽。

      #tc class add dev eth0 parent 1: classid 1:1 htb rate 40mbit ceil 40mbit

      #tc class add dev eth0 parent 1: classid 1:12 htb rate 40mbit ceil 40mbit

      #tc class add dev eth0 parent 1: cllassid 1:13 htb rate 20mbit ceil 20mbit

      命令中,”parent 1:”表示类别的父亲为根队列1: 。”classid1:11”表示创建一个标识为1:11的类别,”rate 40mbit”表示系统将为该类别确保带宽40mbit,”ceil 40mbit”,表示该类别的最高可占用带宽为40mbit。

五、为各个类别设置过滤器
      有关过滤器的TC 命令的一般形式为:

tc filter [add | change | replace] dev DEV [parent qdisc-id | root] protocol protocol prio priority filtertype [filtertype specific parameters] flowid flow-id

      由于需要将WWW、E-mail、Telnet三种流量分配到三个类别,即上述1:11、1:12和1:13,因此,需要创建三个过滤器,如下面的三个命令:

      #tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:11

      #tc filter add dev eth0 prtocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:12

      #tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dport 23 oxffff flowid 1:13

      这里,”protocol ip”表示该过滤器应该检查报文分组的协议字段。”prio 1” 表示它们对报文处理的优先级是相同的,对于不同优先级的过滤器,系统将按照从小到大的优先级顺序来执行过滤器,对于相同的优先级,系统将按照命令的先后顺序执行。这几个过滤器还用到了u32选择器(命令中u32后面的部分)来匹配不同的数据流。以第一个命令为例,判断的是dport字段,如果该字段与Oxffff进行与操作的结果是8O,则”flowid 1:11”表示将把该数据流分配给类别1:1 1。更加详细的有关TC的用法可以参考TC的手册页。

六、复杂的实例
      在上面的例子中, 三种数据流(www、Email、Telnet)之间是互相排斥的。当某个数据流的流量没有达到配额时,其剩余的带宽并不能被其他两个数据流所借用。在这里将涉及如何使不同的数据流可以共享一定的带宽。

      首先需要用到HTB的一个特性, 即对于一个类别中的所有子类别,它们将共享该父类别所拥有的带宽,同时,又可以使得各个子类别申请的各自带宽得到保证。这也就是说,当某个数据流的实际使用带宽没有达到其配额时,其剩余的带宽可以借给其他的数据流。而在借出的过程中,如果本数据流的数据量增大,则借出的带宽部分将收回,以保证本数据流的带宽配额。

      下面考虑这样的需求,同样是三个数据流WWW、E-mail和Telnet, 其中的Telnet独立分配20Mbit/s的带宽。另一方面,WWW 和SMTP各自分配40Mbit/s的带宽。同时,它们又是共享的关系,即它们可以互相借用带宽。

      需要的TC命令如下:

      #tc qdisc add dev eth0 root handle 1: htb default 21

      #tc class add dev eth0 partent 1: classid 1:1 htb rate 20mbit ceil 20mbit

      #tc class add dev eth0 parent 1: classid 1:2 htb rate 80mbit ceil 80mbit

      #tc class add dev eth0 parent 1: classid 1:21 htb rate 40mbit ceil 20mbit

      #tc class add dev eth0 parent 1:2 classid 1:22 htb rate 40mbit ceil 80mbit

      #tc filter add dev eth0 protocol parent 10 prio 1 u32 match ip dport 80 0xffff flowid 1:21

      #tc filter add dev eth0 protocol parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:22

      #tc filter add dev eth0 protocol parent 1:0 prio 1 u32 match ip dport 23 0xffff flowid 1:1

      这里为根队列1创建两个根类别,即1:1和1:2,其中1:1对应Telnet数据流,1:2对应80Mbit的数据流。然后,在1:2中,创建两个子类别1:21和1:22,分别对应WWW和E-mail数据流。由于类别1:21和1:22是类别1:2的子类别,因此他们可以共享分配的80Mbit带宽。同时,又确保当需要时,自己的带宽至少有40Mbit。

      从这个例子可以看出,利用HTB中类别和子类别的包含关系,可以构建更加复杂的多层次类别树,从而实现的更加灵活的带宽共享和独占模式,达到企业级的带宽管理目的。

MEGACLI查看硬盘状态

通过megacli的如下命令查看RAID的情况,命令如下:

/opt/MegaRAID/MegaCli/MegaCli64 LDPDInfo -Aall

重点关注以下几点:

Media Error Count
Other Error Count
Predictive Failure Count
Last Predictive Failure
Drive has flagged a S.M.A.R.T alert

如果这几个数值不为0,则可能为硬盘故障,需要更换硬盘。

可以通过让指定硬盘闪烁的方式来定位磁盘位置,命令如下:

MegaCli -PdLocate -start -physdrv [E:S] -aALL

其中 E表示 Enclosure Device ID,S表示Slot Number。比如坏盘的位置为:
Enclosure Device ID: 1
Slot Number: 0

可执行以下命令让其闪烁:
root@Storage-c2:/opt/MegaRAID/MegaCli# ./MegaCli64 -PdLocate -start -physdrv[1:0] -a0
Adapter: 0: Device at EnclId-1 SlotId-0 — PD Locate Start Command was successfully sent to Firmware Exit Code: 0x00
root@Storage-c2:/opt/MegaRAID/MegaCli#

更换硬盘后,关闭闪烁的命令如下:
MegaCli -PdLocate -stop -physdrv [E:S] -aALL

如果raid中有硬盘故障,更换硬盘后,一般都无需做操作,阵列卡会自动做rebuild,从拔出硬盘到插入新盘,一般会有以下的过程:

  • Device
    Normal —>Damage —>Rebuild —>Normal
  • Virtual Drive
    Optimal —>Degraded —>Degraded —>Optimal
  • Physical Drive
    Online —>Failed Unconfigured —>Rebuild —>Online

查看rebuild进度的命令如下:

/opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -showprog -physDrv [1:0] -a0

输出一般如下:

root@Storage-c2:/opt/MegaRAID/MegaCli# ./MegaCli64 -PDRbld -showprog -physDrv [1:0] -a0 
Rebuild Progress on Device at Enclosure 1, Slot 0 Completed 10% in 0 Minutes.
Exit Code: 0x00
root@Storage-c2:/opt/MegaRAID/MegaCli#

给网络注入点延迟

前言

有些时候,需要人为引入网络延迟,模拟网络条件比较差的情况下,集群的行为。这时候,tc这个工具就横空出世了。 tc是 Traffic Control的简写,用来控制网络流量的。它的功能还是很强大的,我们本文仅简单介绍如何惹人为地注入网络延迟。

注入延迟

注入延迟之前,看下网路延迟:

root@BEAN-1:~# ping 10.10.125.1
PING 10.10.125.1 (10.10.125.1) 56(84) bytes of data.
64 bytes from 10.10.125.1: icmp_req=1 ttl=64 time=0.178 ms
64 bytes from 10.10.125.1: icmp_req=2 ttl=64 time=0.090 ms
64 bytes from 10.10.125.1: icmp_req=3 ttl=64 time=0.270 ms
64 bytes from 10.10.125.1: icmp_req=4 ttl=64 time=0.156 ms
64 bytes from 10.10.125.1: icmp_req=5 ttl=64 time=0.145 ms
^C
--- 10.10.125.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 3998ms
rtt min/avg/max/mdev = 0.090/0.167/0.270/0.061 ms

给eth0 注入8ms的延迟:

tc qdisc add dev eth0 root netem delay 8ms

然后通过ping查看是否生效:

ping 10.10.125.1
PING 10.10.125.1 (10.10.125.1) 56(84) bytes of data.
64 bytes from 10.10.125.1: icmp_req=1 ttl=64 time=8.17 ms
64 bytes from 10.10.125.1: icmp_req=2 ttl=64 time=8.17 ms
64 bytes from 10.10.125.1: icmp_req=3 ttl=64 time=8.18 ms
64 bytes from 10.10.125.1: icmp_req=4 ttl=64 time=8.28 ms
64 bytes from 10.10.125.1: icmp_req=5 ttl=64 time=8.13 ms
^C
--- 10.10.125.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4003ms
rtt min/avg/max/mdev = 8.139/8.190/8.286/0.050 ms

可以看到网络延迟增加了8ms左右。

查看当前的延迟信息

tc qdisc show dev eth1 
qdisc netem 8121: root refcnt 2 limit 1000 delay 8.0ms

改变网络延迟大小

注意,如果已经引入了延迟,但是要修改延迟大小,使用add就不行了,要用change

tc qdisc add  dev eth1 root netem delay 10ms
RTNETLINK answers: File exists

tc qdisc change  dev eth1 root netem delay 10ms

tc qdisc show dev eth1 
qdisc netem 8121: root refcnt 2 limit 1000 delay 10.0ms

或者我们不想区别第一次和修改,可以一律使用replace

删除引入的网络延迟
tc qdisc del dev eth1 root netem delay 1ms

显示当前的状态,无延迟
tc qdisc show dev eth1 
qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

#replace设置延迟为9ms
tc qdisc replace  dev eth1 root netem delay 9ms

# 显示当前状态,的确是delay 9ms
tc qdisc show dev eth1 
qdisc netem 8123: root refcnt 2 limit 1000 delay 9.0ms

# 用replace来修改网络延迟为4ms
tc qdisc replace  dev eth1 root netem delay 4ms

# 显示当前网络延迟,的确是4ms
tc qdisc show dev eth1 
qdisc netem 8123: root refcnt 2 limit 1000 delay 4.0ms

删除引入的延迟

tc qdisc del dev eth1 root netem delay 1ms

其他

我们在测试脚本中引入延迟,但是须知,脚本可能会被信号杀死,我们希望,脚本退出的时候,网络延迟被重置为0,这时候,对于shell脚本而言,需要使用trap,做清理工作。

function clean
{
   #此函数为清理函数,一般是将人为引入的网络延迟删除
}

trap clean EXIT

清理WINDOWS C盘空间一例

有一台windows 2012 R2服务器,内存配置128G,C盘分区大小为100G左右,发现C盘可用空间很小,只有2G多。

显示系统隐藏文件,发现C盘下有hiberfil.sys文件,该文件占用空间很大,此文件为系统休眠文件,系统休眠时将内存中的所有信息保存到hiberfil.sys文件中。

要删除该文件,可以在控制面板——电源管理下,在休眠选项下,不启用休眠,即可。

也可以在命令行下执行powercfg -h off来关闭系统休眠,关闭后,hiberfil.sys会被删除,C盘可用空间又变大了。

如果需要使用系统休眠,可以通过命令powercfg -h size 50,来将休眠文件的大小限制在内存容量的50%,此处默认大小不能小于40,并且该配置执行后还将导致启用休眠。

VSAN6.5主机修改IP地址的步骤

现有四台vsan主机,组成一个集群,四台主机的IP地址分别为10.13.9.161、10.13.9.162、10.13.9.163、10.13.9.164,现需要将IP改为10.13.9.11、10.13.9.12、10.13.9.13、10.13.9.14。

操作步骤大概如下:
1、在vcenter上将该集群移除;
2、在每台esxi主机上,按F2进入,修改各IP地址;
3、在vcenter上新建集群,在新建集群下,添加四台主机,即可完成。

整个操作对业务没有影响。

WSL报错0X8007019E的解决方法

WSL即Windows Subsystem for Linux,在windows操作系统中的microsoft store搜索WSL即可下载ubuntu、kali、opensuse等linux发行版,但是安装后运行时,如果报0X8007019E的错误,则需要在“启用或关闭windows功能”处启用适用于Linux的Windows子系统,即可解决报错问题,也可在powershell下执行 Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem -Linux。

修改root密码,可以在powershell下执行命令 ubuntu config –default-user root来配置root密码。