zoukankan      html  css  js  c++  java
  • Linux LVM逻辑卷和快照

    LVM2(逻辑卷)

    Logical Volume Manager 第二个版本

    LVM原理图:

    PV:Physics Volume (物理磁盘的块设备)

    PE:Physics Extent(PV里的最小存储单元,和磁盘里的block概念类似)

    VG:Virtual Volume (多个PV组成的虚拟卷,空间大小等于下层的PV空间只和)

    LV:Logical Volume(逻辑卷。顶层用户使用的设备。是从VG划分出来的空间,分配给了LV,)

    LE:Logical Extent(PV里的PE,在LV里叫LE而已)

    LVM的目的:将多个磁盘组成一个逻辑设备。灵活的管理磁盘设备。实现按需增减磁盘空间,传统设备,很难增加空间。

    • 面向用户的是LV。用户不关心LV意外的东西。
    • 顶层的LV的空间大小是可以无损增加和减少的.(减少比较危险)
    • 当增加LV的空间,或者添加新的LV时,发现LV下面的VG空间不够了,就可以添加PV,来扩充VG的空间。
    • 最下层的PV也是可以移除的,但前提是里面的PE都移动到了别的PV上了,否则数据就会有损坏。

    查看centos中的LVM(逻辑卷)

    逻辑卷放在/dev/mapper/目录下。这个目录下放的是符号链接,真正的逻辑卷是/dev/dm-#

    centos6.10:/dev/vg_c610/目录下也是符号链接

    # ll /dev/mapper/
    crw-rw----. 1 root root 10, 58 Jan 31 14:27 control
    lrwxrwxrwx. 1 root root      7 Jan 31 14:27 vg_c610-lv_root -> ../dm-0
    lrwxrwxrwx. 1 root root      7 Jan 31 14:27 vg_c610-lv_swap -> ../dm-1
    # ll /dev/vg_c610/
    total 0
    lrwxrwxrwx. 1 root root 7 Jan 31 14:27 lv_root -> ../dm-0
    lrwxrwxrwx. 1 root root 7 Jan 31 14:27 lv_swap -> ../dm-1
    

    centos7 1810:/dev/centos/目录下也是符号链接

    # ll /dev/mapper/
    total 0
    lrwxrwxrwx. 1 root root       7 Feb  7 14:29 centos-home -> ../dm-2
    lrwxrwxrwx. 1 root root       7 Feb  7 14:29 centos-root -> ../dm-0
    lrwxrwxrwx. 1 root root       7 Feb  7 14:29 centos-swap -> ../dm-1
    # ll /dev/centos/
    total 0
    lrwxrwxrwx. 1 root root 7 Feb  7 14:29 home -> ../dm-2
    lrwxrwxrwx. 1 root root 7 Feb  7 14:29 root -> ../dm-0
    lrwxrwxrwx. 1 root root 7 Feb  7 14:29 swap -> ../dm-1
    

    安装centos操作系统时,如果不手动创建分区的话,自动创建的就是LVM。

    centos6:/dev/sda2就是Linux LVM,它里面有/dev/mapper/vg_c610-lv_swap和/dev/mapper/vg_c610-lv_root

    # fdisk -l
       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        1045     7875584   8e  Linux LVM
    
    Disk /dev/mapper/vg_c610-lv_root: 7205 MB, 7205814272 bytes
    255 heads, 63 sectors/track, 876 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/vg_c610-lv_swap: 855 MB, 855638016 bytes
    255 heads, 63 sectors/track, 104 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
    

    centos7:/dev/sda2就是Linux LVM,它里面有/dev/mapper/centos-root,/dev/mapper/centos-swap,/dev/mapper/centos-home

    # fdisk -l
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     2099199     1048576   83  Linux
    /dev/sda2         2099200   125829119    61864960   8e  Linux LVM
    
    
    Disk /dev/mapper/centos-root: 39.8 GB, 39766196224 bytes, 77668352 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk /dev/mapper/centos-swap: 4160 MB, 4160749568 bytes, 8126464 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    
    Disk /dev/mapper/centos-home: 19.4 GB, 19415433216 bytes, 37920768 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    

    创建LV,在centos6上试验。centos7上已经支持btrfs文件系统,btrfs文件系统自己就有类似逻辑卷的功能了。

    根据上图来看,要想创建LV,要先创建底层的PV和VG。

    1,使用fdisk创建3个分区,sdb1:10M;sdb2:20M;sdb3:30M。并修改各个分区的System成Linux LVM

       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1           2       15779   8e  Linux LVM
    /dev/sdb2               3           6       31620   8e  Linux LVM
    /dev/sdb3               7          11       39525   8e  Linux LVM
    

    2,告诉内核我创建了一个分区partx -a /dev/sdb

    3,创建PV,使用pv开头的命令

    # pv
    pvchange   pvck   pvcreate   pvdisplay  pvmove     pvremove   pvresize   pvs  pvscan  pv.sh
    
    • 创建PV:pvcreate。指定设备文件创建pv

      # pvcreate /dev/sdb1
        Physical volume "/dev/sdb1" successfully created
      
    • 删除PV:pvremove

      如果pv上已经有了vg,则需要先删除vg

      # pvremove /dev/sdb1
        Labels on physical volume "/dev/sdb1" successfully wiped
      
    • 把PV里的PE移动到别的PV:pvmove

      # pvmove /dev/sdb3
        No data to move for vg1
      
    • 扫描:pvscan

    • 检测:pvck

    • 简要信息显示:pvs

      # pvs /dev/sdb1
        PV         VG   Fmt  Attr PSize  PFree
        /dev/sdb1       lvm2 ---- 15.41m 15.41m
      
    • 详细信息显示:pvdisplay

      由于/dev/sdb1是新创建的,还没有把它加入到VG,所有VG没有。

      # pvdisplay /dev/sdb1
        "/dev/sdb1" is a new physical volume of "15.41 MiB"
        --- NEW Physical volume ---
        PV Name               /dev/sdb1
        VG Name
        PV Size               15.41 MiB
        Allocatable           NO
        PE Size               0
        Total PE              0
        Free PE               0
        Allocated PE          0
        PV UUID               8Zyix5-13OS-PYHf-ZmmT-hSiH-iCv4-8FJJ61
      

    4,创建VG,使用vg开头的命令

    # vg
    vgcfgbackup    vgck           vgdb           vgextend       vgmerge        vgremove       vgscan
    vgcfgrestore   vgconvert      vgdisplay      vgimport       vgmknodes      vgrename       vgsplit        vgchange       vgcreate       vgexport       vgimportclone  vgreduce       vgs
    
    • 创建VG:vgcreate。指定设备文件创建vg。

      创建vg1,并把/dev/sdb1 /dev/sdb2加入到vg1,PE的大小是2M。

      # vgcreate vg1 -s 2M /dev/sdb1 /dev/sdb2
        Physical volume "/dev/sdb2" successfully created
        Volume group "vg1" successfully created
      
    • 删除VG:vgremove

      删除vg前,先umount所有lv,然后删除所有lv

      # umount /dev/vg1/lv01
      # lvremove /dev/vg1/lv01
      Do you really want to remove active logical volume lv01? [y/n]: y
        Logical volume "lv01" successfully removed
      # vgremove vg1
        Volume group "vg1" successfully removed
      
    • 重命名VG:vgrename

    • 扩展VG空间:vgextend:就是往VG里再加一个PV。

      # vgextend vg1 /dev/sdb3
        Volume group "vg1" successfully extended
      
    • 缩减VG空间:vgreduce。缩减前要先移除PV

      # pvmove /dev/sdb3
        No data to move for vg1
      [root@c610 ~]# vgreduce vg1 /dev/sdb3
        Removed "/dev/sdb3" from volume group "vg1"
      [root@c610 ~]# vgdisplay vg1
        --- Volume group ---
        VG Name               vg1
        System ID
        Format                lvm2
        Metadata Areas        2
        Metadata Sequence No  3
        VG Access             read/write
        VG Status             resizable
        MAX LV                0
        Cur LV                0
        Open LV               0
        Max PV                0
        Cur PV                2
        Act PV                2
        VG Size               42.00 MiB
        PE Size               2.00 MiB
        Total PE              21
        Alloc PE / Size       0 / 0
        Free  PE / Size       21 / 42.00 MiB
        VG UUID               hTcQTz-djr2-F4wD-cFL2-AVdt-Hwwn-WC4rco
      
    • 切割VG:vgsplit

    • 扫描:vgscan

    • 检测:vgck

    • 简要信息显示:vgs

      # vgs vg1
        VG   #PV #LV #SN Attr   VSize  VFree
        vg1    2   0   0 wz--n- 42.00m 42.00m
      
    • 详细信息显示:vgdisplay

      # vgdisplay vg1
        --- Volume group ---
        VG Name               vg1
        System ID
        Format                lvm2
        Metadata Areas        2
        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                2
        Act PV                2
        VG Size               42.00 MiB
        PE Size               2.00 MiB
        Total PE              21
        Alloc PE / Size       0 / 0
        Free  PE / Size       21 / 42.00 MiB
        VG UUID               hTcQTz-djr2-F4wD-cFL2-AVdt-Hwwn-WC4rco
      

      再看看pv的状态:

      # pvs /dev/sdb*
        PV         VG   Fmt  Attr PSize  PFree
        /dev/sdb1  vg1  lvm2 a--u 14.00m 14.00m
        /dev/sdb2  vg1  lvm2 a--u 28.00m 28.00m
      # pvdisplay /dev/sdb*
        --- Physical volume ---
        PV Name               /dev/sdb1
        VG Name               vg1
        PV Size               15.41 MiB / not usable 1.41 MiB
        Allocatable           yes
        PE Size               2.00 MiB
        Total PE              7
        Free PE               7
        Allocated PE          0
        PV UUID               Z1Ahmt-8h29-a7Vw-2Ico-xJsv-GQop-dR5n7c
      
        --- Physical volume ---
        PV Name               /dev/sdb2
        VG Name               vg1
        PV Size               30.88 MiB / not usable 2.88 MiB
        Allocatable           yes
        PE Size               2.00 MiB
        Total PE              14
        Free PE               14
        Allocated PE          0
        PV UUID               328Wnd-hu1j-hqJl-DoYC-bHed-VNjI-F317fK
      

    5,创建LV,使用lv开头的命令

    # lv
    lvchange     lvdisplay    lvmchange    lvmdiskscan  lvmsadc      lvremove     lvs
    lvconvert    lvextend     lvmconf      lvmdump      lvmsar       lvrename     lvscan
    lvcreate     lvm          lvmconfig    lvmetad      lvreduce     lvresize
    
    • 创建LV:lvcreate

      指定大小:-L(单位mMgGtT)

      指定逻辑卷的名字:-n

      指定LE的数量:-l(小写L)

      指定在哪个VG上创建:VolumeGroup

      例子:在vg1上,创建一个12M,名字是lv01的lv

      # lvcreate -L 12M -n lv01 vg1
        Logical volume "lv01" created.
      

      创建lv成功后,在/dev/mapper下,就多一个vg1-lv01逻辑卷

      ll /dev/mapper/
      total 0
      crw-rw----. 1 root root 10, 58 Feb  9 07:01 control
      lrwxrwxrwx. 1 root root      7 Feb  9 07:40 vg1-lv01 -> ../dm-2
      lrwxrwxrwx. 1 root root      7 Feb  9 07:01 vg_c610-lv_root -> ../dm-0
      lrwxrwxrwx. 1 root root      7 Feb  9 07:01 vg_c610-lv_swap -> ../dm-
      

      有了逻辑卷,就可以当成正常的分区使用了。比如在分区里安装文件系统:

      # mkfs.ext4 -b 1024 -L MYL01 /dev/mapper/vg1-lv01
      mke2fs 1.41.12 (17-May-2010)
      Filesystem label=MYL01
      OS type: Linux
      Block size=1024 (log=0)
      Fragment size=1024 (log=0)
      Stride=0 blocks, Stripe width=0 blocks
      3072 inodes, 12288 blocks
      614 blocks (5.00%) reserved for the super user
      First data block=1
      Maximum filesystem blocks=12582912
      2 block groups
      8192 blocks per group, 8192 fragments per group
      1536 inodes per group
      Superblock backups stored on blocks:
              8193
      
      Writing inode tables: done
      Creating journal (1024 blocks): done
      Writing superblocks and filesystem accounting information: done
      
      This filesystem will be automatically checked every 30 mounts or
      180 days, whichever comes first.  Use tune2fs -c or -i to override.
      

      挂载:

      # mount /dev/mapper/vg1-lv01 /mnt
      # cp /etc/mtab /mnt
      # ls /mnt
      lost+found  mtab
      # mount
      /dev/mapper/vg_c610-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,rootcontext="system_u:object_r:tmpfs_t:s0")
      /dev/sda1 on /boot type ext4 (rw)
      none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
      /dev/mapper/vg1-lv01 on /mnt type ext4 (rw)
      
    • 简要显示:lvs

      12M大小的逻辑卷lv01

      # lvs /dev/vg1/lv01
        LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        lv01    vg1     -wi-ao----  12.00m
      
    • 显示详细信息:lvdisplay

      # lvdisplay /dev/vg1/lv01
        --- Logical volume ---
        LV Path                /dev/vg1/lv01
        LV Name                lv01
        VG Name                vg1
        LV UUID                xwToIt-5nEQ-Gcip-rtIQ-CftU-vPKS-KxRHNw
        LV Write Access        read/write
        LV Creation host, time c610, 2020-02-09 07:40:26 +0600
        LV Status              available
        # open                 1
        LV Size                12.00 MiB
        Current LE             6
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     256
        Block device           253:2
      
    • 扩展:lvextend(问题不大,但如果上面有重要数据,建议先备份后,再扩展)

      命令格式:lvextend -L [+]20M /dev/vg1/lv01

      如果使用+号,则是要增加多少;不使用+号,则直接增加到多少。

      在挂载的状态下,可以直接扩展。

      # mount
      /dev/mapper/vg1-lv01 on /mnt type ext4 (rw)
      # lvextend -L 20M /dev/vg1/lv01
        Size of logical volume vg1/lv01 changed from 12.00 MiB (6 extents) to 20.00 MiB (10 extents).
        Logical volume lv01 successfully resized.
      # lvs //dev/vg1/lv01
        LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        lv01 vg1  -wi-ao---- 20.00m
      # lvdisplay //dev/vg1/lv01
        --- Logical volume ---
        LV Path                /dev/vg1/lv01
        LV Name                lv01
        VG Name                vg1
        LV UUID                xwToIt-5nEQ-Gcip-rtIQ-CftU-vPKS-KxRHNw
        LV Write Access        read/write
        LV Creation host, time c610, 2020-02-09 07:40:26 +0600
        LV Status              available
        # open                 1
        LV Size                20.00 MiB
        Current LE             10
        Segments               2
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     256
        Block device           253:2
      

      但是使用df -lh命令发现分区大小没有变大

      # df -lh /dev/mapper/vg1-lv01
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg1-lv01   11M  110K   10M   2% /mnt
      

      虽然lv空间是大了,但是lv里面的文件系统不知道啊,所以要告诉里面的文件系统,我变大了,使用resize2fs /dev/vg1/lv01命令告诉。

      注意:resize2fs命令只适用于ext系列文件系统

      resize后,再用df查看,空间就变大了。

      # resize2fs /dev/vg1/lv01
      resize2fs 1.41.12 (17-May-2010)
      Filesystem at /dev/vg1/lv01 is mounted on /mnt; on-line resizing required
      old desc_blocks = 1, new_desc_blocks = 1
      Performing an on-line resize of /dev/vg1/lv01 to 20480 (1k) blocks.
      The filesystem on /dev/vg1/lv01 is now 20480 blocks long.
      
      # df -lh /dev/mapper/vg1-lv01
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg1-lv01   19M  110K   18M   1% /mnt
      
    • 缩减:lvreduce(出问题的可能性非常大,一定要先备份。)

      1,先卸载文件系统

      # umount /mnt
      

      2,强制检测,修复文件系统

      # e2fsck -f /dev/vg1/lv01
      e2fsck 1.41.12 (17-May-2010)
      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
      MYL01: 12/4608 files (8.3% non-contiguous), 1721/20480 blocks
      

      3,先缩减文件系统的大小(缩减后的大小,一定要能容纳下现有的内容)

      # resize2fs /dev/vg1/lv01 10M
      resize2fs 1.41.12 (17-May-2010)
      Resizing the filesystem on /dev/vg1/lv01 to 10240 (1k) blocks.
      The filesystem on /dev/vg1/lv01 is now 10240 blocks long.
      

      4,缩减lv的大小

      # lvreduce  -L 10M /dev/vg1/lv01
        WARNING: Reducing active logical volume to 10.00 MiB.
        THIS MAY DESTROY YOUR DATA (filesystem etc.)
      Do you really want to reduce vg1/lv01? [y/n]: y
        Size of logical volume vg1/lv01 changed from 20.00 MiB (10 extents) to 10.00 MiB (5 extents).
        Logical volume lv01 successfully resized.
      

      5,重新挂载

      # mount /dev/vg1/lv01 /mnt
      # df -lh
      Filesystem            Size  Used Avail Use% Mounted on
      /dev/mapper/vg_c610-lv_root
                            6.5G  2.1G  4.1G  34% /
      tmpfs                 939M     0  939M   0% /dev/shm
      /dev/sda1             477M   40M  412M   9% /boot
      /dev/mapper/vg1-lv01  8.7M  110K  8.2M   2% /mnt
      # lvs /dev/vg1/lv01
        LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
        lv01 vg1  -wi-ao---- 10.00m
      # lvdisplay /dev/vg1/lv01
        --- Logical volume ---
        LV Path                /dev/vg1/lv01
        LV Name                lv01
        VG Name                vg1
        LV UUID                xwToIt-5nEQ-Gcip-rtIQ-CftU-vPKS-KxRHNw
        LV Write Access        read/write
        LV Creation host, time c610, 2020-02-09 07:40:26 +0600
        LV Status              available
        # open                 1
        LV Size                10.00 MiB
        Current LE             5
        Segments               1
        Allocation             inherit
        Read ahead sectors     auto
        - currently set to     256
        Block device           253:2
      

      6,检测文件丢没丢

      # ll /mnt
      drwx------. 2 root root 12288 Feb  9 07:52 lost+found
      -rw-r--r--. 1 root root   320 Feb  9 07:56 mtab
      
    • 删除:lvremove

      # lvremove /dev/vg1/lv02
      Do you really want to remove active logical volume snap01? [y/n]: y
        Logical volume "snap01" successfully removed
      
    • 修改大小(是有局限性的):lvresize

    • 修改lv的配置文件:lvmconf

    LV的快照功能(snapshot)

    参考:https://blog.51cto.com/13570193/2073691

    原理:

    左边的图表示,LVM会在VG上预留一定的区域作为快照区,原本lv中存放着数据,同时快照区存放着lv中元数据,因此快照区大小不需要和原始lv一样的大小。在刚创建snapshot的时候,快照区中并不会真实地拷贝原始lv中的数据,只是记录了整个原始lv中的元数据,所以这个时间点快照区和原始lv共享文件系统的数据,即两边的数据一样。

    ​ 右边的图表示,当原始lv中的数据发生改变的时候,原始lv中的发生变化的PE的数据更新之前,会将数据真实地备份至快照区的一个PE中,如图中,A->new A之前,先将A备份至快照区的一个PE,然后lv中A才更新为new A,这样快照区会保存lv中PE发生变化之前的数据,这时候我们再访问快照区的内容仍然为创建snapshot那个时间点的时候lv中的数据,因此我们可以利用快照区进行备份和恢复。

    ​ 需要注意的是,由于快照区也有容量的限制,所以呢,当原始lv中发生变化的PE的数量超过快照区的PE的数量的时候,该快照就会立即失效。

    ​ 我们在创建快照区的时候,要考虑将来lv数据的变化量,以此来指定快照区的大小,一种解决办法是刚创建完快照之后,立即把快照区中的内容进行备份,这样就不用时刻考虑快照区会失效了,因为我们已经把他的数据备份走了。还有一种简单粗暴的方法就是创建一个和原始lv一样大小的快照区,这样就不用担心数据变化量的因素了。

    1,创建快照

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

    快照卷必须和被快照的卷放在同一个卷组(VG)上

    快照卷必须是只读的,所以使用:-p r。

    快照卷创建成功后,生成/dev/vg1/snap01.

    用lvs查看发现【sri-aos---】第一位是s,说明此lv是快照卷

    # lvcreate -s -p r -n snap01 /dev/vg1/lv01 -L 6M
      Logical volume "snap01" created.
    # ll /dev/vg1
    lrwxrwxrwx. 1 root root 7 Feb  9 09:33 lv01 -> ../dm-2
    lrwxrwxrwx. 1 root root 7 Feb  9 09:33 snap01 -> ../dm-5
    # lvs
      LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      lv01    vg1     owi-aos---  10.00m
      snap01  vg1     sri-aos---   6.00m      lv01   0.20
      lv_root vg_c610 -wi-ao----   6.71g
      lv_swap vg_c610 -wi-ao---- 816.00m
    # lvdisplay /dev/vg1/snap01
      --- Logical volume ---
      LV Path                /dev/vg1/snap01
      LV Name                snap01
      VG Name                vg1
      LV UUID                qi9z5f-YdeV-CjXR-MAck-zP33-T9xw-Il0yqG
      LV Write Access        read only
      LV Creation host, time c610, 2020-02-09 09:33:58 +0600
      LV snapshot status     active destination for lv01
      LV Status              available
      # open                 1
      LV Size                10.00 MiB
      Current LE             5
      COW-table size         6.00 MiB
      COW-table LE           3
      Allocated to snapshot  0.20%
      Snapshot chunk size    4.00 KiB
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           253:5
    

    2,创建后,必须挂载

    # mkdir /snap
    # mount /dev/vg1/snap01 /snap/
    mount: block device /dev/mapper/vg1-snap01 is write-protected, mounting read-only
    

    3,试验

    • 修改lv中的文件,快照卷里的文件,不会被修改(修改前把原文件复制到了快照卷)

      发现lv01挂载在/mnt;快照卷snap01挂载在/snap

      # mount
      /dev/mapper/vg1-lv01 on /mnt type ext4 (rw)
      /dev/mapper/vg1-snap01 on /snap type ext4 (ro)
      
      

      查看挂载目录下的文件

      # ll /mnt
      total 14
      drwx------. 2 root root 12288 Feb  9 07:52 lost+found
      -rw-r--r--. 1 root root   320 Feb  9 07:56 mtab
      # ll /snap/
      total 14
      drwx------. 2 root root 12288 Feb  9 07:52 lost+found
      -rw-r--r--. 1 root root   320 Feb  9 07:56 mtab
      
      

      修改lv中mtab的内容

      # echo "new line" >> /mnt/mtab
      # cat /mnt/mtab
      /dev/mapper/vg_c610-lv_root / ext4 rw 0 0
      proc /proc proc rw 0 0
      sysfs /sys sysfs rw 0 0
      devpts /dev/pts devpts rw,gid=5,mode=620 0 0
      tmpfs /dev/shm tmpfs rw,rootcontext="system_u:object_r:tmpfs_t:s0" 0 0
      /dev/sda1 /boot ext4 rw 0 0
      none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
      /dev/mapper/vg1-lv01 /mnt ext4 rw 0 0
      new line
      

      查看快照卷的文件内容,没有被修改。

      # cat /snap/mtab
      /dev/mapper/vg_c610-lv_root / ext4 rw 0 0
      proc /proc proc rw 0 0
      sysfs /sys sysfs rw 0 0
      devpts /dev/pts devpts rw,gid=5,mode=620 0 0
      tmpfs /dev/shm tmpfs rw,rootcontext="system_u:object_r:tmpfs_t:s0" 0 0
      /dev/sda1 /boot ext4 rw 0 0
      none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
      /dev/mapper/vg1-lv01 /mnt ext4 rw 0 0
      
    • 新建一个文件在lv中,快照卷里不会有新建的文件

      # touch /mnt/aa
      # ll /snap/
      drwx------. 2 root root 12288 Feb  9 07:52 lost+found
      -rw-r--r--. 1 root root   320 Feb  9 07:56 mtab
      
    • 在lv中删除,快照时存在的文件,快照卷里此文件不会被删除

      # rm -f /mnt/mtab
      # ll /snap/mtab
      -rw-r--r--. 1 root root 320 Feb  9 07:56 /snap/mtab
      

    4,快照不需要了后,删除快照

    • 卸载

      # umount /snap/
      
    • 删除快照卷

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

    底层拷贝

    命令:dd if=src of=dst bs=数字 count=数字

    复制源:if;复制先:of;复制的单个单元大小:bs;复制单元的数量:count

    cp命令是依赖文件系统的,dd命令不依赖文件系统,更底层,效率更高,而且可以不复制整个文件,可以按指定大小复制。

    例子:复制文件,单元大小为1K,复制100个单元,所以就是复制了100K。

    # dd if=/etc/mtab of=/root/mtab bs=1 count=100
    100+0 records in
    100+0 records out
    100 bytes (100 B) copied, 0.000594531 s, 168 kB/s
    # cat /root/mtab
    /dev/mapper/vg_c610-lv_root / ext4 rw 0 0
    proc /proc proc rw 0 0
    sysfs /sys sysfs rw 0 0
    # ll /root/mtab
    -rw-r--r--. 1 root root 100 Feb  9 12:01 /root/mtab
    

    dd最主要用途,磁盘拷贝,备份磁盘MBR,快速清除磁盘分区,清除磁盘的bootloader

    磁盘拷贝:

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

    备份磁盘MBR(MBR存放在磁盘的前512字节):

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

    快速清除磁盘分区:把磁盘的前512字节(MBR)全部变成0.

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

    保留分区,破环MBR中的bootloader(在MRR的前446字节)。

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

    /dev/zero是吐零机

    # c/c++ 学习互助QQ群:877684253 ![](https://img2018.cnblogs.com/blog/1414315/201811/1414315-20181106214320230-961379709.jpg) # 本人微信:xiaoshitou5854
  • 相关阅读:
    PG-日常管理
    PG-高可用(pgpool-Ⅱ)
    PG-基准测试
    PG-备份恢复
    PG-并发问题
    Go-常量
    Go-变量
    Oracle-11g升级PSU补丁
    Oracle-`sqlplus`工具使用技巧
    [CF1051F] The Shortest Statement
  • 原文地址:https://www.cnblogs.com/xiaoshiwang/p/12287074.html
Copyright © 2011-2022 走看看