Because LVM so cattle(Logical Volume Manager)

LVM: Logical Volume Manager

        LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

        LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。

        LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

基本的逻辑卷管理概念:

PV(Physical Volume)- 物理卷 

物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。

VG(Volumne Group)- 卷组 

卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

LV(Logical Volume)- 逻辑卷 

逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

PE(Physical Extent)- 物理块

    LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!不过,在 CentOS 6.x 以后,由于直接使用 lvm2 的各项格式功能,因此这个限制已经不存在了。

    将pv提供的存储空间划分为大小相同的n个存储块,pe大小是在pv加入vg之后决定的,


dm:vevice mapper

    将一个或多个底层块设备组织成一个逻辑设备的模块,存放在:/dev/dm-#

关系图如下:  

LVM.jpg

lvcreate

在卷组中创建逻辑卷:

# lvcreate -L 100 /dev/vg00

lvdisplay

显示有关逻辑卷的信息:

# lvdisplay -v /dev/vg00/lvol1

lvextend

为逻辑卷添加镜像

# lvextend -m 1 /dev/vg00/lvol3

lvextend

增加逻辑卷的大小

# lvextend -L 120 /dev/vg00/lvol3

lvreduce

减小逻辑卷的大小:

# lvreduce -L 100 /dev/vg00/lvol3

lvremove

从卷组中删除逻辑卷:

# lvremove /dev/vg00/lvol6

pvcreate

创建用作卷组的一部分的物理卷:

# pvcreate /dev/rdisk/disk2

pvdisplay

显示有关物理卷的信息:

# pvdisplay -v /dev/disk/disk2

pvmove

将盘区从一个物理卷移动到另一个物理卷:

# pvmove /dev/disk/disk2 /dev/disk/disk3

pvremove

从物理卷中删除 LVM 数据结构:

# pvremove /dev/rdisk/disk2

vgcreate

创建卷组:

# vgcreate /dev/vg01 /dev/disk/disk2 /dev/disk/disk3

vgdisplay

显示有关卷组的信息:

# vgdisplay -v /dev/vg00

vgextend

通过添加物理卷来扩充卷组:

# vgextend /dev/vg00 /dev/disk/disk2

vgexport

从系统中删除卷组:

# vgexport /dev/vg01

vgscan

扫描卷组的系统磁盘:

# vgscan -v

vgreduce

通过从卷组中删除一个或多个物理卷来缩小卷组:

# vgreduce /dev/vg00 /dev/disk/disk2

vgremove

从系统和磁盘中删除卷组定义:

# vgremove /dev/vg00 /dev/disk/disk2

vgsync

同步卷组中的所有镜像逻辑卷:

# vgsync vg00


VG:Volume Group 卷组

vg管理工具:

vgcreate   [-s #[kmgtpe]] volumegroupname physicaldevicepath [physicaldevicepath...]
vgcreate    -s  pe大小创建卷组的名称   指定pv路径(可以多个)
    #vgcreate  vg1  /dev/sdb
    -s:pe大小


扩展vg:(加磁盘)

vgextend volumegroupname physicaldevicepath [physicaldevicepath...]
vgextend  要扩展的vg组名添加的磁盘路径(可以多个)
#vgextend  vg1 /dev/sdc1


缩减vg:(减磁盘)

vgreduce volumegroupname physicaldevicepath [physicaldevicepath…]

vgreduce  要缩减的vg组   缩减的磁盘路径(可以是多个)

    vgreduce参数:

        -a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷;

        –removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态。

    #vgreduce myvg /dev/sda5


注:缩减vg时,缩减的是磁盘,所以务必先使用vgmove命令移动磁盘上的数据(将要移除的vg上的数据移动到同一个vg组的pv上)

LV:Logical Volume  逻辑卷管理

lvcreate -L #[mMgGtT] -n  NAME  VolumeGroup
lvcreate -L  指定lv大小     -n   指定lv名称    指定在哪个vg组里创建lv
    -L:指定lv大小 (卷组有足够的空间情况下)
    -n:name
    #lvremove /dev/VG_name/lv_name

扩展逻辑卷:

    lvextend  -L [+]num[mMgGtT]   /dev/vg_name/LV_NAME

    +:加+号代表在原有基础上增加多少,不带+号则代表增加到

    如:原有2G,现要扩展到5G

    1.加+号,#lvextend  -L   +3G    /dev/vg1/lv1

    2.不加+号,#lvextend  -L   5G    /dev/vg1/lv1

扩展后需要修改逻辑边界

     resize2fs  /dev/VG_NAME/LV_NAME

     #resize2fs  /dev/myvg/mylv

     扩展到此lv大小

     只针对ext系列文件系统

    


lv:lvreduce缩减逻辑卷

先缩减内部文件系统大小(逻辑边界)到指定大小,再缩减物理大小

    1.卸载文件系统:

    umount  /dev/vg_name/lv_name
    #umount  /dev/vg1/lv1

    2.文件系统强制检测

e2fsck -f /dev/VG_NAME/LV_NAME
#e2fsck -f /dev/vg1/lv1

    3.缩减文件系统逻辑边界(缩减至多大)

resize2fs  /dev/VG_name/LV_NAME #[mMgGtT]
resize2fs /dev/vg1/lv1  10G

    4.再次执行缩减

lvreduce -L [-]num[mMgGtT]  /dev/VG-name/LV-name
-:加-号代表在原有基础上减少多少,不带-号则代表减少到多少
如:原有5G,现要缩减到2G
1.加-号,#lvextend  -L   -3G    /dev/vg1/lv1
2.不加-号,#lvextend  -L   2G    /dev/vg1/lv1

    5.重新挂载

    mount  /dev/vg_name/lv_name  /path/to/somefile
    #mount  /dev/vg1/lv1  /mnt/lv1

示例:

1.创建一个至少有两个pv组成的大小为20G的名为testvg的VG,要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录

###创建pv和vg:

-s指定pe大小

[root@localhost ~]# vgcreate testvg -s 16M /dev/sd{b,c}1
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
  Volume group "testvg" successfully created

###创建lv

-L:指定lv大小

-n:指定lv名称

[root@localhost ~]# lvcreate -L 5G -n testlv testvg
  Logical volume "testlv" created.

###格式化testlv

-t:指定文件系统

-L:指定LABEL

[root@localhost ~]# mke2fs -t ext4 -L testlvm /dev/testvg/testlv

###挂载目录

[root@localhost ~]# touch /users

[root@localhost ~]# mount /dev/testvg/testlv /users 

###创建所有信息

##物理卷信息(pv)

[root@localhost /]# pvs /dev/sd{b,c}1
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb1  testvg lvm2 a--u 10.00g  5.00g
  /dev/sdc1  testvg lvm2 a--u 10.00g 10.00g

##卷组信息(vg

[root@localhost /]# vgs /dev/testvg
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   1   0 wz--n- 20.00g 15.00g

##逻辑卷信息(lv)

[root@localhost /]# lvs /dev/testvg/testlv 
  LV     VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao---- 5.00g

2.新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录

###新建用户

-d:指定家目录

[root@localhost users]# useradd -d /users/archlinux archlinux
[root@localhost users]# getent passwd archlinux
archlinux:x:501:501::/users/archlinux:/bin/bash

###复制pam.d 目录到用户家目录

[root@localhost ~]# cp -r /etc/pam.d /users/archlinux/
[root@localhost ~]# ls /users/archlinux/
pam.d

3.扩展testlv至7G,要求archlinux用户的文件不能丢失;

####查看原逻辑分区

[root@localhost ~]# lvs /dev/testvg/testlv
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-ao----  5.00g

####扩展逻辑分区

    -L:指定扩展的大小

    +2G:在原有的5G上增加2G

[root@localhost ~]#lvextend -L +2G /dev/testvg/testlv

###发现实际容量并没有变化,因为我们的系统还不认识刚刚添加进来的磁盘的文件系统,所以还需要对文件系统进行扩容

    [root@localhost ~]#resize2fs /dev/testvg/testlv
    [root@localhost ~]# lvs  /dev/testvg/testlv
      LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      testlv testvg -wi-ao----  7.00g

###查看分区是否增加容量,如我们没有使用resize2fs 对文件系统进行扩容,此大小还是原有大小5G

    [root@localhost pam.d]# df -TH
    Filesystem           Type   Size  Used Avail Use% Mounted on
    /dev/mapper/vg0-root ext4    22G  352M   20G   2% /
    tmpfs                tmpfs  515M     0  515M   0% /dev/shm
    /dev/sda1            ext4   199M   35M  154M  19% /boot
    /dev/mapper/vg0-usr  ext4    11G  2.1G  7.9G  21% /usr
    /dev/mapper/vg0-var  ext4    22G  122M   20G   1% /var
    /dev/mapper/testvg-testlv
                         ext4   7.3G   13M  6.9G   1% /users

###验证

[root@localhost pam.d]# du -sh
204K.
[root@localhost pam.d]# pwd
/etc/pam.d
[root@localhost pam.d]# cd /users/archlinux/pam.d/
[root@localhost pam.d]# du -sh
204K.
[root@localhost pam.d]# pwd
/users/archlinux/pam.d

4.收缩testlv至3G,要求archlinux用户的文件不能丢失

缩减逻辑卷(lv)

lvreduce

先缩减内部文件系统大小(逻辑边界)到指定大小,再缩减物理大小

     1.卸载文件系统:

        [root@localhost ~]# umount /dev/testvg/testlv

    2.文件系统强制检测

    列如:e2fsck -f /dev/VG_NAME/LV_NAME

        [root@localhost ~]# e2fsck -f /dev/testvg/testlv
        e2fsck 1.41.12 (17-May-2010)
        .......

     3.缩减文件系统逻辑边界(缩减至多大)

        例:resize2fs  /dev/VG_name/LV_NAME #[mMgGtT]

    [root@localhost ~]# resize2fs /dev/testvg/testlv 3G
        resize2fs 1.41.12 (17-May-2010)
        Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks.
        The filesystem on /dev/testvg/testlv is now 786432 blocks long.

    4).再次执行缩减

         lvreduce -L [-]num[mMgGtT]  /dev/VG-name/LV-name

         -:加-号代表在原有基础上减少多少,不带-号则代表减少到多少

         如:原有5G,现要缩减到2G

         1.加-号,#lvextend  -L   -3G    /dev/vg1/lv1

         2.不加-号,#lvextend  -L   2G    /dev/vg1/lv1

  [root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv 
          WARNING: Reducing active logical volume to 3.00 GiB.
          THIS MAY DESTROY YOUR DATA (filesystem etc.)
        Do you really want to reduce testvg/testlv? [y/n]: y
          Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
          Logical volume testlv successfully resized.

    5).mount 重新挂载

        [root@localhost ~]# mount /dev/testvg/testlv /users/

###验证

[root@localhost ~]# du -sh /etc/pam.d
204K/etc/pam.d
[root@localhost ~]# du -sh /users/archlinux/pam.d
204K/users/archlinux/pam.d
[root@localhost ~]#

5.对testlv创建快照,并尝试基于快照备份数据,验证快照的功能

快照:snapshot

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

lvcreate -L  size  -p  权限(r,rw) -s 创建快照卷   -n  快照卷名称   原lv卷

    -L:变化量大小,原卷和快照卷的大小变化

[root@localhost ~]# lvcreate -s -L 1G -p r -n lvsnap /dev/testvg/testlv 
  Logical volume "lvsnap" created.
[root@localhost users]# mount /dev/testvg/lvsnap /testdir/snap/
mount: block device /dev/mapper/testvg-lvsnap is write-protected, mounting read-only
[root@localhost users]# ls
aaa  abcd  archlinux  lost+found
[root@localhost users]# ls /testdir/snap/
archlinux  lost+found
[root@localhost users]# touch abc 
[root@localhost users]# ls /testdir/snap/
archlinux  lost+found

dd命令:convert and  copy file

    用法:dd  if=/path/from/src  of=/path/to/dest

        bs=num  复制单元大小block size(单位字节)

        count=num  :复制多少个bs

#dd  if=/etc/fstab of=/tmp/fstab
#dd  if=/etc/fstab of=/tmp/fstab  bs=1 count=100

磁盘复制:

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

备份MBR:

    dd if=/dev/sda  of=/tmp/mbr_bak bs=512 count=1

清除磁盘分区:

    # dd if=/dev/zero  of=/dev/sda bs=512 count=1

破坏mbr的bootloader:

   bs=256


原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/41107

(0)
LiiLii
上一篇 2016-08-29
下一篇 2016-08-29

相关推荐

  • 系统启动和内核管理以及几个重要实验

    Centos启动流程:     1.加载BIOS的硬件信息,获取第一个启动设备     2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息     3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备 &n…

    Linux干货 2017-05-15
  • 用户操作详解(附图)

                    关于用户和组的基本操作命令     在linux的操作系统中,对于用户以及组的配置是及其常用的和重要的,其中包括了对于用户的添加,删除以及修改用户的…

    Linux干货 2016-08-05
  • 文本处理工具

    文件 查看命令:cat, tac,revcat [OPTION]… [FILE]…-E: 显示行结束符$-n: 对显示出的每一行进行 编号-A :显示所有控制符-b: : 非空行编号-s :压缩连续的空行成一行 分页查看文件内容more: 分页查看文件more [OPTIONS…] FILE…-d: 显示翻页及…

    Linux干货 2017-03-17
  • 第三周作业

    1.列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# who | cut -d' ' -f1 | sort -u 2.取出最后登录到当前系统的用户的相关信息。 […

    Linux干货 2017-01-04
  • Docker 之初次体验

    一、Docker 简介  lxc linux container,openvz  容器中各虚拟机只有一个内核,而是多个用户空间  在库中完成虚拟化,比如wine 或者在windows中运行bash  在应用程序的运行级别提供虚拟化,比如jvm   pstree , pid 为1 的进程  …

    Linux干货 2015-01-16
  • bash脚本编程实例

    bash脚本编程实例 1.写一个脚本 接受一个以上文件路径作为参数 显示每个文件拥有的行数 总结说明本次共为几个文件统计了其行数 #!/bin/bash # read -p “please input some paths:” paths if [ -z $paths ];then echo “There are not any paths inputtin…

    Linux干货 2017-08-14

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-29 15:17

    文章对lvm知识把我的很全面,同时通过具体操作对此命令进行了练习,但是前面的命令和选项连在一起了,这需要作者多加注意。同时需要注意的是lvm对于数据的物理备份是很关键的,需要多加练习,熟练掌握。