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

本人微信:xiaoshitou5854

猜你喜欢

转载自www.cnblogs.com/xiaoshiwang/p/12287074.html
今日推荐