Linux——存储管理

news2024/11/20 1:51:46

文章目录

  • 基本分区
    • 磁盘简介
      • 磁盘分类
      • linux的磁盘命名
      • 磁盘的分区方式
    • 管理磁盘
      • 虚拟机添加硬盘
      • 查看磁盘信息
      • 磁盘分区流程
        • 创建分区
        • 创建文件系统
        • 挂载mount
        • 查看挂载信息
      • 剩余空间继续分区
      • MBR如何划分更多的分区
        • 为什么只能有4个主分区
        • 扩展分区的引入
  • 逻辑卷LVM
    • 是什么
    • 特点
    • 术语
    • 创建LVM
    • VG卷组扩容
    • PV,VG,LV的查看方式
    • LV扩容
  • 交换分区管理Swap
    • swap简介
    • 查看当前交换分区
    • 设置交换分区
      • 准备分区
      • 格式化
      • 挂载
      • 验证
  • 文件系统
    • 文件系统的作用是
    • 文件系统的类型
      • EXT3/4文件系统
    • 磁盘文件碎片
    • 确定系统有几个文件系统
  • 文件链接
    • 符号链接
    • 硬链接
  • RAID
    • 什么是RAID
    • RAID的类型
      • RAID0
      • RAID1
      • RAID5
    • RAID的分类
    • 软RAID创建示例
  • 补充:挂载和卸载问题
  • 补充:电脑重启命令
  • 补充:写满一个磁盘
  • 补充:卸载分区

基本分区

磁盘简介

磁盘,硬盘,disk都是指一个东西,和内存的区别是容量比较大。
磁盘的作用是存储数据。
普通用户用来存储音乐文件,视频文件,文本文件,游戏,目录。
工程师负责存储企业的数据:用户账号,用户头像,用户视频,用户信息。

磁盘分类

磁盘可以分为机械磁盘和固态磁盘:
机械磁盘的构成有磁头,磁臂,盘片,扇区,磁道,扇区等。
固态磁盘的组成是芯片。
固态磁盘的价格更贵一些。

linux的磁盘命名

linux查看磁盘名称的路径:/dev/sda 、 /dev/sdb …

  • /dev : 表示设备文件目录
  • s:表示磁盘的连接方式sata串口的方式
  • d:表示磁盘
  • a:表示第一块(b:就表示第二块, c表示第三块…)
    磁盘的命名时计算机自动命名的,把磁盘插到计算机上,计算机自动命名。

跟过磁盘的概念可以查看:https://blog.csdn.net/mantou_riji/article/details/135649323

磁盘的分区方式

磁盘的分区就是指我们系统中的 C盘,D盘 这种概念。
常见的磁盘分区方式有MBRGPT

MBR:

  • MBR是:主引导记录,是在磁盘分区时,在驱动器最前端的一段引导扇区。MBR的大小固定为512字节,其中引导代码占据了前446字节,而接下来的64字节被用于存储分区表,最后2个字节是结束标记。分区表包含了硬盘分区的起始扇区和结束扇区,以及分区类型等信息。
  • MBR支持最大的磁盘容量是<2TB
  • 在MBR中,最多可以定义四个分区,每个分区的起始扇区被存储在分区表中。如果硬盘上只有一个分区,则分区表的四个分区项中的三个将被标记为未使用。
  • 如果希望超过四个分区,需放弃主分区改为扩展分区和逻辑分区

GPT:

  • GPT是:全局唯一标识分区表。它和MBR分区的区别就是引导方式和分区结构的不同;支持硬盘分区的容量不同。
  • MBR分区直接存储数据和引导记录,GPT分区的数据和引导记录是分开存储的
  • GPT支持大于2T的硬盘,可以支持128个分区

管理磁盘

虚拟机添加硬盘

  • 关闭虚拟机:添加硬盘的时候必须要关闭电源
  • 编辑虚拟机设置 ==> 虚拟机设置 ==> 添加 ==> 下一步(一直点下一步就可以了)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    添加成功之后记得点击确认。
    开机的时候会有如下显示
    在这里插入图片描述

查看磁盘信息

法一:查看磁盘的命令:ll /dev/sd*(是ls -l /dev/sd*的简写)
eg:

brw-rw----. 1 root disk 8,  0 119 23:30 /dev/sda
brw-rw----. 1 root disk 8,  1 119 23:30 /dev/sda1
brw-rw----. 1 root disk 8,  2 119 23:30 /dev/sda2
brw-rw----. 1 root disk 8, 16 119 23:30 /dev/sdb
brw-rw----. 1 root disk 8, 32 119 23:30 /dev/sdc
brw-rw----. 1 root disk 8, 48 119 23:30 /dev/sdd
brw-rw----. 1 root disk 8, 64 119 23:30 /dev/sde
brw-rw----. 1 root disk 8, 80 119 23:30 /dev/sdf
brw-rw----. 1 root disk 8, 96 119 23:30 /dev/sdg
  • 开头的b: 是block的简写,表示是硬盘文件
  • disk:是磁盘组,用来管理磁盘的
  • 从上面的信息可以看出此计算机有7块硬盘,编号从a到g,注意sda1sda2是磁盘sda的分区,表示的都是sda这块磁盘,磁盘分区后才能存储数据

法二:查看磁盘的命令:lsblk

eg:

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0    5G  0 disk 
sdc               8:32   0    5G  0 disk 
sdd               8:48   0    5G  0 disk 
sde               8:64   0    5G  0 disk 
sdf               8:80   0    5G  0 disk 
sdg               8:96   0    5G  0 disk 
sr0              11:0    1  4.4G  0 rom  /run/media/root/CentOS 7 x86_64
  • NAME:磁盘名称
  • SIZE:表示磁盘大小
    上述信息:
    sda分区为sda1和sda2,sda1的大小是1G,sda2的大小是2G,sda2再进行分卷,分为centos-root centos-swap

磁盘分区流程

硬盘光添加完是不能使用的,还需要进行一系列的操作才能存储数据被我们使用。
需要进行如下操作:分区(MBR或者GPT)⇒ 格式化文件系统 ⇒ 挂载mount

创建分区

这里使用MBR分区为例:
(MBR的分区命令就是fdisk, GPT的分区命令是gdisk其他操作是一样的)

  • 启动分区工具:fdisk /dev/硬盘名称
[root@localhost ~]# fdisk /dev/sdb
  • 进入会话模式
    (1)输入命令之后提示如下信息:
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x74b42328 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):

提示你,是否开始磁盘分区,此时按n表示开始分区。
(2)按n之后显示如下内容

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 

选择分区类型:
p:主分区(MBR模式最多划分4个主分区)
e:扩展分区
此时按p表示选择主分区。
(3)按p后显示如下信息:

Select (default p): p
分区号 (1-4,默认 1):

选择当前主分区分区的分区号,一般从1编号开始分区。

(4)输入1后显示如下信息:

分区号 (1-4,默认 1):1
起始 扇区 (2048-10485759,默认为 2048):

选择第一个分区的起始扇区的标号位置,默认位置是上一个分区的结束位置,如果没有上一个分区,默认从2048开始。一般直接输入回车就可以了。
10485759的计算方式:
已知当前硬盘的大小是5G, 5GB = 5120MB = 5242880KB = 5368709120B, 一个扇区的大小固定式512B,所以扇区的个数是:5368709120/512 = 10485760, 编号是从0开始的。前面四个扇区存储的是MBR分区的方式,记录每个分区的大小和起始节点。

(5)输入回车之后显示

起始 扇区 (2048-10485759,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):

选择第一个分区的结束位置的扇区编号,但是也可以直接写改分区需要分配多大的内存,如果想要分配2个G的内存直接输入+2G即可。

(6)输入+2G后显示

Last 扇区, +扇区 or +size{K,M,G} (2048-10485759,默认为 10485759):+2G
分区 1 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):

目前是分好区了,但还没通知磁盘,我们需要输入w,将该分区信息写入磁盘。
此时也可以输入n,继续进行分区,所有空间都分配好之后再按 w进行保存。

(7)输入w保存分区信息,自动退出分区工具

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
  • 刷新分区表
    partprobe /dev/硬盘名称
    按上述案例我们执行
partprobe /dev/sdb
  • 查看分区结果
    输入命令之后fdisk -l /dev/硬盘名称
[root@localhost ~]# fdisk -l /dev/sdb

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x74b42328

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux

fdisk -l /dev/硬盘名称表示查看磁盘的具体信息,磁盘的大小,字节数,扇区数,以及磁盘的分区大小。

创建文件系统

磁盘分区之后不能直接使用,还需要创建对应的文件系统才能使用。 文件系统的作用是给存储空间分块和编号,便于数据的存储和管理。
创建文件系统的命令:mkfs.ext4 /dev/硬盘分区名 等价于 mkfs -t ext4 /dev/硬盘分区名

  • mkfs.ext4 是 make(创造)、file(文件)、system(系统)、extend4(扩展文件系统第四代。是文件系统的类型)
  • /dev/硬盘分区名:表示的是需要创建文件系统的分区,需要格式化的分区。
[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
  • 块大小=4096 (log=2) 表示每个分块的大小
挂载mount

磁盘是一个文件,文件里面不能放文件夹,这个时候就需要对文件进行挂载,给磁盘找个文件夹 。
语法:mount -t 文件系统类型 需要挂载的磁盘 挂载的目标文件夹
挂载完成之后,该文件夹就相当于是新磁盘分区的空间,在里面存储内容占取的是新磁盘分区的空间,这就是磁盘的挂载。
磁盘分区可以挂载在任意文件夹下。
挂载就是为磁盘存储数据信息提供一个访问入口,为访问磁盘提供一个门

eg:

[root@localhost mnt]# mkdir /mnt/disk1
[root@localhost mnt]# mount -t ext4 /dev/sdb1 /mnt/disk1

取消挂载的语法:unmount 需要卸载的磁盘

注意: monut的挂载命令是临时挂载,重启后是不会显示挂载信息的,想要实现永久挂载,需要把挂载命令放到文件/etc/fstab文件中。/etc/fstab文件存储的是所有硬盘的挂载信息

查看挂载信息

法一:df -hT

[root@localhost mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  974M     0  974M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M    2% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  5.2G   12G   31% /
/dev/sda1               xfs      1014M  172M  843M   17% /boot
tmpfs                   tmpfs     199M   44K  198M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               ext4      2.0G  6.0M  1.8G    1% /mnt/disk1

最后一行是我们刚才挂载的磁盘信息:

  • 文件系统: 挂载的磁盘分区
  • 类型:文件系统类型
  • 容量:分区的容量
  • 已用:分区已经使用的容量,当前有内容是文件系统所占取的空间
  • 挂载点: 磁盘分区挂载的文件

上面几行的信息显示的都是第一块磁盘的挂载信息。

法二:使用mount

[root@localhost mnt]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
...
(rw,nosuid,nodev,relatime,user_id=0,group_id=0)
/dev/sr0 on /run/media/root/CentOS 7 x86_64 type iso9660 (ro,nosuid,nodev,relatime,uid=0,gid=0,iocharset=utf8,dmode=0500,mode=0400,uhelper=udisks2)
/dev/sdb1 on /mnt/disk1 type ext4 (rw,relatime,seclabel,data=ordered)

最后一行就是刚才设置的挂载信息。

注意:没有被分区的空间仍然不可用,只有已经进行分区的空间才可用。

剩余空间继续分区

继续执行一遍上面的 磁盘分区流程即可。

  • 划分分区时,p命令是查看当前磁盘的分区情况:
命令(输入 m 获取帮助):p

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x74b42328

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104   83  Linux

MBR如何划分更多的分区

MBR最多划分4个分区,如果还要继续划分第5个分区就会显示如下内容:

命令(输入 m 获取帮助):n
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.

就是:如果你想要创建更多的分区就必须使用扩展分区。

扩展分区的主分区的区别:

  • 如果单纯用来存储文件,主分区和扩展分区没有任何区别
  • 区别在于主分区可以用来装操作系统
为什么只能有4个主分区

MBR分区前面的512个字节是主引导记录,其中有64字节被用于存储分区表,这64个字节被平均分成4份,一份16个字节,用来存储每个主分区的起始位置和结束位置。这64个字节能且只能分四个部分,所以只能划分为4个主分区。
在这里插入图片描述

扩展分区的引入

扩展分区的原理是:放弃一个主分区,把它设置为扩展分区,扩展分区可以继续进行划分,划分为逻辑分区,想划成多少个逻辑分区就划分成多少个逻辑分区。
注意:扩展分区相当于一个容器,他容纳的是逻辑分区,所以无法在扩展分区存放数据,只能在逻辑分区存放数据,不划分逻辑分区是无法存放数据的。
在这里插入图片描述
操作:

  • 删除一个主分区
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除

命令(输入 m 获取帮助):
  • 创建扩展分区
    常规的创建分区的流程只不过分区类型选择e(扩展分区):
命令(输入 m 获取帮助):n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e): e
已选择分区 4
起始 扇区 (5015552-10485759,默认为 5015552):
将使用默认值 5015552
Last 扇区, +扇区 or +size{K,M,G} (5015552-10485759,默认为 10485759):
将使用默认值 10485759
分区 4 已设置为 Extended 类型,大小设为 2.6 GiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:5368 MB, 5368709120 字节,10485760 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x74b42328

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     4605951      204800   83  Linux
/dev/sdb3         4605952     5015551      204800   83  Linux
/dev/sdb4         5015552    10485759     2735104    5  Extended

/dev/sdb4就是扩展分区

  • 创建逻辑分区
    直接输入n即可,继续创建逻辑分区,其他操作和创建主分区一样
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (5017600-10485759,默认为 5017600):
将使用默认值 5017600
Last 扇区, +扇区 or +size{K,M,G} (5017600-10485759,默认为 10485759):+200M
分区 5 已设置为 Linux 类型,大小设为 200 MiB

命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (5429248-10485759,默认为 5429248):
将使用默认值 5429248
Last 扇区, +扇区 or +size{K,M,G} (5429248-10485759,默认为 10485759):+200M
分区 6 已设置为 Linux 类型,大小设为 200 MiB

命令(输入 m 获取帮助):N
All primary partitions are in use
添加逻辑分区 7
起始 扇区 (5840896-10485759,默认为 5840896):
将使用默认值 5840896
Last 扇区, +扇区 or +size{K,M,G} (5840896-10485759,默认为 10485759):
将使用默认值 10485759
分区 7 已设置为 Linux 类型,大小设为 2.2 GiB

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost ~]# partprobe /dev/sdb
  • 查看分区结果
    lsblk命令:
    在这里插入图片描述
  • 逻辑分区的格式化和挂载和主分区的操作是一样的不再赘述,这里以挂载sdb5为例,查看一下结果:
[root@localhost ~]# mkfs.ext4 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
        8193, 24577, 40961, 57345, 73729

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 

[root@localhost ~]# mkdir /mnt/disk5
[root@localhost ~]# mount -t ext4 /dev/sdb5 /mnt/disk5
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  974M     0  974M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M    2% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  5.2G   12G   31% /
/dev/sda1               xfs      1014M  172M  843M   17% /boot
tmpfs                   tmpfs     199M   32K  199M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb5               ext4      190M  1.6M  175M    1% /mnt/disk5

可以看到逻辑分区sdb5已经挂载到文件夹/mnt/disk5上。

逻辑卷LVM

物理空间是限定的,当过一个文件非常大,需要放在多个磁盘进行存储,这种存储方式是不便于管理(拷贝、删除、授权)的。所以说我们不会将一个文件分储在多个磁盘上的。单靠物理磁盘是解决不了空间增长的问题的。

我们可以使用逻辑卷扩充一个磁盘分区的大小。

是什么

逻辑卷管理是一种高级的分区方式 。是管理磁盘的一种方式,性质与基本磁盘无异。
在这里插入图片描述

特点

使用逻辑卷可以随意扩张磁盘的大小。

术语

  • PV:物理卷
  • VG:卷组
  • LV:逻辑卷

创建LVM

  • 准备物理磁盘
    按虚拟机添加硬盘的方式添加几块物理磁盘
  • pv
    将物理磁盘,转换成物理卷PV
    命令:pvcreate 硬盘名
[root@localhost mnt]# pvcreate /dev/sdf
  Physical volume "/dev/sdf" successfully created.
  • vg
    创建卷组VG,将物理卷作为组成员创建卷组
    命令:vgcreate 卷组名 卷组成员
[root@localhost mnt]# vgcreate vg1 /dev/sdf
  Volume group "vg1" successfully created
  • lv
    创建逻辑卷LV,从卷组中分出部分空间创建逻辑卷
    命令:lvcreate -L 逻辑卷大小 -n 逻辑卷名 卷组VG名
    eg:lvcreate -L 4G -n lv1 vg1
[root@localhost ~]# lvcreate -L 4G -n lv1 vg1
  Logical volume "lv1" created.
  • 创建文件系统并挂载
    (和磁盘分区的操作一样)
    创建文件系统:mkfs.ext4 /dev/卷组名/逻辑卷名
    创建挂载点:mkdir /mnt/lv1 (临时挂载,开机会消失)
    挂载:mount /dev/卷组名/逻辑卷名 挂载点

上述三条命令是:

mkfs.ext4 /dev/vg1/lv1
mkdir /mnt/lv1
mount /dev/vg1/lv1 /mnt/lv1

查看挂载信息:

[root@localhost ~]# df -hT
文件系统                  类型      容量   已用  可用   已用% 挂载点
/dev/mapper/vg1-lv1     ext4      3.9G   16M  3.6G    1% /mnt/lv1

注意:逻辑卷的定位是 /dev/卷组名/逻辑卷名

此时查看硬盘信息:

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdf               8:80   0    5G  0 disk 
└─vg1-lv1       253:2    0    4G  0 lvm  /mnt/lv1

VG卷组扩容

卷组的空间也可能被占满,比如所有空间都分给了逻辑卷,此时就需要对卷组扩容。

卷组扩容只需要新建物理卷,然后把物理卷放到卷组中就可以了。

  • 新建物理卷:pvcreate /dev/硬盘名
  • 物理卷放到卷组中:vgextend 卷组名 刚才创建的物理卷

卷组中物理卷的空间总和就是该卷组的空间。

实际操作:

[root@localhost ~]# pvcreate /dev/sdg
  Physical volume "/dev/sdg" successfully created.
[root@localhost ~]# vgextend vg1 /dev/sdg
  Volume group "vg1" successfully extended

这样就扩充成功了,使用vgs查看物理卷

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0 
  vg1      2   1   0 wz--n-   9.99g 5.99g

原本的vg的大小是5G,扩容之后是10G

PV,VG,LV的查看方式

  • 物理卷的查看方式: pvs
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree   
  /dev/sda2  centos lvm2 a--  <19.00g       0 
  /dev/sdf   vg1    lvm2 a--   <5.00g 1020.00m
  /dev/sdg   vg1    lvm2 a--   <5.00g   <5.00g

PSize:物理卷的大小
PFree :物理卷的空余空间

  • 卷组的查看方式:vgs
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0 
  vg1      2   1   0 wz--n-   9.99g 5.99g

VG:卷组名
PV:卷组包含的物理卷个数
LV:化了一个逻辑卷
VSize:卷组的大小
VFree:卷组的空余方式

  • 逻辑卷卷的查看方式: lvs

LV扩容

LV的扩容本质上就是扩展逻辑卷的容量。
占满lv逻辑卷空间

 dd if=/dev/zero of=/mnt/lv1/1.txt bs=1M count=5000

查看剩余空间

[root@localhost ~]# df -hT
文件系统                  类型      容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1     ext4      3.9G  3.8G     0  100% /mnt/lv1

lv扩容
lv扩容需要先查看对应的卷组是否还有空间,如果没有空间需要先对卷组扩容,如果有空间就可以对lv直接扩容。

  • 查看卷组是否有空间命令:vgs
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0 
  vg1      2   1   0 wz--n-   9.99g 5.99g
  • lv扩容:
    lv的扩容命令是:lvextend -L +扩充的大小 /dev/卷组名/逻辑卷名
    如:lvextend -L +200M /dev/vg1/lv1
[root@localhost ~]# lvextend -L +200M /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from 4.00 GiB (1024 extents) to <4.20 GiB (1074 extents).
  Logical volume vg1/lv1 successfully resized.
[root@localhost ~]# lvextend -L +4G /dev/vg1/lv1
  Size of logical volume vg1/lv1 changed from <4.20 GiB (1074 extents) to <8.20 GiB (2098 extents).
  Logical volume vg1/lv1 successfully resized.
  • 查看扩容结果:lvs
[root@localhost ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g                                                    
  swap centos -wi-ao----   2.00g                                                    
  lv1  vg1    -wi-a-----  <8.20g   

我们可以看到逻辑卷lv1已经扩容到8.2g了。

刷新文件系统
上述命令是为lv扩容了,但是还没有同步到文件系统上:

[root@localhost ~]# df -hT
文件系统                  类型      容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1     ext4      3.9G  3.8G     0  100% /mnt/lv1

可以看到逻辑卷lv1的容量仍然是4G,不是扩容后的大小,这是因为我们需要将逻辑卷的更新告知文件系统,就需要进行FS扩容。

FS扩容:resize2fs /dev/卷组名/逻辑卷

[root@localhost ~]# resize2fs /dev/vg1/lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg1/lv1 is mounted on /mnt/lv1; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/vg1/lv1 is now 2148352 blocks long.
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv1     ext4      8.0G  3.8G  3.8G   51% /mnt/lv1

此时就完成了LV扩容

交换分区管理Swap

swap简介

交换分区swap其实就是一个普通的分区,任何一个分区都可以当做交换分区。
swap的作用:‘提升内存’的容量,防止内存溢出(OOM
交换分区swap是一块普通的分区,是硬盘上的一块存储空间,当内存的空间不够用的时候可以存储在交换分区swap中,swap中存储的是热点数据,可以提高读取速度。
(在linux中叫交换分区swap,对应的在windows中叫虚拟内存)
在这里插入图片描述

swap的大小:
swap交换分区的推荐大小是内存的2倍。
但是在实际使用时:

  • 大于4GB而小于16GB内存的系统,最小需要4GB交换空间;
  • 大于16GB而小于64GB内存的系统,最小需要8GB交换空间;
  • 大于64GB而小于256GB内存的系统,最小需要16GB交换空间。

查看当前交换分区

查看命令:free -m

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         821          72          19        1086         974
Swap:          2047           0        2047

可以看到swap的交换分区的大小是2G

[root@localhost ~]# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
...

我们通过lsblk可以看出swap交换分区是从sda硬盘的sda2分区中,并且大小是2G。

设置交换分区

准备分区

  • 准备/dev/sde磁盘,划分2G分区
fdisk /dev/sde

过程略

  • 划分分区后,按t,将类型设置为82
命令(输入 m 获取帮助):t
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

82表示的是交换分区的类型,按l命令可以查看分区的所有类型

命令(输入 m 获取帮助):l

 0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
...

可以看到82表示的是交换分区swap

  • w进行保存
  • 刷新分区表
    partprobe /dev/sde 刷硬盘
[root@localhost ~]# partprobe /dev/sde
[root@localhost ~]# ll /dev/sde*
brw-rw----. 1 root disk 8, 64 1月  21 14:19 /dev/sde
brw-rw----. 1 root disk 8, 65 1月  21 14:19 /dev/sde1

格式化

格式化交换分区:mkswap /dev/硬盘分区

[root@localhost ~]# mkswap /dev/sde1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=b5b89581-4449-42c3-ae23-d02c98437efb

UUID是磁盘的身份证号

挂载

挂载分区:swapon /dev/磁盘分区
此时 /dev/sde1就表示是交换分区,但是我们还需要挂载一下。

[root@localhost ~]# swapon /dev/sde1

取消挂载的命令是swaoff /dev/磁盘分区

验证

查看交换分区

[root@localhost ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         808          93          19        1078         987
Swap:          4095           0        4095

可以看到当前的交换分区是4G,有2G是刚才我们手动设置的

文件系统

划分一个磁盘基本分为三大步:分区、格式化和挂载,其中最重要的就是格式化,格式化就是将存储空间划分成小块的过程,格式化的过程是创建文件系统的过程

文件系统的作用是

  • 将文件准确地放到磁盘的某个位置
  • 快速定位文件在磁盘的位置的位置

文件系统的类型

windows常见的文件系统:FAT16、FAT32、NTFS
Linux常见的文件系统:EXT3、EXT4、XFS
现在Linux常用的文件系统就是EXT3、4。

EXT3/4文件系统

类型: EXT3/4 文件系统的类型是索引文件系统
索引文件系统组成:索引文件系统由文件索引值(inode)和存储块(block)组成,不同的文件有自己的索引值(inode),同时索引值又存储着对应的块信息:
在这里插入图片描述

  • inode: 记录各个文件的属性,记录文件的元数据metadata。运输局是指文件的属性、大小、权限、属主属组、连接数、块数量块编号。一个文件占用一个inode,一个inode的大小是128bytes。
  • block:是存储文件的实际空间。每一个block的大小默认为4096b,即4K。block是存储数据最基本的单元:如果文件小于4k,那么该文件就会占取一个块空间,且无论该块是否还剩余空间,下一个文件都是从下一个块开始存储;如果文件大于4K,那么该文件就会占取多个快空间。如:一个5K的文件后面是一个2K的文件,那么存储方式就是,5k的文件占取第1、2个块,2K的文件占取第三个块。
  • superblock:block与inode的总量,显示未使用和已使用的inode和block的数量。

查看文件的inode:
命令:ls -l -i 文件名 (即ls命令添加 -i参数就可以查看文件的inode)

[root@localhost disk1]# touch 1.txt
[root@localhost disk1]# ls -l -i 1.txt
12 -rw-r--r--. 1 root root 2023567360 1月  30 22:46 1.txt

其中第一个数据12就是该文件的inode。

查看一个磁盘可以存储多少个文件:
即查看文件的inode数量,
命令:df -i

文件系统                  Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1                131072      12  131060       1% /mnt/disk1

可以看到sdb1分区有 131072 个Inode,即最多可以存储131072 个文件。
eg:

[root@localhost disk1]# rm -rf *.txt
[root@localhost disk1]# touch file{1..65527}
[root@localhost disk1]# touch file{65528..131061}
[root@localhost disk1]# ls -l | wc -l
131063
[root@localhost disk1]# df -i
文件系统                  Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sdb1                131072  131072       0     100% /mnt/disk1

ls -l | wc -l:用于查询磁盘文件个数
总共有131063个文件,因为里面还有个系统文件夹,所以文件个数和inode个数不一样。但是此时sdb1分区已经满了,再往sdb1分区写文件就写不进去了。

[root@localhost disk1]# touch file{131062..131070}
touch: 无法创建"file131062": 设备上没有空间
touch: 无法创建"file131063": 设备上没有空间
touch: 无法创建"file131064": 设备上没有空间
touch: 无法创建"file131065": 设备上没有空间
touch: 无法创建"file131066": 设备上没有空间
touch: 无法创建"file131067": 设备上没有空间
touch: 无法创建"file131068": 设备上没有空间
touch: 无法创建"file131069": 设备上没有空间
touch: 无法创建"file131070": 设备上没有空间

此时只是不能创建文件了,但是文件都还是空文件。即inode满了,但是block都还是空的。我们可以在文件中编写内容,填充block。

[root@localhost disk1]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/sdb1               ext4      2.0G  9.7M  1.8G    1% /mnt/disk1

可以看到可用空间还有1.8G呢。
占取block空间:

[root@localhost disk1]# dd if=/dev/zero of=./file1 bs=1M count=3000
dd: 写入"./file1" 出错: 设备上没有空间
记录了1927+0 的读入
记录了1926+0 的写出
2019708928字节(2.0 GB)已复制,12.5855 秒,160 MB/秒
[root@localhost disk1]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/sdb1               ext4      2.0G  1.9G     0  100% /mnt/disk1

此时sdb1分区的空间已经被占满。
我们发现:一个文件可以占取磁盘分区的所有空间,限制文件大小的是磁盘分区的大小,而不是block块(4096kb)的大小
此时再向file2中写内容,会报错:

[root@localhost disk1]# dd if=/dev/zero of=./file2 bs=1k count=3000
dd: 写入"./file2" 出错: 设备上没有空间
记录了1+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,0.000398932 秒,0.0 kB/秒

系统限制:

  • EXT3:文件系统最大16TB
  • EXT4:文件系统最大16TB
  • XFS:文件系统最大100TB

磁盘文件碎片

  • 是指一个文件可能不会被存储在连续的空间里。如:A文件占取块1,2,3;B文件展示4、5;C文件占取6、7。如果此时删除了文件B,并且存储需要占取4个block的文件D,那么文件D所占取的块就是4,5,8,9。这就是文件碎片。文件碎片的产生是不可避免的,不影响使用,只影响读取速度

确定系统有几个文件系统

系统文件系统的数量是根据格式化的次数决定的,格式化了几次就有几个文件系统。即执行了几次mkfs.ext4命令就有几个文件系统。

文件链接

文件链接就是快捷方式。

符号链接

符号链接就是软链接,可以通过软链接快速访问文件。

软链接的创建方式

  • 创建一个文件并输入内容
[root@localhost disk1]# echo 111 > /file1
[root@localhost disk1]# cat /file1
111
  • 创建文件的软链接ln -s 文件的实际位置 创建软链接的位置
[root@localhost disk1]# ln -s /file1 /root/桌面/file11

在这里插入图片描述

[root@localhost disk1]# ls -l /root/桌面/file11
lrwxrwxrwx. 1 root root 6 1月  30 23:42 /root/桌面/file11 -> /file1

第一个字母l表示是link,快捷键。

/root/桌面/file11 就是 /file1 的软连接,删除源文件,软连接闪烁,不可用。

软链接的特点

  • 软链接像快捷方式,可以对文件和目录做软连接。
  • 软链接记录的只是源文件的绝对路径。
  • 软链接失去源文件不可用。如果源文件删除,或改名,或移动位置软链接都不可用,因为软连接存储的是文件的绝对路径。

硬链接

硬链接和软连接很像,但是硬链接只能在一个分区里面做。
硬链接的创建方式

  • 创建文件
[root@localhost disk1]# echo 222 > /file2
[root@localhost disk1]# cat /file2
222
  • 创建文件的硬链接ln 文件的实际位置 创建软链接的位置
[root@localhost disk1]# ln /file2 /file2-h1
[root@localhost disk1]# ls -l /file2 /file2-h1
-rw-r--r--. 2 root root 4 1月  30 23:57 /file2
-rw-r--r--. 2 root root 4 1月  30 23:57 /file2-h1

其中的2表示的是文件的硬链接数,文件本身算一个硬链接。

硬链接的特点

  • 硬链接只能在同分区做。创建同分区硬链接成功,创建不同分区硬链接失败。
  • 硬链接只能针对文件做。不能对目录做。
  • 硬链接失去源文件仍然可用。如果源文件删除,访问硬链接,还是可以访问的,硬链接相当于备份。

RAID

RAID的作用:

  • 容错,保障数据的安全性:备份数据,当磁盘损坏的时候,可以保证数据不丢失
  • 提升磁盘的读写速度

什么是RAID

RAID:廉价磁盘冗余阵列
就是将磁盘的数据备份到廉价的磁盘上,这种策略就叫做RAID。

RAID的类型

常见的RAID类型有RAID0,RAID1,RAID5

  • 操作系统一般做成RAID1
  • 对于重要的数据做成RAID5

RAID0

RAID0又叫条带集,2块及以上磁盘,如果磁盘数是n,那么读写速度比原来快n倍,但是不能容错。

  • 读写速度比原来快n倍,n磁盘同时读写,速度自然是之前的n倍
  • 由于没有备份盘,所以不容错

在这里插入图片描述

RAID1

RAID1俗称镜像集,包含2块磁盘,容量是50%,读写速度一般,容错

  • 包含2块磁盘,容量是50%:一块磁盘存储数据,一块磁盘用来备份,所以实际上只有一半的空间可以使用。
  • 容错: RAID1备份磁盘数据,可以容错。
    在这里插入图片描述

RAID5

RAID5包含3块及以上磁盘,并且所有磁盘大小一样,利用率(n-1)/n,读写速度快。容错。

  • 最少包含3块磁盘,其中有一块磁盘是校验盘做数据备份用,其余盘都是数据盘,用来存储数据的,所以利用率是(n-1)/n。RAID5备份的原理是:三块盘其中有两块是数据盘,一块是校验盘,存储数据的时候,将数据拆成两份,两块数据盘各一份,再将两份数据经过某种运算得到的结果存储在校验盘中。这样计时其中一个数据盘坏了,通过逆运算还可以获取到损坏的数据盘。
  • 如果多余3块盘,假设总共有n块盘,那么n-1块磁盘用来存储数据,数据将被分成n-1份,n-1份数据的计算结果被存储在校验盘上。
  • 读写速度快:是因为一个数据被存储在n-1块盘上,这n-1块盘同时读写,速度当然快。如果n-1=2,速度就比原来快2倍;如果n-1=4,速度就比原来快4倍
  • 热备盘,RAID5种可能会有热备盘的存在, 热备盘的作用是当3块盘其中的任意一块盘损坏之后,热备盘就能够及时的充当损坏的那块盘的角色。

在这里插入图片描述

RAID的分类

  • 硬RAID:需要RAID卡(硬件),有自己的CPU,处理速度快。
  • 软RAID:通过操作系统实现,比如Windows、Linux

软RAID创建示例

使用软RAID(以RAID5为例),分为如下几步:

  • 准备4块硬盘 :3块数据盘+1块热备盘
    在虚拟机上创建4块虚拟硬盘
[root@localhost ~]# ls /dev/sd* -l
brw-rw----. 1 root disk 8, 112 22 21:35 /dev/sdh
brw-rw----. 1 root disk 8, 128 22 21:35 /dev/sdi
brw-rw----. 1 root disk 8, 144 22 21:35 /dev/sdj
brw-rw----. 1 root disk 8, 160 22 21:35 /dev/sdk
  • 创建RAID
    命令:mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{h,i,j,k}
    -C: 创建
    /dev/md0: 给RAID命名,/dev/RAID的名字
    -l5:等级是5,代表RAID5
    -n3:表示的是数据盘的数量
    -x1:表示热备盘的数量
    /dev/sd{h,i,j,k}:对哪些磁盘做

创建示例

[root@localhost ~]# mdadm -C /dev/md0 -l5 -n3 -x1 /dev/sd{h,i,j,k}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

如果机器上没有mdadm命令,需要手动安装一下

yum -y install mdadm
  • 格式化挂载
    RAID本质上就是一块磁盘,我们可以将其进行挂载。
[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /mnt/raid5
[root@localhost ~]# mount /dev/md0 /mnt/raid5/
[root@localhost ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/md0                ext4      2.0G   52M  1.8G    3% /mnt/raid5

只有2G空间是因为:4块盘,2块存数据,一块校验盘,一块热备盘。

  • 查看RAID信息
    mdadm -D RAID盘
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Feb  2 22:14:19 2024
        Raid Level : raid5
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent
...

    Number   Major   Minor   RaidDevice State
       0       8      112        0      active sync   /dev/sdh
       1       8      128        1      active sync   /dev/sdi
       4       8      144        2      active sync   /dev/sdj

       3       8      160        -      spare   /dev/sdk

  • 模拟一块硬盘损坏并移除
    损坏磁盘mdadm /dev/md0 -f /dev/sdh -r /dev/sdh,表示强制删除h盘。
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdh -r /dev/sdh
mdadm: set /dev/sdh faulty in /dev/md0
mdadm: hot removed /dev/sdh from /dev/md0
[root@localhost ~]# mdadm -D /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : Fri Feb  2 22:14:19 2024
        Raid Level : raid5
        Array Size : 2093056 (2044.00 MiB 2143.29 MB)
     Used Dev Size : 1046528 (1022.00 MiB 1071.64 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

...

    Number   Major   Minor   RaidDevice State
       3       8      160        0      active sync   /dev/sdk
       1       8      128        1      active sync   /dev/sdi
       4       8      144        2      active sync   /dev/sdj

可以看到热备盘sdk现在被作为数据盘使用

补充:挂载和卸载问题

  • 如果一个分区挂载在一个文件夹上,该分区卸载时候,原挂载分区的内容会移到sda分区上。
  • 如果一个分区挂载在一个有内容的文件夹上,那么挂载的分区的内容会覆盖文件夹的内容,如果在卸载该分区,文件夹的内容还是之前存储的内容。简单来说,未挂载时,文件夹存储的是 sda 的内容,挂载后文件存储的是新分区的内容。
  • 注意挂载是临时的,当计算机重启之前挂载的内容会消失,也可以永久挂载但是可能会影响操作系统的启动。
  • 永久挂载的方式是将挂载命令编写在一个系统启动文件中。

补充:电脑重启命令

  • reboot
  • init 6

补充:写满一个磁盘

dd if=/dev/zero of=/mnt/disk4/1.txt bs=1M count=1000是一个抄写命令

  • dd: 抄写命令
  • if=/dev/zero:抄写的位置
  • of=/mnt/disk4/1.txt:抄写的目标位置
  • bs =1M :抄写的大小
  • count:抄写的次数
    上述命令就是表示抄写/dev/zero中的内容到/mnt/disk4/1.txt中,每次抄写1MB的大小,总共抄写1000次。

eg:

[root@localhost mnt]# dd if=/dev/zero of=/mnt/disk1/1.txt bs=1M count=2000
dd: 写入"/mnt/disk1/1.txt" 出错: 设备上没有空间
记录了1930+0 的读入
记录了1929+0 的写出
2023567360字节(2.0 GB)已复制,8.16791 秒,248 MB/秒
[root@localhost mnt]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
devtmpfs                devtmpfs  974M     0  974M    0% /dev
tmpfs                   tmpfs     991M     0  991M    0% /dev/shm
tmpfs                   tmpfs     991M   11M  980M    2% /run
tmpfs                   tmpfs     991M     0  991M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        17G  5.2G   12G   31% /
/dev/sda1               xfs      1014M  172M  843M   17% /boot
tmpfs                   tmpfs     199M   28K  199M    1% /run/user/0
/dev/sr0                iso9660   4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
/dev/sdb1               ext4      2.0G  1.9G     0  100% /mnt/disk1

可以看到磁盘分区空间已满

补充:卸载分区

如果一个分区不想使用了,一定要先卸载umount,再删除分区。
删除分区的命令是:fdisk -d

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

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

相关文章

【二进制漏洞】缓冲区溢出漏洞

天命&#xff1a;好像复现成功了&#xff0c;又好像没有完全成功 学习视频&#xff1a;抓住漏洞&#xff01;缓冲区溢出漏洞利用实例&#xff0c;如何利用溢出执行Shell Code_哔哩哔哩_bilibili 漏洞复现 实验环境&#xff1a;kali &#xff08;其实啥都试过&#xff0c;windo…

二叉树(1)

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

Git―基本操作

Git ⛅认识 Git⛅安装 GitCentos(7.6)Ubuntu ⛅Git―基本操作创建本地仓库&#x1f342;配置本地仓库&#x1f342;工作区, 暂存区, 版本库&#x1f342;版本库工作区 添加文件&#x1f342;查看文件&#x1f342;修改文件&#x1f342;版本回退&#x1f342;☃️案例 撤销修改…

Linux一键部署telegraf 实现Grafana Linux 图形展示

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

【iOS ARKit】2D肢体动作捕捉

人体肢体动作捕捉在动漫影视制作、游戏CG 动画、实时模型驱动中有着广泛的应用&#xff0c;利用 ARKit&#xff0c;无须额外的硬件设备即可实现 2D和3D人体一系列关节和骨骼的动态捕捉&#xff0c;由于移动AR 的便携性及低成本&#xff0c;必将促进相关产业的发展。 ARBody Tr…

2024牛客寒假算法基础集训营1

文章目录 A DFS搜索M牛客老粉才知道的秘密G why外卖E 本题又主要考察了贪心B 关鸡C 按闹分配 今天的牛客&#xff0c;说是都是基础题&#xff0c;头昏昏的&#xff0c;感觉真不会写&#xff0c;只能赛后补题了 A DFS搜索 写的时候刚开始以为还是比较难的&#xff0c;和dfs有关…

【甲方安全建设】DevOps初体验

文章目录 前言传统的开发方式&#xff1a;Docker-解决环境问题 DevOps-CI/CD走向流水线Jenkins工作流程Git拉取代码Maven构建打包通过SSH连接后端服务器 实现效果 DevSecOps-安全赋能关于安全平台漏洞扫描漏洞预警TODO 前言 临近春节&#xff0c;笔者经过半年北漂&#xff0c;…

【GitHub项目推荐--一个由OpenAI提供支持的聊天机器人和虚拟助手的构建平台】【转载】

Botpress Botpress是一个开源项目&#xff0c;它提供了一个平台&#xff0c;用于构建、部署和管理基于人工智能的聊天机器人和虚拟助手 github地址&#xff1a; https://github.com/botpress/botpress Botpress的介绍 Botpress是一个开源项目&#xff0c;它提供了一个平台&…

【PaddleSpeech】语音合成-男声

环境安装 系统&#xff1a;Ubuntu > 16.04 源码下载 使用apt安装 build-essential sudo apt install build-essential 克隆 PaddleSpeech 仓库 # github下载 git clone https://github.com/PaddlePaddle/PaddleSpeech.git # 也可以从gitee下载 git clone https://gite…

音视频数字化(音乐CD)

上篇文章【音视频数字化(音频数字化)】我们聊了音频数字化原理,其中谈到了音乐CD,结尾也提到了一个小问题:“CD音质是最高吗?为什么?”不知道大家是怎么理解的。 其实CD质量只是“无损”存储,但是数字化标准只是“44.1kHz,16bit”,因此相对于现在,音质不能说最高。 …

day03.函数与指针(含new与delete关键字)

一.指针 #include<iostream> using namespace std; #define pi 3.14159//定义常量int main(){cout<<pi<<endl;int a10;int *pNULL;//定义指针p&a;cout<<"a的地址为&#xff1a;"<<p<<endl;cout<<"a"<&l…

【面试深度解析】快手后端一面:G1、IOC、AOP、并发、JVM生产问题定位、可重复读、ThreadLocal

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

C# 引用同一个dll不同版本的程序集

因为项目需要所以必须在项目中引用不同版本的同一程序集 我要引用的文件是newtonsoft.json.dll 两个版本为12.0.0.0 和4.0.0.0 1.如果已经先引入了newtonsoft.json 12.0.0.0版本的程序集&#xff0c;如果直接引入另一个版本的程序集的话会提示不成功&#xff0c;所以先将另一个…

C++学习Day01之双冒号作用域运算符

目录 一、程序二、输出三、分析与总结 一、程序 #include<iostream>int atk 1000; void test01() {int atk 2000;std::cout << "atk " << atk << std::endl;// ::代表作用域 如果前面什么都不添加 代表全局作用域std::cout << &q…

c++阶梯之auto关键字与范围for

auto关键字&#xff08;c11&#xff09; 1. auto关键字的诞生背景 随着程序的逐渐复杂&#xff0c;程序代码中用到的类型也越来越复杂。譬如&#xff1a; 类型难以拼写&#xff1b;含义不明确容易出错。 比如下面一段代码&#xff1a; #include <string> #include &…

Sketch使用手册:从入门到精通的完整教程

Sketch软件是Mac平台上流行的矢量图形编辑软件&#xff0c;旨在帮助用户创建网站、移动应用、图标等各种设计原型。Sketch软件的设计风格简洁明了&#xff0c;界面操作简单易用&#xff0c;非常适合UI/UX设计师、平面设计师等数字创意人员。本文将根据如何使用Sketch&#xff0…

嵌入式中C 语言中的三块技术难点

C 语言在嵌入式学习中是必备的知识&#xff0c;甚至大部分操作系统都要围绕 C 语言进行&#xff0c;而其中有三块技术难点&#xff0c;几乎是公认级别的“难啃的硬骨头”。 今天就来带你将这三块硬骨头细细拆解开来&#xff0c;一定让你看明白了。 0x01 指针 指针是公认最难理…

10. BI - 决策树的使用及可视化

本文为 「茶桁的 AI 秘籍 - BI 篇 第 10 篇」 文章目录 可视化探索决策树原理决策树算法决策树可视化泰坦尼克海难数据 Hi&#xff0c;你好。我是茶桁。 上一节课&#xff0c;咱们了解了图形的具体绘制方法&#xff0c;接下来咱们还要看看除了图形绘制之外&#xff0c;还有哪些…

Redis进阶(一):持久化

持久化 何为持久化&#xff1f; MySQL的事务有四个比较核心的特征&#xff1a;原子性、一致性、持久性和隔离性&#xff0c;这里的持久性和持久化说的是一个事&#xff0c;简单来说&#xff0c;数据存储在硬盘上就是持久&#xff0c;存在内存上那就是不持久&#xff08;重启之后…

PyTorch基础-Tensors属性、Tensor的运算

PyTorch的基本概念 Tensor的基本概念 张量高于标量、向量、矩阵 标量说零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 Tensor与机器学习的关系 Tensor的创建 函数功能Tensor(*size)基础构造函数Tensor(data)类似np.arrayones(*size)全1Tensorzeros(…