1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
假设已经增加一块磁盘: /dev/sdb
 
一、将sdb配置成LVM分区
1、说明
当前系统有sda和sdb这2个物理磁盘,各有100G的大小。
[root@svr200-11 ~] # ls /dev/sd*
sda   sda1  sda2  sdb   
 
2、给sdb分区
1)最简单的方式是使用整个磁盘:
[root@svr200-11 ~] # pvcreate /dev/sdb
 
2)如果遇到这样的异常(多半是因为在之前的操作中已经创建过sdb):
[root@GZ01A020 ~] # pvcreate  /dev/sdb
   Device  /dev/sdb  not found (or ignored by filtering).
则如下操作:
dmsetup remove_all
fdisk  /dev/sdb
删除分区
然后再使用pvcreate创建分区
 
3)如果只是划分部分空间,时间lvm分区
[root@svr200-11 ~] # fdisk /dev/sdb
 
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' ).
注1:使用“n”创建新分区
Command (m  for  help): n
Command action
    e   extended
    p   primary partition (1-4)
注2:使用“p”创建主分区
p
 
注3:使用“1”创建分区1(在1-4中选择,当前磁盘支持最多4个主分区,GPT格式的磁盘支持更多主分区)
Partition number (1-4): 1
 
注4:选择默认值
First cylinder (1-13054, default 1): 
Using default value 1
 
注5:选择一个分区大小,看提示,可以用 "+|大小|单位" 这样的格式,此处是增加20G的分区
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +20G
 
注6:更改分区格式为LVM,先输入“t”,然后输入“8e”(Linux LVM),不清楚请输入“l”去查看对应的代码
Command (m  for  help): t
Selected partition 1
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
Changed system  type  of partition 1 to 8e (Linux LVM)
 
注7:打印当前的分区状态
Command (m  for  help): p
 
Disk  /dev/sdb : 107.4 GB, 107374182400 bytes
255 heads, 63 sectors /track , 13054 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: 0xb07a7c89
 
    Device Boot      Start         End      Blocks   Id  System
/dev/sdb1                1        2612    20980858+  8e  Linux LVM
 
注8:确认无误,写入磁盘
Command (m  for  help): w
The partition table has been altered!
 
Calling ioctl() to re- read  partition table.
Syncing disks.
 
 
二、物理卷(Physical Volume)
1、创建PV
[root@svr200-11 ~] # pvcreate  /dev/sdb
2、查看PV
[root@svr200-11 ~] # pvdisplay 
 
   
三、卷组(Volume Group)  
1、创建一个VG,定义组名,组员(PV)
[root@svr200-11 ~] # vgcreate vg_test01 /dev/sdb
2、查看VG
[root@svr200-11 ~] # vgdisplay 
 
   
四、逻辑卷(Logical Volume)
1、创建一个新LV(理解成常规的一个分区,需要mkfs格式化后挂载到文件系统使用),定义大小,逻辑卷名称,以及从哪个VG上创建。
[root@svr200-11 ~] # lvcreate -L 8G -n lv_test01 vg_test01
当然,也可以使用全部的磁盘空间:
[root@svr200-11 ~] # lvcreate -l 100%FREE -n lv_test01 vg_test01
这里要注意一下“-l”参数的用法。
 
2、查看逻辑卷
[root@svr200-11 ~] # lvdisplay 
 
 
五、格式化lv并挂载到文件系统使用
1、格式化
[root@svr200-11 ~] # mkfs -t ext4 /dev/vg_test01/lv_test01 
 
2、挂载
[root@svr200-11 ~] # mkdir /data/test01 
[root@svr200-11 ~] # mount /dev/vg_test01/lv_test01 /data/test01/
[root@svr200-11 ~] # df -h |grep data
/dev/mapper/vg_test01-lv_test01   7.9G  146M  7.4G   2%  /data/test01  
 
注:当然了,要记得更新fstab文件
或者先查询uuid
# blkid /dev/vg_test01/lv_test01
然后写入fstab
# cat <<'_EOF' >>/etc/fstab
UUID=xxxx  /data                    ext4    defaults        0 0
_EOF
接着挂载
# mount -a
 
 
六、当前状态
1、物理磁盘:sdb,100G
2、新建了一个LVM格式的分区:sdb1,20G
3、新建了一个vg(vg_test01),把sdb1加入了vg_test01中
4、在vg_test01上,创建了一个大小为8G的分区lv_test01(逻辑卷lv)
5、格式化和挂载分区lv_test01到 /data/test01 上使用
 
 
七、上述是常规的增加一个分区的步骤,接下来探讨如何给分区扩容。
1、假设已经删除了上面使用的 /dev/sdb ,这次的目的是,给卷组(vg_svr20011)扩容,最终是要给逻辑卷(lv_home)扩容
扫描和删除有如下命令:
pvscan
vgscan
lvscan
pvremove
vgremove
lvremove
 
 
2、创建 /dev/sdb1 ,大小全部空间(100G),LVM分区
 
fdisk  /dev/sdb  <<_EOF
n
p
1
 
 
t
8e
p
w
_EOF
 
 
创建PV:
[root@svr200-11 ~] # pvcreate /dev/sdb1
   Physical volume  "/dev/sdb1"  successfully created
 
查看PV状态:
[root@svr200-11 ~] # pvscan 
   PV  /dev/sda2    VG vg_svr20011     lvm2 [99.51 GiB / 0     free ]
   PV  /dev/sdb1                       lvm2 [100.00 GiB]
   Total: 2 [199.51 GiB] /  in  use: 1 [99.51 GiB] /  in  no VG: 1 [100.00 GiB]
 
给现有的VG扩容:
[root@svr200-11 ~] # vgextend vg_svr20011 /dev/sdb1
   Volume group  "vg_svr20011"  successfully extended
 
再次查看PV的状态:  
[root@svr200-11 ~] # pvscan
   PV  /dev/sda2    VG vg_svr20011   lvm2 [99.51 GiB / 0     free ]
   PV  /dev/sdb1    VG vg_svr20011   lvm2 [100.00 GiB / 100.00 GiB  free ]
   Total: 2 [199.50 GiB] /  in  use: 2 [199.50 GiB] /  in  no VG: 0 [0   ]
 
sdb1已经和sda2已经属于同一个卷组。
 
 
3、给逻辑卷(LV)扩容
查看LV的状态:
[root@svr200-11 ~] # lvscan
   ACTIVE             '/dev/vg_svr20011/lv_root'  [50.00 GiB] inherit
   ACTIVE             '/dev/vg_svr20011/lv_home'  [47.54 GiB] inherit
   ACTIVE             '/dev/vg_svr20011/lv_swap'  [1.97 GiB] inherit
 
目前lv_home 使用了50G,先扩容到80G看看
[root@svr200-11 ~] # lvextend -L 80G /dev/vg_svr20011/lv_home 
   Extending logical volume lv_home to 80.00 GiB
   Logical volume lv_home successfully resized
[root@svr200-11 ~] # lvscan
   ACTIVE             '/dev/vg_svr20011/lv_root'  [50.00 GiB] inherit
   ACTIVE             '/dev/vg_svr20011/lv_home'  [80.00 GiB] inherit
   ACTIVE             '/dev/vg_svr20011/lv_swap'  [1.97 GiB] inherit
 
df 查看分区信息:
[root@svr200-11 ~] # df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_svr20011-lv_root    50G  3.1G   44G   7% /
tmpfs                            499M     0  499M   0%  /dev/shm
/dev/sda1                         485M   34M  426M   8%  /boot
/dev/mapper/vg_svr20011-lv_home    47G   38G  7.2G  84%  /home
此时用 df 命令查看分区,会发现分区大小尚未更新,因为我们还需要on-line resize一下分区:
   
[root@svr200-11 ~] # resize2fs /dev/vg_svr20011/lv_home 
resize2fs 1.41.12 (17-May-2010)
Filesystem at  /dev/vg_svr20011/lv_home  is mounted on  /home ; on-line resizing required
old desc_blocks = 3, new_desc_blocks = 5
Performing an on-line resize of  /dev/vg_svr20011/lv_home  to 20971520 (4k) blocks.
The filesystem on  /dev/vg_svr20011/lv_home  is now 20971520 blocks long.
 
再看:
[root@svr200-11 ~] # df -h
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/vg_svr20011-lv_root    50G  3.1G   44G   7% /
tmpfs                            499M     0  499M   0%  /dev/shm
/dev/sda1                         485M   34M  426M   8%  /boot
/dev/mapper/vg_svr20011-lv_home    79G   38G   38G  50%  /home
 
符合预期
 
 
 
八、附上一个可有可无的小脚本,用于快速的删除和建立lvm分区来熟悉命令
[root@svr200-11 ~] # cat lvm_fdisk.sh 
#!/bin/bash
#
# 2015/4/30
# 创建和删除lvm分区的一个示例
 
function  part_lvm() {
   echo  -e  "\033[1;40;31m[+] 使用fdisk创建分区\033[0m"
   echo  -e  "\033[40;32m开始操作:\033[40;37m"
   fdisk  $1 <<_EOF
n
p
1
 
 
t
8e
p
w
_EOF
   echo
   echo  -e  "\033[40;32m完成!\033[40;37m"
   echo  -e  "\033[1;40;31m[-] 已经创建分区:${1}1\033[0m"
}
 
function  part_rm() {
   echo  -e  "\033[1;40;31m[+] 使用fdisk删除分区\033[0m"
   echo  -e  "\033[40;32m开始操作:\033[40;37m"
   count=$( fdisk  -l  /dev/sdb  | grep  dev | grep  - v  Disk | wc  -l)
   if  [ $count -lt 2 ];  then
     fdisk  $1 <<_EOF
d
p
w
_EOF
     echo
     echo  -e  "\033[40;32m完成!\033[40;37m"
     echo  -e  "\033[1;40;31m[-] 已经删除分区:${1}1\033[0m"
     echo
   else
     echo  -e  "\033[1;40;31m[-] 这个磁盘有多个分区,请先检查确认!\033[0m"
   fi
}
 
function  usage() {
   cat  <<_EOF
 
usage: $0  type  device
 
$0 lvm  /dev/sdb
$0  rm  /dev/sdb
 
_EOF
}
 
case  $1  in
   lvm| rm )
     part_$1 $2
     ;;
   *)
     usage
     ;;
esac