慢慢来,是种诚意,加载中 . . .

linux学习宝典四


linux网络故障排查

在日常使用中,经常会出现无法连通的情况,这个时候我们就需要找到问题出在哪里,这里面给各位提供一个生产环境排查网络故障的大体思路,一般情况下如果遇到网络故障,都是通过筛选的方式一点一点的确定问题所在,首先判断是本机的问题还是网络上其它设备的问题,如果同一网络环境中的其它主机正常的,要去其它网络设备(路由器)上查看一下是否对网络有问题的主机设置了限制,如果没有的话,问题出在本机,这里面我们主要看下下本机容易出现哪些问题导致页面无法访问

一、网线和网卡设置

检查网卡的灯是否亮起,普通服务器的话应该是绿灯常亮为正常,交换机绿灯闪烁表示正在传输数据。也可以通过命令ethtool ethX来查看某一网卡的链路是否物理连通。

命令介绍

ethtool

[root@zutuanxue ~]# ethtool ens33
Settings for ens33:
	Supported ports: [ TP ]
	#接口类型
	#TP 	RJ45接口双绞线
	#AUI 	“D”型15针接口
	#BNC 	细同轴电缆接口,类似于以前的有线电视	
	#MII 	媒体独立接口,一种以太网行业标准
	#FIBRE	光纤
	Supported link modes:   10baseT/Half 10baseT/Full 
	                        100baseT/Half 				    																						100baseT/Full 
	                        1000baseT/Full 
	#支持的链接模式
	Supported pause frame use: No
	#是否支持暂停帧--一种网卡流量控制技术
	Supports auto-negotiation: Yes
	#是否支持自动协商,网络设备相互告知对方自己的工作方式,包括传输速度,双工状态等,然后选择一个最佳的
	Supported FEC modes: Not reported
	#编码纠错模式,支持编码纠错可提高数据通讯可信度
	Advertised link modes:  10baseT/Half 10baseT/Full 
	                        100baseT/Half
                          100baseT/Full 
	                        1000baseT/Full
  #宣告的链接模式
	Advertised pause frame use: No
	#宣告的是否支持帧暂停
	Advertised auto-negotiation: Yes
	#宣告的是否支持自动协商
	Advertised FEC modes: Not reported
	#宣告的是否FEC
	Speed: 1000Mb/s
	#当前速度
	Duplex: Full
	#全双工还是半双工
	Port: Twisted Pair
	#线缆类型为双绞线
	PHYAD: 0
	#PHY地址,主要指PHY芯片,用来发送和接收数据帧
	Transceiver: internal
	#收发器类型 internal/external(内部外部)是否是板载的
	Auto-negotiation: on
	#自动协商功能开启
	MDI-X: off (auto)
	#自适应功能
	Supports Wake-on: d
	#是否支持远程唤醒 d=禁用,p\u\m\b\a\g=不同唤醒方式
	Wake-on: d
	Current message level: 0x00000007 (7)	drv probe link
	Link detected: yes
	#网卡已连接
	
	
	##############常用参数
#-a 查看网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。主要指接收暂停,发送暂停和自动协商暂停功能,也就是暂停帧,主要用于控制数据路停止发送,可以防止瞬间压力过大导致缓冲区溢出而引发的帧丢失(丢包)
#[root@zutuanxue ~]# ethtool -a ens33
Pause parameters for ens33:
Autonegotiate:	on
RX:		off
TX:		off

#-A 修改网卡中 接收模块RX、发送模块TX和Autonegotiate模块的状态:启动on 或 停用off。
[root@zutuanxue ~]# ethtool -A ens33 rx/tx/autoneg on

#-i 显示网卡驱动的信息,如驱动的名称、版本等。
[root@zutuanxue ~]# ethtool -i ens33
driver: e1000
version: 7.3.21-k8-NAPI
firmware-version: 
expansion-rom-version: 
bus-info: 0000:02:01.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no

#-k 显示网卡各项功能的支持和协议状态,如支持某个协议的功能是否开启等
#-p 用于区别不同ethX对应网卡的物理位置,常用的方法是使网卡port上的led不断的闪;N为网卡闪的持续时间,以秒为单位。
[root@zutuanxue ~]# ethtool -p ens33 10

#-r 如果自动协商状态为on,则重启自动协商功能。
[root@zutuanxue ~]# ethtool -r ens33

#-S 显示统计参数,如网卡接收/发送的字节数、接收/发送的广播包个数等。
[root@zutuanxue ~]# ethtool -S ens33
NIC statistics:
     rx_packets: 609
     tx_packets: 130
     rx_bytes: 121330
     tx_bytes: 16066
     rx_broadcast: 0

#-s 修改网卡的部分配置,包括网卡速度、单工/全双工模式、mac地址等。
	ethtool –s ethX [speed 10|100|1000]
									#设置网口速率10/100/1000M
									[duplex half|full]
									#设置网口半/全双工
									[autoneg on|off]
									#设置网口是否自协商
									[port tp|aui|bnc|mii]
									#设置网口类型
[root@zutuanxue ~]# ethtool -s ens33 speed 1000 duplex full autoneg on port tp

二、selinux&防火墙

这两个是最容易产生干扰的项目,selinux和防火墙如何关闭,我们在前面的课程中有涉及,这里就不重复了

三、查看网卡ip地址,网关设置

使用ifconfig或者nmcli命令查看/设置ip地址和网关

四、使用ping命令测试连通性

-c<完成次数>:设置完成要求回应的次数;
-f:洪水ping只有root可以使用
-i<间隔秒数>:指定收发信息的间隔时间;
-n:只输出数值,不尝试去查找主机名
-s<数据包大小>:设置数据包的大小;
-I 指定源地址(源地址必须是本地网卡上存在的配置)
[root@zutuanxuers1 ~]# ping -c 3 -i 0.5 -n  -s 1024 -I 192.168.2.220 192.168.2.220
PING 192.168.2.220 (192.168.2.220) from 192.168.2.220 : 1024(1052) bytes of data.
1032 bytes from 192.168.2.220: icmp_seq=1 ttl=64 time=0.047 ms
1032 bytes from 192.168.2.220: icmp_seq=2 ttl=64 time=0.060 ms
1032 bytes from 192.168.2.220: icmp_seq=3 ttl=64 time=0.053 ms

--- 192.168.2.220 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 13ms
rtt min/avg/max/mdev = 0.047/0.053/0.060/0.008 ms

五、路由

使用route命令查看或设置路由及网关,也可以通过修改静态路由配置文件实现

六、DNS

  • /etc/hosts&/etc/resolv.conf
  • nslookup
  • dig
  • host

七、追踪数据包

tracepath  [参数选项]  hostname,域名或 IP地址
#替代了以前的traceroute
参数选项:
-4	使用IPV4
-6	使用IPV6=tracepath6
-l	设置初始包的大小 默认IPV4 65535,ipv6 128000
-m 	设置检测数据包的TTL,默认值为30次;
-n 	显示IP地址,不查主机名。当DNS不起作用时常用到这个参数;
-b	显示主机名和IP地址
-p 	port 探测包使用的基本UDP端口设置为port ,默认值是33434
[root@zutuanxuers1 ~]# tracepath -b www.baidu.com -l 1000 -m 5
 1:  localhost (192.168.0.1)                              18.324ms 
 2:  localhost (192.168.1.1)                              15.622ms 
 3:  localhost (10.70.0.1)                                18.640ms 
 4:  114.244.94.25 (114.244.94.25)                         7.213ms 
 5:  124.65.56.141 (124.65.56.141)                        16.020ms 
     Too many hops: pmtu 1000
     Resume: pmtu 1000 

八、硬件故障

更换硬件


linux日志管理

一、日志服务的介绍

日志介绍

程序执行的时候,可以通过标准输出(stdout, Standard Output)与标准错误输出 (stderr, Standard Error Output)来输送信息,用户就可以了解该程序执行时发生了什么状况;可是对于在后台执行的服务器程序,或者Linux 内核本身来说,就没有办法这样做了。服务与内核启动后,会切断与终端机(Terminal) 或控制台(Console)的联机,如此一来,即使有信息通过标准输出、标准错误输出传送出去,用户也未必能从屏幕上看到信息。

更何况,用户根本不可能全天候在计算机前面,盯着屏幕上显示的信息啊!为了让 管理者可以随时监控服务所产生的信息,Linux 提供了一个日志服务,该服务可以收集(Collect)任何服务传递过来的信息,储存成为记录文件(Log File) 、或直接传送给某些用户,甚至也可以传送到其他计算机的系统日志服务。

日志的作用

系统方面的问题

linux系统长时间运行,可能会出现一些软件,硬件方面的问题,这些问题都会记录到日志文件中,我们可以通过查看相应的日志文件,找出问题所在

网络服务的问题

网络服务在运行过程中产生的信息都会记录到日志文件中,一旦服务出现问题,无法正常运行,我们可以通过查看相应的日志文件就知道服务出现了什么问题

历史事件查询

由于日志服务每天都会将系统运行的信息保存到日志文件当中,所以我们也可以通过日志信息去追溯之前的系统运行状况

二、相关软件包和文件

软件包

[root@zutuanxue ~]# rpm -qa | grep rsyslog
rsyslog-gssapi-8.37.0-9.el8.x86_64
rsyslog-relp-8.37.0-9.el8.x86_64
rsyslog-8.37.0-9.el8.x86_64
rsyslog-gnutls-8.37.0-9.el8.x86_64

相关文件

配置文件:/etc/rsyslog.conf

辅助配置文件:/etc/rsyslog.d/*.conf

日志文件存放位置:	/var/log/

执行文件:/usr/sbin/rsyslogd

模块路径:/usr/lib64/rsyslog/

服务单元:/usr/lib/systemd/system/rsyslog.service

三、配置文件说明

/etc/rsyslog.conf

[root@zutuanxue yum.repos.d]# grep '####' /etc/rsyslog.conf 
#### MODULES ####定义模块
#### GLOBAL DIRECTIVES ####定义全局环境
#### RULES ####	定义规则


模块定义
module(load="imuxsock"    # 提供对本地系统日志的支持
       SysSock.Use="off") # 关闭通过本地日志接口的信息接收功能,日志信息接收通过下面的imjournal模块
module(load="imjournal"             # 提供对systemd日志的访问
       StateFile="imjournal.state") # 定义状态文件,rsyslog用于记录文件上传进度,避免日志内容混乱


全局环境设置
# 定义工作目录
global(workDirectory="/var/lib/rsyslog")

# 使用默认的时间戳格式
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")

# 定义辅助配置文件位置
include(file="/etc/rsyslog.d/*.conf" mode="optional")

规则设置
信息来源.安全级别	 处理方式

信息来源
 	 kern:内核相关的日志
 	 user:用户相关的日志
        mail:邮件相关的日志
        daemon:系统服务相关的日志
        lpr: 打印相关的日志
        cron:计划任务相关的日志
        authpriv:认证相关的日志
        news:新闻相关的日志
        uucp:文件copy相关的日志
        local0-local7:自定义相关的日志信息
	*:		所有
安全级别
       debug:  调试
	info:   消息
	notice: 注意
    	warn,warning: 警告
	err,error: 错误
	crit: 严重级别
	alert: 需要立即修改该的信息
	emerg,panic: 内核崩溃,系统接近崩溃
	*:所有日志级别
       	none:没有任何级别,也就是不记录日志信息

表达形式
mail.err		err+crit+alert+emerg
mail.=err		err
mail.!err		除了err

处理方式
/PATH/FILENAME:将信息储存至 /PATH/FILENAME文件中。注意,如果要系统日志服务把信息储存到文件,该文件必须以
斜线(/) 开头的绝对路径命名之。
USERNAME:将信息送给已登录的用户。
@HOSTNAME:代表使用udp协议将信息转送到远端的日志服务器。
@@hostname:代表使用tcp协议将信息传送到远端的日志服务器
*:将信息传送给所有已登录的用户。

常见的日志文件及作用

/var/log/boot.log 系统启动时的日志。

/var/log/dnf.* dnf软件包管理器相关日志

/var/log/firewalld 防火墙日志

/var/log/lastlog 所有用户最后一次登录信息,需要使用lastlog命令查看

/var/log/maillog 电子邮件系统相关日志

/var/log/messages 整体的系统日志,具体记录范围取决于服务的配置文件

/var/log/wtmp 记录当前登录和过去登录的用户信息,使用last命令查看

日志文件的安全设置

[root@zutuanxue ~]# chattr +a /var/log/messages 
[root@zutuanxue ~]# lsattr /var/log/messages 
-----a------------ /var/log/messages

日志的格式

[root@zutuanxue ~]# tail /var/log/messages 
Dec  6 03:29:09 localhost systemd[1]: Started PackageKit Daemon.
Dec  6 03:43:44 localhost systemd[1]: Starting dnf makecache...
Dec  6 03:43:44 localhost dnf[7594]: 元数据缓存近期已刷新。
Dec  6 03:43:44 localhost systemd[1]: Started dnf makecache.


DATE  TIME  HOSTNAME  APP(NAME)[PID]: MESSAGES

每一个字段的意义如下说明:
DATE:信息发生的日期。
TIME:信息发生的时间。
HOSTNAME:信息发生的主机。
APP:产生信息的软件。
NAME:软件的名称,或是软件组件(Component)的名称。可以省略。
PID:进程标识符 (Process ID)。可以省略。
MESSAGES:信息的内容。 

四、日志切割

日志切割介绍

随着系统时间使用的增长,日志文件的体积会越来越大,过大的日志文件对于查看或者备份来讲都是极为不便的。所以linux系统提供了一个日志切割工具,这个工具就是logrotate,用户可以用过这个工具对日志文件进行切割,系统也利用这个工具配合计划任务服务,定期的对系统日志进行切割。

相关文件

/etc/logrotate.conf	主配置文件,定义日志切割规则/etc/logrotate.d/	辅助配置文件,可以让用户针对不类型的信息,定义不同的切割规则

主配置文件说明

[root@zutuanxue ~]# vim /etc/logrotate.conf weekly	#定义切割周期为每周一次rotate 4 #默认保留四个文件create	 #切割完成后,建立一个新的文件继续存储日志信息dateext	#定义切割后的文件名中要包含日期信息include /etc/logrotate.d #辅助配置文件的存放位置

辅助配置文件说明

格式日志文件的名称(绝对路径)	{	额外的设置}[root@zutuanxue ~]# vim /etc/logrotate.d/syslog /var/log/cron/var/log/maillog/var/log/messages/var/log/secure/var/log/spooler{    missingok	 #如果文件丢失,转到下一个文件,不报告错误信息    sharedscripts #定义执行的脚本,需要与endscript结合使用    postrotate	#定义执行完logrotate操作之后,执行的操作		/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true #重启日志服务    endscript	#定义执行的脚本,需要sharedscripts结合使用。}

logrotate

[root@zutuanxue ~]# logrotate -vf /etc/logrotate.conf #参数说明 v	 显示详细信息f	 强制切割[root@zutuanxue ~]# logrotate -vf /etc/logrotate.conf[root@zutuanxue log]# cd /var/log/[root@zutuanxue log]# lssecure-20191206		boot.log-20191206		maillog-20191206btmp-20191206			messages-20191206		spooler-20191206wtmp-20191206			cron-20191206

系统如何使用logrotate

linux系统通过计划任务去定期的执行切割动作[root@zutuanxue ~]# cat /etc/cron.daily/logrotate#!/bin/sh/usr/sbin/logrotate /etc/logrotate.confEXITVALUE=$?if [ $EXITVALUE != 0 ]; then    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"fiexit $EXITVALUE此文件定义了如果切割的操作执行成功的话,会调用logger命令记录一条标签为logrotate的日志信息到日志文件里

五、systemd-journald.service

很早之前,日志信息是需要等到开机完成并启动日志服务之后才会开始记录的,这种方式会导致开机过程中的信息无法记录,为了避免这种情况,内核用一个叫klogd的服务来记录开机过程中产生的日志信息,然后等到日志服务启动完再将这些信息交给日志服务。

现在linux系统采用systemd来管理系统服务,而systemd又是第一个启动的服务,所以现在我们通过一个systemd自带的,名字叫systemd-journald的服务来协助记录日志信息。那是不是就意味着我们可以不使用rsyslog这个服务了呢?不能,因为systemd-journald服务使用内存来记录相关日志信息,断电之后内容消失,所以我们不能停止rsyslog服务,而且rsyslog服务有一个很重要的功能,可以对日志内容进行分类。

journalctl命令

systemd-journald提供了一个叫journalctl的工具用来查询它所记录的信息[root@zutuanxue ~]# journalctl  -n		显示最后的几行内容,默认为10行 -r		倒序输出,最新的日志先输出 -S/--since	开始的时间 -U/--until	结束的时间 -p		指定日志等级0-7,(0=emerg,1=alert,2=crit,3=err,4=warninig,5=notice,6=info,7=debug)如:4代表的就是0-4-f		持续输出,类似于tail的-f	使用ctrl+c结束--disk-usage	磁盘空间占用-u		指定单元,如 -u crond.service--vacuum-size	释放日志文件占用的空间,如	--vacuum-size 1G_PID=0		查看指定PID的信息_UID=0		查看指定UID的信息		[root@zutuanxue ~]# journalctl --since "YYYY-MM-DD 00:00:00" --until "YYYY-MM-DD 00:00:00"[root@zutuanxue ~]# journalctl --since today[root@zutuanxue ~]# journalctl --since yesterday --until today[root@zutuanxue ~]# journalctl -u crond.service[root@zutuanxue ~]# journalctl _SYSTEM_UNIT=crond.service

六、日志分析工具

虽然我们有相关的工具来查看日志信息,但是如果信息量过大的话查看起来也是比较费时的,所以linux系统给我们提供了一个日志分析工具,这个工具叫logwatch,它会每天分析日志信息,并将信息通过邮件的形式发送给root用户

安装logwatch及相关软件包

[root@zutuanxue ~]# dnf install logwatch -y
[root@zutuanxue ~]# dnf install sendmail -y
[root@zutuanxue ~]# systemctl start sendmail
[root@zutuanxue ~]# ll /etc/cron.daily/0logwatch 
-rwxr-xr-x 1 root root 434 5月  11 2019 /etc/cron.daily/0logwatch
[root@zutuanxue ~]# /etc/cron.daily/0logwatch 
[root@zutuanxue ~]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 2 messages 1 new
1 logwatch@zutuanxue.l Sat Dec 7 01:50 57/2011 "Logwatch for localhos"
>N 2 logwatch@zutuanxue.l Sat Dec 7 01:52 56/2000 "Logwatch for localhos"
输入数字查看对应的邮件,输入q退出

linux日志服务器部署

集中式日志服务器介绍

如果你负责管理数台的 Linux,你得登录每一台Linux 后,才能阅读其中的信息! 这样是不是很麻烦?? 那有没有什么更好的方案呢?

Linux 的系统日志服务,允许你把信息传递到某一台 Linux 的系统日志服务中;那你就可以把一台 Linux 作为日志服务器 (Log Server),而其他的 Linux 则当作日志客户端。此时,在作为日志服务器中就可以保存所有日志客户端产生的信息,因此,你就可以在日志服务器中阅读信息,而不用登录到其他的主机了。

搭建流程

环境准备:

server:192.168.1.55

client:192.168.1.18

关闭SELinux和防火墙

关闭SELinux[root@zutuanxue ~]# vim /etc/sysconfig/selinuxSELINUX=disabled[root@zutuanxue ~]# reboot关闭防火墙[root@zutuanxue ~]# systemctl stop firewalld[root@zutuanxue ~]# systemctl disable firewalld

流程

setp 1 修改server端rsyslog服务配置文件

server[root@zutuanxue ~]# vim /etc/rsyslog.conf开放通过UDP协议514端口接收日志信息功能 19 module(load="imudp")  20 input(type="imudp" port="514")开放通过TCP协议514端口接收日志信息功能 24 module(load="imtcp") 25 input(type="imtcp" port="514")

step 2 重启server端rsyslog服务

[root@zutuanxue ~]# systemctl restart rsyslog		#重启日志服务[root@zutuanxue ~]# systemctl status rsyslog		#确认服务启动状态

step 3 修改client端rsyslog服务配置文件

client[root@zutuanxue ~]# vim /etc/rsyslog.conf  67 *.*   			@192.168.1.55			 #告知客户端将所有日志信息使用UDP协议传送到日志服务器,日志服务器的ip地址为192.168.1.55   68 #*.*              @@192.168.1.55 #也可以使用@@告诉客户端将所有日志信息使用TCP协议传送到日志服务器

step 4 重启client端rsyslog服务

[root@zutuanxue ~]# systemctl restart rsyslog		#重启日志服务
[root@zutuanxue ~]# systemctl status rsyslog		#查看服务状态

step 5 测试

server端使用tail命令查看日志信息
[root@zutuanxue ~]# tail -f /var/log/messages 

client使用logger工具产生测试日志
[root@zutuanxue ~]# logger "this is a test from 192.168.1.18"

如果在server端能查看到logger工具产生的内容就证明集中式日志服务器搭建成功
Dec  6 21:18:21 localhost root[2519]: this is a test from 192.168.1.18


注:其它的client端的设置都是相同的,这样我们就可以将很多台linux主机的日志信息都收集到一台主机上,方便查阅和后期的日志备份
工作。

linux磁盘基本管理

一、磁盘介绍

磁盘:计算机中的外部存储设备,负责存储计算机数据,并且断电后也能保持数据不丢失。

磁盘分类:

按照物理结构:

  • 机械磁盘
  • 固态磁盘

按照接口:

  • IDE
  • SCSI
  • SATA
  • SAS
  • mSATA
  • M.2
  • NVME
  • PCIe

按照尺寸:

  • 机械硬盘:1.8寸 2.5寸 3.5寸
  • 固态硬盘:SATA: 2.5寸
  • M.2: 2242、2260、2280

二、熟悉磁盘的工作原理

机械磁盘的读写数据依靠电机带动盘片转动来完成数据读写的。

机械磁盘剖析图

机械硬盘结构.jpeg

为了使磁盘内部清洁,磁盘是在真空特殊环境中制作的,不能随意拆卸,拆开后基本报废了

机械磁盘工作是依靠马达带动盘片转动,通过磁头来读取磁盘上的数据。

磁盘术语

磁盘

硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。

磁头

负责读取盘面数据的设备

磁道

从盘片的最内侧向外有很多同心圆圈,我们称为磁道

扇区

从圆心向外画直线,可以将磁道划分为若干个弧段,称之为扇区,一个扇区通常为512B

disk2.png

磁柱

硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。

disk3.png

三、磁盘的性能指标

影响磁盘性能的指标

寻道时间(seek time)【和 转速 相关】:Tseek,是指将读写磁头移动至正确的磁道上所需要的时间。寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms

旋转延迟:Trotation,是指盘片旋转将请求数据所在的扇区移动到读写磁头下方所需要的时间。旋转延迟取决于磁盘转速,通常用磁盘旋转一周所需时间的1/2表示。比如:7200rpm的磁盘平均旋转延迟大约为60*1000/7200/2 = 4.17ms,而转速为15000rpm的磁盘其平均旋转延迟为2ms。

数据传输时间:Ttransfer,是指完成传输所请求的数据所需要的时间

衡量磁盘性能的指标

IOPS:IOPS(Input/Output Per Second)即每秒的输入输出量(或读写次数),即指每秒内系统能处理的I/O请求数量。随机读写频繁的应用,如小文件存储等,关注随机读写性能,IOPS是关键衡量指标。可以推算出磁盘的IOPS = 1000ms / (Tseek + Trotation + Transfer),如果忽略数据传输时间,理论上可以计算出随机读写最大的IOPS。常见磁盘的随机读写最大IOPS为:

  • 7200rpm的磁盘 IOPS = 76 IOPS
  • 10000rpm的磁盘IOPS = 111 IOPS
  • 15000rpm的磁盘IOPS = 166 IOPS

throughput : 吞吐量指单位时间内可以成功传输的数据数量。 单位为(m/s G/s)

3.png

文件系统:是告知操作系统使用何种方法和数据结构在存储设备或分区上读写数据的;是分区数据管家,负责如何将数据写入磁盘或者从磁盘读出

NTFS EXT3 EXT4 XFS ISO9660

具体有多少 man mount -t

adfs,  affs,  autofs,  cifs,  coda,  coherent, cramfs,debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs,iso9660,  jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4,ramfs, reiserfs, romfs, squashfs,  smbfs,  sysv,  tmpfs,  ubifs,udf,  ufs,  umsdos,  usbfs,  vfat, xenix, xfs, xiafs.

文件系统可以根据应用场景去选择使用哪一款,如果不会选择,推荐ext4或者XFS

page cache

其实就是内存上空闲的部分 用来缓存数据,比如buffer cache

作用:对IO读写做优化

测试缓存对读写的影响

写[root@zutuanxue ~]# echo 3 > /proc/sys/vm/drop_caches[root@zutuanxue ~]# free -m              total        used        free      shared  buff/cache   availableMem:           1980          95        1807           9          77        1754Swap:          2047           0        2047[root@zutuanxue ~]# dd if=/dev/zero of=/tmp/big bs=1M count=1000记录了1000+0 的读入记录了1000+0 的写出1048576000字节(1.0 GB)已复制,10.2412 秒,102 MB/秒[root@zutuanxue ~]# free -m              total        used        free      shared  buff/cache   availableMem:           1980          95         779           9        1105        1698Swap:          2047           0        2047[root@zutuanxue ~]# dd if=/dev/zero of=/tmp/big1 bs=1M count=1000记录了1000+0 的读入记录了1000+0 的写出1048576000字节(1.0 GB)已复制,7.89978 秒,133 MB/秒读[root@zutuanxue ~]# echo 3 > /proc/sys/vm/drop_caches [root@zutuanxue ~]# free -m              total        used        free      shared  buff/cache   availableMem:           1980          95        1805           9          79        1753Swap:          2047           0        2047[root@zutuanxue ~]# dd if=/tmp/big of=/dev/null 记录了2048000+0 的读入记录了2048000+0 的写出1048576000字节(1.0 GB)已复制,2.23965 秒,468 MB/秒[root@zutuanxue ~]# free -m              total        used        free      shared  buff/cache   availableMem:           1980          95         800           9        1084        1710Swap:          2047           0        2047[root@zutuanxue ~]# dd if=/tmp/big of=/dev/null 记录了2048000+0 的读入记录了2048000+0 的写出1048576000字节(1.0 GB)已复制,1.92811 秒,544 MB/秒

四、linux磁盘的使用方法

4.1、磁盘初始化

一块新的磁盘使用必须初始化为MBR或者GPT分区。

  • MBR <2TB fdisk 4个主分区或者3个主分区+1个扩展分区(N个逻辑分区)

MBR(Master Boot Record)的缩写,由三部分组成,即:

  1. Bootloader(主引导程序)=

    446字节

    • 引导操作系统的主程序
  2. DPT分区表(Disk Partition Table)=

    64字节

    • 分区表保存了硬盘的分区信息,操作系统通过读取分区表内的信息,就能够获得该硬盘的分区信息
    • 每个分区需要占用16个字节大小,保存有文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容
    • 分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用
    • 逻辑分区的分区信息保存在扩展分区内而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制
  3. 硬盘有效标志(校验位)=2个字节

  • GPT >2TB gdisk(parted) 128个主分区

注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失

4.2、分区

将磁盘合理分区,能使计算机或者使用者更快的存取数据

MBR 主分区+扩展分区<=4

GPT 主分区<=128

4.3、格式化

装载文件系统(相当于库管,负责数据的写入和读出)。

常见的文件系统:NTFS EXT EXT2 EXT3 EXT4 XFS vfat

4.4、挂载

linux中设备不能直接使用,需要挂载到文件夹才可以。

挂载方式:

  1. 手动挂载
  2. 开机挂载
  3. 自动挂载

linux 磁盘分区与格式化

一、基本分区管理

1.1、linux磁盘表示方法介绍

硬盘命名方式
OS IDE(并口) SATA(串口) SCSI
CentOS6 /dev/hda /dev/sda /dev/sda
CentOS7 /dev/sda /dev/sda /dev/sda
CentOS8 /dev/sda /dev/sda /dev/sda
磁盘设备的命名

/dev/sda2

s=硬件接口类型(sata/scsi),d=disk(硬盘),a=第1块硬盘(b,第二块),2=第几个分区
/dev/hd h=IDE硬盘 /dev/hdd3
/dev/vd v=虚拟硬盘 /dev/vdf7

HP服务器硬盘

/dev/cciss/c0d0
/dev/cciss/c0d0p1 c0第一个控制器, d0第一块磁盘, p1分区1
/dev/cciss/c0d0p2 c0第一个控制器, d0第一块磁盘, p2分区2

1.2、磁盘分区

1)、磁盘划分思路

  • 进入分区表 新建分区
  • 更新分区表<刷新分区表>
  • 格式化分区——>文件系统

2)、磁盘分区

fdisk命令

fdisk磁盘分区命令fidsk  [命令选项] [参数]命令选项-l   list 列出磁盘分区-u   与-l一起使用,显示分区的相关信息fdisk /dev/sda    为/dev/sda分区m :显示菜单和帮助信息a :活动分区标记/引导分区d :删除分区l :显示分区类型n :新建分区p :显示分区信息q :退出不保存t :设置分区号v :进行分区检查w :保存修改x :扩展应用,高级功能

分区前了解设备信息

# lsblk		查看块设备# df -h  查看正在挂载的设备情况# blkid  打印某个已经格式化分区的UUID# fdisk -l		查看当前系统的所有设备分区情况# fdisk  /dev/sdb[root@zutuanxue ~]# fdisk  -l /dev/sdb硬盘容量 = 柱面数 × 盘面数(磁头数) × 扇区数 × 扇区大小(一般为512字节)Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors	磁盘空间统计,大小和扇区数量几何属性:255 个磁头, 63 个扇区/磁道, 2610 个柱面 ###此行内容只有在使用fdisk分区时,使用c命令加上与dos兼容的标记时才会出现,这里面所提到的磁头等数量与磁盘中的物理寻址和逻辑块寻址相关,而且它们都是逻辑地址,产生访问时,磁盘控制器会把这些确定的逻辑地址转换为实际的物理地址;对于我们来讲这几个数值可以帮助我们计算磁盘空间的大小以及一个磁柱的大小,比如说 ##一个磁柱的容量=255x63x512=8225280(约8M空间)单元:扇区 / 1 * 512 = 512 字节扇区大小(逻辑/物理):512 字节 / 512 字节I/O 大小(最小/最佳):512 字节 / 512 字节磁盘标签类型:dos磁盘标识符:0x178c5f83 设备       启动    起点     末尾     扇区 		大小 Id 类型/dev/sda1  *       2048  2099199  2097152   1G 83 Linux/dev/sda2       2099200 41943039 39843840  19G 8e Linux LVM命令(输入 m 获取帮助):

fdisk分区总结
命令缺点:单个分区不能超过2T 超过的话需要用parted命令
在linux 下大磁盘的分区不能再采用fdisk了,MBR分区表只支持2T磁盘,所以大于2T的磁盘必须使用GPT分区表。

3)、磁盘格式化

格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化,而对软盘的格式化则通常同时包括这两者。

-L 标签名
-V : 详细显示模式
-t : 给定档案系统的型式,Linux 的预设值为 ext2
-c : 在制做档案系统前,检查该partition 是否有坏轨
-l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
-b : 给定 block 的大小

关于block and inode  dentry
实验发现这句话不对
block越大,inode越少,适合存储大文件的文件系统;block越小,inode越多,适合存储文件多而小的文件系统。


磁盘分区格式化
mkfs.ext4 /dev/sda3

注意

MBR分区表最多允许4个主分区,或者3个主分区+1个扩展分区

扩展分区不能直接存储数据

扩展分区的大小决定了所有逻辑分区的大小,逻辑分区的编号从5开始

删除扩展分区后下面的逻辑分区都被删除

分完区后需要手动刷新分区表,如果刷新不成功需要重启操作系统

创建分区的时候尽可能注意分区序号的连续性


linux分区挂载

磁盘在linux中经过分区、格式化后是无法直接使用的,因为该分区在系统中是以一个设备文件的形式存在的。我们如果希望使用这个磁盘分区还得经过最后一步,就是将这个分区设备挂载到系统中的某个文件夹下。这样你往这个挂载文件夹里存东西其实即使往分区里存东西了。
接下来我们来看看linux下挂载磁盘分区的方式

  • 手动挂载
  • 开机自动挂载
  • 触发挂载

一、手动挂载

mount挂载命令

mount - mount a filesystem命令语法mount device dir命令选项-a   挂载所有文件系统,参考文件 /etc/fstab-l   显示当前挂载-t   文件系统类型-o   指定挂载权限##用法说明mount   [options]     需要挂载的设备     挂载点特点:系统重启后需要重新挂载;手动卸载后需要手动挂载-o:挂载选项	ro,sync,rw,remount-t:文件系统类型mount -t nfs=mount.nfsmount -t cifs=mount.cifs

挂载分区演示

#案列1:以只读的方式重新挂载/u02分区[root@zutuanxue ~]# mount -o remount,ro /u02		//可以是挂载点也可以是设备remount:重新挂载一个正在挂载的设备# mount -o remount,ro /dev/sdb1		# mount -o remount,ro /u01注意:后面可以根挂载点也可以跟设备本身#案例2: 如果希望将本机的某个文件夹挂到另一个文件夹mount -o bind /etc /opt/data3

设备表示方法:

  • 设备文件
  • 设备UUID
  • 设备的卷标
#设备文件:/dev/sdb/dev/sdb1#通过UUID表示设备[root@zutuanxue ~]# blkid /dev/sdb1				//查看设备的UUID和文件系统类型/dev/sdb1: UUID="96b67b7b..." TYPE="xfs" PARTUUID="80e196f2-01"[root@zutuanxue ~]# blkid /dev/sdb2/dev/sdb2: UUID="6821-049E" TYPE="vfat" PARTUUID="80e196f2-02"#通过卷标表示设备#不同类型分区卷标管理与查看ext*设置&查看卷标[root@zutuanxue ~]# e2label /dev/sdb1 DISK1			ext*设置卷标[root@zutuanxue ~]# e2label /dev/sdb1						ext*查看卷标xfs设置&查看卷标[root@zutuanxue ~]# xfs_admin -L DISK1 /dev/sdb1	xfs设置卷标[root@zutuanxue ~]# xfs_admin -l /dev/sdb1				xfs查看卷标label = "DISK1"vfat设置&查看卷标[root@zutuanxue ~]# dosfslabel /dev/sdb2 hello[root@zutuanxue ~]# dosfslabel /dev/sdb2也可以使用blkid查看卷标[root@zutuanxue ~]# blkid /dev/sdb1/dev/sdb1: LABEL="DISK1" UUID="96.." TYPE="xfs" PARTUUID="80..-01"[root@zutuanxue ~]# blkid /dev/sdb2/dev/sdb2: LABEL="disk2" UUID="6..." TYPE="vfat" PARTUUID="8e.2-02"

umount设备卸载命令
命令详解

umount - 卸载文件系统umount 设备挂载点|设备源-l  懒惰卸载

命令用法演示

卸载设备:umount[root@zutuanxue ~]# umount /u01[root@zutuanxue ~]# umount /dev/sdb2

二、开机自动挂载:

自动挂载 /etc/fstab文件
特点:系统开机或重启会自动挂载;手动卸载后,使用mount -a自动挂载

文件内容格式:要挂载的资源路径	挂载点	文件系统类型	挂载选项	dump备份支持  文件系统检测UUID=289370eb-9459-42a8-8cee-7006507f1477   /      ext4    defaults        1 1#字段说明1段:挂载的设备(磁盘设备的文件名或设备的卷标或者是设备的UUID)2段:挂载点(建议用一个空目录),建议不要将多个设备挂载到同一个挂载点上3段:文件系统类型(ext3、ext4、vfat、ntfs(安装软件包)、swap等等)4段:挂载选项dev/nodev		被挂载的设备上的设备文件,是否被识别为设备文件async/sync  异步/同步 同步利于数据保存 异步利于提高性能auto/noauto     自动/非自动:rw/ro   读写/只读:exec/noexec     被挂载设备中的可执行文件是否可执行remount     重新挂在一个已经挂载的文件系统,常用于修改挂载参数user/nouser     允许/不允许其他普通用户挂载:suid/nosuid     具有/不具有suid权限:该文件系统是否允许SUID的存在。usrquota    这个是在启动文件系统的时候,让其支持磁盘配额,这个是针对用户的。grpquota    支持用户组的磁盘配额。....defaults 同时具有rw, dev, exec,  async,nouser等参数。更多挂载选项可以通过 man mount  -o 命令选项可以找到详细信息5段:是否支持dump备份。//dump是一个用来备份的命令,0代表不要做dump备份,1代表要每天进行dump的动作,2也代表其他不定日期的dump备份。通常这个数值不是0就是1。数字越小优先级越高。6段:是否用 fsck 检验扇区。//开机的过程中,系统默认会用fsck检验文件系统是否完整。0是不要检验,1表示最先检验(一般只有根目录会设定为1),2也是要检验,只是1是最先,2是其次才进行检验。# fsck -f /dev/sdb2		强制检验/dev/sdb2上文件系统说明:要挂载的资源路径可以是文件系统的UUID,设备路径,文件系统的标签 ,光盘镜像文件(iso),亦或是来自网络的共享资源等

三、自动挂载 Automount:

特点:挂载是由访问产生;卸载是由超时产生;依赖于后台的autofs服务

思路:

  1. 所有的监控都是由一个程序完成 autofs
  2. 服务启动后才会监控挂载的设备
  3. 修改配置文件来指定需要监控的设备

案例演示
需求:让系统自动挂载/dev/sdb2设备,如果2分钟没有被用自动卸载

步骤:
1)安装autofs软件
[root@zutuanxue ~]# rpm -q autofs
package autofs is not installed
[root@zutuanxue ~]# dnf install autofs

[root@zutuanxue ~]# rpm -q autofs
autofs-5.1.4-29.el8.x86_64
2)修改配置文件(指定需要监控的设备和挂载的目录)
vim /etc/auto.master		//定义一级挂载点/u01和子配置文件
/u01    /etc/auto.test	-t 120 或者 --timeout 120  单位秒   (设置超时时间去卸载)

vim /etc/auto.test			//子配置文件自己创建,定义二级挂载点和需要挂载的设备
test  -fstype=ext4,ro   :/dev/sdb2


3)重启服务
[root@zutuanxue ~]# systemctl restart autofs

4)测试验证
[root@zutuanxue ~]# ls /u01/test
[root@zutuanxue ~]# df -h


后续补充:
如果想要将/dev/sdb2挂载到/u01下,怎么做?
vim /etc/auto.master
/-		/etc/auto.test

vim /etc/auto.test
/u01	-fstype=ext4 :/dev/sdb2

LVM逻辑卷介绍

在分区的时候,每个分区应该分多大是令人头疼的,而且随着长时间的运行,分区不管你分多大,都会被数据给占满。当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。

虽然现在有很多动态调整磁盘的工具可以使用,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解决问题。

因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。那么我们可以通过逻辑盘卷管理(LVM,Logical Volume Manager)的方式来非常完美的实现这一功能。

解决思路:将所有可用存储汇集成池,当池中某个分区空间不够时就会从池中继续划分空间给分区,池中空间不够就可以通过加硬盘的方式来解决。

一、逻辑卷介绍

逻辑卷(LVM):它是Linux环境下对磁盘分区进行管理的一种机制,它是建立在物理存储设备之上的一个抽象层,优点在于灵活管理。
特点:
1、动态在线扩容
2、离线裁剪
3、数据条带化
4、数据镜像

二、名词解释:

lvm.png

  • 物理卷
    物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数
  • 卷组
    LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
  • 逻辑卷
    LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
  • PE
    每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
  • LE
    逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

三、逻辑卷使用流程

真实的物理设备—->物理卷(pv)—->卷组(vg)—->逻辑卷(lv)——>逻辑卷格式化—->挂载使用


逻辑卷常用命令

一、物理卷管理

1.1、物理卷的创建:pvcreate命令

pvcreate    [命令选项]    [参数]将物理分区转换为物理卷命令选项-f:强制创建物理卷,不需要用户确认;-u:指定设备的UUID;-y:所有的问题都回答“yes”;-Z:是否利用前4个扇区。

1.2、物理卷的移除:pvremove命令

pvremove    [命令选项]    [参数]将物理卷转换为普通linux分区命令选项-d  调试模式-f  强制删除-y  对提问回答“yes”

1.3、物理卷查看命令:pvscan

pvs     显示PV简况pvdisplay   显示PV详细信息

1.4、物理卷扫描命令:pvscan

pvscan 扫描pv设备

删除物理卷: pvremove

# 删除PV sdb1 sdc1[root@zutuanxue ~]# pvremove /dev/sdb1 /dev/sdc1

二、卷组管理

将多个物理卷组成一个卷组,形成一个存储池

2.1、卷组创建:vgcreate命令

# 将pv sdb1 sdc1创建成卷组VG1000  PE大小为32M[root@zutuanxue ~]# vgcreate -s 32 vg1000 /dev/sdb1 /dev/sdc1

2.2、删除卷组中的PV:vgreduce命令

# 将vg1000卷组中的PV sdb1删除[root@zutuanxue ~]# vgreduce /dev/vg1000 /dev/sdb1

2.3、扩容卷组:vgextend命令

# 将pv sdb1 加入卷组vg1000[root@zutuanxue ~]# vgextend /dev/vg1000 /dev/sdb1

2.4、删除卷组:vgremove命令

# 删除vg1000卷组[root@zutuanxue ~]# vgremove /dev/vg1000/

三、逻辑卷管理

3.1、逻辑卷创建:lvcreate命令

# 从卷组vg1000上创建一个lv99的逻辑卷,容量为3G。[root@zutuanxue ~]# lvcreate -n lv99 -L 3G /dev/vg1000

3.2、逻辑卷扩容: lvextend命令

# 注意扩容顺序,不能颠倒# a、扩容逻辑卷[root@zutuanxue ~]# lvextend -L 3.5G /dev/vg1000/lv99# b、扩容文件系统[root@zutuanxue ~]# resize2fs /dev/vg1000/lv99

3.3、逻辑卷缩小:lvreduce命令

# 注意扩容顺序,不能颠倒# a、扫描逻辑卷文件系统,清晰该逻辑卷的使用情况,注意只能缩未使用的空间[root@zutuanxue ~]# e2fsck -f /dev/vg1000/lv99# b、缩小文件系统[root@zutuanxue ~]# resize2fs /dev/vg1000/lv99 2G# c、缩小逻辑卷[root@zutuanxue ~]# lvreduce -L 2G /dev/vg1000/lv99 (lvresize)

3.4、逻辑卷移除

#remove LVM
# 卸载分区
[root@zutuanxue ~]# umount /dev/vg1000/lv99
# 删除逻辑卷
[root@zutuanxue ~]# lvremove /dev/vg1000/lv99

注意:

PE 和 LE的说明及应用策略

PE(physicalextent)
每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

LE(logicalextent)
逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

设置使用大小为4MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充 或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组 时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数


linux磁盘管理-RAID介绍

一、RAID介绍

RAID(Redundant Array of Independent Disk 独立冗余磁盘阵列)技术是加州大学伯克利分校1987年提出,最初是为了组合小的廉价磁盘来代替大的昂贵磁盘,同时希望磁盘失效时不会使对数据的访问受损失而开发出一定水平的数据保护技术。RAID就是一种由多块廉价磁盘构成的冗余阵列,在操作系统下是作为一个独立的大型存储设备出现。RAID可以充分发挥出多块硬盘的优势,可以提升硬盘速度,增大容量,提供容错功能,能够确保数据安全性,易于管理的优点,在任何一块硬盘出现问题的情况下都可以继续工作,不会 受到损坏硬盘的影响。

二、常见的RAID级别

2.1、 RAID0

raid0.png

RAID0特点:

  • 至少需要两块磁盘
  • 数据条带化分布到磁盘,高的读写性能,100%高存储空间利用率
  • 数据没有冗余策略,一块磁盘故障,数据将无法恢复
  • 应用场景:
    • 对性能要求高但对数据安全性和可靠性要求不高的场景,比如音频、视频等的存储。

2.2、 RAID1

raid1.png

RAID1特点:

  • 至少需要2块磁盘
  • 数据镜像备份写到磁盘上(工作盘和镜像盘),可靠性高,磁盘利用率为50%
  • 读性能可以,但写性能不佳
  • 一块磁盘故障,不会影响数据的读写
  • 应用场景:
    • 对数据安全可靠要求较高的场景,比如邮件系统、交易系统等。

2.3、 RAID5

raid5.png

RAID5特点:

  • 至少需要3块磁盘
  • 数据条带化存储在磁盘,读写性能好,磁盘利用率为(n-1)/n
  • 以奇偶校验(分散)做数据冗余
  • 一块磁盘故障,可根据其他数据块和对应的校验数据重构损坏数据(消耗性能)
  • 是目前综合性能最佳的数据保护解决方案
  • 兼顾了存储性能、数据安全和存储成本等各方面因素(性价比高)
  • 适用于大部分的应用场景

2.4、 RAID6

raid6.png

RAID6特点:

  • 至少需要4块磁盘
  • 数据条带化存储在磁盘,读取性能好,容错能力强
  • 采用双重校验方式保证数据的安全性
  • 如果2块磁盘同时故障,可以通过两个校验数据来重建两个磁盘的数据
  • 成本要比其他等级高,并且更复杂
  • 一般用于对数据安全性要求非常高的场合

2.5、 RAID10

raid10.png

RAID10特点:

  • RAID10是raid1+raid0的组合
  • 至少需要4块磁盘
  • 两块硬盘为一组先做raid1,再将做好raid1的两组做raid0
  • 兼顾数据的冗余(raid1镜像)和读写性能(raid0数据条带化)
  • 磁盘利用率为50%,成本较高

三、RAID总结

类型 读写性能 可靠性 磁盘利用率 成本
RAID0 最好 最低 100% 较低
RAID1 读快;写一般 50%
RAID5 读:近似RAID0 写:多了校验 RAID0<RAID5<RAID1 (n-1)/n RAID0<RAID5<RAID1
RAID6 读:近似RAID0 写:多了双重校验 RAID6>RAID5 RAID6<RAID5 RAID6>RAID1
RAID10 读:RAID10=RAID0 写:RAID10=RAID1 50% 最高

四、RAID分类

软RAID

软RAID运行于操作系统底层,将SCSI或者IDE控制器提交上来的物理磁盘,虚拟成虚拟磁盘,再提交给管理程序来进行管理。软RAID有以下特点:

  • 节省成本,系统支持就可以使用相应功能
  • 占用内存空间
  • 占用CPU资源
  • 如果程序或者操作系统故障就无法运行

硬RAID

通过用硬件来实现RAID功能的就是硬RAID,独立的RAID卡,主板集成的RAID芯片都是硬RAID。RAID卡就是用来实现RAID功能的板卡。硬RAID的特点:

  • 硬RAID有独立的运算单元,性能好
  • 可能需要单独购买额外的硬件
  • 不同RAID卡支持的功能不同,需要根据自己的需求选择

centos8启动流程

一、BIOS与UEFI

BIOS

Basic Input Output System的缩写,翻译过来就是“基本输入输出系统”,是一种业界标准的固件接口,第一次出现在1975年,是计算机启动时加载的第一个程序,主要功能是检测和设置计算机硬件,引导系统启动。

UEFI
Unified Extensible Firmware interface的缩写,翻译过来为统一可扩展固件接口,是BIOS的替代方案,前身是Intel在1998年开始开发的Inter Bot Initiative,后来被命名为可扩展固件接口(Extensible Firmware Interface EFI),2005年交由统一可扩展固件接口论坛,并更名为UEFI

UEFI的优势

1、支持硬盘容量更大:相比于传统BIOS+MBR只能支持2048G的硬盘分区和4个主分区相比,UEFI+GPT不会受到硬盘容量大小、分区数量的限制,不过在Windows系统上由于系统的限制,支持最多128个GPT磁盘分区,最大分区18EB,并且GPT格式是没有主分区和逻辑分区这个概念的

2、容错特性:UEFI是模块化构建,比BIOS容错和纠错特性强。

3、鼠标操作:UEFI内置图形驱动,可以提供原生分辨率的图形环境,用户进入后可以使用鼠标调整。

4、扩展性强:UEFI包含一个可编程的开放接口,厂商利用这个接口可以对功能进行扩展,如:备份和诊断

5、支持联网:在不进入操作系统的前提下就可以通过网络进行远程故障诊断

二、CentOS8启动流程

现代计算机是软件与硬件的复杂组合,从接通电源开始,到可以登录到系统中,需要大量的软件和硬件的配合,我们一起来了解一下CentOS8的x86_64系统在启动过程中所涉及的任务,虚拟机的流程也是大致相同的,但是某些与硬件相关的步骤是由虚拟机的相关程序在软件中处理的。

1、接通电源

系统固件(UEFI或BIOS初始化)运行开机自检,并初始化部分硬件

2、系统固件搜索可启动设备

启动设备可能是UEFI启动固件中配置的,也可能是按照BIOS中配置的顺序搜索所有磁盘上的主启动记录(MBR)

3、读取启动加载器(boot loader)

系统固件会从MBR中读取启动加载器,然后将控制权交给启动加载器,在CentOS8中启动加载器为GRUB2

4、grub.cfg

GRUB2将从/boot/grub2/grub.cfg文件中加载配置并显示一个菜单,在这个菜单中可以选择要启动的内核,我们可以使用grub2-mkconfig命令配合/etc/grub.d/目录和/etc/default/grub文件生成grub.cfg文件。

[root@zutuanxue ~]# cd /boot/grub2/[root@zutuanxue grub2]# lsdevice.map  fonts  grub.cfg  grubenv  i386-pc[root@zutuanxue grub2]# pwd/boot/grub2

5、initramfs

在选择内核或到达超时时间后,启动加载器会从磁盘加载内核(vmlinuz)和initramfs,并将它们放入内存中,initramfs中包含启动时所有必要硬件的内核模块(驱动)和初始化脚本等,使用lsinitrd和dracut命令配合/etc/dracut.conf.d/目录可以查看和配置initramfs文件

[root@zutuanxue grub2]# lsinitrd  | moreImage: /boot/initramfs-4.18.0-80.el8.x86_64.img: 27M##可以在回显中看到系统的主要目录,包括/etc /usr /dev /lib /lib64等

6、启动加载器放权

启动加载器将控制权交给内核

7、内核初始化

内核会在initramfs中寻找硬件的相关驱动并初始化相关硬件,然后启动/usr/sbin/init(PID=1),在CentOS8中/sbin/init是systemd的链接

[root@zutuanxue grub2]# ll /sbin/init lrwxrwxrwx. 1 root root 22 5月  23 2019 /sbin/init -> ../lib/systemd/systemd[root@zutuanxue grub2]# find / -name systemd/usr/lib/systemd/systemd

8、启动initrd.target并挂载

systemd会执行initrd.target包含的所有单元,并将根文件系统挂载到/sysroot/目录,在initrd.target启动时的依赖单元,会按照/etc/fstab设置对硬盘进行挂载

9、切换根文件系统

内核将根文件系统从initramfs切换为/sysroot(硬盘上的根文件系统),systemd会找到磁盘上安装的systemd并自动重新执行

10、启动相应目标

硬盘上安装的systemd会查找从内核命令行传递的目标或是系统中配置的默认目标并启动对应单元后就可以进入到对应的登录界面。默认目标是/etc/systemd/system/default.target,

注意:
字符界面:

如果默认目标为multi-user.target(字符界面),systemd会先执行sysinit.target初始化系统之后执行basic.target与getty.target准备基本系统环境和终端,再启动multi-user.target下的相关应用,同时执行/etc/rc.d/rc.local(需要执行权限)与与登录服务(systemd-logind.service),开启登录界面

[root@zutuanxue ~]# systemctl list-dependencies multi-user.target | grep targetmulti-user.target● ├─basic.target● │ ├─paths.target● │ ├─slices.target● │ ├─sockets.target● │ ├─sysinit.target● │ │ ├─cryptsetup.target● │ │ ├─local-fs.target● │ │ └─swap.target● │ └─timers.target● ├─getty.target● ├─nfs-client.target● │ └─remote-fs-pre.target● └─remote-fs.target●   └─nfs-client.target●     └─remote-fs-pre.target

图形界面:

在multi-user.target的基础上执行graphical.target启动所需要的服务,开启图形界面

[root@zutuanxue ~]# systemctl list-dependencies graphical.target | grep targetgraphical.target● └─multi-user.target●   ├─basic.target●   │ ├─paths.target●   │ ├─slices.target●   │ ├─sockets.target●   │ ├─sysinit.target●   │ │ ├─cryptsetup.target●   │ │ ├─local-fs.target●   │ │ └─swap.target●   │ └─timers.target●   ├─getty.target●   ├─nfs-client.target●   │ └─remote-fs-pre.target●   └─remote-fs.target●     └─nfs-client.target●       └─remote-fs-pre.target

三、运行级别切换与相关配置文件

运行级别切换

通过前面的课程我们了解到CentOS8在启动过程中需要判断对应的运行级别,在不同的运行级别中会启动不同的单元,那么运行级别如何切换呢?

在CentOS8中运行级别的设置涉及到下面几个命令

systemctl isolate	.../init [0-6]	切换运行级别systemctl	get-default				查看当前的默认运行级别systemctl set-default ...		设置默认的运行级别runlevel										查看之前的运行级别和当前的运行级别

运行级别对照

[root@localhost system]# cd /usr/lib/systemd/system[root@localhost system]# ll runlevel*.targetrunlevel0.target -> poweroff.targetrunlevel1.target -> rescue.targetrunlevel2.target -> multi-user.targetrunlevel3.target -> multi-user.targetrunlevel4.target -> multi-user.targetrunlevel5.target -> graphical.targetrunlevel6.target -> reboot.target

所以当我们使用init [0-6]切换运行级别的时候系统执行的是systemctl isolate runlevel[0-6].target

[root@zutuanxue ~]# runlevel #查看运行级别N 5[root@zutuanxue ~]# init 3	#切换到字符界面[root@zutuanxue ~]# runlevel 	#查看运行级别5 3[root@zutuanxue ~]# systemctl isolate graphical.target 	#切换到图形界面[root@zutuanxue ~]# runlevel 3 5#########emergency.target[root@zutuanxue ~]# systemctl isolate emergency.target 

image20191224152253190.png

注意:此为紧急模式,用于紧急处理系统的错误,无法使用rescue.target时,可以尝试使用此模式。

四、Boot Loader与GRUB2

前面的课程我们了解的CentOS8的启动流程,在这个流程中有一个叫启动加载器,也就是boot loader的工具,如果没有这个boot loader就无法加载内核。在CentOS8中使用的是启动加载器是Grub2,在了解Grub2之前,我们先聊一下boot loader

4.1、Boot Loader的两个阶段

我们知道在BIOS或者UEFI加载完成之后,会到MBR中读取boot loader,这个boot loader可以让用户选择加载的内核并且移交系统的控制权限等,而加载内核只能通过boot loader,但是boot loader在MBR中,这个MBR是硬盘的第一个扇区,一个扇区的大小是512字节,boot loader的大小只有446字节,即便是GPT磁盘也没有足够的空间存储boot loader所包含的内容,所以为了避免空间的限制,导致无法引导系统正常启动的问题,Linux将boot loader的工作过程分为了两步。

stage1 执行boot loader的主程序
主程序必须安装在MBR或者是启动扇区,由于空间限制,MBR或启动扇区仅存放最小化的boot loader,并不会存放相关的配置文件

stage2 通过主程序加载配置文件
通过boot loader的主程序加载所有相关的配置文件,这些配置文件中包括定义文件系统类型的和CentOS8中的grub.cfg文件,而这些文件通常都存放在/boot当中

[root@zutuanxue ~]# ll -F /boot/grub2/总用量 32-rw-r--r--. 1 root root    64 12月 13 21:50 device.mapdrwxr-xr-x. 2 root root  4096 12月 13 21:50 fonts/-rw-r--r--. 1 root root  5032 12月 13 21:50 grub.cfg-rw-r--r--. 1 root root  1024 12月 13 21:50 grubenvdrwxr-xr-x. 2 root root 12288 12月 13 21:50 i386-pc/device.map		设备对应文件,用来帮助系统判断磁盘与设备文件的对应关系fonts					开机过程中用到的字体文件grub.cfg			grub2的主配置文件grubenv				grub环境区块文件大小为1K,用来记录GRUB环境变量i386-PC				针对x86架构的电脑所需要的相关模块,包括电源管理支持,文件系统支持等模块

在这些文件中最重要的就是grub.cfg文件,以及文件系统支持的相关模块

4.2、GRUB2

GRUB与LILO
目前为止,linux下的启动加载器有两种,一种是LILO另外一种就是GRUB,由于GRUB的功能更强大,支持的文件系统较多,所以越来越多的操作系统使用GRUB做为boot loader,CentOS从7开始使用了功能更为强大的GRUB2

GRUB2的优点

  • 支持更多的文件系统
  • 开机时可以手动调整启动参数
  • 动态更新配置文件,修改完配置文件后不需要重新安装

GRUB2与硬盘

由于grub2的主要任务是从硬盘当中加载内核,所以grub2必须要识别硬盘,但是grub2识别硬盘的方式与linux系统识别的方式还是有些区别的。在Linux系统中,硬盘一般会被识别为类似sda1这种形式,而在grub2中硬盘会统一被识别为hd的设备,排序方式全部是用数字进行排序,而不是用字母加数字的混合形式。这么做的目的是为了定义grub2的查找内核时的顺序。如:

hd0,1		搜索第一块硬盘的第一个分区hd0,msdos1	搜索第一块MBR硬盘的第一个分区hd0,gpt1	搜索第一块GPT磁盘的第一个分区简单来说,两个数字,第一个数字表示硬盘序号,第二个数字表示分区序号

grub2配置文件

了解了grub2中的硬盘识别方式,我们就可以了解一下grub2的配置文件了,这个文件建议各位不要随意更改

## DO NOT EDIT THIS FILE## It is automatically generated by grub2-mkconfig using templates# from /etc/grub.d and settings from /etc/default/grub#此部分内容提示我们不要编辑这个文件,此文件是有grub2-mkconfig命令自动建立的,相关模板与设置存放在/etc/grub.d/目录以及/etc/default/grub中,也就是说grub.cfg文件的内容会调用/etc/grub.d目录下的内容,如果需要修改的话需要调整/etc/default/grub文件

基本上grub2不希望用户去修改grub.cfg这个文件,如果需要调整的话需要通过修改其它文件并配合grub2-mkconfig命令来生成新的grub.cfg文件,但是各位还是要了解一下这个文件的大致格式

/etc/default/grub与/etc/grub.d/

在前面的课程中我们知道了grub2的配置文件是grub.cfg,但是此文件内容比较复杂,且官方不建议我们手动修改,如果需要修改的话需要通过/etc/default/grub文件以及/etc/grub.d/目录内的内容来实现,那我们一起来看一下

/etc/default/grub

[root@zutuanxue ~]# vim /etc/default/grub
GRUB_TIMEOUT=5	定义在启动菜单默认的等待时间,单位是秒
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"		定义获取操作系统名称的方式
GRUB_DEFAULT=saved	定义开机时默认启动的项目,可以是数字,也可以是标题名称,(这个标题就是开机时看到的那个标题),还可以是saved(表示默认启动上次启动成功的操作系统)	
GRUB_DISABLE_SUBMENU=true	是否隐藏子菜单
GRUB_TERMINAL_OUTPUT="console"	定义启动时的界面使用哪种终端输出,值包含console,serial,gfxterm,vga_text等
GRUB_CMDLINE_LINUX="resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"	定义额外的启动参数
GRUB_DISABLE_RECOVERY="true"	是否启用修复模式
GRUB_ENABLE_BLSCFG=true	是否启用bootloader规范

修改完成之后需要使用
grub2-mkconfig -o /boot/grub2/grub.cfg,重新生成配置文件

/etc/grub.d/

00_header 设置默认参数

00_tuned 额外调整的值

01_menu_auto_hide 与菜单隐藏相关的设置

01_users 与用户相关的设置

10_linux 与内核相关的设置

20_ppc_terminfo 与终端相关的设置

20_linux_xen 与虚拟化相关的设置

30_os-prober 与操作系统检测相关

30_uefi-firmware 与UEFI启动设置相关,需要硬件支持

40_custom&41_custom 自定义设置

注:这些文件会按照数字的顺序由小到大加载

linux启动常见问题

一、忘记root密码

日常生活中,我们会接触到很多账号和密码,而这些账号和密码我们不能都很好的记忆,对于linux也是一样的,如果root密码忘记了怎么办?岂不是都无法登陆使用Linux了?现在我就教各位,在不知道root密码的前提下,如何给root设置一个新的密码

step 1 重启你的linux系统,在下图这个界面中按“E”

image20200112153327155.png

step 2 将光标移动到开头为linux这行的行位,删除rhgb quiet并添加rd.break

image20200112153507293.png

step 3 按键盘上的ctrl+x组合键继续启动linux,等待出现提示符后执行mount命令

image20200112153640666.png

step 4 执行chroot命令将根目录切换为/sysroot(因为硬盘上的数据都存放在/sysroot目录中)

image20200112153755987.png

step 5 看到提示符发生变化后执行passwd命令修改root密码

image20200112153933632.png

注:由于字符编码问题可能会出现不能正常显示的情况,如:

![image-20200112154028844](C:\Program Files\Typora\第九章 启动流程.assets\image-20200112154028844.png)没有关系,不影响密码的设置

step 6 修改完密码之后,建立autorelabel文件

image20200112154548103.png

step 7 输入两次exit退出,系统会继续启动

image20200112154627704.png

启动完成之后就可以用我们刚才设置的账号及密码进行登录了

二、GRUB2加密

前面我们知道了,如果不知道root密码的话,也是可以以root身份登录系统,那这样岂不是很危险?所以GRUB2又提供了一种保护机制,这种保护机制就是为grub2设置密码,如果用户不知道这个密码,是无法编辑启动时所看到的那个菜单的,这样也就组织了root密码被修改的问题,那么如何为grub2加密呢?

setp 1 以root用户的身份登录系统并打开终端,在终端中输入grub2-setpassword命令,系统就会提示我们设置一个密码,这个密码就是grub2的密码

image20200112155155252.png

step 2 重启系统,验证是否加密成功
image20200112155226916.png

step 3 在启动菜单界面按”E”编辑内容时,系统会提示输入用户名和密码,这个用户名是root,密码就是我们前面设置的grub2密码

image20200112155403705.png

注意:密码在输入的时候是不会显示任何信息的

step 4 如果密码输入错误就会返回启动菜单界面

image20200112155529537.png

三、删除/修改GRUB2密码

前面我们学会了如何为grub2设置密码,这样能有效的避免root用户密码被修改,但是如果我忘记了grub2的密码怎么办呢?

如果忘记了grub2密码,你可以让系统正常启动,然后用root用户登录系统,登录完成后使用grub2-setpassword命令重新设置一个grub2密码,或者删除/boot/grub2/user.cfg文件将密码删除。

但是如果连root密码也不知道呢?这个时候,我们就需要用到修复模式了

step 1 插入系统光盘,选择从光盘启动

image20200112160255030.png

step 2 选择故障排除(troubleshooting)

image20200112160449625.png

step 3 选择修复系统

image20200112160639592.png

step 4 启动完成后,系统提示我们,修复模式会查找硬盘上是否安装有Linux系统,并将其挂载到/mnt/sysimage目录下,我们希望它如何操作,选择1是以读写的形式挂载,选择2是以只读的形式挂载,选择3是直接获取一个shell,选择4是重启,这里面我们选择1

image20200112161205845.png

step 5 稍微等一下之后系统会提示我们已经挂载到/mnt/sysimage目录下了,按“enter”会得到一个shell

image20200112161319135.png

step 6 执行chroot /mnt/sysimage将工作目录切换到硬盘中

image20200112161421279.png

step 7 接下来就像没有忘记root密码一样,可以重新设置grub2密码,或者删除user.cfg文件了,然后输入两次exit重启

image20200112161615836.png

image20200112161628253.png


评论
  目录