Linux运维--磁盘&shell编程基础

Posted 诚意

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维--磁盘&shell编程基础相关的知识,希望对你有一定的参考价值。

 

 

 

1       磁盘知识体系结构

 

1.1   第一层

1.1.1  磁盘结构

 

1.1.1.1  硬盘的分类

参考:https://jingyan.baidu.com/article/d5c4b52b9aaf55da560dc5ad.html

硬盘三大种类(SSD;HHD;HDD)
  
固态硬盘(Solid State Drive:
用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也完全与普通硬盘一致。被广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空、导航设备等领域。
 
优点:读写速度快;防震抗摔性;低功耗;无噪音;工作温度范围大;轻便
缺点:容量小;寿命有限;售价高
  
混合硬盘(hybrid harddriveHHD: 是既包含传统硬盘又有闪存(flashmemory)模块的大容量存储设备。闪存处理存储中写入或恢复最频繁的数据。很多公司开始提供这项技术的变体,他们期望它会在高端系统中受到追捧,尤其是在笔记本电脑和个人数字助理中。
  
相比传统硬盘,混合硬盘(hybrid hard drive,HHD)有很多优点,包括:
应用中的数据存储与恢复更快,如文字处理机
系统启动时间减少
功耗降低
生成热量减少
硬盘寿命延长
笔记本和PAD的电池寿命延长
工作噪声级别降低
 
混合硬盘(hybrid hard drive,HHD)的不足包括:
硬盘中数据的寻道时间更长
硬盘的自旋变化更频繁
闪存模块处理失败,不可能进行其中的数据恢复
系统的硬件总成本更高
  
传统硬盘(HDDHard Disk Drive的缩写):
即硬盘驱动器的英文名。最基本的电脑存储器,我们电脑中常说的电脑硬盘
C盘、D盘为磁盘分区都属于硬盘驱动器。目前硬盘一般常见的磁盘容量为80G、128G、160G、256G、320G、500G、750G、1TB、2TB等等。硬盘按体积大小可分为3.5寸、2.5寸、1.8寸等;按转数可分为5400rpm/7200rpm/10000rpm等;
  
SSD和HDD的比较
 
在过去10年中,CPU的性能提升了150倍以上,而传统硬盘才提升了1.5倍不到,这种不均衡的发展,极大的影响了整体性能的提升,尤其在I/O方面,而且SSD(固态硬盘)相比起传统硬盘,它没有磁头,马达,磁盘等一系列的零件,搭载NAND Flash芯片作为存储介质,在运行速度,功耗,轻便等方面是传统硬盘所无法比拟的。
 
目前传统硬盘因为成本低廉等因素依然占据着硬盘市场的主要份额,然而随着SSD的成本不断的降低,技术不断提升与系统更好的支持等因素,而且目前主流的笔记本电脑也都均配置SATA和mSATA
接口,包括目前的超极本(Ultrabook)也只有搭载SSD才可能实现“更轻,更快,更低功耗,未来取代传统硬盘也是大势所趋

 

1.1.1.2  磁盘接口的特点

1.1.1.2.1         磁盘接口的外部特点

 

1.1.1.2.2         磁盘接口的特点:

参考:https://jingyan.baidu.com/article/636f38bb7a8dced6b84610bc.html

SCSI硬盘主要应用于中、高端服务器和高档工作站中。其特点为:传输速率高、读写性能好、可连接多个设备、可支持热插拔,但是价格相对来说比较贵。

 

SATA(Serial ATA)口的硬盘又叫串口硬盘,是未来PC机硬盘的趋势。Serial ATA采用串行连接方式,串行ATA总线使用嵌入式时钟信号,具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。串行接口还具有结构简单、支持热插拔的优点。

 

SAS是sata和SCSI的结合

 

1.1.1.2.3         磁盘如何选择

 

1.1.1.3  磁盘内部结构

 

如下图所示,是磁头、磁道、扇区、柱面

 

 

扇区是硬盘最小的单位

系统最小的单位是block

 

1.1.1.3.1         计算磁盘大小

磁盘大小=柱面大小*柱面数量

柱面大小=磁道大小*磁头数量

磁盘大小=扇区大小512*扇区数量

 

[root@localhost ~]# fdisk  -l /dev/sda

 

255 heads, 63 sectors/track, 2610 cylinders

 

------>512*63*255*2610

[root@localhost ~]# echo 512*63*255*2610|bc

21467980800

[root@localhost ~]# awk \'BEGIN{print 512*63*255*2610/1024^3"GB"}\'

19.9936GB

[root@oldboyedu-48-lnb ~]# echo  "scale=5;512*63*255*2610/1024^3"|bc

19.99361

[root@oldboyedu-48-lnb ~]# echo $((103/2))  $[3**30]

51 205891132094649

[root@oldboyedu-48-lnb ~]# expr 1 + 2

3

1.1.1.3.2         磁盘分区

MBR,全称为 Master Boot Record,即硬盘的 主引导记录

  为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区( 引导程序分区表及分隔标识),也就是上面所说的 主引导记录;而狭义的MBR仅指 引导程序而言。

  硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里 主引导程序(boot loader占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。

 

 

1.1.1.3.2.1   硬盘分区命名规则

 

第1块sas硬盘的第一个主分区     /dev/sda 1 

第2块sata硬盘的第2个主分区    /dev/sdb 2

第3块sata硬盘的第1个逻辑分区  /dev/sdc 5

1.1.1.3.2.2        创建分区

 

1.1.1.3.2.2.1  fdisk方法一

[root@localhost ~]# fdisk -cu /dev/sdb

-u:按照扇区进行分区

-c:取消dos兼容模式

 

p:print 显示分区信息

n :new  创建分区

d:delete 删除分区

w:write 保存退出

q:quit 退出不保存

题:

创建1个10M主分区    创建一个使用剩余所有容量的扩展分区    创建一个 20M的逻辑分区 

[root@localhost ~]# fdisk -cu /dev/sdb

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

p

Partition number (1-4): 1

First sector (2048-417791, default 2048):

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-417791, default 417791): +10

 

Command (m for help): n

Command action

   e   extended

   p   primary partition (1-4)

e

Partition number (1-4): 2

First sector (2059-417791, default 2059):

Using default value 2059

Last sector, +sectors or +size{K,M,G} (2059-417791, default 417791):

Using default value 417791

 

Command (m for help): n

Command action

   l   logical (5 or over)

   p   primary partition (1-4)

l

First sector (4107-417791, default 4107):

Using default value 4107

Last sector, +sectors or +size{K,M,G} (4107-417791, default 417791): +20M

 

Command (m for help): p

 

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048        2058           5+  83  Linux

/dev/sdb2            2059      417791      207866+   5  Extended

/dev/sdb5            4107       45066       20480   83  Linux

Command (m for help): w

通知系统磁盘分区表磁盘分区表变化了

[root@localhost ~]# partprobe /dev/sdb

 

1.1.1.3.2.2.2  parted方法二

将磁盘格式变成gpt的格式(因为parted只能针对gpt格式的磁盘进行操作)

   转换:

(parted) mklabel  gpt

   分区:

(parted) mkpart  primary  1  500                  (分第一个主分区500MB,primary是分区名)

 

   分区:

(parted) mkpart  primary  501  1000              (分第二个主分区500MB)

   分区:

(parted) mkpart  logical  1001  2000              (分第三个逻辑分区1000MB)  (parted的逻辑分区不用先分扩展分区,直接一步到位)

   查看:

(parted) p

   退出:

(parted)quit             ( parted分区自动保存,不用手动保存 )

1.1.1.3.2.2.2.1  非交互式

[root@localhost ~]# parted /dev/sdb mktable gpt

                                                                     

[root@localhost ~]# parted /dev/sdb  mkpart primary 0 10

1.1.1.3.2.2.2.2  交互式:

1.1.1.3.3         格式化(创建文件系统make filesystem)

文件系统就是管理这块文件的机制

 

[root@localhost ~]# mkfs.ext4 /dev/sdb1

1.1.1.3.4         关闭磁盘分区自动检查功能

root@localhost ~]# tune2fs -c 0 -i 0 /dev/sdb1

-c:count

-i:interval

1.1.1.3.5         挂载

[root@localhost ~]# mount /dev/sdb1  /mnt/

[root@localhost ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

                       18G  4.4G   12G  28% /

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

/dev/sda1             477M   36M  417M   8% /boot

/dev/sr0              3.7G  3.7G     0 100% /media

/dev/sdb1             9.7M  100K  9.0M   2% /mnt

1.1.1.3.6         永久挂载

法一:/etc/rc.local

法二:/etc/fstab开机自动挂载

[root@localhost ~]# tail /etc/fstab |column -t

 

proc                                     

 /proc     

 proc       

  defaults       

0       

   0

设备名称(磁盘分区名称  光盘)

挂载点

文件系统类型

挂载参数,默认default

备份

检查

/dev/cdrom

/mnt

Iso9660

Defaults

0

0

 

1.2   raid 磁盘冗余阵列

1.2.1  磁盘冗余阵列的作用

得到更高的容量

得到更高的冗余

得到更高的性能

 

RAID是“Redundant Array of Independent Disk”的缩写

RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份技术。根据磁盘陈列的不同组合方式,可以将RAID分为不同的级别。 其中提高传输速率和提供容错功能是最大的优点。其特色是N台硬盘同时读取速度加快及提供容错性Fault Tolerant,所以RAID主要是解决访问数据的存储速度问题(Storage)不是备份问题(Backup Solution)。

1.2.2  Raid特点

 

 

 

1.2.2.1  Raid0

 

同时访问多个磁盘这样访问读取速度加快。在系统眼中,raid0这几块盘是一块盘。

1.2.2.2  Raid1

又叫镜像盘,只能有两块硬盘,另一块作为备份使用。

 

1.2.2.3  Raid 5

每写3个信息,下面就有一个校验信息,作用就是当一块硬盘坏了,通过奇偶校验恢复

 

如上图显示raid5的存储数据的特点,,我们一般做raid5的时候加一块热备盘。

1.2.2.4  Raid10

 

Raid10的写入数据原理如上图一样,但并不是先做成raid1后做成raid0而是直接做成raid10.

注意raid10是两块两块扩展。

 

1.3   增加swap

内存不足,使用swap,swap不足增加swap

 

 

1.3.1  增加swap

查看内存:

[root@localhost ~]# free -h

             total            used       free     shared    buffers     cached

Mem:          980M       403M            577M       1.1M        59M       147M

                         -( buffer+cache)  +(buffer+cache)

-/+ buffers/cache:       196M       784M

Swap:         1.9G         0B       1.9G

 

-------->linux把用过的文件 数据临时缓存起来

 

[root@localhost ~]# dd   if=/dev/zero     of=/tmp/100m   bs=1M        count=100

[root@localhost ~]#

[root@localhost ~]# mkswap  /tmp/100m    转成swap

1.3.2  临时激活swap文件

 

[root@localhost ~]# swapon /tmp/100m

 

[root@localhost ~]# free -h

             total       used       free     shared    buffers     cached

Mem:          980M       507M       473M       1.1M        59M       247M

-/+ buffers/cache:       199M       781M

Swap:         2.0G         0B       2.0G

 

1.3.3  查看swap由什么组成

[root@localhost ~]# swapon -s 

1.3.4  取消文件的swap功能

[root@localhost ~]# swapoff /tmp/100m

 

1.3.5  永久增加swap,重启服务器后生效

[root@localhost ~]# vim /etc/fstab

 

/tmp/100m            swap                     swap     defaults     0  0

 

 

1.4   查看系统性能的命令

 

1.4.1  查看CPU性能

Cpu的路、颗、核、线程的理解

路就是颗,相当于房子,核相当于房间里的人,“核”是在一物理CPU内部封装的CPU核心数量,线程相当于人同时做的事情。

[root@localhost ~]# lscpu    查看cpu信息

Architecture:          i686                            #架构686
CPU(s):                2                                   #逻辑cpu颗数是2
Thread(s) per core:    1                           #每个核心线程数是1                 
Core(s) per socket:    2                           #每个cpu插槽核数/每颗物理cpu核数是2
CPU socket(s):         1                            #cpu插槽数是1
Vendor ID:             GenuineIntel           #cpu厂商ID是GenuineIntel
CPU family:            6                              #cpu系列是6
Model:                 23                                #型号23
Stepping:              10                              #步进是10
CPU MHz:               800.000                 #cpu主频是800MHz
Virtualization:        VT-x                         #cpu支持的虚拟化技术VT-x(对此在下一博文中解释下http://hi.baidu.com/sdusoul/blog/item/5d8e0488def3a998a5c272c0.html)
L1d cache:             32K                         #一级缓存32K(google了下,这具体表示表示cpu的L1数据缓存为32k)
L1i cache:             32K                          #一级缓存32K(具体为L1指令缓存为32K)
L2 cache:              3072K                      #二级缓存3072K

socket就是主板上插cpu的槽的数目,也就是可以插入的物理CPU的个数。

core就是我们平时说的“核“,每个物理CPU可以双核,四核等等。

thread就是每个core的硬件线程数,即超线程

 

[root@localhost ~]# cat /proc/cpuinfo

physical id   : 0

processor     : 0   (应该是逻辑CPU)

siblings         : 1

core id          : 0

cpu cores     : 1

  1. 拥有相同 physical id 的所有逻辑处理器共享同一个物理插座,每个 physical id 代表一个唯一的物理封装。

 2. Siblings 表示位于这一物理封装上的逻辑处理器的数量,它们可能支持也可能不支持超线程(HT)技术。
 3. 每个 core id 均代表一个唯一的处理器内核,所有带有相同 core id 的逻辑处理器均位于同一个处理器内核上。简单的说:“siblings”指的是一个物理CPU有几个逻辑                      CPU,”cpu cores“指的是一个物理CPU有几个核。
4. 如果有一个以上逻辑处理器拥有相同的 core id 和 physical id,则说明系统支持超线程(HT)技术。
 5. 如果有两个或两个以上的逻辑处理器拥有相同的 physical id,但是 core id不同,则说明这是一个多内核处理器。cpu cores条目也可以表示是否支持多内核。

[root@localhost ~]# top

top - 09:44:56 up 16 days, 21:23,  1 user,  load average: 9.59, 4.75, 1.92
Tasks: 145 total,   2 running, 143 sleeping,   0 stopped,   0 zombie
Cpu(s): 99.8%us,  0.1%sy,  0.0%ni,  0.2%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4147888k total,  2493092k used,  1654796k free,   158188k buffers
Swap:  5144568k total,       56k used,  5144512k free,  2013180k cached

解释:

  • top - 09:44:56[当前系统时间],
  • 16 days[系统已经运行了16天],
  • 1 user[个用户当前登录],
  • load average: 9.59, 4.75, 1.92[系统负载,即任务队列的平均长度]
  • Tasks: 145 total[总进程数],
  • 2 running[正在运行的进程数],
  • 143 sleeping[睡眠的进程数],
  • 0 stopped[停止的进程数],
  • 0 zombie[冻结进程数],
  • Cpu(s): 99.8%us[用户空间占用CPU百分比],
  • 0.1%sy[内核空间占用CPU百分比],
  • 0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比],
  • 0.2%id[空闲CPU百分比], 0.0%wa[等待输入输出的CPU时间百分比],
  • 0.0%hi[],
  • 0.0%st[],
  • Mem: 4147888k total[物理内存总量],
  • 2493092k used[使用的物理内存总量],
  • 1654796k free[空闲内存总量],
  • 158188k buffers[用作内核缓存的内存量]
  • Swap:  5144568k total[交换区总量],
  • 56k used[使用的交换区总量],
  • 5144512k free[空闲交换区总量],
  • 2013180k cached[缓冲的交换区总量],

[root@localhost ~]# htop

 

vmstat

1.4.2  查看内存信息

1)、cat /proc/meminfo
2)、free 命令
             total       used       free     shared    buffers     cached
Mem:      65973912   32496232   33477680          0     906932    6452984
-/+ buffers/cache:   25136316   40837596
Swap:     41943032      13204   41929828

 

top

1.4.3  查看负载

W

Top

Uptime

 

 

 

以上是关于Linux运维--磁盘&shell编程基础的主要内容,如果未能解决你的问题,请参考以下文章

linux运维架构之路-shell编程入门

linux基础学习-17-linux操作系统之Shell编程基础讲解

Shell编程基础篇-上

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

精讲shell基础以及如何高效的学习shell编程

shell编程基础-上