LVM邏輯卷管理
邏輯卷管理器(英語:Logical Volume Manager,縮寫爲LVM),又譯爲邏輯卷宗管理器、邏輯扇區管理器、邏輯磁盤管理器,是Linux核心所提供的邏輯卷管理功能。它在硬盤的硬盤分區之上,又創建一個邏輯層,以方便系統管理硬盤分區系統。
lvm的原理:相當於將多個物理的磁盤設備,集中化後創建爲一個邏輯的設備。這樣便很輕鬆的對分區進行管理
創建LVM的流程:
加入磁盤
新建分區
fdisk /dev/磁盤設備 (新建主分區並修改分區類型爲8e lvm類型)
創建pv:
pvcreate 分區1 分區2 ...
創建vg:
vgcreate vg 分區1 分區2 ....
創建lv:
lvcreate -n /dev/vg/lv -L lv卷的大小
格式化:
mkfs.ext4 /dev/vg/lv
掛載:
mount /dev/vg/lv /掛載點
echo “ /dev/vg/lv /掛載點 ext4 defaults 0 0 ” >>/etc/fstab
擴展LVM的流程:
加入磁盤:
新建分區:
擴容pv:
pvcreate /分區
擴容vg:
vgextend /dev/vg 分區
擴容lv:
lvextend /dev/vg/lv -L +擴容的大小
重構文件系統大小:
resize2fs /dev/vg/lv
現在有4塊未分區的磁盤:sdb sdc sdd sde
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─VolGroup-lv_root (dm-0) 253:0 0 17.6G 0 lvm / └─VolGroup-lv_swap (dm-1) 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk sdc 8:32 0 20G 0 disk sdd 8:48 0 20G 0 disk sde 8:64 0 20G 0 disk
[root@localhost ~]# fdisk -l ##可以查看所有磁盤的大小,以及分區情況
Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x000172ae 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 2611 20458496 8e Linux LVM Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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 Disk /dev/sdc: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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 Disk /dev/sdd: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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 Disk /dev/sde: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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 Disk /dev/mapper/VolGroup-lv_root: 18.9 GB, 18865979392 bytes 255 heads, 63 sectors/track, 2293 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 Disk /dev/mapper/VolGroup-lv_swap: 2080 MB, 2080374784 bytes 255 heads, 63 sectors/track, 252 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 sdc sde分區 分區類型改爲8e: ##對sdc sde做同樣的操作
[root@localhost ~]# 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 0x046c7ceb. 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-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 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: 0x046c7ceb Device Boot Start End Blocks Id System /dev/sdb1 1 2610 20964793+ 8e Linux LVM Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
開始邏輯卷的創建:
1 首先創建pv:
pv是將磁盤分區轉換成一個個的小塊,這些小塊被稱爲pe,默認的1pe=4M 方便動態分配。
命令格式:pvcreate 分區1 分區2 ...
查看pv: pvs
[root@localhost ~]# pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdd1" successfully created [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 a-- 19.99g 19.99g /dev/sdc1 lvm2 a-- 19.99g 19.99g /dev/sdd1 lvm2 a-- 19.99g 19.99g
2 然後創建vg:
vg是將pv轉換後的分區創建爲一個整體,相當於融和爲一個大的磁盤:
命令格式:vgcreate vg名 分區1 分區2 ....
查看vg: vgs ##可以看到整合後分區
[root@localhost ~]# vgcreate my_vg /dev/sdb1 /dev/sdc1 /dev/sdd1 Volume group "my_vg" successfully created [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree VolGroup 1 2 0 wz--n- 19.51g 0 my_vg 3 0 0 wz--n- 59.98g 59.98g
3 最後創建lv:
lv是將整合後的vg再分出一個個分區
命令格式:lvcreate -n /dev/vg名/lv分區 -L 分出大小
查看lv:lvs
[root@localhost ~]# lvcreate -n /dev/my_vg/my_lv -L 40G Logical volume "my_lv" created [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv_root VolGroup -wi-ao---- 17.57g lv_swap VolGroup -wi-ao---- 1.94g my_lv my_vg -wi-a----- 40.00g
邏輯卷創建完成後,就和正常的分區一樣了,接下來就該格式化了掛載分區了
格式化分區:
[root@localhost ~]# mkfs.ext4 /dev/my_vg/my_lv mke2fs 1.41.12 (17-May-2010) 文件系統標籤= 操作系統:Linux 塊大小=4096 (log=2) 分塊大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 2621440 inodes, 10485760 blocks 524288 blocks (5.00%) reserved for the super user 第一個數據塊=0 Maximum filesystem blocks=4294967296 320 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, 1605632, 2654208, 4096000, 7962624 正在寫入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@localhost ~]# mkdir /data [root@localhost ~]# mount /dev/my_vg/my_lv /data/
寫入到開機掛載文件/etc/fstab:
[root@localhost ~]# echo "/dev/my_vg/my_lv /data ext4 defaults 0 0 " >>/etc/fstab [root@localhost ~]# tail -1 /etc/fstab /dev/my_vg/my_lv /data ext4 defaults 0 0
驗證掛載情況:
[root@localhost ~]# mount -a [root@localhost ~]# mount /dev/mapper/VolGroup-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) /dev/sda1 on /boot type ext4 (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) /dev/mapper/my_vg-my_lv on /data type ext4 (rw)
[root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1.5G 15G 10% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 485M 34M 427M 8% /boot /dev/mapper/my_vg-my_lv 40G 176M 38G 1% /data
邏輯卷lv擴容
當創建的邏輯卷lv內的數據文件過多,需要擴容的時候就體現出邏輯卷的方便快捷和強大了。
現在有一塊硬盤sde未分區,現在要用這塊硬盤給lv擴容。
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 1024M 0 rom sda 8:0 0 20G 0 disk ├─sda1 8:1 0 500M 0 part /boot └─sda2 8:2 0 19.5G 0 part ├─VolGroup-lv_root (dm-0) 253:0 0 17.6G 0 lvm / └─VolGroup-lv_swap (dm-1) 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 part └─my_vg-my_lv (dm-2) 253:2 0 40G 0 lvm /data sdc 8:32 0 20G 0 disk └─sdc1 8:33 0 20G 0 part └─my_vg-my_lv (dm-2) 253:2 0 40G 0 lvm /data sdd 8:48 0 20G 0 disk └─sdd1 8:49 0 20G 0 part └─my_vg-my_lv (dm-2) 253:2 0 40G 0 lvm /data sde 8:64 0 20G 0 disk
給新硬盤分區:
[root@localhost ~]# fdisk /dev/sde Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0xe0bca983. 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-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): Using default value 2610 Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
邏輯卷擴容流程:
1.將主分區加入到pv
[root@localhost ~]# pvcreate /dev/sde1 Physical volume "/dev/sde1" successfully created [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 VolGroup lvm2 a-- 19.51g 0 /dev/sdb1 my_vg lvm2 a-- 19.99g 0 /dev/sdc1 my_vg lvm2 a-- 19.99g 0 /dev/sdd1 my_vg lvm2 a-- 19.99g 19.98g /dev/sde1 lvm2 a-- 19.99g 19.99g
2.加pv分區加入到vg容器裏
[root@localhost ~]# vgextend /dev/my_vg /dev/sde1 Volume group "my_vg" successfully extended [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree VolGroup 1 2 0 wz--n- 19.51g 0 my_vg 4 1 0 wz--n- 79.97g 39.97g
##vsize是總大小 vfree是剩餘容量
3.給lv擴容:
[root@localhost ~]# lvextend /dev/my_vg/my_lv -L +20G Extending logical volume my_lv to 60.00 GiB Logical volume my_lv successfully resized [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv_root VolGroup -wi-ao---- 17.57g lv_swap VolGroup -wi-ao---- 1.94g my_lv my_vg -wi-ao---- 60.00g
(可以寫作是:lvcreatend /dev/my_vg/my_lv /dev/sde1將整塊磁盤擴容給lv)
4.重新構建文件系統大小:
因爲文件系統前面已經格式化,設置了文件系統。裏面也存放了文件,不能重新格式化文件系統,而擴容了邏輯卷,文件系統無法檢測到。這就需要使用resize2fs這條命令重新構建文件系統了。
[root@localhost ~]# resize2fs /dev/my_vg/my_lv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/my_vg/my_lv is mounted on /data; on-line resizing required old desc_blocks = 3, new_desc_blocks = 4 Performing an on-line resize of /dev/my_vg/my_lv to 15728640 (4k) blocks. The filesystem on /dev/my_vg/my_lv is now 15728640 blocks long.
5.查看驗證:
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 18G 1.5G 15G 10% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 485M 34M 427M 8% /boot /dev/mapper/my_vg-my_lv 60G 180M 56G 1% /data [root@localhost ~]#