LVM基本原理及使用

LVM簡介

LVM全稱Logical Volume Manager(邏輯卷管理),是將幾個物理分區(或硬盤)通過軟件組合成一塊看起來是獨立大硬盤(VG),然后對這塊大硬盤分割成可使用的邏輯卷(LV),最終能夠掛載使用,以達到對磁盤空間進行彈性管理的目的。


LVM的基本原理

基本術語

dm(device mapper):將一個或多個底層塊設備組織成一個邏輯設備的模塊 
PV(Physical Volume,物理卷):物理分區(或硬盤)通過 fdisk 調整系統識別碼 (system ID) 成為 8e (LVM 的識別碼),然后再經過 pvcreate 的命令將他轉成 LVM 最底層的物理卷(PV) 
VG(Volume Group,卷組):由多個 PV 整合而成,每個 VG 最多能包含 65534 個 PE 
PE(Physical Extend,物理塊):LVM 最小的儲存區塊,默認大小 4MB。文件數據都是藉由寫入 PE 來處理的。 
LV(Logical Volume,邏輯卷):類似于非 LVM 系統中的磁盤分區,邏輯卷建立在卷組 VG 之上,有多個 PE組成 
LE(Logical Extent,邏輯卷):LV 中的 PE 稱為 LE

基本流程

物理分區(或硬盤)轉化為PV,基于PV創建VG,VG包含若干個PE,通過劃分VG中的PE組成LV,LV格式化成文件系統,最終進行掛載。

原理圖

LVM原理圖 
注:圖片來自維基百科

LVM的使用

相關工具及命令

  • PV管理工具

pvs:簡要PV信息顯示 
pvdisplay:顯示PV的詳細信息 
pvcreate /dev/DEVICE:創建PV

  • VG管理工具

vgs:簡要VG顯示信息 
vgdisplay:顯示VG的詳細信息 
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]:創建VG 
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]:擴展VG 
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]:縮減VG 
vgremove:移除VG 
注意:對VG做減法時,先做pvmove,把需要移除的pv上的pe先移到同一卷組中其他pv上

  • LV管理工具

lvs:簡要LV信息顯示 
lvdisplay:顯示LV的詳細信息 
lvcreate -L #[mMgGtT] -n NAME VolumeGroup:創建LV 
lvremove /dev/VG_NAME/LV_NAME:移除LV

  • 擴展邏輯卷

lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME 
-L #:擴展至#大小 
-L +#:擴展#大小 
resize2fs /dev/VG_NAME/LV_NAME:重新定義文件系統的大小

  • 縮減邏輯卷

umount /dev/VG_NAME/LV_NAME:卸載指定的LV掛載 
e2fsck -f /dev/VG_NAME/LV_NAME:檢查文件系統 
resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]:重新定義LV的大小 
lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME:縮減LV大小 
mount

  • 快照(snapshot)

lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name:創建快照

LVM的創建

目標:創建一個有兩個PV組成的大小為20G的名為testvg的VG;要求PE大小為16MB, 而后在卷組中創建大小為5G的邏輯卷testlv;掛載至/users目錄

  • 系統環境

操作系統:CentOS 6.7
磁盤信息:
Disk /dev/sda: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 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: 0x00013624

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64       15666   125316096   8e  Linux LVM

Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 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
  • 初始化磁盤分區

注:為簡便操作,實驗將基于sdb盤的物理分區

[root@centos6 ~]# 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 0x6cd53b57.
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: 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
First cylinder (1-3916, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-3916, default 3916): +10G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1307-3916, default 1307): 
Using default value 1307
Last cylinder, +cylinders or +size{K,M,G} (1307-3916, default 3916): +10G

Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos6 ~]# partx -a /dev/sdb    #通知內核重讀分區表
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
  • 創建PV

[root@centos6 ~]# pvcreate /dev/sdb[1-2]
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
[root@centos6 ~]# pvs /dev/sdb*      #查看簡要信息,單獨pvs顯示所有PV
  PV         VG         Fmt  Attr PSize   PFree 
  /dev/sdb1             lvm2 ---   10.00g 10.00g
  /dev/sdb2             lvm2 ---   10.00g 10.00g
[root@centos6 ~]# pvdisplay /dev/sdb*  #查看詳細信息,單獨pvdisplay顯示所有PV
  Failed to find device for physical volume "/dev/sdb".
  "/dev/sdb1" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               fRfYN1-N1xX-VBtQ-u4hH-FKjd-OSGL-N1n6b1
   
  "/dev/sdb2" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               fjJ8ED-VTVk-8IJb-DCdx-82Bl-Go7g-wApVuK
  • 創建VG

[root@centos6 ~]# vgcreate -s 16 testvg /dev/sdb[1-2]  #創建名為testvg PE大小為16MB的卷組
  Volume group "testvg" successfully created
[root@centos6 ~]# vgs testvg   #可根據VG名稱查找
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 20.00g 20.00g
[root@centos6 ~]# vgdisplay testvg   #可根據VG名稱查找
  --- Volume group ---
  VG Name               testvg
  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               20.00 GiB
  PE Size               16.00 MiB
  Total PE              1280
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1280 / 20.00 GiB
  VG UUID               QPvR7X-2uRS-U8Ba-Kzz5-Z1Z0-WZ2i-WkkBpB
  • 創建LV

[root@centos6 ~]# lvcreate -L 5g -n testlv testvg   #在testvg下創建容量為5G名稱為testlv的LV
  Logical volume "testlv" created.
[root@centos6 ~]# lvs /dev/testvg
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 5.00g                                                    
[root@centos6 ~]# lvs /dev/testvg/testlv 
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a----- 5.00g                                                    
[root@centos6 ~]# lvdisplay /dev/testvg/testlv 
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                JNTrHH-bx2p-Z5k2-U6Cx-Fboi-BnGn-nNlqmZ
  LV Write Access        read/write
  LV Creation host, time centos6.7, 2016-04-17 16:39:15 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             320
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
 - currently set to     256
  Block device           253:3
  • LV格式化及掛載

[root@centos6 ~]# mke2fs -t ext4 /dev/testvg/testlv 
mke2fs 1.41.12 (17-May-2010)
文件系統標簽=
操作系統:Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一個數據塊=0
Maximum filesystem blocks=1342177280
40 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

正在寫入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@centos6 ~]# mkdir /users  #創建users目錄
[root@centos6 ~]# mount /dev/testvg/testlv /users/ 將LV掛載到users目錄
[root@centos6 ~]# mount #查看是否掛載成功
/dev/mapper/vg_centos6-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg_centos6-lv_home on /home type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/testvg-testlv on /users type ext4 (rw)  #表示已經掛載成功
[root@centos6 ~]# df -lh        #查看分區情況
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                       50G  3.9G   43G   9% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   37M  416M   9% /boot
/dev/mapper/vg_centos6-lv_home
                       67G   54M   63G   1% /home
/dev/mapper/testvg-testlv
                      4.8G   10M  4.6G   1% /users

LVM的擴展

  • VG擴展

注:sdb3空間大小為5G,創建過程省略

[root@centos6 ~]# vgextend testvg /dev/sdb3    #擴展testvg,將sdb3的空間提供給testvg
  Volume group "testvg" successfully extended
[root@centos6 ~]# vgs testvg   #查看擴展后的容量
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   3   1   0 wz--n- 25.00g 20.00g   #成功擴展5G容量
  • LV擴展

[root@centos6 ~]# lvextend -L +10g /dev/testvg/testlv #擴展10G空間給testlv
  Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 15.00 GiB (960 extents).
  Logical volume testlv successfully resized
[root@centos6 ~]# lvs /dev/testvg/testlv #查看testlv信息,空間大小為15G
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 15.00g
[root@centos6 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                       50G  3.9G   43G   9% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   37M  416M   9% /boot
/dev/mapper/vg_centos6-lv_home
                       67G   54M   63G   1% /home
/dev/mapper/testvg-testlv
                      4.8G   10M  4.6G   1% /users   #分區空間不變,擴展的空間生效需要重新定義分區大小
[root@centos6 ~]# resize2fs /dev/testvg/testlv  #分區大小重新定義
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/testlv is mounted on /users; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/testlv to 3932160 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 3932160 blocks long.
[root@centos6 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                       50G  3.9G   43G   9% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   37M  416M   9% /boot
/dev/mapper/vg_centos6-lv_home
                       67G   54M   63G   1% /home
/dev/mapper/testvg-testlv
                       15G   13M   14G   1% /users   #擴展空間已經生效

注:如果文件系統是處于mount狀態下,resize2fs命令只能做到擴容

LVM縮減

注:LVM縮減有風險,操作需謹慎

  • VG縮減

[root@centos6 ~]# pvs -o+pv_used  #查看pv的已使用情況
  PV         VG         Fmt  Attr PSize   PFree Used   
  /dev/sda2  vg_centos6 lvm2 a--  119.51g    0  119.51g
  /dev/sdb1  testvg     lvm2 a--   10.00g    0   10.00g
  /dev/sdb2  testvg     lvm2 a--   10.00g 5.00g   5.00g
  /dev/sdb3  testvg     lvm2 a--    5.00g 5.00g      0 
[root@centos6 ~]# pvmove /dev/sdb2 /dev/sdb3  #防止數據丟失將sdb2非空閑的PE與sdb3的空間PE交換
  /dev/sdb2: Moved: 0.3%
  /dev/sdb2: Moved: 6.2%
  /dev/sdb2: Moved: 14.1%
  /dev/sdb2: Moved: 21.6%
  /dev/sdb2: Moved: 27.2%
  /dev/sdb2: Moved: 34.4%
  /dev/sdb2: Moved: 40.6%
  /dev/sdb2: Moved: 48.1%
  /dev/sdb2: Moved: 54.7%
  /dev/sdb2: Moved: 60.9%
  /dev/sdb2: Moved: 67.8%
  /dev/sdb2: Moved: 74.1%
  /dev/sdb2: Moved: 80.6%
  /dev/sdb2: Moved: 87.8%
  /dev/sdb2: Moved: 93.4%
  /dev/sdb2: Moved: 98.8%
  /dev/sdb2: Moved: 100.0%
[root@centos6 ~]# pvs -o+pv_used
  PV         VG         Fmt  Attr PSize   PFree  Used   
  /dev/sda2  vg_centos6 lvm2 a--  119.51g     0  119.51g
  /dev/sdb1  testvg     lvm2 a--   10.00g     0   10.00g
  /dev/sdb2  testvg     lvm2 a--   10.00g 10.00g      0   #此pv已經空閑,可進行縮減VG
  /dev/sdb3  testvg     lvm2 a--    5.00g     0    5.00g
[root@centos6 ~]# vgreduce testvg /dev/sdb2  #縮減VG
  Removed "/dev/sdb2" from volume group "testvg"
[root@centos6 ~]# vgs testvg 
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 15.00g    0     #成功縮減VG
  • LV縮減

[root@centos6 ~]# umount /users/  #卸載掛載目錄
[root@centos6 ~]# e2fsck -f /dev/testvg/testlv   #檢查文件系統,該步驟不可少
e2fsck 1.41.12 (17-May-2010)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連接性
Pass 4: Checking reference counts
第5步: 檢查簇概要信息
/dev/testvg/testlv: 11/983040 files (0.0% non-contiguous), 97664/3932160 blocks
[root@centos6 ~]# resize2fs /dev/testvg/testlv 10g
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/testlv to 2621440 (4k) blocks.
The filesystem on /dev/testvg/testlv is now 2621440 blocks long.
[root@centos6 ~]# lvreduce -L -5g /dev/testvg/testlv  #縮減5G LV的空間
  WARNING: Reducing active logical volume to 10.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from 15.00 GiB (960 extents) to 10.00 GiB (640 extents).
  Logical volume testlv successfully resized
[root@centos6 ~]# lvs /dev/testvg/testlv   #查看testlv信息
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 10.00g                                                    
[root@centos6 ~]# mount /dev/testvg/testlv /users/   #重新掛載
[root@centos6 ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos6-lv_root
                       50G  3.9G   43G   9% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             477M   37M  416M   9% /boot
/dev/mapper/vg_centos6-lv_home
                       67G   54M   63G   1% /home
/dev/mapper/testvg-testlv
                      9.8G   12M  9.3G   1% /users

快照

LVM快照功能是在在時間點上對快照源分區的所有文件的元數據進行保存,如果源數據未發生改變,則訪問快照卷的相應文件將直接指向源分區的源文件,如源文件發生改變,舊數據將拷貝到快照卷的預留空間中起到備份數據的作用

  • 快照創建

[root@centos6 users]# cp /etc/fstab /users/
[root@centos6 users]# ls
fstab  lost+found
[root@centos6 users]# cat fstab 

#
# /etc/fstab
# Created by anaconda on Fri Mar  4 11:09:09 2016
#
# 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/vg_centos6-lv_root /                       ext4    defaults        1 1
UUID=3efc9d2d-ff60-4491-84c4-e1beb6701b83 /boot                   ext4    defaults        1 2
/dev/mapper/vg_centos6-lv_home /home                   ext4    defaults        1 2
/dev/mapper/vg_centos6-lv_swap swap                    swap    defaults        0 0
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
[root@centos6 users]# lvcreate -L 5g -p r -s -n testlv-snap /dev/testvg/testlv #創建testlv的快照卷
  Logical volume "testlv-snap" created.
[root@centos6 users]# mkdir /backup
[root@centos6 users]# mount /dev/testvg/testlv-snap /backup/  #將快照卷掛載到/backup目錄
mount: block device /dev/mapper/testvg-testlv--snap is write-protected, mounting read-only
  • 測試

[root@centos6 users]# vim fstab  #編輯源文件
[root@centos6 users]# cat fstab 
#
[root@centos6 users]# cat /backup/fstab #查看快照卷中的文件,發現文件內容不變實現了備份

#
# /etc/fstab
# Created by anaconda on Fri Mar  4 11:09:09 2016
#
# 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/vg_centos6-lv_root /                       ext4    defaults        1 1
UUID=3efc9d2d-ff60-4491-84c4-e1beb6701b83 /boot                   ext4    defaults        1 2
/dev/mapper/vg_centos6-lv_home /home                   ext4    defaults        1 2
/dev/mapper/vg_centos6-lv_swap swap                    swap    defaults        0 0
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

原創文章,作者:Net18-海濱,如若轉載,請注明出處:http://www.www58058.com/15011

(0)
Net18-海濱Net18-海濱
上一篇 2016-04-16
下一篇 2016-04-18

相關推薦

  • vim編輯器

    vim編輯器:          文本:ASCII, Unicode(全球統一編碼格式)          文本編輯種類:       &n…

    Linux干貨 2016-08-10
  • tab鍵 history 命令的相關巧用

    Tab鍵的妙用       1.command沒有完全輸入時: 點擊tab,如果能唯一匹配到命令,則直接補全,否則需要點擊兩下tab來顯示能夠匹配到的命令。                2./2tab : 顯…

    2017-02-18
  • M22 使用非對稱密鑰實現ssh自動登陸

    一 實驗目的 一般在用戶使用ssh客戶端登陸ssh服務器時需要使用用戶名和密碼,本實驗使用非對稱加密的方式實現了無密碼登陸ssh服務器。 二 實驗流程  、 1 在客戶端生成非對稱密鑰對 2 將非對稱密鑰中的公鑰發送給ssh服務器端相應的帳號 3 當客戶端通過ssh協議與服務器端發起連接時,客戶端將私鑰加密過的簽名發送給服務器端,服務器端使用客戶端…

    2017-04-13
  • Linux下文件權限管理輕微總結

    Linux下文件權限管理輕微總結       此文對linux下文件的權限及其如何管理權限進行介紹,涉及到讀“r”寫“w”執行“x”三個權限,特殊權限SUID、SGID、STICKY、ACL、attr的使用。同時對更改文件的指令chmod、getfacl、setfacl、chattr、lsattr等進行說明。  &nb…

    Linux干貨 2016-11-07
  • Linux進程管理命令和性能監控工具的應用

    概述 監控系統的各方面的性能,保障各類服務的有序運行,是運維工作的重要組成部分,本篇就介紹了一些常用的系統監控命令和相關參數的說明 具體包含一下幾個部分 1.進程管理基礎 2.進程管理工具(ps,top,htop,kill) 3.內存監控類工具(vmstat,pmap) 4.系統監控累工具(glances,dstat)…

    Linux干貨 2016-09-26
  • Linux系統啟動流程、內核及模塊管理、linux啟動故障排除和自制linux

    Linux系統啟動流程、內核及模塊管理 Linux系統的組成部分組成:內核+根文件系統(kernel+rootfs)內核(kernel): 進程管理(創建、調度、銷毀等)、內存管理、網絡管理(網絡協議棧)、驅動程序、文件系統、安全功能IPC:Inter Process Communication機制本地進程間通信機制:消息隊列、semerphor、shm(共…

    2016-09-29
欧美性久久久久