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
|
本文转自 pcnk 51CTO博客,原文链接:http://blog.51cto.com/nosmoking/1640926,如需转载请自行联系原作者