Linux命令-mdadm管理磁盘阵列组

news2025/1/10 17:52:39

文章目录​​​​​​​

概要

一 磁盘阵列是什么?       

二 RAID的级别

RAID 0

RAID 1 

RAID 5 

RAID10

三 命令介绍

四 语法格式

五 基本参数

六 参考实例

创建RAID 0磁盘阵列组

创建RAID 1磁盘阵列组

创建RAID 5磁盘阵列组

创建RAID 10磁盘阵列组

删除磁盘阵列

停止磁盘阵列

激活磁盘阵列 

命令总结

概要

        在linux里,mdadm是制作软raid的命令,这里我们就先了解一下什么是磁盘阵列以及几个RAID的级别,然后再聊命令,这样就更容易理解命令的各个参数是代表着什么含义。

一 磁盘阵列是什么?       

磁盘阵列的英文是Redundant Arrays of Independent Disks,缩写既是RAID,有“独立磁盘构成具有冗余能力的阵列”之意。磁盘阵列是由很多磁盘,以硬件(RAID卡)或软件(MDADM)形式组合成一个容量巨大的磁盘组,利用多个磁盘组合在一起,提升整个磁盘系统效能。

二 RAID的级别

这里只介绍比较常用的RAID 0、RAID 1、RAID 5、和RAID 10的概念。

注意RAID10并不是读作RAID(十),而是RAID(一零)

RAID 0

RAID 0原理是把多块物理磁盘设备(至少需要两块)通过硬件和软件的方式串联到一起,组成一个大的卷组,并将数据依次写入各个物理磁盘中。这样一来,磁盘设备的读写性能将会提升数倍(取决于磁盘数量);若有任意一块磁盘发生故障,将会导致整个系统的数据都受到了破坏。简单来说,RAID 0 技术能够有效提升磁盘数据的吞吐速度(读写),但不具备数据备份和修复磁盘的能力。如下图所示,数据被分别写入到不同的磁盘设备中,最终实现提升读取和写入速度的效果。

RAID 0存储数据结构图

RAID 1 

RAID 1也被称为磁盘镜像(至少需要两块),原理是把一个磁盘的数据镜像到另一个磁盘上,也就是说数据在写入一块磁盘的同时,会在另一块闲置的磁盘上生成镜像文件,在不影响性能情况下最大限度的保证系统的可靠性和可修复性上,只要系统中任何一对镜像盘中至少有一块磁盘可以使用,甚至可以在一半数量的硬盘出现问题时系统都可以正常运行,当一块硬盘失效时,系统会忽略该硬盘,转而使用剩余的镜像盘读写数据,具备很好的磁盘冗余能力。虽然这样对数据来讲绝对安全,但是成本也会明显增加,磁盘利用率为50%,以四块80GB容量的硬盘来讲,可利用的磁盘空间仅为160GB。

RAID 1存储数据结构图

RAID 5 

RAID 5技术是把磁盘设备的数据奇偶校验信息保存到每个磁盘设备中。这样的优势是就算有一块磁盘设备损坏了,也可通过奇偶校验信息尝试恢复重建损坏的数据。RAID 5这样的技术特性兼顾了磁盘设备的读写速度,数据安全性以及存储成本问题。而RAID 5至少是由三块磁盘组成的,使用的是磁盘切割技术,相比于RAID 1级别,RAID 5的磁盘使用率有三分之二;效率更高,存储成本也随之降低,需要注意的是无论有多少块磁盘组RAID 5,最大程度只能存在坏一块的可能。 

如下图所示,Parity就是存储数据时的奇偶校验信息。 

RAID5 存储数据结构图

RAID10

RIAD 10原理实际上是RAID 1+RAID 0技术的一个结合,RAID 10是至少需要到四块磁盘组成的,其中先分别将两两制成RAID 1的磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高磁盘设备的读写速度。从理论方面来说,只要坏的位置不是同个阵列的磁盘,那么最多可以损坏一半的磁盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能也超过了RAID 5,因此当前成为较为广泛的一种存储技术。

RAID 10 存储数据结构图

三 命令介绍

        先来看下mdadm的帮助文档

NAME
       mdadm - manage MD devices aka Linux Software RAID

        mdadm(multiple devices admin)命令的主要功能是用来管理RAID磁盘阵列组,linux系统中实现软RAID设备的命令,可以进行创建,调整,监控,删除等全套管理操作。

四 语法格式

mdadm命令的格式是:mdadm 【模式】【磁盘阵列】【参数】设备名

SYNOPSIS
       mdadm [mode] <raiddevice> [options] <component-devices>

五 基本参数

mdadm的参数有以下内容,因为此命令的参数较多,以表格形式呈现

-A激活预先配置的磁盘阵列
-B创建一个没有超级快的RAID设备
-C创建一个新的阵列组
-F选择监控模式
-G改变RAID设备的大小或形态
-s扫描配置文件或/proc/mdstat得到阵列缺失部分
-D打印磁盘阵列设备的详细信息
-f将设备状态定为故障
-a添加新的设备到阵列组
-r移除设备
-l设定磁盘阵列的级别
-n指定阵列成员(分区/磁盘)的数量
-x指定阵列中备用盘的数量
-c设定阵列的块大小,单位为kb
-S停止阵列组

六 参考实例

创建RAID 0磁盘阵列组

需求:创建一个RAID 0的磁盘阵列组,使用两块磁盘,不使用备用盘;

模拟过程:需要先把虚拟机的磁盘添加两块。

[root@localhost ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 3月   1 13:03 /dev/sda
brw-rw----. 1 root disk 8,  1 3月   1 13:03 /dev/sda1
brw-rw----. 1 root disk 8,  2 3月   1 13:03 /dev/sda2
brw-rw----. 1 root disk 8, 16 3月   1 13:03 /dev/sdb
brw-rw----. 1 root disk 8, 32 3月   1 13:03 /dev/sdc
[root@localhost ~]# mdadm -Cv /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc   #创建磁盘阵列组
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@localhost ~]# mdadm -D /dev/md0     #查看状态
/dev/md0:
......
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf           #生成配置文件
[root@localhost ~]# ll /dev/md0 
brw-rw----. 1 root disk 9, 0 3月   1 13:06 /dev/md0 
[root@localhost ~]# mkfs.xfs /dev/md0                       #格式化设备
[root@localhost ~]# mkdir /raid0
[root@localhost ~]# mount /dev/md0 /raid0           #挂载到/raid0目录
[root@localhost ~]# df -h /raid0/
文件系统        容量  已用  可用 已用% 挂载点
/dev/md0         40G   33M   40G    1% /raid0

创建RAID 1磁盘阵列组

需求:创建RAID 1磁盘阵列组,添加三块盘,两块作为RAID 1镜像使用,一块作为备用盘,模拟磁盘出现故障,备用盘自动替换故障盘,将故障盘移除,并添加新的磁盘恢复到2+1的状态。

[root@localhost ~]# mdadm -Cv /dev/md1 -l 1 -n 2 -x 1 /dev/sd[b-d]  #创建raid 1阵列
......
mdadm: array /dev/md1 started.
#将raid1信息写入到配置文件中
[root@localhost ~]# mdadm -Ds /dev/md1> /etc/mdadm.conf 
#查看md1的状态 
[root@localhost ~]# mdadm -D /dev/md1 
/dev/md1:
......
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc

       2       8       48        -      spare   /dev/sdd
#将设备格式化,发现有现有的xfs文件系统,可以直接加个-f参数强制格式化
[root@localhost ~]# mkfs.xfs /dev/md1 
mkfs.xfs: /dev/md1 appears to contain an existing filesystem (xfs).
mkfs.xfs: Use the -f option to force overwrite.
[root@localhost ~]# mkfs.xfs -f /dev/md1 
[root@localhost ~]# mkdir /raid1
#挂载设备
[root@localhost ~]# mount /dev/md1 /raid1
#提前准备测试文件
[root@localhost ~]# touch /raid1/{1..6}.txt
[root@localhost ~]# cp /etc/passwd /raid1/passwd.txt

模拟损坏一块磁盘,让备用盘自动备份好数据 ;

#模拟损坏了一块磁盘
[root@localhost ~]# mdadm -f /dev/md1 /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md1
#查看状态,发现备用盘正在恢复数据
[root@localhost ~]# mdadm -D /dev/md1 
/dev/md1:
......
Consistency Policy : resync

    Rebuild Status : 10% complete            #正在重新一对一恢复

              Name : localhost.localdomain:1  (local to host localhost.localdomain)
              UUID : 12b2442b:3c9cc994:501eee5f:e8de8a15
            Events : 20

    Number   Major   Minor   RaidDevice State
       2       8       48        0      spare rebuilding   /dev/sdd
       1       8       32        1      active sync   /dev/sdc

       0       8       16        -      faulty   /dev/sdb
#重新将扫描后的设备信息写入到文件
[root@localhost ~]# mdadm -Dsv > /etc/mdadm.conf 
#查看数据是否出现丢失
[root@localhost ~]# ll /raid1/
总用量 4
-rw-r--r--. 1 root root    0 3月   1 13:35 1.txt
-rw-r--r--. 1 root root    0 3月   1 13:35 2.txt
-rw-r--r--. 1 root root    0 3月   1 13:35 3.txt
-rw-r--r--. 1 root root    0 3月   1 13:35 4.txt
-rw-r--r--. 1 root root    0 3月   1 13:35 5.txt
-rw-r--r--. 1 root root    0 3月   1 13:35 6.txt
-rw-r--r--. 1 root root 2317 3月   1 13:35 passwd.txt
[root@localhost ~]# head -10 /raid1/passwd.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
......

 移除损坏的磁盘,并且重新添加一块热备盘到raid 1磁盘阵列中;

#移除损坏数据的磁盘
[root@localhost ~]# mdadm -r /dev/md1 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md1
[root@localhost ~]# mdadm -D /dev/md1
/dev/md1:
......
    Number   Major   Minor   RaidDevice State
       2       8       48        0      active sync   /dev/sdd
       1       8       32        1      active sync   /dev/sdc
#重新添加一块热备盘
[root@localhost ~]# mdadm -a /dev/md1 /dev/sde
mdadm: added /dev/sde
#查看状态
[root@localhost ~]# mdadm -D /dev/md1 
/dev/md1:
......
    Number   Major   Minor   RaidDevice State
       2       8       48        0      active sync   /dev/sdd
       1       8       32        1      active sync   /dev/sdc

       3       8       64        -      spare   /dev/sde

到这里raid 1阵列已经配置好了。 

创建RAID 5磁盘阵列组

需求:创建RIAD 5磁盘阵列组,使用3块磁盘+1块备用盘,并且模拟后续还需要多加1块磁盘到阵列组。

[root@localhost ~]# mdadm -Cv /dev/md5 -l 5 -n 3 -x 1 -c 32 /dev/sd[b-e]  #创建磁盘阵列
......
mdadm: array /dev/md5 started.
[root@localhost ~]# mdadm -D /dev/md5       #查看状态
/dev/md5:
......
    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      spare rebuilding   /dev/sdd

       3       8       64        -      spare   /dev/sde
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf   #写入配置文件
#格式化设备
[root@localhost ~]# mkfs.xfs -f /dev/md5 
[root@localhost ~]# mkdir /raid5
#挂载到/raid5目录
[root@localhost ~]# mount /dev/md5 /raid5
#添加一些数据进去
[root@localhost ~]# cp /etc/passwd /raid5/passwd
[root@localhost ~]# cp /etc/hosts /raid5/hosts

加一块磁盘 扩展raid 5磁盘阵列;

#取消挂载开始扩展raid5
[root@localhost ~]# umount /dev/md5 
[root@localhost ~]# mdadm -G /dev/md5 -n 4 -c 32
#重新写入信息到配置文件中
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf 
[root@localhost ~]# mdadm -D /dev/md5 
/dev/md5:
......

            Layout : left-symmetric
        Chunk Size : 32K

Consistency Policy : resync

    Reshape Status : 16% complete    #正在扩展中
     Delta Devices : 1, (3->4)

              Name : localhost.localdomain:5  (local to host localhost.localdomain)
              UUID : 5b3697cf:57b4eb6d:8828ec0f:5ce38181
            Events : 48

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
       4       8       48        2      active sync   /dev/sdd
       3       8       64        3      active sync   /dev/sde
#使用这个命令可以看到是哪几个磁盘组了阵列
[root@localhost ~]# lsblk    
......
sdb               8:16   0   20G  0 disk  
└─md5             9:5    0   40G  0 raid5 
sdc               8:32   0   20G  0 disk  
└─md5             9:5    0   40G  0 raid5 
sdd               8:48   0   20G  0 disk  
└─md5             9:5    0   40G  0 raid5 
sde               8:64   0   20G  0 disk  
└─md5             9:5    0   40G  0 raid5 
#重新挂载后,数据还存在,并且可以继续写入内容
[root@localhost ~]# mount /dev/md5 /raid5
[root@localhost ~]# ll /raid5/
总用量 8
-rw-r--r--. 1 root root  158 3月   1 13:59 hosts
-rw-r--r--. 1 root root 2317 3月   1 13:59 passwd
[root@localhost ~]# touch /raid5/{1..5}.txt
[root@localhost ~]# !ll
ll /raid5/
总用量 8

 到这里raid 5的配置实验已经结束了。

创建RAID 10磁盘阵列组

需求:创建RAID 10磁盘阵列,需要用到四块磁盘,并且增加一块备用盘,模拟如果坏掉了一块磁盘,将磁盘移除后,重新添加一块备用盘。

[root@localhost ~]# mdadm -Cv /dev/md10 -l 10 -n 4 -x 1 /dev/sd[b-f] #创建raid10
mdadm: layout defaults to n2
mdadm: layout defaults to n2
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf  #将信息写入到配置文件里
[root@localhost ~]# mkfs.xfs /dev/md10    
meta-data=/dev/md10              isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkdir /raid10
[root@localhost ~]# mount /dev/md10 /raid10    #挂载

模拟损坏了一块磁盘,让备份盘自动恢复数据;

[root@localhost ~]# mdadm -f /dev/md10 /dev/sdb   #模拟损坏一块盘
mdadm: set /dev/sdb faulty in /dev/md10
[root@localhost ~]# mdadm -D /dev/md10 
/dev/md10:
           Version : 1.2
     Creation Time : Wed Mar  1 14:21:12 2023
        Raid Level : raid10
        Array Size : 41908224 (39.97 GiB 42.91 GB)
     Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
      Raid Devices : 4
     Total Devices : 5
       Persistence : Superblock is persistent

       Update Time : Wed Mar  1 14:24:25 2023
             State : clean, degraded, recovering 
    Active Devices : 3
   Working Devices : 4
    Failed Devices : 1
     Spare Devices : 1

            Layout : near=2
        Chunk Size : 512K

Consistency Policy : resync

    Rebuild Status : 12% complete    #备用盘正在自动恢复中

              Name : localhost.localdomain:10  (local to host localhost.localdomain)
              UUID : 5d88661b:3c2b4c65:066fefe1:e3a6ce41
            Events : 26

    Number   Major   Minor   RaidDevice State
       4       8       80        0      spare rebuilding   /dev/sdf
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       0       8       16        -      faulty   /dev/sdb

移除磁盘后重新添加一块备用盘;

[root@localhost ~]# mdadm -r /dev/md10 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md10
#重新添加一块备用盘
[root@localhost ~]# mdadm -a /dev/md10 /dev/sdb
mdadm: added /dev/sdb
#重新写入到配置文件里
[root@localhost ~]# mdadm -Ds > /etc/mdadm.conf 
[root@localhost ~]# mdadm -D /dev/md10 
/dev/md10:
......
    Number   Major   Minor   RaidDevice State
       4       8       80        0      active sync set-A   /dev/sdf
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       5       8       16        -      spare   /dev/sdb

 停止阵列,再重新激活;

[root@localhost ~]# umount /dev/md10 
[root@localhost ~]# mdadm -Ss /dev/md10 
mdadm: stopped /dev/md10
[root@localhost ~]# mdadm -A /dev/md10
mdadm: /dev/md10 has been started with 4 drives and 1 spare.
[root@localhost ~]# mount /dev/md10  /raid10

到这里raid10的配置已经结束了。 

删除磁盘阵列

删除磁盘阵列的过程中需要注意的是,得先取消挂载后,将磁盘停止了,然后再逐个清空磁盘的数据,这个操作建议只在实验中进行,生产环境请勿随意删除磁盘阵列!

[root@localhost ~]# umount /dev/md10 
[root@localhost ~]# rm -rf /etc/mdadm.conf 
[root@localhost ~]# mdadm -Ss /dev/md10 
mdadm: stopped /dev/md10
[root@localhost ~]# mdadm --zero-superblock /dev/sdb 
[root@localhost ~]# mdadm --zero-superblock /dev/sdc
[root@localhost ~]# mdadm --zero-superblock /dev/sde
[root@localhost ~]# mdadm --zero-superblock /dev/sdf
[root@localhost ~]# mdadm --zero-superblock /dev/sdd

停止磁盘阵列

在创建好在磁盘阵列后,若不使用,可以使用-S参数停止。

[root@localhost ~]# mdadm -Ss /dev/md10 
mdadm: stopped /dev/md10

激活磁盘阵列 

需要用到磁盘阵列时,将之前配置好的,重新激活就行了。

[root@localhost ~]# mdadm -A /dev/md10
mdadm: /dev/md10 has been started with 4 drives and 1 spare.

命令总结

        mdadm的内容其实是很多的,因为主要还是用来创建RAID和管理的,所以需要将几个RAID级别都演示一下,当然可以选择自己需要用到的raid去反复观看。若觉得内容还行的,可以点赞支持一下!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380121.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Flutter入门到进阶】Flutter基础篇---第一个Flutter应用

1 Flutter目录结构介绍 1.1 创建项目 flutter create flutterdemo 1.2 目录结构 1.3 结构说明 1、android、ios、linux、macos、web、windows文件夹&#xff1a;都是对应平台相关代码 2、lib文件夹&#xff1a;flutter相关代码&#xff0c;我们编写的代码就在这个文件夹 3、t…

八、异步编程

文章目录异步编程FutureTask应用&源码分析FutureTask介绍FutureTask应用FutureTask源码分析FutureTask中的核心属性FutureTask的run方法FutureTask的set&setException方法FutureTask的cancel方法FutureTask的get方法FutureTask的finishCompletion方法CompletableFuture…

DevOps 学习笔记(一) | DevOps 简介及环境搭建

1. 环境配置 本次实验需要三台服务器CI/CD 服务器、应用服务器和Harbor 服务器 DevOps 步骤 程序员将代码 push 到代码仓库Jenkins 根据触发条件拉取代码到CI/CD 服务器Jenkins 使用 Maven 将代码 build 成 jar 包Jenkins 使用 jar 包通过 Dockerfile 和 docker-compose.yml…

HBase JMX 指标学习

名词解释&#xff1a; JMX&#xff1a;Java Management Extensions&#xff0c;用于用于Java程序扩展监控和管理项。 GC&#xff1a;Garbage Collection&#xff0c;垃圾收集&#xff0c;垃圾回收机制。 1、概述 说到对Hadoop和 HBase的集群监控&#xff0c;大家知道的和用…

YOLOv8详解 【网络结构+代码+实操】

文章目录YOLOv8 概述模型结构Loss 计算训练数据增强训练策略模型推理过程网络模型解析卷积神经单元&#xff08;model.py&#xff09;Yolov8实操快速入门环境配置数据集准备模型的训练/验证/预测/导出使用CLI使用python多任务支持检测实例分割分类配置设置操作类型训练预测验证…

FastDDS-4.RTPS层

4. RTPS层 eprosima Fast DDS的较低层RTPS层是RTPS标准协议的实现。与DDS层相比&#xff0c;该层提供了对通信协议内部的更多控制&#xff0c;因此高级用户可以更好地控制库的功能。 4.1 与DDS层的关系 该层的元素与DDS层的元素一一对应&#xff0c;并添加了一些元素。该对应…

【使用两个栈实现队列】

文章目录一、栈和队列的基本特点二、基本接口函数的实现1.栈的接口2.创建队列骨架3.入队操作4.取出队列元素5.返回队首元素6.判断队列是否为空7.销毁队列总结一、栈和队列的基本特点 栈的特点是后进先出&#xff0c;而队列的特点是先进先出。 使用两个栈实现队列&#xff0c;必…

【DataX】数据同步到PG时遇到的分区不存在问题

数据同步到PG时遇到的分区不存在问题前言正文问题分析解决方法结语前言 大概说下这个问题牵扯出来的背景&#xff0c;一个外场项目&#xff0c;选型用PG存业务数据&#xff0c;然后客户要求保存保留一年的数据&#xff0c;运行到现在服务器5个T的磁盘已经有点扛不住了&#xf…

内存的管理

取指令——译码——执行——返存 计组课我们学过cpu真正读指令并非是从内存中读入&#xff0c;而是从cache读和存&#xff0c;再由cache进行取指或返存&#xff0c;因为cpu指令周期比内存周期速度快很多&#xff0c;cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一…

python爬虫:如何定义内容提取器

项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字&#xff1a;程序员浪费在调测内容提取规则上的时间&#xff0c;从而我们发起了这个项目&#xff0c;把程序员从繁琐的调测规则中解放出来&#xff0c;投入到更高端的数据处理工作中。 解决方案 为了解决这个问题…

微信小程序使用scss编译wxss文件的配置步骤

文章目录1、在 vscode 中搜索 easysass 插件并安装2、在微信开发工具中导入安装的easysass插件3、修改 spook.easysass-0.0.6/package.json 文件中的配置4、重启开发者工具&#xff0c;就可用使用了微信小程序开发者工具集成了 vscode 编辑器&#xff0c;可以使用 vscode 中众多…

C++修炼之练气期三层——函数重载

目录 1.引例 2.函数重载的概念 3.C支持函数重载的原理 1.引例 倘若现在要实现一个加法计算器&#xff0c;用C语言实现的话我们会选择这样的方式&#xff1a; int Add_int(int a, int b) {return a b; }double Add_double(double a, double b) {return a b; } 在使用加…

Exposure2023专业摄影RAW格式大师专业滤镜特效

Exposure2023是一款专为摄影艺术设计的图像编辑器。新的 Exposure2023结合了专业级的照片调整、庞大的华丽照片库和令人愉悦的高效设计。可以提供最大&#xff0c;最准确的电影外观选择。Exposure的创意外观不仅限于电影模拟&#xff0c;从干净优雅的现代风格到引人注目的色彩变…

SpringBoot+Nacos+OpenFeign环境搭建

目录 1.boot方式nacos与openFeign集成 1.引入依赖 2.添加配置 3.测试接口调用 4.常见问题&#xff1a; 1.版本依赖 2.nacos客户端 2.cloud方式nacos与openFeign集成 1.引入依赖 2.添加配置 3.接口定义 4.开启FeignClients客户端 5.远程接口测试 6.Nacos配置中心 1…

Java - 数据结构,二叉树

一、什么是树 概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; 1、有…

SAP ERP系统MM模块常用增强之四:采购申请输入字段的校验检查

在SAP/ERP项目的实施中采购管理模块&#xff08;MM&#xff09;的创建和修改采购申请一般都会有输入字段校验检查的需求&#xff0c;来防止业务人员录入错误或少录入数据&#xff0c;这方面需求部分是可以通过配置实现&#xff0c;比如一些字段是否必输&#xff0c;是否显示等&…

WebRTC拥塞控制算法——GCC介绍

网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题&#xff0c;它对网络传输的质量有严重的影响&#xff0c; 网络拥塞是导致网络吞吐降低&#xff0c; 网络丢包等的主要原因之一&#xff0c; 这些问题使得上层应用无法有效的利用网络带宽获得高质量的网络传输效果…

C++——智能指针1

目录 RAII auto_ptr模拟实现 智能指针拷贝问题 唯一指针 shared_ptr&#xff08;可以拷贝&#xff09; shared_ptr模拟实现 完整代码 循环引用 weak_ptr模拟实现 定制删除器 shared_ptr定制删除器模拟实现 内存泄漏 RAII RAII&#xff08;Resource Acquisit…

SkyWalking使用案例

SkyWalking监控java项目Halo博客 Halo是一个开源的博客项目&#xff0c;使用java编写&#xff0c;官网地址&#xff1a;https://halo.run/ 安装java环境&#xff0c;Halo对java版本有限制&#xff0c;1.4.3版本以上需要使用java11以上 apt -y install openjdk-11-jdk java -…

matplotlib常用操作

文章目录1 matplotlib绘图1.1 绘图步骤2 matplotlib基本元素2.1 matplotlib 画布2.2 设置坐标轴长度和范围2.3 设置图形的线型和颜色2.4 设置图形刻度范围、刻度标签和坐标轴标签等2.4.1 设置刻度范围2.4.2 设置坐标轴刻度2.5 文本标签图例3 matplotlib的ax对象绘图4 绘制子图5…