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 harddrive,HHD): 是既包含传统硬盘又有闪存(flashmemory)模块的大容量存储设备。闪存处理存储中写入或恢复最频繁的数据。很多公司开始提供这项技术的变体,他们期望它会在高端系统中受到追捧,尤其是在笔记本电脑和个人数字助理中。
相比传统硬盘,混合硬盘(hybrid
hard drive,HHD)有很多优点,包括:
应用中的数据存储与恢复更快,如文字处理机
系统启动时间减少
功耗降低
生成热量减少
硬盘寿命延长
笔记本和PAD的电池寿命延长
工作噪声级别降低
混合硬盘(hybrid hard
drive,HHD)的不足包括:
硬盘中数据的寻道时间更长
硬盘的自旋变化更频繁
闪存模块处理失败,不可能进行其中的数据恢复
系统的硬件总成本更高
传统硬盘(HDD,Hard 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
- 拥有相同 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基础学习-17-linux操作系统之Shell编程基础讲解