15_LVM的磁盘管理

系列文章导航:01_Linux基础操作CentOS7学习笔记-CSDN博客

文章目录

    • 一、LVM的核心概念
    • 二、LVM的工作原理
    • 三、LVM逻辑卷的创建及使用
      • 创建LVM逻辑卷
      • 删除逻辑卷
    • 四、LVM逻辑卷的拉伸与缩减
      • 拉伸一个逻辑卷
      • 拉伸一个卷组
      • 缩小一个逻辑卷
      • 缩小卷组
    • 五、LVM逻辑卷快照备份与还原
      • 1. 建立源数据卷实验数据
      • 2. 建立快照
      • 3. 挂载快照卷
      • 4. 查看快照数据
      • 5. 测试恢复
      • 6. 单文件恢复
      • 7. 整个卷组还原恢复(快照合并)
    • 六、Linux系统磁盘配额限制
      • 1. 磁盘配额的限制
      • 2. Quota的设置内容
      • 3. XFS文件系统的磁盘配额
      • 4. EXT4文件系统的磁盘配额


LVM(Logical Volume Manager)是一种强大的磁盘管理工具,它允许我们动态地管理硬盘空间。通过将物理硬盘抽象化并封装成逻辑卷,LVM使得我们能够灵活地调整逻辑卷的大小而不丢失数据。

一、LVM的核心概念

  • PE (Physical Extend):物理拓展,LVM中最基本的单位。
  • PV (Physical Volume):物理卷,可以是整个磁盘或磁盘的一个MBR分区。
  • VG (Volume Group):卷组,相当于PE的池子,用于存放PE。
  • LV (Logical Volume):逻辑卷,是我们最终使用的分区。

二、LVM的工作原理

  1. 将物理硬盘或分区格式化为PV。
  2. 创建卷组VG,并将多个PV加入到VG中。
  3. 基于VG创建LV,大小为PE的整数倍,LV的PE可能来自不同的PV。
  4. 对LV进行文件系统格式化,然后挂载使用。

使用LVM可以动态地扩展逻辑卷,只需增加PV或VG的数量,然后调整LV的大小。

三、LVM逻辑卷的创建及使用

创建LVM逻辑卷

  1. 将物理硬盘格式化成PV:
    pvcreate /dev/sdb /dev/sdc
    
  2. 查看PV信息:
    pvdisplay
    pvs
    
  3. 创建卷组(VG)并将PV加入卷组中:
    vgcreate xiaoluo /dev/sdb /dev/sdc
    
    查看VG信息:
    vgdisplay
    vgs
    
  4. 基于卷组(VG)创建逻辑卷(LV):
    lvcreate -n mylv -L 2G xiaoluo
    
    或者:
    lvcreate -n mylv -l100 xiaoluo
    
    查看LV信息:
    lvdisplay
    lvs
    
  5. 格式化逻辑卷:
    mkfs.ext4 /dev/xiaoluo/mylv
    
  6. 挂载逻辑卷:
    mount /dev/xiaoluo/mylv /mnt
    
    查看挂载情况:
    mount
    
  7. 对逻辑卷进行文件操作,例如创建文件:
    touch /mnt/xiaoluo.txt
    ls /mnt
    

删除逻辑卷

如果要删除逻辑卷,需要按照以下顺序进行操作:

  1. 卸载逻辑卷:
    umount /mnt
    
  2. 删除逻辑卷:
    lvremove /dev/xiaoluo/mylv
    
  3. 删除卷组:
    vgremove xiaoluo
    
  4. 删除物理卷:
    pvremove /dev/sdb
    

请注意,删除逻辑卷、卷组和物理卷的顺序是严格要求的。

四、LVM逻辑卷的拉伸与缩减

拉伸一个逻辑卷

使用LVM逻辑卷可以动态地管理磁盘,我们可以在线拉伸逻辑卷,而不需要卸载逻辑卷。拉伸操作实际上是向逻辑卷中增加PE的数量,而PE的数量由VG中剩余的PE决定。
接下来我们来看看拉伸逻辑卷的步骤:

因为我们的逻辑卷的拉伸操作是可以在线进行的,所以这里我们先将逻辑卷挂载上,并在使用情况下动态的拉伸我们的逻辑卷

[root@xiaoluo ~]# mount /dev/xiaoluo/mylv   /mnt
[root@xiaoluo ~]# cd /mnt
[root@xiaoluo mnt]# vi xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo
[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt
  1. 查看当前VG的信息,确保VG有足够的空闲空间:

    vgdisplay
    

    在我们的VG中还有足够的空闲空间时,我们就可以动态的对逻辑卷进行拉伸操作了

  2. 扩充逻辑卷,例如增加1G的大小:

    lvextend -L +1G /dev/xiaoluo/mylv
    

    或者:

    lvresize -L  +1G /dev/xiaoluo/mylv
    
  3. 查看完扩充后LV大小,扩充完后我们可以使用 lvdisplay 或者 lvs 命令来查看一下当前lv的信息:

       lvdisplay
    
  4. 更新文件系统,对于ext文件系统使用resize2fs命令,对于xfs文件系统使用xfs_growfs命令:

    resize2fs /dev/xiaoluo/mylv
    

    或者:

    xfs_growfs /dev/xiaoluo/mylv
    

    在对逻辑卷进行拉伸以后,通过 df -h 命令可以查看一下当前的文件系统信息:

    df -h
    

拉伸一个卷组

如果VG中的PE数量不足,我们需要拉伸卷组以增加空间。这可以通过增加一块物理硬盘,将其格式化为PV,然后加入到VG中来实现。

  1. 查看当前VG的空闲空间大小:
    vgs
    
  2. 将要添加到VG的硬盘格式化成PV:
    pvcreate /dev/sdd
    
  3. 将新的PV添加到指定的VG中:
    vgextend xiaoluo /dev/sdd
    
  4. 查看当前VG的信息:
    vgdisplay
    

缩小一个逻辑卷

缩小逻辑卷需要先卸载逻辑卷,然后缩小文件系统,最后缩小LV。

  1. 卸载已挂载的逻辑卷:

    umount /mnt
    
  2. 缩小文件系统容量,使用resize2fs命令,首先需要运行 e2fsck 命令来对我们的文件系统进行检查:

    e2fsck -f /dev/xiaoluo/mylv
    lvs
    resize2fs /dev/xiaoluo/mylv 10G
    
  3. 缩小LV卷组:

    lvs
    lvreduce -L 10G /dev/xiaoluo/mylv
    

    或者

    lvresize -L 10G  /dev/xiaoluo/mylv
    lvs
    

缩小逻辑卷是一个危险的操作,可能会损坏逻辑卷,因此一般不建议进行缩减操作。
缩小完逻辑卷以后,我们再将逻辑卷挂载到 /mnt 下,看看里面的文件是否还在:

 mount /dev/xiaoluo/mylv /mnt/cd /mnt/lslost+found  xiaoluo.txtcat xiaoluo.txtI am xiaoluo

我们发现,我们之前创建的文件,以及文件里的内容都没有发生改变。

最后再强调一点:缩小逻辑卷的操作必须要先卸载掉逻辑卷,然后先缩小文件系统,最后再来缩小我们的逻辑卷才行。

缩小卷组

缩小卷组通常在需要移除一块硬盘时进行。

  1. 卸载逻辑卷:
    cd
    umount /dev/xiaoluo/mylv
    
  2. 将一个PV从指定卷组中移除:
    pvs
    vgreduce xiaoluo /dev/sdd
    
  3. 查看当前卷组的信息:
    vgdisplay
    
  4. 删除PV:
    pvremove /dev/sdd
    

五、LVM逻辑卷快照备份与还原

LVM中的Snapshot和写时复制(copy on write)

LVM中的快照通过“写时复制”(copy on write)来实现。在创建快照时,只会拷贝原始卷的元数据,而不会进行物理内存的数据拷贝。因此,快照的创建几乎是实时的。当原始卷上执行写操作时,快照会跟踪原始卷块的改变,并将要改变的数据在改变之前拷贝到快照的预留空间中。

需要注意的是,使用写时复制方式实现快照时,并不需要快照的大小与原始卷相同。快照的大小只需考虑两个方面:从创建到释放期间预计块的改变量有多大以及数据更新的频率。一旦快照的记录空间满了,即原始卷块发生变换的信息,则这个快照会被立即释放,因此无法再使用。因此,在快照的生命周期内务必要完成需要的操作。

下面是一个使用shell命令演示的整个过程:

1. 建立源数据卷实验数据

[root@localhost ~]# lvsLV       VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot     centos -wi-ao---- <47.61g                                                    swap     centos -wi-ao----   2.00g                                                    lv_mysql vg0    -wi-a-----   5.00g                                                    
[root@localhost ~]# mount /dev/vg0/lv_mysql  /mnt/lv_mysql/
[root@localhost ~]# cp /etc/ssh/* /mnt/lv_mysql/
[root@localhost ~]# cp /etc/services /mnt/lv_mysql/
[root@localhost ~]# cp -r /usr/lib/systemd/  /mnt/lv_mysql/
[root@localhost ~]# ls /mnt/lv_mysql/
moduli    ssh_config   ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key      systemd
services  sshd_config  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub

2. 建立快照

建立快照,快照必须和源逻辑卷在同一个VG组,因此必须确保VG有满足快照需求的空间
-n 指定快照名字
-s 指创建的类型为快照
-L 指定快照的大小
-p r 指定创建为只读属性的快照

[root@localhost ~]# lvcreate -n lv_mysql_snp -s -L200M  /dev/vg0/lv_mysql Logical volume "lv_mysql_snp" created.
[root@localhost ~]# lvsLV           VG     Attr            LSize   Pool Origin      Data%  Meta%  Move Log Cpy%Sync Convertroot         centos -wi-ao---- <47.61g                                                      swap         centos -wi-ao----   2.00g                                                      lv_mysql     vg0    owi-aos---   5.00g                                                      lv_mysql_snp vg0    swi-a-s--- 200.00m      lv_mysql 0.00 

3. 挂载快照卷

[root@localhost ~]# mount /dev/vg0/lv_mysql_snp   /mnt/
mount: /dev/mapper/vg0-lv_mysql_snp is write-protected, mounting read-only
mount: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-lv_mysql_snp,missing codepage or helper program, or other errorIn some cases useful info is found in syslog - trydmesg | tail or so.
[root@localhost ~]# 
挂载错误原因:创建出的快照与源卷的文件系统的UUID一样的。
[root@localhost ~]# blkid  /dev/vg0/lv_mysql*
/dev/vg0/lv_mysql: UUID="7c86a058-8f15-40f9-9483-500c05a5848e" TYPE="xfs" 
/dev/vg0/lv_mysql_snp: UUID="7c86a058-8f15-40f9-9483-500c05a5848e" TYPE="xfs" [root@localhost ~]# umount /dev/vg0/lv_mysql                         ---卸载源卷
[root@localhost ~]# mount /dev/vg0/lv_mysql_snp  /mnt/snp/   ----挂载快照
或者指定 -o nouuid方式挂载
[root@localhost ~]# mount -onouuid /dev/vg0/lv_mysql_snp  /mnt/snp/

挂载错误的原因是创建的快照和源卷具有相同的文件系统UUID。

4. 查看快照数据

查看快照数据,与源卷数据完全一样

[root@localhost ~]# ls /mnt/snp/
moduli    ssh_config   ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key      systemd
services  sshd_config  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub

5. 测试恢复

[root@localhost ~]# rm -rf /mnt/lv_mysql/sshd_config 
[root@localhost ~]# echo > /mnt/lv_mysql/services 
[root@localhost ~]# ls /mnt/lv_mysql/sshd_config
ls: cannot access /mnt/lv_mysql/sshd_config: No such file or directory
[root@localhost ~]# cat /mnt/lv_mysql/services [root@localhost ~]# ls /mnt/snp/
moduli    ssh_config   ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key      systemd
services  sshd_config  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub[root@localhost ~]# tail -5 /mnt/snp/services 
com-bardac-dw   48556/tcp               # com-bardac-dw
com-bardac-dw   48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
matahari        49000/tcp               # Matahari Broker[root@localhost ~]# lvsLV           VG     Attr       LSize   Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert                                  
lv_mysql_snp vg0    swi-aos--- 200.00m      lv_mysql 1.03    ---COW 数据空间发生了增长

6. 单文件恢复

单文件恢复 直接将数据复制过去即可

[root@localhost ~]# cp /mnt/snp/sshd_config   /mnt/lv_mysql/
[root@localhost ~]# \cp /mnt/snp/services   /mnt/lv_mysql/

7. 整个卷组还原恢复(快照合并)

[root@localhost ~]# rm -rf /mnt/lv_mysql/*      ----模拟破坏整个卷组数据
[root@localhost ~]# ls /mnt/lv_mysql/
[root@localhost ~]# ls /mnt/snp/
moduli    ssh_config   ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key      systemd
services  sshd_config  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub[root@localhost ~]# umount  /dev/vg0/lv_mysql              ---卸载源卷
[root@localhost ~]# umount  /dev/vg0/lv_mysql_snp      ----卸载快照
[root@localhost ~]# lvconvert  --merge  /dev/vg0/lv_mysql_snp       ---合并[root@localhost ~]# lvs      ---快照合并完则自动销毁WARNING: Cannot find matching snapshot segment for vg0/lv_mysql.LV       VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convertroot     centos -wi-ao---- <47.61g                                                    swap     centos -wi-ao----   2.00g                                                    lv_mysql vg0    Owi-a-s---   5.00g[root@localhost ~]# mount /dev/vg0/lv_mysql  /mnt/lv_mysql/[root@localhost ~]# ls /mnt/lv_mysql/     ---数据被恢复
moduli    ssh_config   ssh_host_ecdsa_key      ssh_host_ed25519_key      ssh_host_rsa_key      systemd
services  sshd_config  ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub

需要注意的是,如果在合并快照时源卷或快照未卸载,则合并会延迟到下一次激活源卷时才完成合并。

重新激活lv卷解决方案:
[root@localhost ~]# umount  /mnt/lv_mysql/
[root@localhost ~]# lvchange -a n /dev/vg0/lv_mysql
[root@localhost ~]# lvchange -a y /dev/vg0/lv_mysql

特别注意:如果快照的数据空间使用率达到100%,则快照无法挂载,失效。

[root@localhost ~]# lvsLV           VG     Attr       LSize   Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert                                                     lv_mysql_snp vg0    swi-a-s--- 200.00m      lv_mysql 0.00[root@localhost ~]# dd if=/dev/zero of=/mnt/lv_mysql/data-100m  bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 2.20342 s, 47.6 MB/s
[root@localhost ~]# lvsLV           VG     Attr       LSize   Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert                                                    lv_mysql_snp vg0    swi-a-s--- 200.00m      lv_mysql 50.20[root@localhost ~]# dd if=/dev/zero of=/mnt/lv_mysql/data-100-2m  bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 1.14005 s, 92.0 MB/s
[root@localhost ~]# lvsLV           VG     Attr       LSize   Pool Origin   Data%  Meta%  Move Log Cpy%Sync Convert                                                    lv_mysql_snp vg0    swi-I-s--- 200.00m      lv_mysql 100.0

如果需要合并快照,可以先卸载源卷和快照,然后执行合并操作。

[root@localhost ~]# umount  /mnt/lv_mysql/
[root@localhost ~]# umount  /mnt/snp/
[root@localhost ~]# lvconvert --merge  /dev/vg0/lv_mysql_snp 

但需要注意的是,如果快照数据空间的使用率已经达到100%,则无法再进行挂载和合并操作。

以上就是关于LVM中Snapshot的使用过程,包含了建立源数据卷、创建快照、挂载快照、恢复数据以及合并快照的详细步骤。

六、Linux系统磁盘配额限制

在Linux系统中,为了避免多用户共同使用一个磁盘导致磁盘空间耗尽的情况,我们可以使用磁盘配额来对用户在指定文件系统中使用磁盘空间和文件数量进行限制。

1. 磁盘配额的限制

  1. 首先,需要检查Linux内核是否支持磁盘配额技术:
[root@localhost ~]# cat /boot/config-3.10.0-1127.el7.x86_64 | grep -i "quota"
CONFIG_NETFILTER_XT_MATCH_QUOTA=m
CONFIG_XFS_QUOTA=y
CONFIG_QUOTA=y
  1. 对于EXT系列文件系统,磁盘配额是针对整个文件系统(即整个硬盘分区)的,无法对单一的目录进行磁盘配额限制;而xfs系列文件系统不仅可以对文件系统进行磁盘配额,还可以对单一的目录进行磁盘配额project。

  2. 磁盘配额只对一般用户有效,对管理员(root)没有任何作用限制。

2. Quota的设置内容

使用Quota来设置用户、组和目录的磁盘配额,包括限制inode和block的用量。

  • inode表示可以创建文件或目录的数量。
  • block表示可以存储的容量大小,默认单位为KB。

在配额设置中,soft表示软限制,hard表示硬限制。软限制是最低限制容量,可以被超过,但会有警告信息,并且超过的部分会保存到宽限时期到期。一般来说,软限制是硬限制的80%。

宽限时间指的是用户使用的空间超过了软限制但还没达到硬限制时,在宽限时间到期前必须将超过的数据降低到软限制以下(默认为7天),否则系统将自动清除超过的数据。

3. XFS文件系统的磁盘配额

Selinux默认只允许对/home的配额,因此实验室关闭SELINUX

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce Permissive

对于XFS文件系统,首次挂载时才能启用磁盘配额。可以通过以下命令进行挂载:

[root@localhost ~]# mount -o uquota,gquota,prjquota /设备 /目录

其中,uquota/usrquota表示用户配额,gquota/grpquota表示组配额,prjquota表示项目(单个目录)配额。

可以使用xfs_quota命令查看和设置磁盘配额,例如:

[root@localhost ~]# xfs_quota -xc "print"   # 查看系统下所有xfs分区是否支持配额
# xfs_quota -xc "print" /mnt/xfs   # 查看指定的/mnt/xfs是否支持配额
# xfs_quota -xc "state -u" /mnt/xfs   # 查看指定分区用户配额状态信息
# xfs_quota -xc "state -g" /mnt/xfs   # 查看指定分区组配额状态信息
# xfs_quota -xc "state -p" /mnt/xfs   # 查看指定分区目录配额状态信息

可以使用xfs_quota命令设置磁盘配额,例如:

[root@localhost ~]# xfs_quota -x -c 'limit -u bsoft=10M bhard=20M isoft=10 ihard=20 uplooking' /dir
[root@localhost ~]# xfs_quota -x -c 'limit -g bsoft=10M bhard=20M isoft=10 ihard=20 cw_group' /dir

其中,

  • -x表示专家模式,

  • -c表示管理员命令,

  • limit表示限制,

  • -u表示用户,

  • -g表示组,

  • bsoft/bhard表示容量限制,

  • isoft/ihard表示文件数量限制,

  • b开头表示block 容量限制
    i开头表示inode 文件数量限制
    
  • uplooking/cw_group表示用户名或者组名,

  • /dir 分区挂载目录。

对于项目目录配额的设置,可以按以下步骤进行:

  1. 添加配额实验用户:
  • 创建一个名为abc的用户:useradd abc
  • 为用户abc设置密码为123456:echo "123456" | passwd --stdin abc
  1. 挂载磁盘并开启配额支持:
  • 使用blkid命令查看磁盘的UUID和类型:blkid /dev/vg0/lv_mysql
  • 将磁盘/dev/vg0/lv_mysql挂载到/mnt/lv_mysql,并开启用户和组配额支持:mount -ouquota,gquota /dev/vg0/lv_mysql /mnt/lv_mysql/
  • 使用xfs_quota命令查看分区是否已开启配额支持:xfs_quota -x -c "print"
  1. 设置分区针对abc用户的配额限制:
  • 使用xfs_quota命令设置用户abc的配额限制:xfs_quota -x -c "limit -u bhard=20M bsoft=16M ihard=10 isoft=6 abc" /mnt/lv_mysql/
  1. 查看配额报告:
  • 使用xfs_quota命令生成配额报告:xfs_quota -x -c "report" /mnt/lv_mysql/
  1. 测试abc用户配额:
  • 切换到abc用户:su abc
  • 在/mnt/lv_mysql/目录下创建文件:touch /mnt/lv_mysql/file-{1..6}
  • 使用xfs_quota命令查看用户配额使用情况:xfs_quota -x -c "report -iuh" /mnt/lv_mysql/
  • 创建第7个文件后再次查看用户配额使用情况,超过软限制6后显示警告信息:touch /mnt/lv_mysql/file-7
  1. 修改默认的inodes宽容时间和超出硬限制的测试:
  • 使用xfs_quota命令修改默认的inodes宽容时间为10天:xfs_quota -x -c "timer -i 10days" /mnt/lv_mysql/
  • 在abc用户下创建第8到第11个文件,超过硬限制10后无法继续创建:touch /mnt/lv_mysql/file-{8..11}
  1. 解除某个用户的配额:
  • 将各项配额设置为0表示不限制:

    xfs_quota -x -c "limit -u bhard=0 bsoft=0 ihard=0 isoft=0 abc" /mnt/lv_mysql/

  1. xfs针对某个目录做磁盘限额:
  • 创建目录/var/xfs/mysql并赋予写权限:mkdir /var/xfs/mysqlchmod a+w /var/xfs/mysql/
  • 使用xfs_quota命令为目录设置项目id为110:xfs_quota -x -c "project -s -p /mnt/xfs/dir 110" /mnt/xfs
  • 将项目id记录到/etc/projects文件中:echo "110:/mnt/xfs/dir" >> /etc/projects
  • 使用xfs_quota命令查看项目编号:xfs_quota -xc "print" /mnt/mysql/
  1. 查看磁盘配额状态:xfs_quota -x -c "state"

4. EXT4文件系统的磁盘配额

对于EXT4文件系统,首先需要开启分区的磁盘配额功能。可以通过以下命令进行挂载:

# mount -t ext4 -o usrquota,grpquota /dev/sdb2 /mnt/ext4   # 开启分区配额支持(如果需要永久生效,写入/etc/fstab文件)

可以使用quotacheck命令创建配额数据库:

# quotacheck -cugv /dev/sdb2   # 创建配额数据库

编辑用户配额时,可以使用edquota命令进行交互式编辑:

# edquota -u zhang3  # 给用户zhang3配置磁盘配额

可以使用setquota命令进行非交互式的用户磁盘配额设置:

# setquota -u gkd 1G 2G 100 120 /dev/app/lv_ext4   # 非交互式设置用户gkd在/dev/app/lv_ext4分区的配额

使用repquota命令查看配额报告:

# repquota -auvs /dev/app/lv_ext4   # 查看所有开启配额支持的分区的配额报告

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

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

相关文章

LabVIEW提高开发效率技巧----节省内存

在LabVIEW开发过程中&#xff0c;内存管理是保障程序稳定性和性能的关键。本文将详细介绍如何通过队列处理来节省内存&#xff0c;尤其是如何通过解耦释放不再需要的数据&#xff0c;防止内存泄漏。通过多个实际例子&#xff0c;从不同角度探讨队列处理在大数据量或长时间运行的…

HTB:CozyHosting[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many TCP ports are open on CozyHosting? 2.The webserver on TCP port 80 issues a redirect to what domain? 3.What relative path on the webserver returns a 500 error? 4.What is the Java web framework used in the we…

初识算法 · 二分查找(4)

目录 前言&#xff1a; 寻找峰值 题目解析 算法原理 算法编写 寻找旋转排序数组中的最小值 题目解析 算法原理 算法编写 寻找缺失的数字 题目解析 算法原理 算法编写 前言&#xff1a; ​本文的主题是二分查找&#xff0c;通过三道题目讲解&#xff0c;一道是寻找…

【Web开发】什么是Nuxt? 利用Nuxt快速搭建前端项目

Nuxt官网&#xff1a;https://nuxt.com/ 启动一个Nuxt项目 在vscode的项目文件终端运行以下命令&#xff1a; npx nuxilatest init <my-app>npm installnpm run dev然后就启动了一个Nuxt项目 安装Nuxt UI Nuxt UI官网&#xff1a;https://ui.nuxt.com/ npx nuxilates…

线程的同步

目录 引入 认识条件变量 快速认识接口​编辑 认识条件变量​编辑 测试代码​编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步&#xff1a;在保证数据安全的前提下&#xff0c;让线程…

【小白学机器学习22】 多变量分析,多变量回归(草稿)

目录 1 概念名词&#xff1a; 1.1 双变量分析与单因素分析 1.2 变化 1.3 相关分析 Correlation analysis 1.4 回归分析 Regression analysis 1.5 相干和相关 1.5.1 相干relevant 1.5.2 相关Correlation 2 双变量分析&#xff0c;也就是单因素分析 3 相关分析 4 正…

The database mes could not be exclusively locked to perform the operation.

当你尝试更改数据库名字时&#xff0c;如果遇到错误消息 "The database [database_name] could not be exclusively locked to perform the operation"&#xff0c;这意味着 SQL Server 无法获得对数据库的独占锁&#xff0c;因为该数据库当前正在被其他会话使用。这…

Hugging Face HUGS 加快了基于开放模型的AI应用的开发

在过去一年左右的时间里&#xff0c;开源人工智能模型在性能上已经明显赶上了 OpenAI、Google 和其他公司的流行闭源模型。 然而&#xff0c;由于在不同硬件上部署和维护这些模型所带来的开销&#xff0c;开发人员尚未广泛采用这些模型。为了解决这个问题&#xff0c;Hugging F…

驱动开发系列26 - Linux Graphics 调试 mesa 的 glDrawArrays (二)

目录 一:概述 二:Gallium3D 的工作流程 三:tc_draw_vbo 与 tc_call_draw_single 的关系: 四:tc_draw_vbo 与 tc_call_draw_single 的具体执行流程: 五:mesa中线程池设计介绍: 六:总结: 一:概述 众所周知,Mesa 的 Gallium3D 是一个图形驱动框架,它将图形管线…

【Unity】Unity中文本中插入超链接且可点击响应,TextMeshPro的进阶用法

一、需求和尝试 今天遇到这样一个需求&#xff1a;在文本中插入超链接&#xff0c;且这个链接可以点击跳转对应的url&#xff0c;具体形式如下图所示。 其实这个有一个简单粗暴的方法&#xff0c;就是把需要加超链接的文本单独拿出来&#xff0c;和其他文本进行拼接&#xf…

修改huggingface的缓存目录以及镜像源

执行以下语句查看当前配置 huggingface-cli env默认输出应该如下 (py39-transformers) PS D:\py_project\transformers_demo> huggingface-cli envCopy-and-paste the text below in your GitHub issue.- huggingface_hub version: 0.26.1 - Platform: Windows-10-10.0.22…

面向垂类场景的智能化低代码引擎

背景介绍 在通信领域中&#xff0c;不同客户的数字化场景存在多种个性化大屏的定制需求&#xff0c;常见业务范围涵盖政务、金融、教育、工业、传媒、互联网等行业领域。然而&#xff0c;面对如此巨大的产业痛点诉求&#xff0c;传统低代码领域却存在数据监控粒度不统一、定制化…

学习docker第三弹------Docker镜像以及推送拉取镜像到阿里云公有仓库和私有仓库

docker目录 1 Docker镜像dockers镜像的进一步理解 2 Docker镜像commit操作实例案例内容是ubuntu安装vim 3 将本地镜像推送至阿里云4 将阿里云镜像下载到本地仓库5 后记 1 Docker镜像 镜像&#xff0c;是docker的三件套之一&#xff08;镜像、容器、仓库&#xff09;&#xff0…

基于SpringBoot+Vue+MySQL的实践性教学系统

系统展示 用户前台界面 后台界面 系统背景 随着信息技术的快速发展&#xff0c;企业对于高效、智能的管理系统需求日益迫切。传统的管理系统大多采用单机版或C/S架构&#xff0c;存在操作复杂、维护困难、数据共享性差等问题。而基于SpringBootVueMySQL的全栈管理系统&#xff…

【10分钟本地部署大语言模型】借助1Panel、MaxKb、Ollama快速部署大语言模型(qwen、llama等)及知识库

前言&#xff1a; 本文介绍一种快速在Linux服务器&#xff08;windows使用wsl也可以&#xff09;上部署大语言模型&#xff08;含知识库&#xff09;的方式。 核心内容如下&#xff1a; 1Panel&#xff1a; 开源的Linux 服务器运维管理面板&#xff0c;通过该面板安装ollama和…

hivesql学习大纲

引言 - 简述Hive的用途和特点 - 为什么学习HiveSQL 第一部分&#xff1a;Hive基础 1.1 Hive简介 - 定义和架构 - Hive与传统数据库的区别 - Hive的应用场景 1.2 Hive环境搭建 - 所需环境和依赖 - 安装和配置Hive - 启动和停止Hive服务 1.3 Hive数据模型 - 数据库&#xff0…

STM32与ESP8266实现串口通信

在嵌入式系统设计中&#xff0c;经常需要将微控制器与Wi-Fi模块相结合&#xff0c;以实现无线通信功能。STM32是一款强大的微控制器&#xff0c;而ESP8266是一款流行的Wi-Fi模块。本文将详细介绍如何使用STM32通过串口与ESP8266实现通信&#xff0c;包括硬件连接、软件配置和代…

Serv00 免费虚拟主机 零成本搭建 PHP / Node.js 网站

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 Serv00 是一个提供免费虚拟主机的平台&#xff0c;包含了 3GB 的存储空间和 512MB 的内存空间&#xff0c;足够我们搭建一个 1IP 的小网站了。同时他还不限制每月的流量&#xff0c;并提供了 16 个数据库&…

进程间通信(一)管道

文章目录 进程间通信进程间通信概述进程间通信的方式管道通信示例--基于管道的父子进程通信示例--使用管道进程兄弟进程通信 管道的读写特性示例--不完整管道&#xff08;读一个写端关闭的管道&#xff09;示例--不完整管道&#xff08;写一个读端关闭的管道&#xff09; 标准库…

PyQt 入门教程(3)基础知识 | 3.1、使用QtDesigner创建.ui文件

文章目录 一、使用QtDesigner创建.ui文件1、创建.ui文件2、生成.py文件3、使用新生成的.py文件4、编辑新生成的.py文件 一、使用QtDesigner创建.ui文件 1、创建.ui文件 打开PyCharm&#xff0c;使用自定义外部工具QtDesigner创建mydialog.ui文件&#xff0c;如下&#xff1a; …