本文共 10354 字,大约阅读时间需要 34 分钟。
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales'、 'development')代替物理磁盘名(如'sda'、'sdb')来标识存储卷。
1、创建LVM磁盘
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 | [root@server02 ~] # fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 命令(输入 m 获取帮助):n Partition type : p primary (0 primary, 0 extended, 4 free ) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-41943039,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G 分区 1 已设置为 Linux 类型,大小设为 1 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb :21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I /O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xa71b8f53 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux 命令(输入 m 获取帮助):t 已选择分区 1 Hex 代码(输入 L 列出所有代码):8e //LVM 的分区类型为8e 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):p 磁盘 /dev/sdb :21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I /O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xa71b8f53 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM 命令(输入 m 获取帮助):n Partition type : p primary (1 primary, 0 extended, 3 free ) e extended Select (default p): p 分区号 (2-4,默认 2): 起始 扇区 (2099200-41943039,默认为 2099200): 将使用默认值 2099200 Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039,默认为 41943039):+1G 分区 2 已设置为 Linux 类型,大小设为 1 GiB 命令(输入 m 获取帮助):n Partition type : p primary (2 primary, 0 extended, 2 free ) e extended Select (default p): p 分区号 (3,4,默认 3): 起始 扇区 (4196352-41943039,默认为 4196352): 将使用默认值 4196352 Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039,默认为 41943039):+1G 分区 3 已设置为 Linux 类型,大小设为 1 GiB 命令(输入 m 获取帮助):p 磁盘 /dev/sdb :21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I /O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xa71b8f53 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM /dev/sdb2 2099200 4196351 1048576 83 Linux /dev/sdb3 4196352 6293503 1048576 83 Linux 命令(输入 m 获取帮助):t 分区号 (1-3,默认 3):2 Hex 代码(输入 L 列出所有代码):8e 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):t 分区号 (1-3,默认 3):3 Hex 代码(输入 L 列出所有代码):8e 已将分区“Linux”的类型更改为“Linux LVM” 命令(输入 m 获取帮助):p 磁盘 /dev/sdb :21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I /O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xa71b8f53 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM /dev/sdb2 2099200 4196351 1048576 8e Linux LVM /dev/sdb3 4196352 6293503 1048576 8e Linux LVM 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re- read partition table. 正在同步磁盘。 [root@server02 ~] # pvcreate /dev/sdb1 //使用pvcreate转换 WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y /n ]: y Wiping xfs signature on /dev/sdb1 . Physical volume "/dev/sdb1" successfully created. [root@server02 ~] # pvcreate /dev/sdb2 WARNING: xfs_external_log signature detected on /dev/sdb2 at offset 18432. Wipe it? [y /n ]: y Wiping xfs_external_log signature on /dev/sdb2 . Physical volume "/dev/sdb2" successfully created. [root@server02 ~] # pvcreate /dev/sdb3 WARNING: dos signature detected on /dev/sdb3 at offset 510. Wipe it? [y /n ]: y Wiping dos signature on /dev/sdb3 . Physical volume "/dev/sdb3" successfully created. [root@server02 ~] # fdisk -l /dev/sdb 磁盘 /dev/sdb :21.5 GB, 21474836480 字节,41943040 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I /O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xa71b8f53 设备 Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 8e Linux LVM /dev/sdb2 2099200 4196351 1048576 8e Linux LVM /dev/sdb3 4196352 6293503 1048576 8e Linux LVM [root@server02 ~] # partprobe //使分区表生效 [root@server02 ~] # ls /dev/sdb1 /dev/sdb1 [root@server02 ~] # ls /dev/sdb2 /dev/sdb2 [root@server02 ~] # ls /dev/sdb3 /dev/sdb3 [root@server02 ~] # pvdisplay //查看已经存在的pv "/dev/sdb3" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb3 VG Name PV Size 1.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID N7T8n5-Gc1a-bdO6-yFJy-PVTF-3HJM-Cy3gFD "/dev/sdb2" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 1.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 0Y7myL-dyWh-iKbN-G82H-U5je-lsGD-03i7UL "/dev/sdb1" is a new physical volume of "1.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 1.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID uWSpFE-KDDS-99nq-5jlc-NBAv-1JBi-PZgxC0 [root@server02 ~] # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 1.00g 1.00g /dev/sdb2 lvm2 --- 1.00g 1.00g /dev/sdb3 lvm2 --- 1.00g 1.00g [root@server02 ~] # vgcreate vg1 /dev/sdb1 /dev/sdb2 //创建VG,同一VG下的一组PV构成一个VG Volume group "vg1" successfully created [root@server02 ~] # vgs VG #PV #LV #SN Attr VSize VFree vg1 2 0 0 wz--n- 1.99g 1.99g [root@server02 ~] # lvcreate -L 100M -n lv1 vg1 Logical volume "lv1" created. [root@server02 ~] # mkfs.ext4 /dev/vg1/lv1 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type : Linux 块大小=1024 (log=0) 分块大小=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 25688 inodes, 102400 blocks 5120 blocks (5.00%) reserved for the super user 第一个数据块=1 Maximum filesystem blocks=33685504 13 block groups 8192 blocks per group, 8192 fragments per group 1976 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成 [root@server02 ~] # mount /dev/vg1/lv1 /mnt/ [root@server02 ~] # mkdir /mnt/123 [root@server02 ~] # touch /mnt/1.txt [root@server02 ~] # echo "1234">/mnt/1.txt [root@server02 ~] # df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 28G 1.1G 27G 4% / devtmpfs 483M 0 483M 0% /dev tmpfs 493M 0 493M 0% /dev/shm tmpfs 493M 6.8M 486M 2% /run tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/sda1 197M 109M 88M 56% /boot tmpfs 99M 0 99M 0% /run/user/0 /dev/mapper/vg1-lv1 93M 1.6M 85M 2% /mnt [root@server02 ~] # cat /mnt/1.txt 1234 |
2、磁盘扩容
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 | [root@server02 ~] # umount /mnt/ [root@server02 ~] # lvresize -L 300M /dev/vg1/lv1 Size of logical volume vg1 /lv1 changed from 100.00 MiB (25 extents) to 300.00 MiB (75 extents). Logical volume vg1 /lv1 successfully resized. [root@server02 ~] # e2fsck -f /dev/vg1/lv1 e2fsck 1.42.9 (28-Dec-2013) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/vg1/lv1 : 13 /25688 files (7.7% non-contiguous), 8899 /102400 blocks [root@server02 ~] # mount /dev/vg1/lv1 /mnt/ [root@server02 ~] # resize2fs /dev/vg1/lv1 resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/vg1/lv1 is mounted on /mnt ; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 3 The filesystem on /dev/vg1/lv1 is now 307200 blocks long. [root@server02 ~] # df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 28G 1.1G 27G 4% / devtmpfs 483M 0 483M 0% /dev tmpfs 493M 0 493M 0% /dev/shm tmpfs 493M 6.8M 486M 2% /run tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/sda1 197M 109M 88M 56% /boot tmpfs 99M 0 99M 0% /run/user/0 /dev/mapper/vg1-lv1 287M 2.1M 270M 1% /mnt |
如果是xfs格式时,不需要卸载,但需要执行xfs_growfs /dev/vg1/lv1命令。
3、磁盘缩减
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 | [root@server02 ~] # umount /mnt/ [root@server02 ~] # e2fsck -f /dev/vg1/lv1 e2fsck 1.42.9 (28-Dec-2013) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/vg1/lv1 : 13 /75088 files (7.7% non-contiguous), 15640 /307200 blocks [root@server02 ~] # resize2fs /dev/vg1/lv1 100M resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vg1/lv1 to 102400 (1k) blocks. The filesystem on /dev/vg1/lv1 is now 102400 blocks long. [root@server02 ~] # lvresize -L 100M /dev/vg1/lv1 WARNING: Reducing active logical volume to 100.00 MiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce vg1 /lv1 ? [y /n ]: y Size of logical volume vg1 /lv1 changed from 300.00 MiB (75 extents) to 100.00 MiB (25 extents). Logical volume vg1 /lv1 successfully resized. [root@server02 ~] # mount /dev/vg1/lv1 /mnt/ [root@server02 ~] # df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 28G 1.1G 27G 4% / devtmpfs 483M 0 483M 0% /dev tmpfs 493M 0 493M 0% /dev/shm tmpfs 493M 6.8M 486M 2% /run tmpfs 493M 0 493M 0% /sys/fs/cgroup /dev/sda1 197M 109M 88M 56% /boot tmpfs 99M 0 99M 0% /run/user/0 /dev/mapper/vg1-lv1 93M 1.6M 86M 2% /mnt |
磁盘缩减是一个很危险的操作,在操作过程中,需要注意每一步的提示信息是否正常。以防缩减导致的数据缺损和丢失的问题。强烈建议做磁盘缩减前,做一次数据完整备份,并且每一步操作在实验虚拟机上模拟一遍。
注意:xfs格式不支持缩减。
4、扩展卷组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [root@server02 ~] # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg1 lvm2 a-- 1020.00m 920.00m /dev/sdb2 vg1 lvm2 a-- 1020.00m 1020.00m /dev/sdb3 lvm2 --- 1.00g 1.00g [root@server02 ~] # vgextend vg1 /dev/sdb3 Volume group "vg1" successfully extended [root@server02 ~] # lvresize -L 100M /dev/vg1/lv1 New size (25 extents) matches existing size (25 extents). [root@server02 ~] # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 vg1 lvm2 a-- 1020.00m 920.00m /dev/sdb2 vg1 lvm2 a-- 1020.00m 1020.00m /dev/sdb3 vg1 lvm2 a-- 1020.00m 1020.00m |