Linux LVM邏輯捲管理

来源:https://www.cnblogs.com/llife/archive/2019/08/24/11404135.html
-Advertisement-
Play Games

使用 Linux 好久了,一定會意識到一個問題,某個分區容量不夠用了,想要擴容怎麼辦?這裡就涉及到 LVM 邏輯捲的管理了,可以動態調整 Linux 分區容量。 ...


CentOS-Logo

使用Linux好久了,一定會意識到一個問題,某個分區容量不夠用了,想要擴容怎麼辦?這裡就涉及到LVM邏輯捲的管理了,可以動態調整Linux分區容量。


LVM 概述

全稱Logical Volume Manager,可以動態調整磁碟容量,提高磁碟管理靈活性。

在安裝CentOS 7的過程中選擇自動分區時,預設就是以LVM的方案安裝的系統。

但是/boot分區必須獨立出來,不能基於LVM創建。

PV 物理捲

物理捲,Physical Volume,是LVM機制的基本存儲設備,通常對應一個普通分區或是整個硬碟。

創建物理捲時,會在分區或磁碟頭部創建一個用於記錄LVM屬性的保留區塊,並把存儲空間分割成預設大小為4MB的基本單元(Physical Extend,PE),從而構成物理捲。

普通分區先轉換分區類型為8e;整塊硬碟,可以將所有的空間劃分為一個主分區再做調整。

VG 捲組

捲組,Volume Group,是由一個或多個物理捲組成的一個整體。可以動態添加、移除物理捲,創建時可以指定PE大小。

LV 邏輯捲

邏輯捲,Logical Volume,建立在捲組之上,與物理捲沒有直接關係。格式化後,即可掛載使用。

三者關係

關係圖

通過以上對三者的解釋可以看出,建立LVM的過程。首先,將普通分區或整個硬碟創建為物理捲;然後,將一個或多個物理捲創建為捲組;最後,在捲組上分割不同的數據存儲空間形成邏輯捲。有了邏輯捲,就可以格式化、掛載使用了。


LVM 管理

LVM 常用命令

功能 PV 管理命令 VG 管理命令 LV 管理命令
Scan(掃描) pvscan vgscan lvscan
Create(建立) pvcreate vgcreate lvcreate
Display(顯示) pvdisplay vgdisplay lvdisplay
Remove(移除) pvremove vgremove lvremove
Extend(擴展) / vgextend lvextend
Reduce(減少) / vgreduce lvreduce

PV 管理

pvsacn

  • 掃描列出系統中所有的物理捲

-e:僅顯示屬於輸出捲組的物理捲
-n:僅顯示不屬於任何捲組的物理捲

[root@localhost ~]# pvscan
  PV /dev/sda2   VG centos          lvm2 [<19.00 GiB / 0    free]
  PV /dev/sdb1                      lvm2 [<20.00 GiB]
  PV /dev/sdc1                      lvm2 [<20.00 GiB]
  Total: 3 [58.99 GiB] / in use: 1 [<19.00 GiB] / in no VG: 2 [<40.00 GiB]

pvcreate

  • 將分區或整個硬碟轉換成物理捲
[root@localhost ~]# pvcreate /dev/sd{b,c}1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.

pvdisplay

  • 顯示物理捲的詳細信息
[root@localhost ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               centos
  PV Size               <19.00 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4863
  Free PE               0
  Allocated PE          4863
  PV UUID               E4eovQ-CgPo-OSDK-75MO-BfD8-pGsP-BUlqip

  "/dev/sdb1" is a new physical volume of "<20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name
  PV Size               <20.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               gR5mm3-f50o-XLTq-34GY-n6Iz-WXkQ-uMZAkJ

  "/dev/sdc1" is a new physical volume of "<20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               <20.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               O2gKxa-ONts-kyXK-zZrO-3dDg-FhtI-V6GPy9

pvremove

  • 刪除指定的物理捲,還原成普通分區或磁碟

TIPS:只有不屬於捲組的物理捲才可以刪除還原。

[root@localhost ~]# pvremove /dev/sdd1
  Labels on physical volume "/dev/sdd1" successfully wiped.

VG 管理

vgscan

  • 掃描系統中已建立的LVM捲組
[root@localhost ~]# vgscan
  Reading volume groups from cache.
  Found volume group "class" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2

vgcreate

  • 將一個或多個物理捲創建為一個捲組

-l:捲組上允許創建的最大邏輯捲數
-p:捲組中允許添加的最大物理捲數
-s:捲組上的物理捲的PE大小

[root@localhost ~]# vgcreate class /dev/sd{b,c}1
  Volume group "class" successfully created

vgdisplay

  • 顯示系統中各捲組的詳細信息
[root@localhost ~]# vgdisplay
  --- Volume group ---
  VG Name               class
  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               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               ZtQvGX-YOdy-U8wj-mGQs-TT1e-1PBR-dBNKAG

  --- Volume group ---
  VG Name               centos
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <19.00 GiB
  PE Size               4.00 MiB
  Total PE              4863
  Alloc PE / Size       4863 / <19.00 GiB
  Free  PE / Size       0 / 0
  VG UUID               bLPJGb-SQQ3-KcUb-OSdo-qaMR-9hJE-MTkc7a

vgremove

  • 刪除指定的捲組

TIPS:捲組下麵的邏輯捲沒有被掛載使用,捲組刪除時會一併刪除下麵的邏輯捲。

[root@localhost ~]# vgremove class
  Volume group "class" successfully removed

vgextend

  • 添加新的物理捲,動態擴展卷組的磁碟空間
[root@localhost ~]# vgextend class /dev/sdd1
  Volume group "class" successfully extended

vgreduce

  • 刪除捲組中的物理捲,減少捲組容量,

-a:如果命令行中沒有指定要刪除的物理捲,則刪除所有的空物理捲。(all)

TIPS:刪除啊前確保對應的物理捲沒有在使用,就是下麵沒有邏輯捲,否則刪除不了。

[root@localhost ~]# vgreduce class /dev/sdd1
  Removed "/dev/sdd1" from volume group "class"
[root@localhost ~]# vgreduce -a class
  Physical volume "/dev/sdb1" still in use
  Physical volume "/dev/sdc1" still in use
  Removed "/dev/sdd1" from volume group "class"

LV 管理

lvscan

  • 掃描系統中已建立的LVM邏輯捲
[root@localhost ~]# lvscan
  ACTIVE            '/dev/class/stu01' [25.00 GiB] inherit
  ACTIVE            '/dev/class/stu02' [14.99 GiB] inherit
  ACTIVE            '/dev/centos/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [<17.00 GiB] inherit

lvcreate

  • 從指定的捲組中分割空間,創建新的邏輯捲

-L:指定邏輯捲的大小,單位為KMGT
-l:指定百分比創建,如50%vg捲組的一半空間、100%free所有剩下的。
-n:指定邏輯捲的名稱

[root@localhost ~]# lvcreate -L 15G -n stu01 class
  Logical volume "stu01" created.
[root@localhost ~]# lvcreate -l 100%free -n stu02 class
  Logical volume "stu02" created.

lvdisplay

  • 顯示邏輯捲的詳細信息
[root@localhost ~]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/class/stu01
  LV Name                stu01
  VG Name                class
  LV UUID                XUP7dq-IM9f-PdKk-XpDH-J1hx-kkuB-cOu3Qx
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-08-24 09:42:35 +0800
  LV Status              available
  # open                 0
  LV Size                25.00 GiB
  Current LE             6400
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

  --- Logical volume ---
  LV Path                /dev/class/stu02
  LV Name                stu02
  VG Name                class
  LV UUID                P7iMC1-X0oT-6TCH-vLYj-HW2j-6QMu-rS7Jyp
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2019-08-24 09:59:30 +0800
  LV Status              available
  # open                 0
  LV Size                14.99 GiB
  Current LE             3838
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

  --- Logical volume ---
  LV Path                /dev/centos/swap
  LV Name                swap
  VG Name                centos
  LV UUID                NXiaXT-T6yv-ktM2-plyS-j6Hg-hkvu-1JQ2eL
  LV Write Access        read/write
  LV Creation host, time localhost, 2019-08-16 17:12:19 +0800
  LV Status              available
  # open                 2
  LV Size                2.00 GiB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:1

  --- Logical volume ---
  LV Path                /dev/centos/root
  LV Name                root
  VG Name                centos
  LV UUID                7FnsfT-B8xi-3vgu-8N0k-nzNn-8Rra-eoE4iC
  LV Write Access        read/write
  LV Creation host, time localhost, 2019-08-16 17:12:19 +0800
  LV Status              available
  # open                 1
  LV Size                <17.00 GiB
  Current LE             4351
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

lvremove

  • 刪除指定的邏輯捲

TIPS:備份數據,解掛載,刪除。

[root@localhost ~]# umount /mnt/stu02/
[root@localhost ~]# lvremove /dev/class/stu02

lvextend

  • 動態擴展LVM邏輯捲的空間大小

-L:指定擴展邏輯捲的大小,單位為KMGT
-l:指定百分比擴建,如100%free所有剩下的。

[root@localhost ~]# lvextend -L +8G /dev/class/stu01
[root@localhost ~]# lvextend -L +8G /dev/class/stu02

TIPS:已掛載,使用線上調整大小,xfs使用xfs_growfsext4使用resize2fs

[root@localhost ~]# xfs_growfs /dev/class/stu01
[root@localhost ~]# resize2fs /dev/class/stu02

lvreduce

  • 減少LVM邏輯捲的空間大小,

-L:指定邏輯捲的大小,單位為KMGT

TIPS:對於xfs文件系統,備份數據,解掛載,減少空間,強制格式化,重新掛載。需要註意xfs文件系統只能擴大,不能縮小,非要縮小的話,只有縮小後並強制格式化,但這麼做數據就丟失了。

[root@localhost ~]# umount /mnt/stu01/
[root@localhost ~]# lvreduce -L -10G /dev/class/stu01
[root@localhost ~]# mkfs.xfs -f /dev/class/stu01
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT

TIPS:對於ext4這類文件系統,備份數據,解掛載,e2fsck -f檢查文件系統完整性,resize2fs設置文件系統大小,lvreduce設置邏輯捲大小,重新掛載。

[root@localhost ~]# umount /mnt/stu02/
[root@localhost ~]# e2fsck -f /dev/class/stu02
[root@localhost ~]# resize2fs /dev/class/stu02 10G
[root@localhost ~]# lvreduce -L 10G /dev/class/stu02
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT

LVM 實驗

創建 LVM 邏輯捲

1.添加兩塊20G的磁碟,重啟機器,並對其進行分區,全部空間分為一個主分區,類型改為Linux LVM,ID為8e。分區過程省略,不清楚可參考上一篇博客

[root@localhost ~]# fdisk -l /dev/sd{b,c} | grep -i "linux lvm"
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM
/dev/sdc1            2048    41943039    20970496   8e  Linux LVM

2.將/dev/sdb1/dev/sdc1轉換為物理捲。

[root@localhost ~]# pvcreate /dev/sd{b,c}1
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdc1" successfully created.

3.創建名稱為class的捲組,並將sdb1sdc1添加進捲組。

[root@localhost ~]# vgcreate class /dev/sd{b,c}1
  Volume group "class" successfully created

4.劃分大小為15G,名稱為stu01的邏輯捲,然後再擴容10G;剩下的空間創建名稱為stu02的邏輯捲。

[root@localhost ~]# lvcreate -L 15G -n stu01 class
  Logical volume "stu01" created.
[root@localhost ~]# lvextend -L +10G /dev/class/stu01
  Size of logical volume class/stu01 changed from 15.00 GiB (3840 extents) to 25.00 GiB (6400 extents).
  Logical volume class/stu01 successfully resized.
[root@localhost ~]# lvcreate -l 100%free -n stu02 class
  Logical volume "stu02" created.

5.格式化邏輯捲,stu01xfsstu02ext4,設置自動掛載,掛載後就可以使用了。

[root@localhost ~]# mkfs.xfs /dev/class/stu01
meta-data=/dev/class/stu01       isize=512    agcount=4, agsize=1638400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=6553600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=3200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mkfs.ext4 /dev/class/stu02
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
983040 inodes, 3930112 blocks
196505 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
120 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]# mkdir /mnt/stu0{1,2}
[root@localhost ~]# vim /etc/fstab
//最後面添加下麵兩行內容
/dev/class/stu01        /mnt/stu01      xfs     defaults        0 0
/dev/class/stu02        /mnt/stu02      ext4    defaults        0 0
[root@localhost ~]# mount -a
[root@localhost ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  927M   17G   6% /
devtmpfs                devtmpfs  901M     0  901M   0% /dev
tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
tmpfs                   tmpfs     912M  8.7M  904M   1% /run
tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  143M  872M  15% /boot
tmpfs                   tmpfs     183M     0  183M   0% /run/user/0
/dev/mapper/class-stu01 xfs        25G   33M   25G   1% /mnt/stu01
/dev/mapper/class-stu02 ext4       15G   41M   14G   1% /mnt/stu02

擴容 LVM 邏輯捲

1.再添加一塊20G的磁碟,重啟機器,並對其進行分區,全部空間分為一個主分區,類型改為Linux LVM,ID為8e

[root@localhost ~]# fdisk -l /dev/sd{b..d} | grep -i "linux lvm"
/dev/sdb1            2048    41943039    20970496   8e  Linux LVM
/dev/sdc1            2048    41943039    20970496   8e  Linux LVM
/dev/sdd1            2048    41943039    20970496   8e  Linux LVM

2.將/dev/sdd1轉換為物理捲。

[root@localhost ~]# pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created.

3.若是捲組剩餘空間不夠,就要先對class捲組進行擴容。

[root@localhost ~]# vgdisplay class
  --- Volume group ---
  VG Name               class
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       10238 / 39.99 GiB
  Free  PE / Size       0 / 0
  VG UUID               iB1h9h-2uQa-rD7o-GBVK-pOCA-ek2c-TXieLr
[root@localhost ~]# vgextend class /dev/sdd1
  Volume group "class" successfully extended
[root@localhost ~]# vgdisplay class
  --- Volume group ---
  VG Name               class
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               <59.99 GiB
  PE Size               4.00 MiB
  Total PE              15357
  Alloc PE / Size       10238 / 39.99 GiB
  Free  PE / Size       5119 / <20.00 GiB
  VG UUID               iB1h9h-2uQa-rD7o-GBVK-pOCA-ek2c-TXieLr

4.對stu01stu02都擴容8G,分別使用xfs_growfsresize2fs線上調整大小。

[root@localhost ~]# lvextend -L +8G /dev/class/stu01
  Size of logical volume class/stu01 changed from 25.00 GiB (6400 extents) to 33.00 GiB (8448 extents).
  Logical volume class/stu01 successfully resized.
[root@localhost ~]# lvextend -L +8G /dev/class/stu02
  Size of logical volume class/stu02 changed from 14.99 GiB (3838 extents) to 22.99 GiB (5886 extents).
  Logical volume class/stu02 successfully resized.
[root@localhost ~]# xfs_growfs /dev/class/stu01
meta-data=/dev/mapper/class-stu01 isize=512    agcount=4, agsize=1638400 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=6553600, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=3200, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 6553600 to 8650752
[root@localhost ~]# resize2fs /dev/class/stu02
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/class/stu02 is mounted on /mnt/stu02; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/class/stu02 is now 6027264 blocks long.
[root@localhost ~]# df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  927M   17G   6% /
devtmpfs                devtmpfs  901M     0  901M   0% /dev
tmpfs                   tmpfs     912M     0  912M   0% /dev/shm
tmpfs                   tmpfs     912M  8.7M  903M   1% /run
tmpfs                   tmpfs     912M     0  912M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  143M  872M  15% /boot
/dev/mapper/class-stu01 xfs        33G   33M   33G   1% /mnt/stu01
/dev/mapper/class-stu02 ext4       23G   44M   22G   1% /mnt/stu02
tmpfs                   tmpfs     183M     0  183M   0% /run/user/0

收縮 LVM 邏輯捲

關於收縮 LVM 邏輯捲,可以參考上面的命令lvreduce。這會涉及到數據安全性問題,謹慎使用。


總結

內容不多,但是還要實際操作才能瞭解。就是三步走,創建物理捲,創建捲組,創建邏輯捲,然後格式化並掛載使用。擴容的話,沒有掛載使用,就正常擴,然後格式化掛載,已經掛載使用了,擴容後線上調整生效。還有下一篇關於磁碟配額。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景 By 魯迅 By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器,Contex A53,雙核 3. 使用工具:Source Insight 3.5, Visio 1. 介紹 要想理解好Linux的頁表映射,MMU的機制是需要去熟悉的,因此將這兩個模塊放到一起介紹。 關 ...
  • 1 網路相關的幾個文件說明 1.1 網卡配置文件ifcfg 在/etc/sysconfig/network scripts/目錄下有不少文件,絕大部分都是腳本類的文件,但有一類 ifcfg開頭 的文件為網卡配置文件(interface config),所有ifcfg開頭的文件在啟動網路服務的時候都會 ...
  • 一.分散式文件系統: 是指文件系統管理的物理存儲資源不一定直接是連接在本地節點上,而是通過電腦網路與節點相連. 分散式文件系統的設計基與C/S架構(客戶端/伺服器) 常見的分散式文件系統:Ceph、(紅帽)Hadoop、FastDFS(國產) 二.Ceph分散式文件系統 特點:具有高擴展、高可用、 ...
  • 目錄 Cacti+nagios監控部署步驟... 2 一、Cacti安裝... 2 1需要安裝的依賴軟體包:... 2 2安裝rrdtool 2 3啟動資料庫和httpd服務... 3 4將servername和ip對應寫入hosts 3 5安裝cacti 3 6創建cacti資料庫並授權:... ...
  • 隊列的分類 隊列一般分為三種:順序隊列、迴圈隊列、鏈式隊列 其中順序隊列和迴圈隊列按照存儲方式又可以分為動態和靜態,鏈式隊列是動態的。 順序隊列 順序隊列存在”假溢出“現象:即隊頭由於出隊操作,還有剩餘空間,但隊尾指針已達到數組的末尾,如果繼續插入元素,隊尾指針就會越出數組的上界,而造成“溢出”,這 ...
  • 一、在struct termios結構體中,對串口進行基本配置(如波特率設置,校驗位和停止位設置 等)。 (一): struct termios //串口的設置主要是設置struct termios結構體的各成員 { tcflag_t c_iflag; //input mode flags 輸入模式 ...
  • 許可權的基本介紹: rwx許可權詳解: rwx作用到文件: [r]:代表可讀,可以讀取、查看 [w]:代表可寫,可以修改,但不代表可以刪除該文件,刪除一個文件的前提條件是對該文件所在的目錄有寫許可權才能刪除該文件 [x]:代表可執行 rwx作用在目錄: [r]:代表可讀,可以讀取、ls查看目錄內容 [w] ...
  • 平常我經常使用 htop 工具來進行對主機進行性能檢測。但是它只能對 進行進行管理。並簡要顯示 進程和cpu和記憶體使用信息; glances 是比較好的性能檢測工具。相比較htop還能顯示 disk io net 等更多信息。並且還有web ui和ipc 模式。當我們有多台機器的時候,使用此工具極為 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...