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 |