Linux-邏輯捲LVM

来源:https://www.cnblogs.com/yanjieli/archive/2018/11/12/9945750.html
-Advertisement-
Play Games

LVM邏輯捲管理器 為什麼要使用邏輯捲? 邏輯捲管理器是Linux系統用於對硬碟分區進行管理的一種機制,為瞭解決硬碟設備在創建分區後不易修改分區大小的缺陷。儘管對傳統的硬碟分區進行強制擴容或縮容從理論上講是可行的。但是卻可能造成數據的丟失。LVM技術是在硬碟分區和文件系統之間添加了一個邏輯層,它提供 ...


LVM邏輯捲管理器

為什麼要使用邏輯捲?

邏輯捲管理器是Linux系統用於對硬碟分區進行管理的一種機制,為瞭解決硬碟設備在創建分區後不易修改分區大小的缺陷。儘管對傳統的硬碟分區進行強制擴容或縮容從理論上講是可行的。但是卻可能造成數據的丟失。LVM技術是在硬碟分區和文件系統之間添加了一個邏輯層,它提供了一個抽象的捲組,可以把多塊硬碟進行捲組合併。這樣一來,用戶不必關心物理設備和底層架構和佈局,就可以實現對硬碟分區的動態調整。

LVM的技術架構圖:

舉例理解:

比如小明家裡想吃饅頭但是麵粉不夠了,於是媽媽從隔壁老王家、老李家、老張家分別借來一些麵粉,準備蒸饅頭吃。首先需要把這些麵粉( 物理捲[ PV, Physical Volume ] )揉成一個大麵團( 捲組[ VG,Volume Group ] ),然後再把這個大麵團分割成一個個小饅頭( 邏輯捲[ LV, Logical Volume ] ),而且每個小饅頭的重量必須是每勺麵粉( 基本單元[ PE, Physical Extent ] )的倍數。

理論:

物理捲處於LVM中的最底層,可以將其理解為物理硬碟、硬碟分區或者RAID磁碟陣列,這都可以。捲組建立在物理捲之上,一個捲組可以包含多個物理捲,而且在捲組創建之後也可以繼續向其中添加新的物理捲。邏輯捲是用捲組中空閑的資源建立的,並且邏輯捲在建立後可以動態地擴展或縮小空間。這就是LVM的核心理念。

  • 物理捲(PV:Physical Volume):物理捲是底層真正提供容量,存放數據的設備,它可以是整個硬碟、硬碟上的分區等。
  • 捲組(VG:Volume Group):捲組建立在物理捲之上,它由一個或多個物理捲組成。即把物理捲整合起來提供容量分配。一個LVM系統中可以只有一個捲組,也可以包含多個捲組。
  • 邏輯捲(LV:Logical Volume):邏輯捲建立在捲組之上,它是從捲組中“切出”的一塊空間。它是最終用戶使用的邏輯設備。邏輯捲創建之後,其大小可以伸縮。
  • 基本單元(PE:Physical Extents):具有唯一編號的PE是能被LVM定址的最小單元。PE的大小可以指定,預設為4MB。PE的大小一旦確定將不能改變,同一個捲組中的所有的物理捲的PE的大小是一直的

部署邏輯捲

常用的LVM部署命令

功能/命令 物理捲管理 捲組管理 邏輯捲管理
掃描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
顯示 pvdisplay vgdisplay lvdisplay
刪除 pvremove vgremove lvremove
擴展   vgextend lvextend
縮小   vgreduce lvreduce

添加兩塊新硬碟設備
在虛擬機中添加兩塊新硬碟設備的目的,是為了更好地演示LVM理念中用戶無需關心底層物理硬碟設備的特性。我們先對這兩塊新硬碟進行創建物理捲的操作,可以將該操作簡單理解成讓硬碟設備支持LVM技術,或者理解成是把硬碟設備加入到LVM技術可用的硬體資源池中,然後對這兩塊硬碟進行捲組合併,捲組的名稱可以由用戶來自定義。接下來,根據需求把合併後的捲組切割出一個約為150MB的邏輯捲設備,最後把這個邏輯捲設備格式化成EXT4文件系統後掛載使用。

[root@centos7-1 ~]# lsblk 
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 1024M  0 rom  
vda         252:0    0   10G  0 disk 
├─vda1      252:1    0  500M  0 part /boot
└─vda2      252:2    0  9.5G  0 part 
  ├─cl-root 253:0    0    9G  0 lvm  /
  └─cl-swap 253:1    0  500M  0 lvm  [SWAP]
vdb         252:16   0   10G  0 disk 
vdc         252:32   0   10G  0 disk

第1步:創建物理捲,讓新添加的兩塊硬碟設備支持LVM技術。

[root@centos7-1 ~]# pvcreate /dev/vdb /dev/vdc 
  Physical volume "/dev/vdb" successfully created.
  Physical volume "/dev/vdc" successfully created.

[root@centos7-1 ~]# pvs         //簡單查看
  PV         VG Fmt  Attr PSize  PFree 
  /dev/vda2  cl lvm2 a--   9.51g     0 
  /dev/vdb      lvm2 ---  10.00g 10.00g
  /dev/vdc      lvm2 ---  10.00g 10.00
  
[root@centos7-1 ~]# pvdisplay /dev/vdb        //查看物理捲詳細信息
  "/dev/vdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vdb
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               bUTpIc-J6Hq-LUvk-WinD-hoYk-HQkX-sNgA2W

第2步:創建捲組並將物理捲加入到捲組

[root@centos7-1 ~]# vgcreate vg_storage /dev/vdb /dev/vdc        //vg_storage 自定義捲組名稱
  Volume group "vg_storage" successfully created

[root@centos7-1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg_storage
  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               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5118 / 19.99 GiB
  VG UUID               PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm
 ...........省略部分輸出信息..........

第3步:創建一個約為150MB的邏輯捲設備
這裡需要註意切割單位的問題,在對邏輯捲進行切割時有兩種計量單位。第一種是以容量為單位,所使用的參數為-L,列如使用 —L 150M 則生成一個大小為150MB的邏輯捲。另外一種是以基本單元的個數為單位,所使用的參數為-l。每個基本單元的大小預設為4MB,例如,使用-l 37可以生成一個大小為37×4MB=148MB的邏輯捲。

root@centos7-1 ~]# lvcreate -n lv_vo -L 150M vg_storage         // -n 指定邏輯捲設備名稱
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "lv_vo" created.
  
[root@centos7-1 ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/vg_storage/lv_vo
  LV Name                lv_vo
  VG Name                vg_storage
  LV UUID                dIo5Ff-pKyD-97Hw-RMs3-dQ10-9tHG-ZGh5o9
  LV Write Access        read/write
  LV Creation host, time centos7-1, 2018-11-12 11:00:28 +0800
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2
...........省略部分輸出信息..........

第4步:將生成好的邏輯捲進行格式化,然後掛載使用
Linux系統會把LVM中的邏輯捲設備存放在/dev設備目錄中(實際上是做了一個符號鏈接),同時會以捲組的名稱來建立一個目錄,其中保存了邏輯捲的設備映射文件(即/dev/捲組名稱/邏輯捲名稱)。

[root@centos7-1 ~]# ls /dev/vg_storage/lv_vo 
/dev/vg_storage/lv_vo

[root@centos7-1 ~]# mkfs.ext4 /dev/vg_storage/lv_vo 
mke2fs 1.42.9 (28-Dec-2013)
文件系統標簽=
OS type: Linux
塊大小=1024 (log=0)
分塊大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
38912 inodes, 155648 blocks
7782 blocks (5.00%) reserved for the super user
第一個數據塊=1
Maximum filesystem blocks=33816576
19 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@centos7-1 ~]# mkdir /linuxlvm
[root@centos7-1 ~]# mount /dev/vg_storage/lv_vo /linuxlvm/

第5步:查看掛載狀態,並寫入到配置文件、使其永久生效

[root@centos7-1 ~]# df -h
文件系統                      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root           9.1G  3.7G  5.4G   41% /
devtmpfs                      481M     0  481M    0% /dev
tmpfs                         497M   84K  497M    1% /dev/shm
tmpfs                         497M  7.1M  490M    2% /run
tmpfs                         497M     0  497M    0% /sys/fs/cgroup
/dev/vda1                     497M  166M  332M   34% /boot
tmpfs                         100M   16K  100M    1% /run/user/42
tmpfs                         100M     0  100M    0% /run/user/0
/dev/mapper/vg_storage-lv_vo  144M  1.6M  132M    2% /linuxlvm
[root@centos7-1 ~]# echo "/dev/vg_storage/lv_vo /linuxlvm ext4 defaults 0 0" >>/etc/fstab

擴容邏輯捲

在前面的實驗中,捲組是由兩塊硬碟設備共同組成的。用戶在使用存儲設備時感知不到設備底層的架構和佈局,更不用關心底層是由多少塊硬碟組成的,只要捲組中有足夠的資源,就可以一直為邏輯捲擴容。擴展前請一定要記得卸載設備和掛載點的關聯。

[root@centos7-1 ~]# umount /linuxlvm

第1步:把上一個實驗中的邏輯捲vo擴展至300MB。

[root@centos7-1 ~]# lvextend -L 300M /dev/vg_storage/lv_vo 
  Size of logical volume vg_storage/lv_vo changed from 152.00 MiB (38 extents) to 300.00 MiB (75 extents).
  Logical volume vg_storage/lv_vo successfully resized.

第2步:檢查硬碟完整性,並重置硬碟容量。

[root@centos7-1 ~]# e2fsck -f /dev/vg_storage/lv_vo
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg_storage/lv_vo: 11/38912 files (0.0% non-contiguous), 10567/155648 blocks

[root@centos7-1 ~]# resize2fs /dev/vg_storage/lv_vo 
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg_storage/lv_vo to 307200 (1k) blocks.
The filesystem on /dev/vg_storage/lv_vo is now 307200 blocks long.

第3步:重新掛載硬碟設備並查看掛載狀態。

[root@centos7-1 ~]# mount -a 
[root@centos7-1 ~]# df -h
文件系統                      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root           9.1G  3.7G  5.4G   41% /
devtmpfs                      481M     0  481M    0% /dev
tmpfs                         497M   84K  497M    1% /dev/shm
tmpfs                         497M  7.1M  490M    2% /run
tmpfs                         497M     0  497M    0% /sys/fs/cgroup
/dev/vda1                     497M  166M  332M   34% /boot
tmpfs                         100M   16K  100M    1% /run/user/42
tmpfs                         100M     0  100M    0% /run/user/0
/dev/mapper/vg_storage-lv_vo  287M  2.1M  266M    1% /linuxlvm

縮小邏輯捲

相較於擴容邏輯捲,在對邏輯捲進行縮容操作時,其丟失數據的風險更大。所以在生產環境中執行相應操作時,一定要提前備份好數據。另外Linux系統規定,在對LVM邏輯捲進行縮容操作之前,要先檢查文件系統的完整性(當然這也是為了保證我們的數據安全)。在執行縮容操作前記得先把文件系統卸載掉。

[root@centos7-1 ~]# umount /linuxlvm/

第1步:檢查文件系統的完整性

[root@centos7-1 ~]# e2fsck -f /dev/vg_storage/lv_vo 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg_storage/lv_vo: 11/77824 files (0.0% non-contiguous), 15987/307200 blocks

第2步:把邏輯捲lv_vo的容量減小到120MB

[root@centos7-1 ~]# resize2fs /dev/vg_storage/lv_vo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg_storage/lv_vo to 122880 (1k) blocks.
The filesystem on /dev/vg_storage/lv_vo is now 122880 blocks lon

[root@centos7-1 ~]# lvreduce -L 120M /dev/vg_storage/lv_vo 
  WARNING: Reducing active logical volume to 120.00 MiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg_storage/lv_vo? [y/n]: y
  Size of logical volume vg_storage/lv_vo changed from 300.00 MiB (75 extents) to 120.00 MiB (30 extents).
  Logical volume vg_storage/lv_vo successfully resized.

第3步:重新掛載文件系統並查看系統狀態

[root@centos7-1 ~]# mount -a 
[root@centos7-1 ~]# df -h
文件系統                      容量  已用  可用 已用% 掛載點
/dev/mapper/cl-root           9.1G  3.7G  5.4G   41% /
devtmpfs                      481M     0  481M    0% /dev
tmpfs                         497M   84K  497M    1% /dev/shm
tmpfs                         497M  7.1M  490M    2% /run
tmpfs                         497M     0  497M    0% /sys/fs/cgroup
/dev/vda1                     497M  166M  332M   34% /boot
tmpfs                         100M   16K  100M    1% /run/user/42
tmpfs                         100M     0  100M    0% /run/user/0
/dev/mapper/vg_storage-lv_vo  113M  1.6M  103M    2% /linuxlvm

邏輯捲快照

LVM還具備有“快照捲”功能,該功能類似於虛擬機軟體的還原時間點功能。例如,可以對某一個邏輯捲設備做一次快照,如果日後發現數據被改錯了,就可以利用之前做好的快照捲進行覆蓋還原。

首先查看捲組的信息

[root@centos7-1 ~]# vgdisplay 
  --- Volume group ---
  VG Name               vg_storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               19.99 GiB
  PE Size               4.00 MiB
  Total PE              5118
  Alloc PE / Size       30 / 120.00 MiB
  Free  PE / Size       5088 / 19.88 GiB
  VG UUID               PRDBRS-ybbD-Dwud-GPbM-XxKu-5NHA-a0BMEm
...........省略部分輸出信息..........

通過捲組的輸出信息可以清晰看到,捲組中已經使用了120MB的容量,空閑容量還有19.88GB。接下來用重定嚮往邏輯捲設備所掛載的目錄中寫入一個文件。

[root@centos7-1 ~]# echo "to day is good day" > /linuxlvm/today.txt

[root@centos7-1 ~]# ll /linuxlvm/
總用量 13
drwx------ 2 root root 12288 11月 12 11:04 lost+found
-rw-r--r-- 1 root root    19 11月 12 11:57 today.txt

第1步:使用-s參數生成一個快照捲,使用-L參數指定切割的大小。另外,還需要在命令後面寫上是針對哪個邏輯捲執行的快照操作。

[root@centos7-1 ~]# lvcreate -L 120M -s -n SNAP  /dev/vg_storage/lv_vo 
  Using default stripesize 64.00 KiB.
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "SNAP" created.

[root@centos7-1 ~]# lvs
  LV    VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  cl         -wi-ao----   9.02g                                                    
  swap  cl         -wi-ao---- 500.00m                                                    
  SNAP  vg_storage swi-a-s--- 120.00m      lv_vo  0.01                                   
  lv_vo vg_storage owi-aos--- 120.00m

第2步:在邏輯捲所掛載的目錄中創建一個100MB的垃圾文件,然後再查看快照捲的狀態。可以發現存儲空間占的用量上升了。

[root@centos7-1 ~]# dd if=/dev/zero of=/linuxlvm/files count=1 bs=100M 
記錄了1+0 的讀入
記錄了1+0 的寫出
104857600位元組(105 MB)已複製,0.680154 秒,154 MB/秒

[root@centos7-1 ~]# lvs
  LV    VG         Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  cl         -wi-ao----   9.02g                                                    
  swap  cl         -wi-ao---- 500.00m                                                                                 
  SNAP vg_storage swi-a-s--- 120.00m      lv_vo  83.69                                  
  lv_vo vg_storage owi-aos--- 120.00m 

第3步:為了校驗SNAP快照捲的效果,需要對邏輯捲進行快照還原操作。在此之前記得先卸載掉邏輯捲設備與目錄的掛載。

[root@centos7-1 ~]# umount /linuxlvm

[root@centos7-1 ~]# lvconvert --merge /dev/vg_storage/SNAP 
  Merging of volume vg_storage/SNAP started.
  lv_vo: Merged: 18.84%
  lv_vo: Merged: 100.00%

第4步:快照捲會被自動刪除掉,並且剛剛在邏輯捲設備被執行快照操作後再創建出來的100MB的垃圾文件也被清除了。

[root@centos7-1 ~]# mount -a
[root@centos7-1 ~]# ls /linuxlvm/
lost+found  today.txt

刪除邏輯捲

當生產環境中想要重新部署LVM或者不再需要使用LVM時,則需要執行LVM的刪除操作。為此,需要提前備份好重要的數據信息,然後依次刪除邏輯捲、捲組、物理捲設備,這個順序不可顛倒。

第1步:取消邏輯捲與目錄的掛載關聯,刪除配置文件中永久生效的設備參數。

[root@centos7-1 ~]# umount /linuxlvm/
[root@centos7-1 ~]# vim /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Mon Oct 29 12:25:27 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=07d3a8ca-89fa-4011-837d-47ac9f7660c4 /boot                   xfs     defaults        0 0
/dev/mapper/cl-swap     swap                    swap    defaults        0 0
/dev/vg_storage/lv_vo   /linuxlvm               ext4    defaults        0 0

第2步:刪除邏輯捲設備,需要輸入y來確認操作。

[root@centos7-1 ~]# lvremove /dev/vg_storage/lv_vo 
Do you really want to remove active logical volume vg_storage/lv_vo? [y/n]: y
  Logical volume "lv_vo" successfully removed

第3步:刪除捲組,此處只寫捲組名稱即可,不需要設備的絕對路徑。

[root@centos7-1 ~]# vgremove vg_storage 
  Volume group "vg_storage" successfully removed

第4步:刪除物理捲設備。

[root@centos7-1 ~]# pvremove /dev/vdb /dev/vdc 
  Labels on physical volume "/dev/vdb" successfully wiped.
  Labels on physical volume "/dev/vdc" successfully wiped.

在上述操作執行完畢之後,再執行lvdisplay、vgdisplay、pvdisplay命令來查看LVM的信息時就不會再看到信息了(前提是上述步驟的操作是正確的)。

 


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

-Advertisement-
Play Games
更多相關文章
  • Exchange主要是針對內部網或者企業網用戶進行搭建的郵件伺服器軟體,利用它能夠很快地搭建安全性較高的內部網郵件系統。 本次搭建在個人環境中實踐,純屬愛好折騰,分四步驟,1.搭建windows 2008 server域環境 2.安裝Exchange 2010郵件伺服器 3.配置Exchange 2 ...
  • [toc] Linux Namespace Linux Namespace 是kernel的一個功能,用於隔離系統資源。比如說PID,User ID 等。(可以想象一下變成語言變數的命名空間)這樣我們就可以將 進程,網路介面,掛載點以及用戶做一個隔離。 比如說我們在同一臺主機上,需要將資源分給多個類 ...
  • 個人總結,請尊重版權,轉載請在顯眼地方註明出處:https://www.cnblogs.com/sunshine5683/p/9948259.html day(01)基本命令學習 今天開始自學linux,在學習的過程中將踩過的坑和學習經歷總結出來,在提升自己的過程中,幫助有需要的人,一起學習,希望在 ...
  • Ubuntu的圖形界面使用起來非常方便,但是要想對Linux熟練掌握,就必須學會它的操作命令。雖然可能會花費一些時間,不過從長遠的角度來說,這的確是一件事半功倍的事情,它會讓我們更瞭解Linux,更靈活地去使用Linux。Ubuntu提供了很多命令,不過在本章中不做全部介紹,只是先介紹一些常用命令, ...
  • 這個寫的比較簡單,先做以下記錄 centos虛擬機安裝到別的電腦上,因為linux中的程式需要向外有網路互通,所以需要重新設置ip 通過 ifconfig eth4 192.168.0.20 broadcast 192.168.0.1 :broadcast 參數可以不填,這樣就設置好了ip 但是一個 ...
  • 1. CFS進程入隊和出隊 完全公平調度器CFS中有兩個函數可用來增刪隊列的成員: 和`dequeue_task_fair`分別用來向CFS就緒隊列中添加或者刪除進程 2 enqueue_task_fair入隊操作 2.1 enque_task_fair函數 向就緒隊列中放置新進程的工作由函數 函數 ...
  • 1 虛擬運行時間(今日內容提醒) 1.1 虛擬運行時間的引入 CFS為了實現公平,必須懲罰當前正在運行的進程,以使那些正在等待的進程下次被調度。 具體實現時,CFS通過每個進程的虛擬運行時間(vruntime)來衡量哪個進程最值得被調度。 CFS中的就緒隊列是一棵以vruntime為鍵值的紅黑樹,虛 ...
  • 有一段時間沒有寫學習心得了;現在開始加油,再接再勵。 從最基礎的開始 1.安裝centOS7.3之後設置IP地址。一般linux的系統都是作為伺服器的系統來使用,伺服器的屬性註定了他的IP不能隨意的更變,所以需要設置一個固定的IP地址。 一般centos系統安裝完成後,IP都是通過dhcp來獲得的。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...