逻辑卷管理-LVM

目录

1. LVM的基本概念

2. Linux下创建和管理LVM

3. 环境准备

4. 物理卷管理

4.1. 创建物理卷

4.2. 显示物理卷

4.3. 删除物理卷

4. 卷组管理

4.1. 创建卷组

4.2. 显示卷组

4.3. 扩展卷组

4.4. 缩减卷组

4.5. 删除卷组

4.6. 分割卷组

4.7 组合卷组

5. 逻辑卷管理

5.1. 创建逻辑卷

5.2. 显示逻辑卷

5.3. 创建文件系统并挂载

5.4. 扩展逻辑卷

5.5. 缩减逻辑卷

5.6. 删除逻辑卷


       文件LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分析进行管理的一种机制。LVM是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。在传统的磁盘管理机制中,上层应用是直接访问文件系统来对底层的物理硬盘进行读写。而在LVM中,它会将底层的硬盘进行封装,当我们通过软件去对底层的物理磁盘进行操作时,它不再是直接对分区进行操作,而是通过逻辑卷对底层的物理硬盘进行操作。LVM最大的特点就是可以对磁盘进行动态管理,因为逻辑卷的大小是可以动态调整的,而且不会丢失数据。逻辑卷的技术大大提高了磁盘管理的逻辑性。

1. LVM的基本概念

       LVM中的概念有物理卷、卷组、逻辑卷、物理区块和逻辑区块等,其含义如下:

  • 物理卷(Physical Volume, PV):物理卷是指硬盘/硬盘分区或者从逻辑上与硬盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但是与基本的物理存储介质(如硬盘、分区等)比较却包含有与LVM相关的管理参数。
  • 卷组(Volume Group, VG):卷组是由一个或多个物理卷组成的一个整体,在卷组中可以动态地添加或移除物理卷,卷组名称由用户自行定义。
  •  逻辑卷(Logical Volume,LV):逻辑卷是建立在卷组之上的,与物理卷无直接关系,对于逻辑卷来说,每一个卷组就是一个整体,从这个整体中切出一小块空间,作为用户创建文件系统基础,这一小块空间就称为逻辑卷。
  • 物理区块(Physical Extent, PE):每一个物理卷被划分为称为PE的基本单位,具有唯一编号的PE是可以被LVM寻址的最小单元,PE大小可配置,默认4MB。
  • 逻辑区块(Logical Extend,LE):逻辑卷也被划为为称为LE的可寻址的基本单元,在同一卷组中,LE的大小和PE是相同的,并且一一对应。

       图1描述了存储介质、物理卷、卷组、逻辑卷和文件系统之间的关系。

图1. 存储介质、物理卷、卷组、逻辑卷和文件系统之间的关系

2. Linux下创建和管理LVM

       在UbuntuDebian Linux Mint 上安装 LVM的命令:

          sudo apt install lvm2

       在 CentOSFedoraAlmaLinux Red Hat 上安装 LVM的命令:

          sudo dnf install lvms

       LVM中的主要管理命令如表1所示。

表1. LVM中的管理命令
功能物理卷管理卷组管理逻辑卷管理
扫描(scan)pvscanvgscanlvscan
建立(create)pvcreatevgcreatelvcreate
显示(display)pvdisplayvgdisplaylvdisplay
删除(remove)pvremovevgremovelvremove
缩减(reduce)vgreducelvreduce
扩展(extend)vgextendlvextend

3. 环境准备

     准备4块硬盘:/dev/sdb、/dev/sdc、/dev/sdd和/dev/sde,每个硬盘的容量为10G。将硬盘/dev/sdc划分两个分区:/dev/sdc1和/dev/sdc2,其中,/dev/sdc的容量为2G,/dev/sdc2的容量为8G;将硬盘/dev/sdd划分为两个分区:/dev/sdd1和/dev/sdd2,其中,/dev/sdd1的容量5G,/dev/sdd2的容量为8G。

查看机器分区情况:

lsblk

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sda      8:0    0    50G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0  49.5G  0 part /
sdb      8:16   0    10G  0 disk 
sdc      8:32   0    10G  0 disk 
├─sdc1   8:33   0     2G  0 part 
└─sdc2   8:34   0     8G  0 part 
sdd      8:48   0    10G  0 disk 
├─sdd1   8:49   0     5G  0 part 
└─sdd2   8:50   0     5G  0 part 

sde     8:32   0    10G  0 disk 

...

4. 物理卷管理

4.1. 创建物理卷

       将硬盘/dev/sdb,以及硬盘分区/dev/sdc1、/dev/sdc2、/dev/sdd1、/dev/sdd2转换为物理卷,创建物理卷命令如下:

      # 将硬盘/dev/sdb创建为一个物理卷

         sudo pvcreate /dev/sdb   

WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb.
  Physical volume "/dev/sdb" successfully created.

      # 将硬盘分区/dev/sdc1和/dev/sdc2创建为两个物理卷

         sudo pvcreate /dev/sdc[1,2]   

Physical volume "/dev/sdc1" successfully created.
Physical volume "/dev/sdc2" successfully created.

       # 将硬盘分区/dev/sdd1和/dev/sdd2创建为两个物理卷

          sudo pvcreate /dev/sdd1 /dev/sdd2 

Physical volume "/dev/sdd1" successfully created.
Physical volume "/dev/sdd2" successfully created.

4.2. 显示物理卷

       # 显示所有物理卷信息:

       sudo pvdisplay

  "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
 
PV Name               /dev/sdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               X8hoHa-3Osn-laEc-QlI3-1sT5-aaJZ-TvdTjg
   
  "/dev/sdc1" is a new physical volume of "<2.00 GiB"
  --- NEW Physical volume ---

  PV Name               /dev/sdc1
  VG Name               
  PV Size               <2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               xC3MDe-V3NL-Xgsx-NSFb-8aaW-6OkA-W5CTlr
   
  "/dev/sdc2" is a new physical volume of "<8.00 GiB"
  --- NEW Physical volume ---
 
PV Name               /dev/sdc2
  VG Name               
  PV Size               <8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               MTKNlr-Rk8T-v3qN-l8lR-QhB5-UtxR-3r3Ygt
   
  "/dev/sdd1" is a new physical volume of "<5.00 GiB"
  --- NEW Physical volume ---

  PV Name               /dev/sdd1
  VG Name               
  PV Size               <5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               OL6a9y-oDZG-j8G1-S0kV-2QT9-kBwS-PcnMS5
   
  "/dev/sdd2" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---

  PV Name               /dev/sdd2
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               dM8BcS-tHa7-7mnd-WYZ0-U0TG-7bPW-HLklmR 

       输出显示已经创建了5个物理卷:/dev/sdb、/dev/sdc1、/dev/sdc2、/dev/sdd1、/dev/sdd2。

      # 显示单个物理卷信息:

       sudo pvdisplay /dev/sdb

 "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               X8hoHa-3Osn-laEc-QlI3-1sT5-aaJZ-TvdTjg

4.3. 删除物理卷

      删除一个物理卷的命令如下:

      sudo pvremove /dev/sdd2

 Labels on physical volume "/dev/sdd2" successfully wiped.

4. 卷组管理

4.1. 创建卷组

      将物理卷/dev/sdb、/dev/sdc1和/dev/sdd1组组合成一个卷组,卷组的名称为vg1;将物理卷/dev/sdc2和/dev/sdd2组成一个卷组,卷组的名称为vg2。

      # 创建卷组vg1,该卷组是由物理卷/dev/sdb、/dev/sdc1和/dev/sdd1组成

         sudo vgcreate vg1 /dev/sdb /dev/sdc1 /dev/sdd1

Volume group "vg1" successfully created

      # 创建卷组vg2,该卷组是由物理卷/dev/sdc2和/dev/sdd2组成

         sudo vgcreate vg2 /dev/sdc2 /dev/sdd2

Volume group "vg2" successfully created

4.2. 显示卷组

      # 显示所有卷组信息:

      sudo vgdisplay

--- Volume group ---

VG Name               vg2
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               12.99 GiB
  PE Size               4.00 MiB
  Total PE              3326
  Alloc PE / Size       0 / 0   
  Free  PE / Size       3326 / 12.99 GiB
  VG UUID               6nr7m3-ZsN5-YS6B-XKOd-XWPa-tuw6-hz365v
   
  --- Volume group ---
 
VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <16.99 GiB
  PE Size               4.00 MiB
  Total PE              4349
  Alloc PE / Size       0 / 0   
  Free  PE / Size       4349 / <16.99 GiB
  VG UUID               Isf2u3-0OGe-56zB-wf8k-0JZU-WOce-CJXJPt

       输出显示创建了2个卷组:vg1和vg2。

      # 显示单个卷组信息:

        sudo vgdisplay vg1

 --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <16.99 GiB
  PE Size               4.00 MiB
  Total PE              4349
  Alloc PE / Size       0 / 0   
  Free  PE / Size       4349 / <16.99 GiB
  VG UUID               Isf2u3-0OGe-56zB-wf8k-0JZU-WOce-CJXJPt

       显示卷组的命令还有:

      vgscan:扫描卷组的所有磁盘,并重新构建LVM缓存文件,同时显示卷组。

      vgs:使用可配置格式显示卷组信息,每行一个卷组。

4.3. 扩展卷组

      扩展卷组是指像一个卷组中增加一个或多个物理卷,示例如下:

      # 创建一个新的物理卷/dev/sde

         sudo pvcreate /dev/sde

 Physical volume "/dev/sde" successfully created.

      # 将新创建的物理卷/dev/sde加入到卷组vg2中

        sudo vgextend vg2 /dev/sde

 Volume group "vg2" successfully extended

4.4. 缩减卷组

      缩减卷组是指从一个卷组中移除一个    或多个物理卷,示例如下:

      # 将物理卷/dev/sde从卷组vg2中移除

       sudo vgreduce vg2 /dev/sde

Removed "/dev/sde" from volume group "vg2"

4.5. 删除卷组

      使用vgremove命令可以删除不包含逻辑卷的卷组,示例如下:

     # 删除逻辑卷vg2

      sudo vgremove vg2

Volume group "vg2" successfully removed

4.6. 分割卷组

       使用vgsplit命令可以拆分卷组中的物理卷,并创建新的卷组。示例如下:

      # 将卷组vg2中的物理卷/devsde拆分为一个新的卷组vg3

        sudo vgsplit vg2 vg3 /dev/sde

New volume group "vg3" successfully split from "vg2"

4.7 组合卷组

        使用lvmerge命令可以将两个卷组合并为一个更大的卷组,在合并卷组之前,确保两个卷组中的逻辑卷没有重叠,否则合并操作将会失败。示例如下:

      # 把卷组vg3合并到卷组vg2中

        sudo vgmerge -v vg2 vg3

 Checking for volume group "vg2"
  Checking for volume group "vg3"
  Archiving volume group "vg3" metadata (seqno 2).
  Archiving volume group "vg2" metadata (seqno 5).
  Writing out updated volume group
  WARNING: updating old metadata to 6 on /dev/sde for VG vg2.
  Creating volume group backup "/etc/lvm/backup/vg2" (seqno 6).

  Volume group "vg3" successfully merged into "vg2"

5. 逻辑卷管理

5.1. 创建逻辑卷

      在卷组vg1上创建一个大小为5GB,名称为lv11的逻辑卷:

      sudo lvcreate -L 5GB -n lv11 vg1

Logical volume "lv11" created.

      在卷组vg1上创建一个大小为6GB,名称为lv12的逻辑卷:

       sudo lvcreate -L 6GB -n lv12 vg1

Logical volume "lv12" created.

       在卷组vg2上创建一个名称为lv21的逻辑卷,该逻辑卷的大小为卷组剩余空间的40%:

       sudo lvcreate -l 40%VG -n lv21 vg2

Logical volume "lv21" created.

注:参数l指定卷组中剩余可用空间的百分比作为逻辑卷的大小

5.2. 显示逻辑卷

      显示所有的逻辑卷信息:

      sudo lvdisplay

 --- Logical volume ---
  LV Path                /dev/vg2/lv21
  LV Name                lv21
  VG Name                vg2

  LV UUID                4wmsnY-JJ6a-05wV-FXFn-ojN2-A1AS-0T2TYF
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-10 07:42:11 +0800
  LV Status              available
  # open                 0
  LV Size                <9.20 GiB
  Current LE             2354
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
   
  --- Logical volume ---

  LV Path                /dev/vg1/lv11
  LV Name                lv11
  VG Name                vg1

  LV UUID                5195Ei-gZA6-50iR-Dyv6-iUTY-8QlK-PCam7I
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-09 21:35:36 +0800
  LV Status              available
  # open                 1
  LV Size                6.00 GiB
  Current LE             1536
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---

  LV Path                /dev/vg1/lv12
  LV Name                lv12
  VG Name                vg1

  LV UUID                NQslUU-vRdZ-g6Wr-D6Sf-3Jzm-U0DY-CGiX2c
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-09 22:16:13 +0800
  LV Status              available
  # open                 1
  LV Size                6.00 GiB
  Current LE             1536
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

      sudo lvs

  LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv11 vg1 -wi-ao----  6.00g                                                    
  lv12 vg1 -wi-ao----  6.00g                                                    
  lv21 vg2 -wi-a----- <9.20g   

       显示单个逻辑卷的信息:

       sudo lvdisplay /dev/lvg1/lv11

--- Logical volume ---
  LV Path                /dev/vg1/lv11
  LV Name                lv11
  VG Name                vg1
  LV UUID                5195Ei-gZA6-50iR-Dyv6-iUTY-8QlK-PCam7I
  LV Write Access        read/write
  LV Creation host, time myvm1, 2024-05-09 21:35:36 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

5.3. 创建文件系统并挂载

       在逻辑卷/dev/vg1/lv11上创建ext4文件系统:

      sudo mkfs  -t ext4 /dev/vg1/lv11

创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:45f86733-16e7-4b27-9fd2-80daaf8fb8d6
超级块的备份存储于下列块: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

      在逻辑卷/dev/vg1/lv12上创建ext4文件系统:

      sudo mkfs -t ext4 /dev/vg1/lv12

创建含有 1572864 个块(每块 4k)和 393216 个inode的文件系统
文件系统UUID:f6793315-8995-46ff-bd9b-a9cf7dee3624
超级块的备份存储于下列块: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736

正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(16384 个块) 完成
写入超级块和文件系统账户统计信息: 已完成

       创建挂载点

        sudo mkdir /mnt/lv11

        sudo mkdir /mnt/lv12

       挂载逻辑卷

        sudo mount /dev/vg1/vg11 /mnt/lv11

        sudo mount /dev/vg1/vg12 /mnt/lv12

      查看磁盘挂载信息:

       df -Th

文件系统             类型      容量  已用  可用 已用% 挂载点
...
/dev/mapper/vg1-lv11 ext4      4.9G   24K  4.6G    1% /mnt/lv11
/dev/mapper/vg1-lv12 ext4      5.9G   24K  5.6G    1% /mnt/lv12

      为了机器重启后自动挂载逻辑卷,打开文件:

       sudo nano /etc/fstab

     在文件中最后添加如下信息:

/dev/vg1/lv11 /mnt/lv11 ext4 defaults,nofail,discard 0 0
/dev/vg1/lv12 /mnt/lv12 ext4 defaults,nofail,discard 0 0

      保存并关闭文件。

5.4. 扩展逻辑卷

      逻辑卷的最大优点是,当空间不足时,可以随时对其进行扩展。

      将逻辑卷lv11的空间扩展1GB:

      sudo lvextend -L +1GB /dev/vg1/lv11

 Size of logical volume vg1/lv11 changed from 5.00 GiB (1280 extents) to 6.00 GiB (1536 extents).
  Logical volume vg1/lv11 successfully resized.

      上述命令   实际上并没有增加文件系统的大小,而只是增加了逻辑卷的大小。为了使文件系统增长,我们需要使用以下命令调整文件系统的大小。

        sudo resize2fs /dev/vg1/lv11

/dev/vg1/lv11 上的文件系统已被挂载于 /mnt/lv11;需要进行在线调整大小
old_desc_blocks = 1, new_desc_blocks = 1
/dev/vg1/lv11 上的文件系统现在为 1572864 个块(每块 4k)。

5.5. 缩减逻辑卷

       可以使用lvreduce命令减小一个逻辑卷的大小,但在执行此操作之前需要非常小心,以确保不会丢失数据。在对逻辑卷进行任何缩减操作之前,强烈建议备份相关数据,以避免意外丢失。对于要缩小的逻辑卷,需要确保其文件系统支持缩小,对于 ext4 文件系统,首先可以使用resize2fs命令先缩小文件系统,然后使用lvreduce命令实际缩小逻辑卷的大小。

      例如,逻辑卷/dev/vg1/lv11的大小为5GB,其文件系统的大小也为5GB,该逻辑卷挂载到目录/mnt/lv11上,如果想要将该逻辑卷缩减为4GB,步骤如下:

      1) 卸载目录

        sudo umount /mnt/lv11

     2) 检查文件系统

        sudo e2fsck -f /dev/vg1/lv11

e2fsck 1.45.5 (07-Jan-2020)
第 1 步:检查inode、块和大小
第 2 步:检查目录结构
第 3 步:检查目录连接性
第 4 步:检查引用计数
第 5 步:检查组概要信息
/dev/vg1/lv11:11/393216 文件(0.0% 为非连续的), 46190/1572864 块

      3) 缩小文件系统

         sudo resize2fs /dev/vg1/lv11 4G

将 /dev/vg1/lv11 上的文件系统调整为 1048576 个块(每块 4k)。
/dev/vg1/lv11 上的文件系统现在为 1048576 个块(每块 4k)。

     4) 缩小逻辑卷

        sudo lvreduce -L 4G /dev/vg1/lv11

WARNING: Reducing active logical volume to 4.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv11? [y/n]: y
  Size of logical volume vg1/lv11 changed from 6.00 GiB (1536 extents) to 4.00 GiB (1024 extents).
  Logical volume vg1/lv11 successfully resized.

5.6. 删除逻辑卷

       可以使用lvremove命令删除逻辑卷。在删除逻辑卷前,先卸载其挂载的目录,删除逻辑卷后,数据将无法恢复。

      例如,逻辑卷/dev/vg1/lv12挂载到目录/mnt/lv12,删除该逻辑卷的步骤:

     1) 卸载目录

        sudo umount /mnt/lv12

     2)删除逻辑卷

        sudo lvremove /dev/vg1/lv12

Do you really want to remove and DISCARD active logical volume vg1/lv12? [y/n]: y
  Logical volume "lv12" successfully removed

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

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

相关文章

OpenGL导入的纹理图片错位

在OpenGL中导入图片的纹理照片的函数为 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, p_w, p_h, 0, GL_BGR, GL_UNSIGNED_BYTE, pic_data);其中p_w, p_h为图片的宽和高&#xff0c;pic_data为指向图片存储空间的的地址(unsigned char *类型) 在OpenGL中图片默认是4字节对齐的&…

数据结构与算法===递归

文章目录 定义适用场景爬楼梯代码实现 小结 定义 递归(Recursion)是指函数的自身调用。 这个算法演变为了程序员之间的梗&#xff0c;所表达的意思近似于“套娃”&#xff0c;表示不断重复引用别人的话从而产生循环。 适用场景 这个应该很多的&#xff0c;像一些树的遍历&am…

【基于 PyTorch 的 Python 深度学习】5 机器学习基础(1)

前言 文章性质&#xff1a;学习笔记 &#x1f4d6; 学习资料&#xff1a;吴茂贵《 Python 深度学习基于 PyTorch ( 第 2 版 ) 》【ISBN】978-7-111-71880-2 主要内容&#xff1a;根据学习资料撰写的学习笔记&#xff0c;该篇主要介绍了机器学习的基本任务、机器学习的一般流程&…

Leetcode—295. 数据流的中位数【困难】

2024每日刷题&#xff08;132&#xff09; Leetcode—295. 数据流的中位数 实现代码 class MedianFinder { public:MedianFinder() {}void addNum(int num) {if(maxHeap.empty() || num < maxHeap.top()) {maxHeap.push(num);} else {minHeap.push(num);}if(maxHeap.size(…

Verilog_学习路线(小白)

#前言&#xff1a; 自从专心学习专业课后&#xff0c;发现知识点得用&#xff0c;越用越熟练&#xff0c;工具也一样&#xff0c;高级工具的学习可帮助我们在工作中极大地提高效率&#xff0c;但这里要记住一点&#xff0c;任何工具都是为解决实际问题出现的&#xff0c;即落脚…

武汉星起航助力新手卖家掌握亚马逊政策,开启跨境电商新征程

在数字化浪潮席卷全球的今天&#xff0c;亚马逊平台以其强大的影响力和广阔的市场前景&#xff0c;吸引了越来越多的卖家涌入其中。然而&#xff0c;对于初涉亚马逊市场的新手卖家而言&#xff0c;如何在激烈的市场竞争中立足&#xff0c;并成功开展跨境电商业务&#xff0c;却…

用python进行接口测试(详细教程)

前言 其实我觉得接口测试很简单&#xff0c;比一般的功能测试还简单&#xff0c;现在找工作好多公司都要求有接口测试经验&#xff0c;也有好多人问我什么是接口测试&#xff0c;本着不懂也要装懂的态度&#xff0c;我会说&#xff1a;所谓接口测试就是通过测试不同情况下的入…

微火全域运营是什么?为什么一上线就火了?

近日&#xff0c;以共享WiFi贴和智慧数字经营等项目闻名业内的品牌微火又提出了新概念——微火全域运营&#xff0c;并同步上线了微火全域运营平台。这一举动无疑是给全域运营赛道和有意向做微火全域运营服务商的创业者群体中投下了一枚重磅炸弹&#xff0c;有创业者透露&#…

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1

ICode国际青少年编程竞赛- Python-4级训练场-绿色能量1 1、 Dev.step(3) Dev.turnLeft() Dev.step(3) Spaceship.step(4) Spaceship.turnRight() Spaceship.step(4) Dev.step(3) while Item[1].y ! Dev.y:wait()2、 Dev.step(4) while Item[0].x ! Dev.x:wait() Dev.turnLe…

Unity射击游戏开发教程:(13)如何在Unity中播放音效

在本文中,我将向大家展示一些为游戏添加声音的不同方法。 我们为游戏添加声音的第一种方法是播放背景音乐。在此,我们将创建游戏对象(“音频管理器”)并创建一个子游戏对象(“背景音乐”)。该子游戏对象将是播放音乐的对象,因此需要向其添加音频源组件。如果没有音频源组…

如何获得临时谷歌邮箱?

什么是临时谷歌邮箱&#xff1f; 临时谷歌邮箱&#xff0c;也称为一次性谷歌邮箱或匿名谷歌邮箱&#xff0c;可以用来作为你的个人临时谷歌邮箱账户&#xff0c;而不需要亲自注册谷歌账户就可以使用。这些邮箱在一定时间后自动销毁&#xff0c;期间无需用户进行任何操作。它们…

你不知道的ConstraintLayout高级用法

文章目录 1. ConstraintLayout介绍2. 高级用法2.1 Gone Margin2.2 偏移2.3 居中2.4 尺寸约束2.5 链2.6 角度定位&#xff08;圆形定位&#xff09; 3. 工具类3.1 Guideline&#xff08;参考线&#xff09;3.2 Barrier&#xff08;栅栏&#xff09;3.3 Group&#xff08;组&…

OpenCV-android-sdk配置及使用(NDK)

opencv官网下载Android版Releases - OpenCV 下载好OpenCV-android-sdk并解压好,然后新建一个jni文件夹测试,测试项目目录结构如下: ├── jni │ ├── Android.mk │ ├── Application.mk │ └── test.cpp Application.mk: APP_STL := c++_static APP_CPP…

JAVA毕业设计138—基于Java+Springboot+Vue的医院预约挂号小程序(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的医院预约挂号小程序(源代码数据库)138 一、系统介绍 本系统前后端分离带小程序和后台 小程序&#xff08;用户端&#xff09;&#xff0c;后台管理系统&a…

租用香港Windows服务器要注意的几种安全防护措施

在网络世界里&#xff0c;永远没有绝对的安全&#xff0c;但我们可以通过采取适当的措施使风险降低。对于选择香港Windows服务器租赁的企业和个人来说&#xff0c;保护数据的安全性与隐私至关重要。下面将介绍几种关键的租用香港Windows服务器时应注意的安全防护措施。 1.使用本…

基于fastapi sqladmin开发,实现可动态配置admin

1. 功能介绍&#xff1a; 1. 支持动态创建表、类&#xff0c;属性&#xff0c;唯一约束、外键&#xff0c;索引&#xff0c;关系&#xff0c;无需写代码&#xff0c;快速创建业务对象&#xff1b; 2. 支持配置admin显示参数&#xff0c;支持sqladmin原生参数设置&#xff0c;动…

PTP 对时协议 IEEE1588 网络对时 计算原理

前言 本文将阐述 PTP 对时协议的原理&#xff0c;slave 节点如何根据获取的时间来纠正和更新自己的时间。 协议概述 整个通讯过程中会发送 4 种类型的数据包&#xff0c;用来支撑对时。下面是 4 个包的解释 Sync message: 由 master 发送&#xff0c;发起对时事务, slave 接…

[视频教程]赤壁OL单机版_80级英雄_可局域网

[端游] 赤壁OL单机版80级英雄&#xff0c;横刀立马&#xff0c;54级护卫&#xff0c;20种兵种&#xff0c;GM模式&#xff0c;无限元宝 本教程仅限学习使用&#xff0c;禁止商用&#xff0c;一切后果与本人无关&#xff0c;此声明具有法律效应&#xff01;&#xff01;&#x…

ios实现拍摄视频与显示在界面上

1、添加录音和拍摄权限 NSMicrophoneUsageDescription Privacy - Camera Usage Description 2、代码 #import "ViewController.h" #import <AVFoundation/AVFoundation.h> #import <MobileCoreServices/MobileCoreServices.h>// 接下来是你的 ViewCont…

2024年小程序视频如何下载到电脑上

随着2024年的到来&#xff0c;将小程序视频无缝下载到电脑上&#xff0c;从此让精彩内容触手可及&#xff0c;不受时间和网络的限制&#xff0c;随时随地启发你的生活和工作。 小程序视频我已经打包好了&#xff0c;有需要的自己下载 小程序视频下载工具打包链接&#xff1a;…