底层PV
中层VG
上层LV
PE(phsical extent):在逻辑层次上,VG把PV分成固定大小的块,这些块就叫PE,默认为4M ,创建LV的过程就是分多少个PE的过程。
自动分区的过程中,除了根目录,把其他所有的磁盘空间都做成LV
一. LVM概述
LVM: Logical Volume Manager, Version: 2
用的是dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块;
两种引用文件的方式,他们引用的其实都是/dev/dm-0,1,2,3...等文件,
1. /dev/mapper/VG_NAME-LV_NAME
例如: /dev/mapper/vol0-root
2. /dev/VG_NAME/LV_NAME
例如: /dev/vol0/root
二. 如何创建和管理逻辑卷呢?
首先要先创建PV,新建分区后需要把其类型调整为8e(Linux LVM)
1)pv(物理卷)管理工具:
pvs:简要pv信息显示
pvdisplay:显示pv的详细信息
pvcreate /dev/DEVICE: 创建pv
2)vg(卷组,相当于逻辑分区,不能分区,可包含多个pv)管理工具:
vgs--简要显示所有卷组
vgdisplay
vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...] ----指定大小
例如:vgcreate myvg /dev/sda3
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...],需要先做pvmove
vgremove
3)lv(逻辑卷)管理工具:
lvs
lvdisplay
lvcreate -L #[mMgGtT] -n NAME VolumeGroup #-L指明大小,-n指明名字, 例如 lvcreate -L 2G -n mylv myvg,然后正常格式化,mke2fs -t ext4 -b 1024 -L MYLV /dev/myvg/mylv
lvremove /dev/VG_NAME/LV_NAME
扩展逻辑卷:
# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME #带上+是准确的加多少空间;不带上+,是扩展后的总空间
# resize2fs /dev/VG_NAME/LV_NAME
缩减逻辑卷:
# umount /dev/VG_NAME/LV_NAME
# e2fsck -f /dev/VG_NAME/LV_NAME
# resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
# mount
4)例子
添加硬盘到卷组, 就是加一块新硬盘,增加到指定硬盘空间。
1、给新硬盘创建分区 fdisk /dev/sdc
n
p
1
w
2、创建物理卷 pvcreate /dev/sdc1
3、格式化物理卷 mkfs.ext3 /dev/sdc1, 选择哪一个文件系统最好用mount命令查看一下
4、将新的物理卷添加到卷组中 vgextend VolGroup00 /dev/sdc1,用pvs验证是否成功
5、将新的空间添加到逻辑卷中 lvextend -L +10G /dev/VolGroup00/LogVol00(提前可以挂载到目录下查看大小再决定添加的空间),此例是加了10G,随个人需要增加空间
6、加上去后,目前用df -h还看不到改变,需要激活 resize2fs -p /dev/VolGroup00/LogVol00
7、用df -h查看
实例1. 某校创建了300G的硬盘sdb,需要我加到卷组中,并挂到/home目录下,(其实挂载根目录下更好)
mkfs.ext4 /dev/sdb
vgextend VolGroup /dev/sdb
lvextend -L +299G /dev/VolGroup/lv_home
resize2fs -p /dev/VolGroup/lv_home
实例2. 某校虚拟机扩容 +200G
1. 先在虚拟机外面进行硬盘扩展--学校老师做了,但是我fdisk没看到有变化,重启一下就能看到扩展了200G
2. fdisk /dve/sda 新建分区,这里dev/sda3,新建的分区空间很小,那么需要重新新建一个分区,dev/sda4,w保存,然后重启
3. 格式化分区 mkfs.ext4 /dev/sda4
4. 建立pv,pvcreate /dev/sda4
5. 扩展vg , vgextend ubuntu_vg /dev/sda4 -------把新建的分区扩展到源ubuntu_vg
6. vgdisplay查看一下
7. 扩展lv,lvextend -L +199.9G /dev/ubuntu_vg/root
8. vgdisplay 查看一下
9. resize2fs -p /dev/ubuntu_vg/root 调整文件系统
http://www.cnblogs.com/tigertall/p/5257324.html -----------最后一步按照 resize2fs -p /dev/VolGroup/lv_home 可以成功。
三. 快照:snapshot
将文件系统迅速的扫描一遍,类似硬链接,必须在同一卷组,仅存储快照那一刻发生变化的文件,之前的原文件直接指向原地址空间。
快照空间的大小取决于这个快照想用多少时间,比如2个小时内系统数据变化量大概为2G,那么快照空间设个3G就行。
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name #-s:指明是快照,-n:指明名字,-p:权限
例如:lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv
mount /dev/myvg/mylv-snap /mnt
不用快照的时候
umount /mnt
lvremove /dev/myvg/mylv-snap
练习1:创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录;
练习2: 新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录;
练习3:扩展testlv至7G,要求archlinux用户的文件不能丢失;
练习4:收缩testlv至3G,要求archlinux用户的文件不能丢失;
练习5:对testlv创建快照,并尝试基于快照备份数据,验正快照的功能;
四. dd命令:convert and copy a file------底层文件复制工具,效率比cp更高
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size, 复制单元大小;
count=#:复制多少个bs;
例如:复制etc/fstab文件中的前100个字节 dd if=/etc/fstab of=/tmp/fstab.2 bs=1 count=100
1)磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
2)备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
3)破坏MBR中的bootloader,不会影响分区表:
dd if=/dev/zero of=/dev/sda bs=256 count=1
两个特殊设备:
/dev/null: 数据黑洞;
/dev/zero:吐零机;