Linux磁盘软糖lvm

30.lvm.md

lvm :在操作系统之上创建灵活的动态分区方案

   屏蔽了底层磁盘布局,便于动态调整磁盘容量

   注意:/boot 分区用于存放引导文件,不能应用lvm机制。

LVM机制的基本概念

    pv vg lv 

基本用法

    pv vg lv ++ scan create display remove+、 extend-、reduce

LVM: Logical Volume Manager, Version: 2

dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块;

/dev/dm#

/dev/mapper/VG_NAME-LV_NAME

/dev/mapper/vol0-root

/dev/VG_NAME/LV_NAME

/dev/vol0/root

pv管理工具:

pvs:简要pv信息显示

# pvs      PV         VG   Fmt  Attr PSize   PFree        /dev/sdd1       lvm2 ---  100.00m 100.00m     
 /dev/sdd2       lvm2 ---  100.00m 100.00m     
 /dev/sdd3       lvm2 ---  100.00m 100.00m     
 /dev/sdd4       lvm2 ---  100.00m 100.00m

pvdisplay:显示pv的详细信息

# pvs
PV         VG   Fmt  Attr PSize   PFree        
/dev/sdd1      lvm2 ---  100.00m 100.00m      
/dev/sdd2       lvm2 ---  100.00m 100.00m      
/dev/sdd3      lvm2 ---  100.00m 100.00m      
/dev/sdd4      lvm2 ---  100.00m 100.00m

pvcreate /dev/DEVICE: 创建pv

# pvcreate /dev/sdd{1,2,3,4}      
Physical volume "/dev/sdd1" successfully created      
Physical volume "/dev/sdd2" successfully created      
Physical volume "/dev/sdd3" successfully created      
Physical volume "/dev/sdd4" successfully created

pvremove DEVICE

# pvremove /dev/sdd{1,2,3,4}      
Labels on physical volume "/dev/sdd1" successfully wiped      
Labels on physical volume "/dev/sdd2" successfully wiped      
Labels on physical volume "/dev/sdd3" successfully wiped      
Labels on physical volume "/dev/sdd4" successfully wiped

vg管理工具:

vgs

# vgs      
VG        #PV #LV #SN Attr   VSize   VFree        
vg_magedu        4  0  0 wz--n-   396.00m 396.00m

 vgdisplay

# vgdisplay
--- Volume group ---      
VG Name                          vg_magedu      
System ID                   
Format                           lvm2      
Metadata Areas                   4      
Metadata Sequence No             1      
VG Access                        read/write      
VG Status                        resizable      
MAX LV                           0      
Cur LV                           0      
Open LV                          0      
Max PV                           0      
Cur PV                           4      
Act PV                           4      
VG Size                          396.00 MiB      
PE Size                          1.00 MiB      
Total PE                         396      
Alloc PE / Size                  0 / 0         
Free PE / Size                   396 / 396.00 MiB      
VG UUID                          TFOU38-hneL-lnmW-YhDm-q45f-tqvW-    YzZYNQ

vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath..]

# vgcreate -s 1M vg_magedu /dev/sdd{1,2,3,4}
 Volume group "vg_magedu" successfully created

vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

# vgextend /dev/vg_magedu /dev/sdd4
Volume group "vg_magedu" successfully extended

vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]

# vgreduce /dev/vg_magedu /dev/sdd4 
   Removed "/dev/sdd4" from volume group "vg_magedu" #最后一个只能删除vg.    
# vgreduce /dev/magedu /dev/sdd4  
   Can't remove final physical volume "/dev/sdd4" from volume group     "magedu"    
# vgremove /dev/magedu

说明:由于可能lv已经占用了该要减少的pv,要做下面的流程 :

 vg缩减:检查lv容量,如果量够不够一个pv,不能缩减;量够的如果pv在vg前面可能被用到,被用到就pvmove到空闲pv中,在执行vgreduce:

#缩减vg,先查看pv是否再用,lv用到多少,在检测pv是否再用,如在用pvmove到空闲的pv在执行
#vgreduce                
pvmove /dev/sdd1 /dev/sdd3 # pvmove SRC_PV DET_PV                
vgreduce /dev/magedu /dev/sdd1 #vgreduce PATH_TO_VG PATH_TO_LV

vg扩展:找到可扩展进来的pv,vgexteng  VG_NAME PV_NAME

# vgextend /dev/magedu /dev/sdd4
  Volume group "magedu" successfully extended    
# pvs  
 PV         VG     Fmt  Attr PSize   PFree        
 /dev/sdd1         lvm2 ---  100.00m 100.00m      
 /dev/sdd2  magedu lvm2 a--   96.00m  36.00m      
 /dev/sdd3  magedu lvm2 a--   96.00m      0       
 /dev/sdd4  magedu lvm2 a--   96.00m  96.00m

vgremove


lv管理工具:

lvs

# lvs      
LV   VG        Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert     
lvm1 vg_magedu -wi-a----- 100.00m

lvdisplay

# lvdisplay     
 --- Logical volume ---      
 LV Path                /dev/vg_magedu/lvm1      
 LV Name                lvm1      
 VG Name                vg_magedu      
 LV UUID                CY6dcf-fh1z-XJym-NCzX-FPmw-naDw-1EWbmm     LV Write Access        read/write      
 LV Creation host, time localhost.localdomain, 2016-03-16 06:01:55 -0700     LV Status              available      
 # open                 0      
 LV Size                100.00 MiB      
 Current LE             100      
 Segments               2      
 Allocation             inherit      
 Read ahead sectors     auto      
 - currently set to     8192      
 Block device           253:0

lvcreate -L #[mMgGtT] -n NAME VolumeGroup

# lvcreate -L 100M -n lvm1 /dev/vg_magedu
WARNING: ext4 signature detected on /dev/vg_magedu/lvm1 at offset 1080. Wipe it? [y/n]: y 
Wiping ext4 signature on /dev/vg_magedu/lvm1.
Logical volume "lvm1" created.

lvremove /dev/VG_NAME/LV_NAME

# umount /mail     
# lvremove /dev/magedu/magedu       
Do you really want to remove active logical volume magedu? [y/n]: y     
Logical volume "magedu" successfully removed

扩展逻辑卷:

# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME

# lvextend -L +75M /dev/vg_magedu/lvm1      
Size of logical volume vg_magedu/lvm1 changed from 25.00 MiB (25 extents) to 100.00 MiB (100 extents).      
Logical volume lvm1 successfully resized.

# 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

# resize2fs /dev/magedu/magedu 100M    
resize2fs 1.42.9 (28-Dec-2013)    
Filesystem at /dev/magedu/magedu is mounted on /mail;on-line resizing required 
resize2fs: On-line shrinking not supported    
# umount /mail    
# resize2fs /dev/magedu/magedu 100M    
resize2fs 1.42.9 (28-Dec-2013)    
Please run 'e2fsck -f /dev/magedu/magedu' first.    
# resize2fs /dev/magedu/magedu 100M^C    
# e2fsck -f /dev/magedu/magedu    
e2fsck 1.42.9 (28-Dec-2013)    
Pass 1: Checking inodes, blocks, and sizes    
Pass 2: Checking directory structure    
Pass 3: Checking directory connectivity    
Pass 4: Checking reference counts    
Pass 5: Checking group summary information    
/dev/magedu/magedu: 12/37544 files (8.3% non-contiguous),10393/153600 blocks    
# resize2fs /dev/magedu/magedu 100M    
resize2fs 1.42.9 (28-Dec-2013)    
Resizing the filesystem on /dev/magedu/magedu to 102400 (1k)blocks.    
The filesystem on /dev/magedu/magedu is now 102400 blocks long.    
# lvreduce -L 50M /dev/magedu/magedu           
Rounding size to boundary between physical extents: 52.00 MiB          
WARNING: Reducing active logical volume to 52.00 MiB          
THIS MAY DESTROY YOUR DATA (filesystem etc.)        
Do you really want to reduce magedu? [y/n]: y          
Size of logical volume magedu/magedu changed from 152.00 MiB (38 extents) to 52.00 MiB (13 extents).      
Logical volume magedu successfully resized.


快照:snapshot

   快照:快照其实也是个逻辑卷lv,快照只能对逻辑卷lvm进行备份,并且只能对同一个卷组的逻辑卷进行备份;

   备份,不用在需要格式化快照卷

    冷备份:卸载文件系统,不能读,不能写;

    温备份:不卸载文件系统,能读取文件系统内容但是不能写;

    热备份:不卸载文件系统,不能影响正常读写;

    快照机制

    生成:拷贝元数据到快照卷,并建立对应chunk位图,置位位图为空

    拷贝过程中,检测chunk位图,检测对应chunk位,未改变则将原始卷对应数据拷贝到快照卷对应位置,

置位chunk位图对应chunk位,对原始卷的进行写操作,否则不做任何操作;

    恢复时:按照chunk恢复,量也很小。查找chunk位图,有标记则复制快照卷对应数据到原始卷做还原,否则不变。

    鸟哥的恢复:卸载镜像卷,将镜像卷压缩打包到文件另一个目录,删除源卷,删除镜像卷,建立新的原卷,将打包文件解压到新的原卷 。

lvcreate -L 

#[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name

# ls /mail -lhi     
total 29K     
12 -rw-r--r--. 1 root root 14K Mar 16 06:11 functions     
11 drwx------. 2 root root 12K Mar 16 06:10 lost+found     
13 -rw-r--r--. 1 root root 512 Mar 16 06:11 sda_mbr.bak
# df -h /mail     
Filesystem                  Size  Used Avail Use% Mounted on     
/dev/mapper/vg_magedu-lvm1   93M  1.6M   85M   2% /mail
# lvcreate -s  -p r -L 75M -n lvm1s /dev/vg_magedu/lvm1 #-s指定快照卷,后面指定同组的lv,这样就不用指定vg了。
Logical volume "lvm1s" created.
# df -lh /mails    
Filesystem                   Size  Used Avail Use% Mounted on     
/dev/mapper/vg_magedu-lvm1s   93M 1.6M   85M   2% /mails   
#镜像卷和原卷大小一致。 
# dd if=/dev/sdb of=/mail/sdb_mbr.bak bs=512 count=1     
1+0 records in     1+0 records out     512 bytes (512 B) copied, 0.000481676 s, 1.1 MB/s # ls /mail -al     
total 36 
drwxr-xr-x.  3 root root  1024 Mar 16 06:16 .     
dr-xr-xr-x. 22 root root  4096 Mar 16 06:12 ..     
-rw-r--r--.  1 root root 13948 Mar 16 06:11 functions     
drwx------.  2 root root 12288 Mar 16 06:10 lost+found     
-rw-r--r--.  1 root root   512 Mar 16 06:11 sda_mbr.bak     
-rw-r--r--.  1 root root   512 Mar 16 06:16 sdb_mbr.bak     
# ls /mails     functions  lost+found  sda_mbr.bak

说明:LVM容的是数据实现上的错误,不能解决底层硬件故障;

   RAID容的硬件错误

   LVM和RAID的相比是错误

   在不同磁盘建立镜像卷提高效率是不行的,不如RAID1呢

应用:数据库实时备份

    数据追溯的

lvm 恢复

# 卸载lvm源卷,格式化为ext3文件系统,源文件系统为ext4;       
# mount /dev/vg_magedu/lvm1 /mail        
# ls /mail            
    functions  lost+found  mails  sda_mbr.bak  sda_mbr.bak.bz2  sda_mbr.bak.gzip  sdb_mbr.bak  test.data  var        
# 建立镜像卷,-l 60 建立60个PE的卷,PE大小为1M,那么卷大小为60M。        
# lvcreate -l 60 -n lvm1s -s -p r /dev/vg_magedu/lvm1         
# lvs               
# mount /dev/vg_magedu/lvm1s /mails        
# ls /mails            
    functions  lost+found  mails  sda_mbr.bak  sda_mbr.bak.bz2  sda_mbr.bak.gzip  sdb_mbr.bak  test.data  var        
# 镜像卷文件已经拷贝过来了,查看能看得到。建立新20M的文件。        
# dd if=/dev/zero of=/mail/test2.data bs=20M count=1        
# 将镜像卷内容打包到其他目录。        
# tar -zcvf /tmp/lvmsback.tar.gz /mails           
# 取消原卷挂载,并格式化,再挂载        
# umount /mail        
# blkid /dev/vg_magedu/lvm1        
# /dev/vg_magedu/lvm1: UUID="26a7f721-d66e-4ea1-a95a-a1589bff51ab" TYPE="ext4"    # mkfs.ext3 /dev/vg_magedu/lvm1        
# mount /dev/vg_magedu/lvm1 /mail        
# 将打包文件释放到新的文件系统中,文件恢复完成。 lvm1s镜像卷创建时只读,可写了。   
# tar -zxvf /tmp/lvmsback.tar.gz -C /mail        
# mv /mail/mails/* /mail         
# ls /mail            
    functions  lost+found  mails  sda_mbr.bak  sda_mbr.bak.bz2  sda_mbr.bak.gzip  sdb_mbr.bak  test.data  var

dd命令

用法:拷贝数据,镜像磁盘,备份mbr,开拓swap文件

   dd if=数据来源 of=目标 bs=# blocksize count=# 传递次数

   dd if=/dev/sda  of=/dev/sdb 

   dd if=/dev/sda of=/sda.mbr bs=512 count=1

常用用法:

    建立200M的文件形式的swap文件

dd if=/dev/zero of=/swap-test bs=100M count=2
mkswap /swap-test
swapon /swap-test
swapon 
# swapon
NAME      TYPE      SIZE USED PRIO
/dev/sda2 partition 1.8G   0B   -1
/swap-test file          200M   0B   -1


你可能感兴趣的:(lvm,磁盘)