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