Linux - 通過LVM對磁碟進行動態擴容

来源:https://www.cnblogs.com/shoufeng/archive/2019/03/28/10615452.html
-Advertisement-
Play Games

Linux系統中如何掛載磁碟? 如何支持磁碟空間的動態擴容? LVM技術是做什麼的? 本篇文章手把手教你用兩種方式掛載磁碟, 歡迎交流^_^ ...


目錄

1 LVM是什麼

1.1 概念解釋

LVM(Logical Volume Manager), 邏輯捲管理, 是一種將一至多個硬碟的分區在邏輯上進行組合, 當成一個大硬碟來使用.

當硬碟空間不足時, 可以動態地添加其它硬碟的分區到已有的捲組中 —— 磁碟空間的動態管理.

1.2 為什麼用LVM

LVM通常用於裝備大量磁碟的系統, 比如伺服器中的磁碟陣列.

但LVM同樣適用於僅有一、兩塊硬碟的小系統.

1.2.1 不使用LVM時的擴容思路

傳統的文件系統是基於分區的, 一個文件系統對應一個分區, 這種方式比較直觀, 但不易改變:

(1) 不同的分區相互獨立, 單獨的文件不能跨分區存儲, 容易出現硬碟的利用率不均衡;

(2) 當一個文件系統/分區裝滿時, 是不能對其進行擴容的, 只能採用重新分區/建立文件系統, 重新分區會丟失數據, 就要:

① 做數據的遷移和備份;
② 或者把分區中的數據移到另一個更大的分區中;
③ 或者採用符號連接的方式使用其它分區的空間 —— 都非常麻煩;

(3) 如果要把硬碟上的多個分區合併在一起使用, 只能採用重新分區的方式, —— 需要做好數據的備份與恢復.

1.2.2 使用LVM時的擴容思路

使用LVM時技術時, 情況有所不同:

(1) 硬碟的多個分區由LVM統一管理為捲組, 可以很輕鬆地加入或移走某個分區 —— 也就是擴大或減小捲組的可用容量, 充分利用硬碟空間;

(2) 文件系統建立在邏輯捲上, 而邏輯捲可以根據需要改變大小(在捲組容量範圍內)以滿足要求;

(3) 文件系統建立在LVM上, 可以跨分區存儲訪問, 更加方便;

強烈建議對擁有多個磁碟的系統, 使用LVM管理磁碟.

1.3 名詞解釋

PV(Physical Volume): 物理捲, 處於LVM最底層, 可以是物理硬碟或者分區;

PP(Physical Extend): 物理區域, PV中可以用於分配的最小存儲單元, 可以在創建PV的時候指定, 如1M, 2M, 4M, 8M…..組成同一VG中所有PV的PE大小應該相同;

VG(Volume Group): 捲組, 建立在PV之上, 可以含有一個到多個PV;

LV(Logical Volume): 邏輯捲, 建立在VG之上, 相當於原來分區的概念, 不過大小可以動態改變.

2 普通的掛載磁碟方法

2.1 創建分區的主要操作

(1) 查看分區情況 - fdisk -l

[root@localhost ~]# fdisk -l

Disk /dev/sda: 299.0 GB, 298999349248 bytes         # 磁碟/dev/sda
255 heads, 63 sectors/track, 36351 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4d69fe0e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux       # 分為2個區, sda1
Partition 1 does not end on cylinder boundary.
/dev/sda2              26       36352   291785728   8e  Linux LVM   # sda2

# 磁碟/dev/sdb沒有分區
Disk /dev/sdb: 4000.0 GB, 3999999721472 bytes
255 heads, 63 sectors/track, 486305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

......

(2) 查看已有磁碟 - lsblk

[root@localhost ~]# lsblk 
NAME                       MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                          8:0    0 278.5G  0 disk 
├─sda1                       8:1    0   200M  0 part /boot
└─sda2                       8:2    0 278.3G  0 part 
  └─VolGroup-LogVol (dm-0) 253:0    0   1.9T  0 lvm  /      # LVM類型的分區
sdb                          8:32   0   3.7T  0 disk        # 還沒有分區的新磁碟

(3) 對新磁碟進行分區 - fdisk /dev/sdb

[root@localhost ~]# fdisk /dev/sdb 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xf91f8c4c.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: The size of this disk is 4.0 TB (4000225165312 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID 
partition table format (GPT).


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n             # n 表示新建分區
Command action
   e   extended
   p   primary partition (1-4)
p                                   # p 表示分區類型為主分區, 主分區只有1-4種選擇
Partition number (1-4): 1           # 主分區的編號
First cylinder (1-486333, default 1):   # 開始扇區號, 直接回車, 使用預設值1
Using default value 1

# 結束扇區號, 使用預設值 --- 這裡只載入了新磁碟的一半(2T), 所以還需要再次創建分區/dev/sdb2使用剩下的一半.
Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349):   
Using default value 267349

Command (m for help):  w            #  將上述設置寫入分區表並退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

(4) 再次查看分區情況 - fdisk -l

多出來一個/dev/sdb1的區, 這個1就是之前主分區之後指定的分區編號.

[root@localhost ~]# fdisk -l 

Disk /dev/sda: 299.0 GB, 298999349248 bytes
255 heads, 63 sectors/track, 36351 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4d69fe0e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26       36352   291785728   8e  Linux LVM

# /dev/sdb磁碟: 
Disk /dev/sdb: 4000.0 GB, 3999999721472 bytes
255 heads, 63 sectors/track, 486305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x8f3043b5

# 多出來的分區/dev/sdb1
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   83  Linux

......

(5) 查看當前分區表中的分區信息 - cat /proc/partitions

[root@localhost ~]# cat /proc/partitions 
major minor  #blocks  name

   8        0   291991552  sda
   8        1      204800  sda1
   8        2   291785728  sda2
   8       32  3906249728  sdb      # 添加的新磁碟
   8       33  2147480811  sdb1     # 創建的新分區
 253        0  2046660608  dm-0

如果創建完之後,cat /proc/partitions 查看不到對應的分區, 使用 parprobe 刷新命令即可:

[root@localhost ~]# partprobe /dev/sdc

2.2 格式化新分區

(1) 格式化新分區 - mkfs -t

這裡建議將新分區格式化為ext4文件類型, 還有ext2, ext3等文件類型, 區別請參考博客 ext2、ext3與ext4的區別 .

[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
134217728 inodes, 536870202 blocks
26843510 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
16384 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, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848, 512000000

Writing inode tables:  8874/16384

(2) 等待一小會後, 將出現下述提示, 說明格式化完成:

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:  done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

2.3 掛載新分區

(1) 創建目錄, 並將 /dev/sdb1掛在到該目錄下:

[root@localhost /]# mkdir data && cd /data
[root@localhost data]# mount /dev/sdc1 /data1

(2) 查看掛載是否成功:

[root@localhost data]# df -l
Filesystem                   1K-blocks       Used  Available Use% Mounted on
/dev/mapper/VolGroup-LogVol  286901696   18601728  253726196   7% /
tmpfs                         66020980          0   66020980   0% /dev/shm
/dev/sda1                       495844      33476     436768   8% /boot

# 掛載成功: 
/dev/sdb1                   2113784984     202776 2006208168   1% /data

2.4 設置開機自動掛載

編輯文件 /etc/fstab:

[root@localhost data]# vim /etc/fstab

# 文件內容如下: 
# /etc/fstab
# Created by anaconda on Wed Sep 12 10:41:40 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/VolGroup-LogVol  /                     ext4    defaults        1 1
/dev/sdb1                    /data                 ext4    defaults        1 1
UUID=22b1d425-d050-43c3-a735-06d48bbb9051 /boot    ext4    defaults        1 2 
tmpfs                        /dev/shm              tmpfs   defaults        0 0
devpts                       /dev/pts              devpts  gid=5,mode=620  0 0
sysfs                        /sys                  sysfs   defaults        0 0
proc                         /proc                 proc    defaults        0 0

3 LVM方式掛載磁碟 - 推薦

3.1 查看磁碟容量信息

[root@localhost ~]# df -h
Filesystem               Size  Used  Avail  Use%  Mounted on
/dev/mapper/VG-LogVol    1.9T  1.8T    61G   97%  /          # LVM捲組-邏輯捲
tmpfs                     63G     0    63G    0%  /dev/shm
/dev/sda1                485M   40M   421M    9%  /boot

3.2 查看磁碟扇區信息

[root@localhost ~]# fdisk -l

Disk /dev/sda: 299.0 GB, 298999349248 bytes         # 磁碟/dev/sda
255 heads, 63 sectors/track, 36351 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x4d69fe0e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux       # 分為2個區, sda1
Partition 1 does not end on cylinder boundary.
/dev/sda2              26       36352   291785728   8e  Linux LVM   # LVM類型的sda2

# 新添加的磁碟/dev/sdb, 沒有分區
Disk /dev/sdb: 4000.0 GB, 3999999721472 bytes
255 heads, 63 sectors/track, 486305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

# LVM格式的捲組信息: 
Disk /dev/mapper/VolGroup-LogVol: 4294 MB, 4294967296 bytes
255 heads, 63 sectors/track, 522 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

3.3 創建分區

[root@localhost ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x5b3d66ba.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: The size of this disk is 4.0 TB (3999999721472 bytes).
DOS partition table format can not be used on drives for volumes
larger than (2199023255040 bytes) for 512-byte sectors. Use parted(1) and GUID 
partition table format (GPT).


WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): n         # 添加分區
Command action
   e   extended
   p   primary partition (1-4)
p                               # 添加主分區
Partition number (1-4): 1       # 1號主分區, 即/dev/sdb1
First cylinder (1-486305, default 1):               
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349): 486305
Value out of range.
Last cylinder, +cylinders or +size{K,M,G} (1-267349, default 267349): 
Using default value 267349

Command (m for help): n         # 繼續添加分區
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2       # 2號主分區, 即/dev/sdc2
First cylinder (267350-486305, default 267350): 
Using default value 267350
Last cylinder, +cylinders or +size{K,M,G} (267350-486305, default 486305): 
Using default value 486305

Command (m for help): p         # 列印分區信息: 

Disk /dev/sdb: 4000.0 GB, 3999999721472 bytes
255 heads, 63 sectors/track, 486305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5b3d66ba

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   83  Linux
/dev/sdb2          267350      486305  1758764070   83  Linux

Command (m for help): t         # 轉換類型
Partition number (1-4): 1
Partition number (1-4): 1           # 修改/dev/sdb1為Linux LVM類型: 
Hex code (type L to list codes): L  # 查看可用類型: 

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e     # 修改為8e, 即Linux LVM類型
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2               # 修改/dev/sdc2為Linux LVM類型
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): p                 # 再次查看相關信息: 

Disk /dev/sdc: 4000.0 GB, 3999999721472 bytes
255 heads, 63 sectors/track, 486305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x5b3d66ba

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1      267349  2147480811   8e  Linux LVM   # Id已改變
/dev/sdb2          267350      486305  1758764070   8e  Linux LVM

Command (m for help): w                 # 保存並退出
The partition table has been altered!   # 修改成功

Calling ioctl() to re-read partition table.
Syncing disks.

3.4 創建物理捲

[root@localhost ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created

3.5 擴展卷組

# 查看已有捲組, 發現該捲組就是需要擴容的捲組, 就不必再次創建捲組, 而是直接擴展卷組即可: 
[root@localhost ~]# vgs
  VG       #PV #LV #SN Attr   VSize VFree
  VolGroup   2   2   0 wz--n- 1.91t    0 

# 擴展卷組: 
[root@localhost ~]# vgextend VolGroup /dev/sdb1
  Volume group "VolGroup" successfully extended
[root@localhost ~]# vgextend VolGroup /dev/sdb2
  Volume group "VolGroup" successfully extended

說明: 如果出現下述無法掛載物理磁碟到捲組中的信息, 說明這塊物理磁碟已經掛載了, 需要先卸載, 然後再執行創建分區+捲組的操作:

[root@localhost /]# vgextend VolGroup /dev/sdb1 
  No physical volume label read from /dev/sdb1
  Physical volume /dev/sdb1 not found
  Can't open /dev/sdb1 exclusively.  Mounted filesystem?
  Unable to add physical volume '/dev/sdb1' to volume group 'VolGroup'.

3.6 擴展邏輯捲

# 擴展邏輯捲, 即擴容: 
[root@localhost ~]# lvextend -l +100%FREE /dev/mapper/VolGroup-LogVol 
  Extending logical volume lv_root to 5.54 TiB
  Logical volume lv_root successfully resized

# 上述命令是將所有的空閑空間都擴容到邏輯捲中, 也可指定擴容的大小: 
lvextend -l +100G /dev/mapper/VolGroup-LogVol 

3.7 查看磁碟捲組信息

[root@localhost ~]# lsblk 
NAME                        MAJ:MIN RM   SIZE RO  TYPE  MOUNTPOINT
sda                           8:0    0 278.5G  0  disk  
├─sda1                        8:1    0   500M  0  part  /boot
└─sda2                        8:2    0   278G  0  part  
  ├─VolGroup-LogVol (dm-0)  253:0    0   5.6T  0  lvm   /
sdb                           8:16   0   1.6T  0  disk  
└─sdb1                        8:17   0   1.6T  0  part  
  └─VolGroup-LogVol (dm-0)  253:0    0   5.6T  0  lvm   /
sdc                           8:32   0   3.7T  0  disk  
├─sdc1                        8:33   0     2T  0  part  
│ └─VolGroup-LogVol (dm-0)  253:0    0   5.6T  0  lvm   /
└─sdc2                        8:34   0   1.7T  0  part  
  └─VolGroup-LogVol (dm-0)  253:0    0   5.6T  0  lvm   /

3.8 調整文件系統的大小

# CentOS 7重新讀取磁碟大小: 
[root@localhost ~]# xfs_growfs /dev/mapper/VolGroup-LogVol 
xfs_growfs: /dev/mapper/VolGroup-LogVol is not a mounted XFS filesystem

# CentOS 6.5重新讀取磁碟大小: 
# ext4格式, resize2fs會遍歷整個磁碟, 速度比較慢, 但是不影響讀寫數據, 可以令其在後臺運行. 
[root@localhost ~]# resize2fs /dev/mapper/VolGroup-LogVol 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/VolGroup-LogVol is mounted on /; on-line resizing required
old desc_blocks = 122, new_desc_blocks = 355
Performing an on-line resize of /dev/mapper/VolGroup-lv_root to 1487098880 (4k) blocks.

# 等了差不多20分鐘, 出來了下麵這貨: 
 The filesystem on /dev/mapper/VolGroup-LogVol is now 1487098880 blocks long.
 
# 趕緊看下擴容成果吧: 
[root@localhost ~]#   df -h
Filesystem                    Size  Used Avail Use%  Mounted on
/dev/mapper/VolGroup-LogVol   5.5T  1.8T  3.5T  34%  /          # 擴容成功
tmpfs                          63G     0   63G   0%  /dev/shm
/dev/sda1                     485M   40M  421M   9%  /boot

3.9 附錄 - 創建捲組

對應 [3.5] 節的擴展卷組, 如果捲組不存在, 則需要創建之. 下述VolGroup是捲組名稱.

vgcreate VolGroup /dev/sdb1
# 創建邏輯捲, 名稱為: mylv. (操作系統中將產生: /dev/VolGroup/mylv目錄)
# 將當前捲組中的100G空間分配到邏輯捲中
lvcreate -L 100G VolGroup -n mylv
# 或將當前捲組中的所有空閑空間全都分配到邏輯捲中:  
lvcreate -l +100%FREE VolGroup -n mylv

# 格式化邏輯捲組: 
mkfs -t ext4 /dev/VolGroup/mylv

# 掛載捲組到指定目錄下, 如果是掛載到根目錄, 則無需向/etc/fstab文件中添加啟動項. 
mount -t ext4 /dev/VolGroup/mylv /data

參考資料

Linux的LVM詳解

ext2、ext3與ext4的區別

Linux 下掛載硬碟的方法

linux磁碟管理、新增磁碟、分區、掛載

版權聲明

作者: ma_shoufeng(馬瘦風)

出處: 博客園 馬瘦風的博客

您的支持是對博主的極大鼓勵, 感謝您的閱讀.

本文版權歸博主所有, 歡迎轉載, 但請保留此段聲明, 併在文章頁面明顯位置給出原文鏈接, 否則博主保留追究相關人員法律責任的權利.


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

-Advertisement-
Play Games
更多相關文章
  • 學習目標: 1、分析u-boot-1.1.6第2階段入口函數void start_armboot (void),熟悉該函數所實現的功能 2、為後面能夠掌握u-boot-1.1.6如何啟動內核過程打下基礎 前面通過對uboot第一階段代碼的分析,我們瞭解的uboot第一階段所做的一些工作,並且找到了其 ...
  • 生成密鑰對: ssh-keygen -t rsa cd .ssh ls id_rsa 私鑰 id_rsa.pub 公鑰 ...
  • 執行操作: curl -sL https://rpm.nodesource.com/setup_10.x | bash - 安裝nodejs yum install -y nodejs 輸入 node -v 出現版本號,說明安裝成功 ...
  • 近日在查看Nginx的訪問日誌中,發現了大量404請求,仔細研究一番發現有人正在試圖爆破網站。 我剛上線你就企圖攻擊我?????? 這怎麼能忍。。 於是乎 查資料後得知有一個神奇的工具 fail2ban 可以配合 iptables 自動封IP iptables 是Centos6 的一種防火牆策略,在 ...
  • stm32單片機gpio共有八種工作模式,如下圖: stm32單片機是一個低功耗的處理器,當複位以後,gpio預設是高阻狀態,也就是浮空輸入。這樣的好處是: 1.降低了單片機的功耗 2.把gpio模式的選擇權交給用戶 3.在用戶使用的時候,都會在gpio外加一個上拉或下拉電阻,這樣當單片機複位以後就 ...
  • 過程總述 1. 購買伺服器,購買功能變數名稱,備案 2. 申請ssl證書 3. DNS驗證 4. 上傳證書,配置nginx 5. 很關鍵,打開埠!!!阿裡雲的443埠預設是不打開的 1.購買伺服器,功能變數名稱,備案 伺服器我是買的阿裡雲的,功能變數名稱也是在阿裡雲上買的,註意一點,現在功能變數名稱必須備案才能用,所以建議先買 ...
  • 初入運維界,從Linux開始學起。首先掌握的是Linux的部分常用命令,總結如下: 1. ls ls = list 查看當前目錄下所有文件信息,常用參數組合:ls -al (l 指詳細信息 a指所有文件包括隱藏文件) -h (使用MB/GB表示文件大小) -i (顯示文件的inode值) 2. cd ...
  • Date命令 以下是一個例子: Linux:/usr/local/sbin # date +"%Y-%m-%d %H-%M-%S"2018-06-22 02-19-41 date在腳本中的幾個用法: date +%Y 以四位數字格式列印年份 date +%y 以二位數字格式列印年份 date +%m ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...