网络管理与自有服务管理

数据通信网络基本概念

以太网传输介质标识

传输机制(信号)

  • Base(基带)
  • Broad(宽带)
  1. 传输模式

光纤

  1. 传输距离
  • 单模 长距离 几十甚至上百公里
  • 多模 短距离 在几公里范围内,适用于局域网(LAN)
  1. 光源
  • 单模: 使用激光作为光源,分布式反馈激光器
  • 多模:使用 LED,成本相对较低。
  1. 带宽
  • 单模:带宽更高和更大的信息容量
  • 多模:数据传输速率相对较低

TCP/IP 常见协议

  • TCP/IP 协议栈定义了一系列的标准协议.

AP 设备

IEEE 2009 年发布

  1. 高速度 最高理论数据 600Mbps,实际 150–450Mbps
  2. 兼容性 向下兼容 802.11 a/b/g 标准。

802.11ac

IEEE 2013 年发布。

  1. 速度 理论峰值 6.93Gbps 实际传输速度在 433M–1.73G 之间

IP 地址分类及子网划分

IP 地址表示

  • 一个 IPv4 地址有 32bit
  • IPv4 地址通常采用“点分十进制”表示。

IP 地址寻址

  • 网络部分:用来标识一个网络,代表 IP 地址所属网络
  • 主机部分:用来区分一个网络内的不同主机,能唯一标识网段上的某台设备。

IP 地址分类(有类编址)

  • 为了方便 IP 地址的管理及组网,IP 地址分为五类:

A 类

0NNNNNNN 0.0.0.0 —— 127.255.255.255 127.0.0.1 测试地址

1 —— 126 A 类地址范围

前 8bit 是网络位,后 24bit 为主机位

B 类

10NNNNNN 10000000 —— 10111111 128——191

C 类

110NNNNN 11000000 —— 11011111 192——223

D 类(组播地址)

1110NNNN 11100000 —— 11101111 223——239

E 类 (用于研究)

1111NNNN 11110000 —— 23

  • A/B/C 类默认网络掩码
    • A 类:8bit,0.0.0.0~127.255.255.255/8
    • B 类:16bit,128.0.0.0~191.255.255.255/16
    • C 类:24bit,192.0.0.0~223.223.255.255/24

IP 地址类型

  • 我们通常把一个网络号所定义的网络范围为一个网段。
  • 网络地址:用于标识一个网络。

  • 广播地址:用于向该网络中的所有主机发送数据的特殊地址。
  • 可用地址:可分配给网络中的节点或网络设备接口地址。

注意:

  • 网络地址和广播地址不能直接被节点或网络设备所使用。
  • 一个网段可用地址数量为:2^n - 2(n:主机部分的比特位数)

特殊 IP 地址

  • IP地址空间中,有一些特殊的 IP 地址,这些 IP地址有特殊的含义和作用。

子网划分

子网划分的规律:

  1. 主机范围介于网络位和广播之间
  2. 每个子网广播地址减去网络位等差相同,等差就是主机位全 1 的数
  3. 下一个子网的网络位等于前一个子网广播进一位
  4. 借主机位产生新的子网是从左往右借,借 N 位,可以产生 2^N 个子网.

CIDR(无类域间路由) 的概念:忽略 A、B、C 类的规则,定义前缀相同的一组网络为一个块,即一条路由条目。

CIDR 的优点

  • 减少了网络数目,缩小了路由选择表
  • 从网络流量、CPU 和内存方面说,开销更低
  • 对网络进行编址时,灵活性更大

linux 网络管理

获取计算机的网络信息

ifconfig 或 id address 可以简写为 ip a

解析:

ens33 是默认网卡

lo 环回网卡,127.0.0.1 作为固定 ip 代表本机

virbr0 虚拟网络接口,vmware 安装 centos7 时,会产生 virbr0 虚拟网络接口

配置网卡信息

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ff43010e-f68c-447c-acab-91ed72fb86de
DEVICE=ens33
ONBOOT=yes

参数解析:

TYPE:代表网络类型,Ethernet 以太网

BOOTPROTO=“dhcp”:IP 的获取方式,dhcp 代表通过 dhcp 协议自动获取 IP 地址,

static/none 代表手动配置 IP

NAME=“ens33”:网卡的名称,ens33

UUID=“ff43010e-f68c-447c-acab-91ed72fb86de”:网卡的 UUID 编号(一定是唯一的)

DEVICE=“ens33”:设备名称

ONBOOT=“yes”:代表网卡开机启动,yes 代表开机启动,no 代表不启动

  1. 配置动态 IP 地址
TYPE=Ethernet
BOOTPROTO=dhcp
DEVICE=ens33
ONBOOT=yes

网卡配置完成后,需重启服务

systemctl restart network
  1. 配置静态 IP地址
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.10.128
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=114.114.114.114
DNS2=8.8.8.8
DEVICE=ens33
ONBOOT=yes

这里的 GATEWAY 网卡要与你虚拟机 vmware 里保持一致

  1. 查询计算机网络状态管理
systemctl status network

自有服务管理

自有服务是一些特定的进程,一般指系统开机后自动允许的进程,当客户向这些进程发起请求,服务器上的这些进程就会自动为客户提供服务。

systemctl 管理系统服务

  1. systemctl 概述

systemctl [ 选项 ] 服务名

start 开始

restart 重启

stop 停止

status 查看状态

enable 开机启动

disable 开机不自启

reload 热重载

  1. 查看系统服务

#systemctl [ 选项 ]

**选项说明:

list-units --tpye service # 列出所有启动的服务

list-units --tpye service --all # 列出所有服务

systemctl list-units --tpye service		# 列出所有启动的服务
systemctl list-units --tpye service --all		# 列出所有服务

linux 运行级别

什么是运行级别

running Level 代表 Linux 系统的不同运行模式

CentOS7 运行级别

**7 个运行级别分别为 0~6,使用 init 级别

级别描述
0shutdown 立即关机 shutdown now
1单用户模式
2多用户模式(没有 NFS 文件共享)
3字符模式
4自定义模式
5图形模式
6重启模式

ntp 时间同步服务

network time protocal,作用是用于同步各个计算机的时间的协议

从哪寻找 NTP 服务器

NTP 授时网站:www.ntp.org.cn

NTP 时间同步操作

  1. 手工同步
ntpdate NTP服务的IP地址或域名
  1. 自动同步
systemctl start ntpd
systemctl enable ntpd

软件包管理

linux 系统下的软件包安装方式

  1. rpm 软件包安装 软件名称.rpm
  2. yum 包管理工具 yum install 软件名称 -y
  3. 源码安装 下载源代码->编译 ->安装 很麻烦,稳定

二进制软件包

二进制软件包是由源码经过编译后的包,二进制软件包是 linux 系统下默认的软件安装包。

Linux 有 2 大主流的二进制包管理系统:

  1. rpm 包管理系统 RedHat Package Manger(红帽软件包管理工具)功能强大,包括安装、升级、卸载、查询等
  2. DPKG 包管理系统 主要应用在 debian 和 ubuntu 中作用类似于应用宝、豌豆荚

获取*.rpm 软件包

  1. 去官网下载 rmp.pbone.net
  2. 从镜像文件找

查询系统中安装的 rpm 软件

rpm -qa | grep 要查询的软件名称

选项说明:

-q:query 查询

-a:all 代表所有

卸载 Centos 系统中的 rpm 软件包

rpm -e 软件名称 [ 选项 ]

选项说明:

–nodeps:代表强制卸载

rpm 软件包的安装

rpm -ivh 软件包名称.rpm

选项说明:

i:install 安装

v:显示进度条

h:表示以“#”形式显示进度条

软件包升级

rpm -Uvh 升级后的软件包名称.rpm

选项说明:

-U:Update,更新操作

rpm 包常用选项使用

-q 查询软件包

-a 查询所有软件包

-f 查询文件属于哪个软件包

-l 列出已安装软件包的文件

-e 删除已安装的软件包

案例

  1. 查看系统中已安装的所有软件包
rpm -qa
  1. 查看命令(二进制文件)是由哪个包安装的
rpm -qf /usr/sbin/ifconfig
  1. 查看已安装的软件包安装了哪些文件
rpm -ql net-tools
  1. 删除已安装的软件包
rpm -e  firefox-91.11.0-2.el7.centos.x86_64

源码安装

  1. 获取软件的源码包

可以区某个软件的官网获取,官网一般摆放的都是*.tar.gz

  1. 源码包安装
    1. 解压源码包 tar -xvf 包名 -C 指定目录
    2. 配置./configure(配置软件的安装路径,也可以不配置,不配置使用默认路径/usr/local/以软件名称命名的目录)
    3. 编译 make(软件的源代码编译称类似于 rpm 包这种可以直接安装的软件)
    4. 安装 make install(把编译好的程序进行安装到 Linux 系统)

yum 软件包安装

什么是 yum

yum(全称为 yellow dog updater,modifed)是在 RedHat、Centos、Fedora 等版中的shell 前端软件包管理器

安装难度:编译安装>rpm 安装>yum 安装(有网络+yum 源支持)

基于 rpm 包管理,可以从 Yum 源(指定服务器)自动下载 rpm 包并且安装,可以自动解决

处理依赖关系,一次性安装所有依赖的软件包。

yum 源配置

Cenos7 默认常用的 yum 源:

  • CentOS-Base.repo 网络 yum 源配置文件
  • CentOS-Debuginfo.repo 内核相关的更新包
  • CentOS-fasttrack.repo 快速通道
  • CentOS-Media.repo 本地 yum 源配置文件
  • CentOS-Vault.repo 最近版本加入老本的 yum 配置

yum 的主配置文件

yum 的主配置文件在 /etc/yum.conf

yum 的子配置文件

yum 的子配置文件的路径在/etc/yum.repos.d/ 以.repo 结尾的文件

配置 yum 源

Linux 的 yum 源有两种,一种是网络 yum 源需要连接外网才能使用,一种是本地 yum

源相当于离线的安装包仓库,不需要外网

配置网络 yum 源:
  1. 在阿里云官方镜像站(阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区)找到centos点击进入

  1. 下载新的CentOS-Base.repo 到 /etc/yum.repos.d/,找到如下命令点击复制,粘贴运行

  1. 运行yum makecache 生成缓存

  1. 在镜像站找到epel点击进入

  1. 下载新repo 到/etc/yum.repos.d/,找到如下命令点击复制,粘贴运行

  1. yum clean all 清理缓存

配置本地源:
  1. 准备本地仓库:创建挂载目录并挂载光驱到指定目录,设置开机挂载

  1. 配置本地yum源配置文件

  1. 备份原有的yum子配置文件

  1. 清理并建立元数据缓存

  1. 验证仓库

看到以上仓库标识,仓库名称,及状态,且状态不为 0(仓库中软件包的数量为 4070 个)

表示配置成功,如果为 0 则有问题!


仓库状态为 0 可能原因:

  • 仓库中是否有软件包
  • 检查挂载点是否成功被挂载 df -h
  • 配置文件未配置正确,检查配置文件,特别注意 baseurl=file:// 后面跟挂载点的绝对路径

卸载本地 yum 源
rm -rf /etc/yum.repos.d/iso.repo
umount /mnt/iso

修改/etc/rc.d/rc.local 文件

将 mount /dev/sr0 /mnt/iso 此行删除

yum 命令使用

安装软件包

yum [ 选项 ] 包名

-y 直接安装不提示

覆盖安装软件包

基本语法:

yum reinstall 软件包名

查看命令是由哪个软件包提供的

yum provides 二进制可执行文件(命令名)

搜索软件包

yum search 包名

删除软件包

yum remove 包名

yum 常用命令

yum check-update检查可以升级的 rpm 软件包
yum upgrade升级所有可以升级的 rpm 软件包
yum updateupdate 是过时命令,会包留旧包
yum update <group_name>仅升级指定的软件包组
yum update kernel kernel-source升级指定的 rpm 包,如升级内核和内核源
yum groupdate <group_name>升级组里面所有的软件包
yum downgrade <group_name>软件包降级
yum searceh 搜索匹配特定字符的 rpm 包
yum list列出仓库中所有可以安装或更新的 rpm 包
yum list updates列出仓库中所有可以安装或更新的 rpm 包
yum list installed列出所有安装的 rpm 包
yum list extras列出所有已经安装但是不在仓库的包
yum list <package_name>列出指定的软件包
yum deplist <package_name>查看程序的依赖情况
yum info列出仓库中所有可以安装或更新的 rpm 包信息
yum info <pacakage_name>获取软件包的信息
yum info updates列出仓库中所有可以更新的 rpm 包的信息
yum info installed列出所有已经安装的软件包信息
yum info extras列出所有安装但不在仓库中的软件包的信息
yum provides <file_name>列出命令是由哪个包安装的
yum grouplist列出所有软件包组
yum groupinfo <group_name>显示组信息
yum makecache更新本地缓存,常用 yum clean all
yum clean all清空 yum 源
yum history list列出历史命令(包括 ID、命令、日期和时间、操作)
yum history list start_id…end_id列出 yum 某个区间看到历史命令,例如:yum history list 1…6
yum history undo idyum history undo id 恢复到 ID 所表示的 yum 命令执行前的状态
yum history redo idyum history redo id 再次执行 ID 所表示的 yum 命令

自建 yum 本地仓库(扩展)

  1. 创建私有仓库目录
mkdir /repo
  1. 将 rpm 包同步到私有仓库目录(/repo )中

最小化安装需安装 yum -y install yum-utils

:::info
reposync 选项

常用选项:

-r:指定本地已经配置的 yum 仓库的 repo 源的名称

-p:指定下载的路径

:::

 reposync -r iso -p /repo/
  1. 将/repo 制作为本地仓库

最小化需要安装 yum -y install createrepo

:::info
createrepo 目录名

:::

createrepo /repo/
  1. 配置 yum 子配置文件
cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=repo
baseurl=file:///repo
gpgcheck=0
enabled=1
EOF
  1. 清空 yum 源
yum clean all
  1. 验证现有仓库
yum repolist

进程管理

进程概述

进程

进程就是一个运行中的程序,一个进程就是一个程序文件的 runtime 运行时。系统以进称为单位,来分配内存空间,每一个进程独享自己内存空间,彼此之间隔离,互不影响。一个程序的多进程运行模式,可以提高程序功能的并发性。

系统是以进程为单位,来分配一个独立的“内存空间”!内存空间中,存放着系统分配给该进程的相关资源。

进程的特点:
  1. 拥有唯一的 PID 进程编号,它是一个 namespace 命名空间,系统通过 PID 进程编号来区分并管理各个进程;
  2. 拥有属于自己的独享的内存空间,系统是以进程为最基本的对象来分配内存资源;
  3. 进程之间彼此隔离,互不影响;
  4. 一个进程可以创建一个或多个进程,一个进程可以服务于一个或多个程序
  5. 了解进程权限
  • 每一个进程都会有一个运行用户账户和一个运行组账户
  • 进程通过自己的运行用户账户和运行组账户来获取相应的权限。

简单看一下 linux 系统中的进程程:

线程

线程是一个进程可向 CPU 提交并执行的最大程序代码段,它是 CPU 可处理的最基本的代码处理单元。线程的意义:在单 CPU 架构中,单个 CPU 页可或许无法一次性执行全部的任务代码,因此需要将进程代码分解为线程来分片执行;在多 CPU 架构中,多线程的程序编程设计,可以充分利用多 CPU 的并发处理能力,从而提高程序的运作性能。

线程的特点:
  1. 拥有唯一的 LWP 线程编号;
  2. 一个进程最少拥有一个线程,也可以拥有多个线程;
  3. 一个进程中的多个线程,只能共享争用进程自身拥有的内存空间,不会另行获取独享的内存空间;
  4. 一个进程中的线程之间,彼此不隔离,会相互影响。

简单看一下 linux 系统中的线程:

它们属于同一个进程的不同线程

相关概念

  1. 进程之父:PID=1 的进程,就是所有其他进程的父进程,CentOS_7.x 系统中的进程之父是 systemd 进程
  2. 父子进程:一个程序至少产生一个进程,一个大程序会产生一个主进程,即父进程,然后产生多个子进程,从而可以获得更多的独立的空间。父进程衍生出来的子进程,在没有另外指定运行账户的情况下,均会继承父进程的权限。子进程可以继承父进程可继承的数据,反之则不然。
  3. 孤儿进程:就是没有父进程的进程。并不会有什么危害,每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init(1)进程或 systemd(1)进程,init(1)或 systemd(1)进程就好像是一个孤儿院,处理一切善后工作。
  4. 僵尸进程:进程在关闭过程中的一种中间状态。所有子进程在关闭之后,均会成为僵尸进程,然后等待父进程来处理,最终释放子进程 PID,如果父进程妥善处理了,就一切正常,最终释放子进程 PID。

是否有危害性:

如果父进程因为各种原因未能妥善处理,则会留下僵尸进程,从而耗费有限的 PID 标识符资源。

进程管理命令

ps 命令

ps 是显示瞬间进程的状态。静态的查看系统当中进程的信息。

:::info
语法格式: ps [ 基本选项 ] [ 列表选择项 ] [ 输出格式选项 ] [ 显示线程选项 ] [ 杂项选项 ]

基本选项:

-A:所有的进程均显示出来,与-e 具有同样的作用

-f:输出全格式(默认包含:UID、PID、PPID、C、STIME、TTY、TIME、CMD 字段

-a:显示现行终端机下的所有进程,包括其他用户的进程

-u:以用户为主的进程状态

x:通常与 a 这个参数一起使用,可列出较完整信息

L:列出所有字段名称

-o | o | --format :指定暑促字段

:::

了解重要字段含义

列出所有的字段名称:ps L

ps L

关键字描述
USER进程的运行用户账户
TTY进程的终端(切换终端的快捷按 ctrl+Alt+F1~F6,用 tty 命令查看当前终端号)TTY 为“?”时,表示不依赖任何终端运行
SID会话 ID 号
PGID进程组 ID 号
PID进程 ID 号
PPID父进程 ID 号
%CPUCPU 的占用率
%MEM内存占用率
VSZ允许进程访问的虚拟内存大小,单位 KB,包含了:swap 空间占用
RSS进程在内的实际占用大小单位 KB,包含了:可共享内存,不包含 swap 空间占用
STAT,S进程的状态
TIME进程运行的时长
COMMAND,CMD进程运行的命令
WCHAN显示进程正在等待的内核事件名称,正在运行中的进程将显示一个 [ - 破折号 ]
PRI进程优先级的当前有效值,数值越大,优先级越高,动态变化范围是:0 ~ 139
NI进程优先级的用户调整值,数值越大,优先级越低,手动调整范围是:-20 ~ 19
  1. ps 命令实例

-A:显示所有进程

-u:显示指定用户相关进程

-ef:显示进程,及其父进程的信息

-aux:常用组合

-o:指定指定的进程字段

进程 STAT 状态

< 高优先级(对其他用户不好)

N 低优先级(对其他用户很好)

L 已将页面锁定到内存中(用于实时和自定义 IO)

s 是会话领导者

l 是多线程的(使用 CLONE_THREAD,就像 NPTL pthreads 一样)

  • 在前台进程组中

top 命令

top 命令周期性自动捕获进程。

参数:

-d:指定每两次屏幕信息刷新之间的时间间隔。

-p:通过指定监控进程 ID 来仅仅监控某个进程的状态

-S:指定累计模式,每个进程的 CPU 时间为该进程及关闭的子进程所累加的时间

-s:使 top 命令在安全模式中运行。这将去除交互命令所带来的潜在危险

-i:使 top 不显示任何闲置或者僵尸进程

-c:显示整个命令行(包括命令参数),而不是只是显示命令名

-b:批量模式执行,用来将输出重定向到指定文件,一般配合-n 指定输出几次统计信息

-n:表示更新 n 次后终止更新显示,选项后面跟一个整数。

-u:显示指定用户

-U:显示指定 UID 的进程

top 命令所展示字段信息的含义:

字段描述
PID进程id
USER进程所有者的有效用户名
PR优先级
NI优先级调整值(即nice 值),值越小优先级越高
VIRT进程使用的虚拟内存总量,单位kbtye,VIRT=SWAP+RES
RES进程使用的未被换出的物理内存大小,单位Kbtye,RES=CODE+DATA
SHR共享内存,单位Kbtye
ST=跟踪/停止 Z=僵尸进程
%CPU上次更新到现在的CPU 占用百分比
%MEM进程使用的物理内存百分比
TIME+进程使用的CPU 时间总计,单位1/100 秒
COMMAND命令名/命令行

top 运行中界面中,按钮功能(区分大小写):

1显示所有CPU 占用情况
s改变画面更新频率
l关闭或开启第一行top 信息的表示
t关闭或开启第二行Tasks 和第三行Cpus 信息的表示
m关闭或开启第四行Mem 和第五行Swap 信息的表示
N以PID 的大小的顺序排列表示进程列表
P以CPU 占用率大小的顺序排列进程列表
M以内存占用率大小的顺序排列进程列表
b打开/关闭加亮效果
h显示帮助
n设置在进程列表所显示进程的数量
q退出top

top 命令前五行输出重点信息详情:

  1. load average 平均负载率

过去 1、5、15 分钟

  1. 任务(进程)
  2. CPU 状态
  3. SWAP 交互分区状态

netstat 和 ss 命令

  1. netstat 命令

显示网络连接、路由表、接口统计信息、伪装连接和多播成员

常用方式

netstat -r	# 显示:本机路由表
netstat -tunp	# 显示:网络连接,即socket网络套接字
netstat -tunlp	# 显示:侦听端口,即socket网络套接字
  1. ss 命令
  2. lsof 命令列出进程打开的文件

常用方式举例:

lsof -u user01	# 

输出字段:

COMMAND:进程的名称

PID:进程标识符

PPID:父进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件

TYPE:与文件关联结点的类型;

DEVICE:设备号

SIZE/OFF:文件大小/偏移量,以字节为单位

NODE:文件节点

NAME:文件挂载和文件所在的系统

**FD 文件描述符类型列表:

cmd:当前目录

txt:程序文本,如应用程序二进制文件或共享库

Lnn:库引用 library references(AIX)

  1. free 命令查看内存的使用情况

选项:

-m:以 M 显示

-g:以 GB 的形式显示

-h:以人性化可读的方式显示

  1. df 命令查看磁盘的剩余空间

基本语法:

df [ 选项 ]

-h:以较高的可读性显示磁盘剩余空间的大小

-i:显示 inode 信息而非块使用量和-h 一起使用

-T:显示文件系统类型和-h 一起使用

进程的基本管理

控制进程前、后台运行

ctrl + z 将正在运行的任务暂停放入后台

jobs -l 查看后台任务

fg 任务编号 将任务放入前台

bg 任务编号 在后台继续运行

进程调度

暂停程序

CTRL + z

后台进程调度到前台

fg 1

将进程放入后台运行

使用 &符

将进程放入后台运行并脱离终端

nohup 命令 &

功能:nohup 顾名思义就是忽略 SIGHUP 信号

进程优先级

  1. 什么是进程优先级

Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。进程优先级控制进程运行的先后顺序。

  1. 查看进程优先级

磁盘管理

磁盘的基础知识

硬盘的接口类型

个人电脑版,硬盘接口分为 IDE类型和 SATA 类型

服务器版,硬盘接口分为 SCSI 类型和 SAS 类型

磁盘命名方式

windows 中硬盘的命名方式一般为 C盘、D盘、E盘……

Linux 中硬盘的命名方式为:

系统IDE并口SATA串口SCSI接口
RHEL5/dev/hda、/dev/hdb/dev/sda、/dev/sdb/dev/sda、/dev/sdb
RHEL6/dev/sda、/dev/sdb/dev/sda、/dev/sdb/dev/sda、/dev/sdb
RHEL7/dev/sda、/dev/sdb/dev/sda、/dev/sdb/dev/sda、/dev/sdb

磁盘设备的命名

如:/dev/sda2

s=硬盘接口类型(sata/scsi)d=disk(硬盘),a=第 1 块硬盘(b,第二块),2=第二个分区

/dev/hd

h=IDE 硬盘/dev/hdd3 /dev/vd v=虚拟硬盘 /dev/vdf7

磁盘的分区方式

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

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

  1. Bootloader(主引导程序)=446 字节 硬盘第一个扇区=512 字节引导操作系统的主程

序。

  1. DPT 分区表
  2. 硬盘有效标志(校验位)=2 个字节

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

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

:::

磁盘分区管理

分区步骤

  1. 新建分区 fdisk /dev/sdb
  2. 更新分区表(刷新分区表)
  3. 格式化分区——>文件系统 mkfs.ext4 /dev/sdb1
  4. 挂在使用——>mount【开机自动挂载 | autofs 自动挂载】

fdisk 分区管理与使用

  1. 查看磁盘挂载状态
lsblk

df -h

  1. 查看当前设备分区情况
fdisk -l

硬盘容量 = 柱面数 x 盘面数(磁头数) x 扇区数 x 扇区大小(一般为 512 字节)

:::danger
注意:“dos 分区”并不是以操作系统的不同而划定的分区体系,而是指使用“主引导记录(MBR)”的分区体系

:::

  1. 查看指定磁盘
fdisk -l /dev/sda

fdisk 分区

  1. 准备一块硬盘,虚拟机关机,添加一块硬盘
    1. 查看所有设备
fdisk -l

2. 对/dev/sdb 分区
fdisk /dev/sdb

总结

  1. 最多能分 4 个主分区,主分区编号 1-4
  2. 逻辑分区大小总和不能超过扩展分区大小,逻辑分区编号从 5 开始
  3. 如果删除扩展分区,下面的逻辑卷分区也被删除
  4. 扩展分区的分区编号(1-4)

刷新分区表

partx -a /dev/sdb

格式化

分区完成后需要格式化才能挂载使用,格式化需要指定文件系统类型,在 Linux 系统中,文 件系统类型对于存储设备的性能和兼容性具有重要影响。Linux 支持多种文件系统类型,其 中一些常见的文件系统类型包括

  • ext2: 这是 Linux 早期常用的文件系统,适用于那些分区容量不是太大且更新不频繁的情况,例如/boot 分区。
  • ext3:作为 ext2 的改进版本,ext3 支持日志功能,能够帮助系统从非正常关机导致的 异常中恢复。
  • ext4:这是 ext 文件系统的最新版,提供了很多新的特性,包括纳秒级时间戳、创建和 使用巨型文件(16TB)、最大 1EB 的文件系统,以及速度的提升。
  • XFS:由 SGI 开发,支持最大 8EB 的文件系统,特别擅长于处理大文件和大数据存储。

格式化命令 mkfs

用法 mkfs [ 选项 ] [-t <类型>] [ 文件系统选项 ] <设备> [<大小>]

mkfs.xfs /dev/sdb1
# 或
mkfs -t xfs /dev/sdb1

挂载使用

  1. 创建挂载点
mkdir /sdb
  1. 挂载分区
mount /dev/sdb1 /sdb/
  1. 查看挂载状态

开机挂载

方式一:

echo "mount /dev/sdb1 /sdb" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

方式二:

vim /etc/fstab

挂载fstab 中的所有文件系统(自动挂载),执行命令后会自动根据fstab 中的设置进行自动挂载

mount -a

通过UUID 挂载需要查看设备的UUID

blkid /dev/sdb1

/etc/fstab/与/etc/rc.d/rc.local 两者区别

开机挂载mount /etc/fstab 与/etc/rc.d/rc.ocal 差不多,差别就是如果你程序依赖于NFS 的话还是的放到fstab 比较好。程序启动先加载/etc/fastab 文件,放fstab 里面会在程序启动前加载上NFS 文件系统,放到rc.local 里往往造成程序启动加载时找不到路径

卸载

  1. 卸载
umount /dev/sdb1
  1. 查看状态
df-h

删除开机挂载

vim /etc/rc.d/rc.local
vim /etc/fstab

删除分区

删除分区,先将分区卸载

fdisk /dev/sdb

注意:删除有数据的分区注意进行数据备份,将分区挂载后,备份数据再进行删除!

parted 分区管理与使用

parted 主要管理 GTP 的分区类型

  • 在64 位Linux CentOS 中,最多可以创建128 个GPT 分区,而MBR 最多支持 4 个主分区!
  • GTP 支持2TB 以上的硬盘分区,而MBR 只支持2TB 以内的硬盘分区!

parted 分区

用法:
Usage: parted [选项]… [设备 [子命令 [参数]…]…]
常用选项
-s, --script 从不提示用户

常用子命令
print 打印分区情况
mklabel 创建新的分区表类型
mkpart 创建分区
rm 删除分区

查看所有设备的分区情况

parted -l

打印指定设备分区表

parted /dev/sdb print
parted /dev/sda print

提示:msdos,表示 MBR 分区表

创建 GPT 的分区表类型

parted /dev/sdb mklabel gpt

创建分区

parted /dev/sdb mkpart gpt 0% 5G

提示: 第2048 个扇区是系统推荐的第一分区的起始扇区,也可以使用0%

parted -s /dev/sdb mkpart gpt 5G 7G
parted -s /dev/sdb mkpart gpt 7G 100%
parted /dev/sdb print

将剩下的空间分配给最后一个分区使用 100%结束即可

-s 不提示任何信息

第一个分区默认文件系统类型为 xfs

删除分区

parted /dev/sdb rm 3
parted /dev/sdb rm 2

挂载使用

与fdisk 中的操作一致!

卸载

与fdisk 中的操作一致!

逻辑卷管理

LVM 功能特性

  • LVM:中文含义是逻辑卷管理器,它是一种在 Linux 系统中被广泛使用的分区管理机制,具备及其良好的可扩展性。
  • 许多Linux 使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量
  • 如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。
  • LVM 是 Linux 环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上、文 件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性。

LVM 概念

  • 物理卷(Physical Volume,PV)

物理卷是底层真正提供容量,存放数据的设备,它可以是整个硬盘、硬盘上的分区等。

  • 卷组(Volume Group, VG)

卷组建立在物理卷之上,它由一个或多个物理卷组成。即把物理卷整合起来提供容量分 配。一个LVM 系统中可以只有一个卷组,也可以包含多个卷组。

  • 逻辑卷(Logical Volume, LV)

逻辑卷建立在卷组之上,它是从卷组中“切出”的一块空间。它是最终用户使用的逻辑 设备。逻辑卷创建之后,其大小可以伸缩。

  • 物理区域PE(physical extent)

每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE 是 能被LVM 寻址的最小单元。PE 的大小可指定,默认为4 MB。PE 的大小一旦确定将不能 变,一个卷组中的所有物理卷的PE 的大小是一致的。

4 MB=4096 kb=4096 kb / 4 kb=1024 个 block

说明:

  1. 硬盘读取数据最小单位 1 个扇区 512 字节
  2. 操作读取数据最小单位 1 个数据块=8*512 字节=4096 字节=4KB
  3. lvm 寻址最小单位 1 个 PE = 4MB

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

真实的物理设备 > 逻辑上(命令创建) > 物理卷 (pv)> 卷组 (v g)> 逻辑卷 (l v)] [==> 逻辑卷格式化 ==> 挂载使用

逻辑卷创建

步骤:

  1. 分区
parted /dev/sdb print

parted /dev/sdb rm 1
parted -s /dev/sdb mkpart gpt 0% 3G
parted -s /dev/sdb mkpart gpt 3G 6G
parted -s /dev/sdb mkpart gpt 6G 100%
parted /dev/sdb print

  1. 创建物理卷

pvcreate [选项] devices

pvcreate /dev/sdb{1..2} 	# 或 pvcreate /dev/sdb1 /dev/sdb2

查看物理卷

pvs       # 或  pvscan

  1. 创建卷组

vgcreate [选项] vg_name pv_name

vgcreate vg01 /dev/sdb{1..2} # 或 vgcreate vg01 /dev/sdb1 /dev/sdb2

查看卷组

vgs  # 或 vgscan

  1. 创建逻辑卷

lvcreate [选项] vg_name

-L 指定逻辑卷大小

-n 指定逻辑卷名称

注意:逻辑卷的空间是从卷组中分配的,因此逻辑卷的大小不能超过卷组的大小

lvcreate -L 4G -n lv01 vg01
lvs # 或  lvscan

  1. 格式化逻辑卷
mkfs.xfs /dev/vg01/lv01

  1. 挂载使用
mkdir /lvm 
mount /dev/vg01/lv01 /lvm 
lsblk # 或 df -h

  1. 开机挂载
echo "/dev/vg01/lv01 /lvm xfs default 0 0" >> /etc/fstab
tail -5 /etc/fstab

如果没有手动挂载,可以使用mount -a 根据fstab 文件自动挂载设备

mount -a

逻辑卷动态扩容

需求

在线将逻辑卷 lv01 扩容成 8G

思路:

  1. 查看/lvm 目录所对应的逻辑卷是哪一个/dev/mapper/vg01-lv01
  2. 查看当前逻辑卷所在的卷组vg01 剩余空间是否足够
  3. 如果vg01 空间不够,得先扩容卷组,再扩容逻辑卷
  4. 如果vg01 空间足够,直接扩容逻辑卷

步骤:

  1. 查看 lvm 目录属于哪个卷组
df -h

  1. 查看卷组的剩余空间
vgs

查看卷组空闲空间不足,需要先对vg01 扩容,再进行逻辑卷扩容

需要准备物理设备,将物理设备做成物理卷,再将新的物理卷扩容到卷组!

  1. 创建物理卷
parted /dev/sdb print

# pvcreate /dev/sdb3
pvs

  1. 扩容卷组

vgextend [选项] vg_name pv_name

vgextend vg01 /dev/sdb3
vgs

  1. 扩容逻辑卷

# lvextend [选项] /path/lv_name

常用选项

-L 指定扩容大小

lvextend -L +4G /dev/vg01/lv01 
lvs

-L +4G 将/dev/vg01/lv01 扩大4G

df -h

查看逻辑卷仍是没有变化,原因是需要扩容后的逻辑卷进行在线扩容文件系统

  1. 扩容文件系统
  • ext4 的文件系统扩容

用法:resize2fs lv_name

resize2fs /dev/vg02/lv01
  • xfs 的文件系统扩容

用法:xfs_growfs lv_name

xfs_growfs /dev/vg01/lv01

df -h

查看逻辑卷扩容成功

逻辑卷删除

  1. 卸载
umount /dev/vg01/lv01

提示:删除配置文件中的内容,不然下次重启机器,机器不能正常开机。

vim /etc/fstab 
tail -3 /etc/fstab

  1. 删除逻辑卷

lvremove [选项] lvm_name

lvscan
lvremove /dev/vg01/lv01

  1. 删除卷组

# vgremove [选项] vg_name

vgs
vgremove vg01

  1. 删除物理卷

pvremove [选项] pv_name

pvs
pvremove /dev/sdb{1..2}
pvremove /dev/sdb3

逻辑卷快照

逻辑卷快照的作用是允许我们在不中断服务的情况下捕获逻辑卷在某个时间点的状态,从而进行备份、恢复或测试等操作。LVM 快照是一个特殊的逻辑卷,它保存了原始逻 辑卷在某个时间点的数据镜像。快照使用写时复制(Copy-on-Write)技术,这意味着在快照创建时,并不会立即复制整个卷的数据。相反,只有当原始卷上有数据块被修改时,这些被修改的数据块才会被复制到快照预留的空间中。因此,快照的大小通常远小于原始卷。

  1. 先创建一个 lv02 的逻辑卷
pvcreate /dev/sdb{1..3}
vgcreate vg02 /dev/sdb{1..3}
lvcreate -L 8G -n lv02 vg02
lvs

lvdisplay /dev/vg02/lv02

本次创建成ext4 的文件系统,用xfs 也可以

mkfs.ext4 /dev/vg02/lv02

  1. 创建挂载点挂载使用
mkdir /mnt/lv02
mount /dev/vg02/lv02 /mnt/lv02/ 
ls -l /mnt/lv02/

使用标准的ext2/ext3 档案系统格式才会产生的一个目录,目的在于当档案系统发生错误 时,将一些遗失的片段放置到这个目录下

df -h

  1. 在/mnt/lv02 中准备数据
cd /mnt/lv02
cp /etc/passwd /mnt/lv02
dd if=/dev/zero count=10 bs=1M of=linux.txt
ll -h

  1. 创建快照

用法:lvcreate [选项] lvm_name

-L 指定快照大小

-n 指定快照名称

-s 表示创建快照

lvcreate -s -n lv02_snap -L 1G /dev/vg02/lv02

lvs

  1. 模拟 lvm 数据丢失
ls
rm -rf passwd
ls -l

快照恢复数据

用法:

lvconvert [选项] snap_name

cd
umount /mnt/lv02

提示:恢复快照需要将原来的逻辑卷卸载

lvconvert --mergesnapshot /dev/vg02/lv02_snap

lvs

提示:快照是一次性的,恢复完后,快照就会自动删除

mount /dev/vg02/lv02 /mnt/lv02/
cd /mnt/lv02/
ls -l

数据已恢复

快照使用场景(扩展)

/var/lib/mysql

  1. 锁表
  2. 备份【逻辑|物理备份】
  3. 解锁

100G 物理备份/var/lib/mysql/xxx

  1. 锁表
  2. 创建快照
  3. 解锁
  4. 挂载快照
  5. 备份到指定地方
  6. 删除快照

快照实现自动扩容(扩展)

修改逻辑卷配置文件参数

vim /etc/lvm/lvm.conf
snapshot_autoextend_threshold = 80
snapshot_autoextend_percent = 20

当快照使用到80%时,自动扩容20%;

当snapshot_autoextend_threshold = 100 表示关闭自动扩容

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐