ubuntu2204安装kvm

news/2024/9/17 18:00:10/ 标签: kvm, qemu-img, virsh

ubuntu2204安装kvm

  • 前言
  • 一、检测硬件是否支持
  • 二、安装软件
  • 三、创建/管理虚拟机
    • 1、创建存储池
    • 2、qemu创建镜像
    • 3、xml文件运行虚拟机
      • 1、范文
      • 2、xml文件创建虚机
      • 3、创建虚机
    • 4、克隆虚机
    • 5、创建快照
    • 6、脚本创建
    • VNC连接
  • 四、创建集群
    • 1、安装glusterfs
    • 2、加入集群
      • 删除节点
    • 3、 创建卷
    • 3、kvm挂载目录
    • 图形化创建
    • 五、虚拟机迁移
      • 同一宿主机内迁移
      • 不同宿主机内迁移


前言

##虚拟机开启虚拟化
在这里插入图片描述
VNC下载链接


一、检测硬件是否支持

##非零即可
root@kvm:~# egrep -c ‘(svm|vmx)/proc/cpuinfo  
##检查是否启用虚拟化
root@kvm:~# apt install cpu-checkerroot@kvm:~# kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

二、安装软件

root@kvm:~# apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-managerroot@kvm:~#  systemctl start libvirtd
root@kvm:~#  systemctl enable libvirtdroot@kvm:~# usermod -aG libvirt $USER
root@kvm:~# lsmod | grep kvm
kvm_intel             368640  0
kvm                  1032192  1 kvm_intel

三、创建/管理虚拟机

1、创建存储池

##创建一个存储池来存放虚拟机的磁盘镜像文件
root@kvm:~# mkdir -p /data/kvm/poolvirsh pool-define-as --name kvm_test --type dir --target /data/kvm/pool/virsh pool-start kvm_testvirsh pool-autostart kvm_test

2、qemu创建镜像

qemu-img create -f qcow2 /data/kvm/qcow/vm_test.qcow2 20G
1. 使用 qcow2 格式创建镜像
qcow2 是 QEMU 推荐的磁盘格式,支持动态扩展、快照和压缩。
qemu-img create -f qcow2 /data/kvm/qcow/vm_test.qcow2 20G
-f qcow2: 指定镜像格式为qcow2。
/data/kvm/qcow/vm_test.qcow2: 镜像文件保存路径及文件名。
20G: 分配给虚拟机的磁盘大小(可根据需求调整)。
2. 使用 raw 格式创建镜像
raw 格式是未压缩的磁盘格式,性能较好,但不支持快照等高级功能。
qemu-img create -f raw /data/kvm/qcow/vm_test.raw 20G####常见 qemu-img 命令
1. 查看镜像信息
##可以使用 qemu-img info 命令查看镜像文件的详细信息:
qemu-img info /data/kvm/qcow/vm_test.qcow2
2. 转换镜像格式
##将现有镜像转换为另一种格式:
qemu-img convert -f qcow2 -O raw /data/kvm/qcow/source_image.qcow2 /data/kvm/qcow/target_image.raw
-f qcow2: 源镜像格式。
-O raw: 目标镜像格式。
/data/kvm/qcow/source_image.qcow2: 源镜像文件。
/data/kvm/qcow/target_image.raw: 目标镜像文件。
3. 创建包含快照的镜像
##通过创建一个依赖于原始镜像的快照镜像,可以节省磁盘空间:qemu-img create -f qcow2 -b /path/to/base_image.qcow2 /path/to/snapshot_image.qcow2
-b /path/to/base_image.qcow2: 基础镜像路径。
4. 扩展镜像大小
##如果需要扩大已经创建的镜像,可以使用以下命令:qemu-img resize /data/kvm/qcow/vm_test.qcow2 +10G
这将把镜像的大小增加10GB。
5. 启动虚拟机
##创建完镜像后,可以使用qemu-system命令启动虚拟机。例如:qemu-system-x86_64 -hda /data/kvm/qcow/vm_test.qcow2 -m 2G -smp 2 -boot d
-hda: 指定硬盘镜像文件。
-m 2G: 分配2GB内存。
-smp 2: 分配2个虚拟CPU。
-boot d: 指定从光驱(或者ISO镜像)启动。

3、修改qcow文件

##加载 NBD 模块(如果未加载):

modprobe nbdqemu-nbd --connect=/dev/nbd0 /data/kvm/qcow/vm_test.qcow2 
fdisk -l /dev/nbd0
mount /dev/nbd0 /mnt/mount -o loop /dev/nbd0 /mnt/mount -o iso /dev/nbd0 /mnt/
检查文件头和内容
如果 file 命令无法识别文件类型,使用 hexdump 或 xxd 查看文件头部分来识别文件结构:
file -s /dev/nbd0 hexdump -C /path/to/datafile.data | head/dev/nbd0: dataparted /dev/nbd0 print
Model: Unknown (unknown)                                                  
Disk /dev/nbd0: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags: 
root@kvm:/data/kvm/vm# sysctl -a | grep overcommitvm.nr_overcommit_hugepages = 0vm.overcommit_kbytes = 0vm.overcommit_memory = 0vm.overcommit_ratio = 50vm.overcommit_memory = 1

3、xml文件运行虚拟机

1、范文

<domain type='kvm'><!-- 虚拟机名称 --><name>example_vm</name><!-- UUID是虚拟机的唯一标识符 --><uuid>d759a4f4-3f3d-499e-8431-123456789abc</uuid><!-- 内存配置:设置虚拟机的最大和初始内存 --><memory unit='KiB'>8388608</memory> <!-- 8 GB --><currentMemory unit='KiB'>8388608</currentMemory> <!-- 初始内存也是8 GB --><!-- CPU配置 --><vcpu placement='static'>4</vcpu> <!-- 分配4个虚拟CPU --><!-- 操作系统设置 --><os><type arch='x86_64' machine='pc-i440fx-2.11'>hvm</type><boot dev='hd'/> <!-- 从硬盘启动 --><bootmenu enable='yes'/> <!-- 启用启动菜单 --></os><!-- 时钟设置 --><clock offset='utc'><timer name='rtc' tickpolicy='catchup'/><timer name='pit' tickpolicy='delay'/><timer name='hpet' present='no'/></clock><!-- CPU模式和特性 --><cpu mode='host-passthrough'><topology sockets='1' cores='2' threads='2'/><!-- 禁用虚拟化功能SVM (AMD) --><feature policy='disable' name='svm'/></cpu><!-- 设备设置 --><devices><!-- 磁盘配置 --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/example_vm.qcow2'/><target dev='vda' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/></disk><!-- CD-ROM驱动器 --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/var/lib/libvirt/images/example.iso'/><target dev='hda' bus='ide'/><readonly/><address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/></disk><!-- 网络接口配置 --><interface type='network'><mac address='52:54:00:aa:bb:cc'/><source network='default'/><model type='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/></interface><!-- 图形设备配置 --><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'><listen type='address' address='0.0.0.0'/></graphics><!-- 声卡设备 --><sound model='ich9'><address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/></sound><!-- 输入设备 --><input type='mouse' bus='ps2'/><input type='keyboard' bus='ps2'/><!-- 显卡设备 --><video><model type='cirrus' vram='16384' heads='1'/><address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/></video><!-- 串口控制台 --><console type='pty'><target type='serial' port='0'/></console><!-- 通用USB设备 --><hub type='usb'/></devices><!-- 特权设置:如果需要,允许KVM虚拟机访问设备 --><features><acpi/> <!-- 启用ACPI电源管理 --><apic/> <!-- 启用APIC --><pae/>  <!-- 启用PAE(物理地址扩展),允许32位系统使用大于4GB的内存 --></features><!-- 启动时自动启动虚拟机 --><on_poweroff>destroy</on_poweroff>  <!-- 电源关闭时销毁虚拟机 --><on_reboot>restart</on_reboot>      <!-- 重启时自动重启虚拟机 --><on_crash>restart</on_crash>        <!-- 崩溃时自动重启虚拟机 -->
</domain>

2、xml文件创建虚机

<domain type='kvm'><name>vm_test</name>  <memory unit='KiB'>2097152</memory>  <vcpu placement='static'>2</vcpu>  <os><type arch='x86_64' machine='pc-i440fx-2.11'>hvm</type><boot dev='cdrom'/><boot dev='hd'/></os><devices><!-- 磁盘配置 --><disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/data/kvm/qcow/vx_test.qcow2'/><target dev='vda' bus='virtio'/></disk>
x<!-- ISO 镜像作为CD-ROM --><disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/data/kvm/image/ubuntu-22.04.4-live-server-amd64.iso'/><target dev='hdc' bus='ide'/><readonly/></disk><!-- 网络配置 --><interface type='network'><mac address='52:54:00:aa:bb:cc'/><source network='default'/><model type='virtio'/></interface><!-- VNC 配置 --><graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/></devices>
</domain>
qemu-img create -f qcow2 /data/kvm/qcow/vx_test.qcow2 20G
virsh define vx-test.xml 
virsh list --all
virsh start vx_test 
##设置虚拟机开机自启 
virsh autostart  vx_test 
virsh autostart --disable vx_test #取消

3、创建虚机

wget  https://mirrors.ustc.edu.cn/ubuntu-releases/22.04/ubuntu-22.04.4-live-server-amd64.iso##创建虚拟磁盘文件:该命令创建了一个大小为 20GB 的虚拟磁盘文件,格式为 qcow2,用于后续虚拟机的存储。
qemu-img create -f qcow2 /data/kvm/qcow/image.qcow2 20G## 创建和安装虚拟机:创建并安装了一个名为 vm_test 的虚拟机,分配了 2GB 内存、2 个虚拟 CPU、默认网络配置,使用 VNC 连接显示图形界面,并从 Ubuntu 22.04 ISO 镜像启动安装系统。
virt-install --virt-type kvm  --name vm_test   --ram 2048   --vcpus 2   --disk path=/data/kvm/qcow/image.qcow2,format=qcow2        --os-variant ubuntu22.04   --network network=default   --graphics vnc,listen=0.0.0.0   --cdrom /data/kvm/image/ubuntu-22.04.4-live-server-amd64.iso --noautoconsole

4、克隆虚机

root@kvm:/data/kvm/clone#   virt-clone -o vm_test -f /data/kvm/clone/vm_test.qcow2  --name vm_test_cloneERROR    Domain to clone must be shutoff.Clone 'vm_test_clone' created successfully.参数说明:-o:指定被克隆虚拟机-n:克隆机名称-f:指定克隆机文件位置与名称root@kvm:/data/kvm/clone# virsh list --allId   Name            State
--------------------------------1    vm_test2        running-    vm_test         shut off-    vm_test_clone   shut off## 修改uuid
root@kvm:/data/kvm/clone# virsh edit vm_test_clone 

5、创建快照

root@kvm:/data/kvm/clone# virsh snapshot-create-as vm_test2 vm_test-snap2
Domain snapshot vm_test-snap2 createdroot@kvm:/data/kvm/clone# virsh snapshot-list vm_test2 Name            Creation Time               State
------------------------------------------------------vm_test-snap2   2024-09-12 03:30:54 +0000   runningroot@kvm:/data/kvm/clone# virsh snapshot-info vm_test2 vm_test-snap2 
Name:           vm_test-snap2
Domain:         vm_test2
Current:        yes
State:          running
Location:       internal
Parent:         -
Children:       0
Descendants:    0
Metadata:       yes

6、脚本创建

#!/bin/bash# 需要指定的变量
VM_NAME=$1  # 虚拟机名称
OS_TYPE=$2  # 操作系统类型 (ubuntu, centos, win)
DISK_SIZE=20  # 虚拟机磁盘大小 (GB)
RAM_SIZE=2048  # 虚拟机内存大小 (MB)
VCPUS=2  # 虚拟机CPU核数
CLONE_NAME=$3  # 如果进行克隆的虚拟机名称# 检查是否提供必要的参数
if [ -z "$VM_NAME" ] || [ -z "$OS_TYPE" ]; thenecho "Usage: $0 <vm_name> <os_type: ubuntu|centos|win> [clone_name]"exit 1
fi# 设置系统对应的os-variant参数
case $OS_TYPE inubuntu)OS_VARIANT="ubuntu20.04";;centos)OS_VARIANT="centos8";;win)OS_VARIANT="win10";;*)echo "Invalid OS type! Choose from ubuntu, centos, win."exit 1;;
esac# 磁盘文件路径
DISK_PATH="/var/lib/libvirt/images/${VM_NAME}.qcow2"# 镜像文件路径(可根据实际环境修改)
ISO_PATH=""
case $OS_TYPE inubuntu)ISO_PATH="/path/to/ubuntu.iso";;centos)ISO_PATH="/path/to/centos.iso";;win)ISO_PATH="/path/to/windows.iso";;
esac# 创建虚拟机磁盘文件
echo "Creating virtual machine disk..."
qemu-img create -f qcow2 $DISK_PATH ${DISK_SIZE}G# 创建虚拟机
echo "Installing virtual machine..."
virt-install \--name $VM_NAME \--ram $RAM_SIZE \--vcpus $VCPUS \--disk path=$DISK_PATH,format=qcow2,size=$DISK_SIZE \--os-variant $OS_VARIANT \--network network=default \--graphics vnc \--cdrom $ISO_PATH \--noautoconsole# 检查是否需要克隆虚拟机
if [ ! -z "$CLONE_NAME" ]; thenecho "Cloning virtual machine..."virt-clone --original $VM_NAME --name $CLONE_NAME --file /var/lib/libvirt/images/${CLONE_NAME}.qcow2# 生成新的UUID并修改克隆虚拟机的UUIDNEW_UUID=$(uuidgen)echo "Updating UUID for the cloned virtual machine..."virsh dumpxml $CLONE_NAME > ${CLONE_NAME}.xmlsed -i "s/<uuid>.*<\/uuid>/<uuid>${NEW_UUID}<\/uuid>/" ${CLONE_NAME}.xmlvirsh define ${CLONE_NAME}.xmlrm -f ${CLONE_NAME}.xmlecho "Cloned VM: $CLONE_NAME with new UUID: $NEW_UUID"
fiecho "Virtual machine installation completed."
# 创建虚拟机(如Ubuntu)
./virsh-install.sh my_vm ubuntu# 创建虚拟机并克隆(如CentOS)
./virsh-install.sh my_vm centos my_vm_clone

VNC连接

vnc连接:主机为本机ip。默认端口5900,依次加一
安装好系统后可本机ssh连接。
在这里插入图片描述
在这里插入图片描述

四、创建集群

1、安装glusterfs

##kvm及所有节点hosts文件修改
root@vm2:~# cat /etc/hosts
...
192.168.220.88     vm2
192.168.220.99     vm3apt install glusterfs-*
glusterfs -Vroot@vm3:~# systemctl start glusterd.service 
root@vm3:~# systemctl enable glusterd.service 

2、加入集群

##单节点上执行,添加其他节点到集群
root@vm2:~# gluster peer probe vm3
peer probe: success
##vm2上验证
root@vm2:~# gluster peer status
Number of Peers: 1Hostname: vm3
Uuid: 67eed80b-be06-4564-ae16-adebfc079709
State: Peer in Cluster (Connected)

删除节点

root@vm2:~# gluster peer detach kvm

3、 创建卷

##所有节点创建目录
mkdir /data
## 直接用根分区做存储卷,需加force
##创建一个名为models的存储卷、2副本
root@vm2:~# gluster volume create gfsv replica 2 vm2:/data vm3:/data forcevolume create: gfsv: success: please start the volume to access data
root@vm2:~# gluster volume info modelsVolume Name: gfsv
Type: Replicate
Volume ID: a6d80c21-deb7-44c7-abf4-e2a70060fa64
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: vm2:/data
Brick2: vm3:/data
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
##启用卷
root@vm2:~#  gluster volume start gfsv
##停止删除卷
root@vm2:~#  gluster volume stop  gfsv
root@vm2:~#  gluster volume delete  gfsv
##查看卷状态
root@vm2:~# gluster volume status
Status of volume: models
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick vm2:/data                             54529     0          Y       6158 
Brick vm3:/data                             52302     0          Y       3377 
Self-heal Daemon on localhost               N/A       N/A        Y       6175 
Self-heal Daemon on vm3                     N/A       N/A        Y       3394 Task Status of Volume models
------------------------------------------------------------------------------
There are no active volume tasks

kvm_560">3、kvm挂载目录

root@kvm:/data/kvm# mount.glusterfs vm2:models /kvmdata/root@kvm:/data/kvm# echo "vm2:models /kvmdata/ glusterfs defaults,_netdev 0 0" >> /etc/fstab 
root@kvm:/data/kvm# mount -aroot@kvm:/data/kvm# df -Th | grep gluster
vm2:models                        fuse.glusterfs   57G   18G   37G  33% /kvmdataroot@kvm:/data/kvm# mkdir /kvmdata/{data,iso}##创建存储池
root@kvm:/data/kvm# virsh pool-define-as --name iso --type dir --target /kvmdata/iso/Pool iso definedroot@kvm:/data/kvm# virsh pool-define-as --name data --type dir --target /kvmdata/data/
Pool data defined

图形化创建

virt-manager

五、虚拟机迁移

同一宿主机内迁移

##查看虚拟机所有磁盘文件
##适用情况:磁盘满或新加数据盘的情况下从/aaa目录迁移到/bbb目录root@kvm:/data/kvm# virsh domblklist vm_testTarget   Source
--------------------------------------vda      /data/kvm/qcow/image.qcow2sda  
##直接迁移镜像:例如
root@kvm:/data/kvm# mv /data/kvm/qcow/image.qcow2 /kvmdata/data/
##停止虚拟机
root@kvm:/data/kvm# virsh shutdown vm_test 
Domain 'vm_test' is being shutdown
##编辑
root@kvm:/data/kvm# virsh edit vm_test
Domain 'vm_test' XML configuration edited.root@kvm:/data/kvm# virsh start vm_test
Domain 'vm_test' startedroot@kvm:/data/kvm# virsh domblklist vm_testTarget   Source
-------------------------------------vda      /kvmdata/data/image.qcow2sda      -

不同宿主机内迁移

virsh migrate方法
virsh migrate只能迁移配置文件,磁盘镜像文件还要我们手工完成。在kvm2上
virsh undefine vm_test    //只删除了配置文件
rm /data/kvm/qcow/image.qcow2 -i切换到kvm1,88kvm2
virsh migrate --domain vm_test --desturi qemu+ssh://root@192.168.220.66/system --offline --persistent

http://www.ppmy.cn/news/1524800.html

相关文章

Web开发之Vue.js

第一章 一、前端开发技术发展变化历程 洪荒时代&#xff08;1990 - 1994 年&#xff09;&#xff1a; 技术萌芽&#xff1a;1990 年&#xff0c;第一个 web 浏览器诞生&#xff1b;1991 年&#xff0c;www 诞生&#xff0c;标志着前端技术的开始。此时没有专业的前端&#x…

学学vue-2

1.7 指令修饰符 keyup.enter&#xff1a;监听键盘回车事件&#xff0c;回车触发事件keyup.enter代码 v-model修饰符&#xff1a; v-model.trim&#xff1a;去首尾空格v-model.number&#xff1a;变数字&#xff08;如果是数字的话&#xff0c;转变为数字&#xff09; 事件名.…

k8s 高级调度

搞懂Kubernetes调度 K8S调度器Kube-schduler的主要作用是将新创建的Pod调度到集群中的合适节点上运行。kube-scheduler的调度算法非常灵活&#xff0c;可以根据不同的需求进行自定义配置&#xff0c;比如资源限制、亲和性和反亲和性等。 kube-scheduler的工作原理如下&#x…

基于大数据爬虫的高校网络舆情管控可视化大屏分析系统 8ov8c

目录 技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取 技术栈和环境说明 本系统以Python开发语言开发&am…

Python计算机视觉编程——第8章 图像内容分类

1 K邻近分类法 该算法将要分类的对象与训练集中已知类标记的所有对象进行对比&#xff0c;并由k近邻对指派到哪个类进行投票。该方法的弊端是&#xff1a;与k-means聚类算法一样&#xff0c;需要预先设定k值&#xff0c;k值得选择会影响分类得性能&#xff0c;而且这种方法要求…

AI教你学Python 第1天:Python简介与环境配置

大家好&#xff0c;我是凡人。 为啥要推出这个专栏呢&#xff0c;是因为大模型开发肯定离不开代码&#xff0c;那python可以说是现在流传最广&#xff0c;也非常吃香的语言&#xff0c;所以学Python没错的&#xff0c;所有文章内容全部来自于训练后的大模型生成。 第1天&#…

2024/9/6黑马头条跟学笔记(四)

D4内容介绍 阿里三方安全审核 分布式主键 异步调用 feign 熔断降级 1.自媒体文章自动审核 1.1审核流程 查文章——调接口文本审核——minio下载图片图片审核——审核通过保存文章——发布 草稿1&#xff0c;失败2&#xff0c;人工3&#xff0c;发布9 1.2接口获取 注册阿…

【C++二分查找】2517. 礼盒的最大甜蜜度

本文涉及的基础知识点 C二分查找 贪心&#xff08;决策包容性) LeetCode 2517. 礼盒的最大甜蜜度 给你一个正整数数组 price &#xff0c;其中 price[i] 表示第 i 类糖果的价格&#xff0c;另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼…

Leetcode面试经典150题-141.环形链表

题目比较简单&#xff0c;重点是理解思想 解法都在代码里&#xff0c;不懂就留言或者私信 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public…

克雷格·费德里吉谈Apple Intelligence保密技术背后的挑战

苹果必须实现克雷格-费德里吉所说的突破&#xff0c;这样 Apple Intelligence公司才能在云中使用大型语言模型&#xff0c;同时还能保护用户隐私&#xff0c;苹果是这样做的。在"It’s Glowtime"活动中&#xff0c;苹果公司谈到了私有云计算作为保护用户隐私的方式。…

高级算法设计与分析 学习笔记5 红黑树

定义&#xff1a; 根节点必黑&#xff0c;红节点孩子必黑&#xff0c;叶子节点&#xff08;外部节点&#xff0c;null的那种&#xff09;也是黑&#xff0c;每条路的黑节点数量一致。 首先看各个节点的平衡值&#xff0c;从根节点开始算&#xff0c;哪个最后超过1就是从这里开始…

【Unity新闻】Unity将取消Runtime费用

兜兜转转又回来了&#xff0c;一大早就看到Unity发布新闻&#xff0c;将取消Runtime费用&#xff0c;但同时也将提高各级付费账号的年费。这是新任CEO Matt上任后的价格调整策略。 非常不错的一点是&#xff1a; 当 Unity 6 在今年晚些时候发布时&#xff0c;使用 Unity Pers…

问:有一种Java语法叫注解,一起来扒一扒~

在Java编程语言中&#xff0c;注解&#xff08;Annotation&#xff09;和元注解&#xff08;Meta-Annotation&#xff09;为开发者提供了丰富的机制来嵌入元数据&#xff0c;从而增强代码的可读性、可维护性&#xff0c;并允许编译器或运行时环境进行特定的处理。 一、注解&am…

大型语言模型:通过代码生成、调试和 CI/CD 集成改变软件开发的游戏规则

借助 AI&#xff0c;软件开发领域正在经历一个突破性阶段&#xff0c;不断集成最先进的大型语言模型&#xff0c;如 GPT-4 和 Claude Opus。这些模型超越了传统开发人员工具的作用&#xff0c;直接帮助开发人员将口头指令转换为跨各种编程语言的可执行代码&#xff0c;从而加快…

深度学习的零碎知识点

显卡内存 什么是显卡内存 简单来说就是&#xff0c;Windows 会在物理显存/「专用 GPU 内存」不够用或只有集成显卡的情况下&#xff0c;将物理内存 RAM 当作 GPU 的虚拟显存/「共享 GPU 内存」来使用。 什么是 Windows「共享 GPU 内存」&#xff0c;它与 VRAM 有什么不同 (s…

【学习笔记】SSL密码套件之哈希

本篇将介绍TLS/SSL密码套件中常用的哈希算法&#xff0c;包括Poly1305、SHA384、SHA256、SHA、MD5 以上的哈希算法将作为 MAC 使用 MAC - Message Authentication Code 为批量数据提供了完整性&#xff08;Integrity&#xff09;以及真实性&#xff08;Authentication&#xf…

yolo学习 (一) 安装yolov8及训练

随便搞个python环境&#xff0c;直接装或者anaconda都行&#xff0c;python版本最低3.8以上 一、安装yolov8 &#xff08;cpu版本&#xff09; pip install ultralytics yolov8安装版本比较省事&#xff0c;不过这里默认装的是CPU版本 import torch print(torch.__version_…

前端 + 接口请求实现 vue 动态路由

前端 接口请求实现 vue 动态路由 在 Vue 应用中&#xff0c;通过前端结合后端接口请求来实现动态路由是一种常见且有效的权限控制方案。这种方法允许前端根据用户的角色和权限&#xff0c;动态生成和加载路由&#xff0c;而不是在应用启动时就固定所有的路由配置。 实现原理…

【springboot】整合spring security 和 JWT

目录 1. 整合spring security 1. 导入依赖 2. 配置类 3. 实体类实现UserDetails接口 4. 业务逻辑实现类实现UserDetailsService接口 5. 控制类实现登录功能 6. 测试登录功能 2. 分析源码 1. UsernamePasswordAuthenticationToken 2. A…

windows JOB作业类的处理

windows JOB作业类的处理 windows JOB作业类的处理 文章目录 windows JOB作业类的处理 # windows JOB作业类的处理 /* moduel Job.h Notices: */#pragma once #include <malloc.h> //for _alloca; class CJob { private:HANDLE m_hJob; public:CJob(HANDLE hJob NULL);…