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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...