LVM揭秘



 lvm的中文叫逻辑卷,英文名字叫Logical Volume Manager,它有什么作用?


通过逻辑卷LVM可以有效的管理和分配磁盘空间,可以把分散的小分区组合成一个大的卷组,从卷组中分出需要的空间做出逻辑卷,这样使得磁盘扩容和缩减方便易用。还有着备份的功能,指的就是lvm快照。  



逻辑卷是怎么来的?

dm: device mapper,将一个或多个底层块设备组织成一个逻辑设备的模块;注:dm是内核的功能模块

/dev/dm-#   注:从0开始编号




这个逻辑设备的文件是什么? 

/dev/mapper/VG_NAME-LV_NAME  举例:/dev/mapper/vol0-root   注:逻辑卷的设备文件,标识一

或者

/dev/VG_NAME/LV_NAME    /dev/vol0/root    注:逻辑卷的设备文件,标识二      





怎样创建lvm呢?


首先我们来了解一下PE 、VG、 LVM三者之间的关系。如下图:

wKiom1b_fVjhl0LMAAdtJi8dEvM169.bmp 

注:物理卷pv组成卷组vg,而逻辑卷lvm在卷组vg上创建,大小不可以超过卷组。



怎样创建pv?

    pvcreate /dev/DEVICE:   举例:pvcreate /dev/sda{3,4,5}    创建pv

    pvs:简要pv信息显示

    pvdisplay:显示pv的详细信息



怎样创建vg?

    vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath    创建vg

    vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]  扩展vg

    vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...  缩减vg

    vgs 简要vg信息显示

    vgdisplay 显示vg的详细信息

    vgremove VolumeGroupName  注:删除某卷组


提出一个问题:如果你想把vg中的已存有数据的pv移除,该怎么办?

先做pvmove /dev/sda#   注:把pv的数据移动到其他pv,前提是剩下的pv有足够的空间存储转移的数据

然后vgreduce VolumeGroupName /dev/sda# 注:从某卷组中删除pv




怎样创建lv?


   lvcreate -L #[mMgGtT] -n NAME VolumeGroup      注: -L:lv指定大小 -n:lv名字

   lvremove /dev/VG_NAME/LV_NAME  扩展lv          注:先扩展物理边界,再扩展逻辑边界

   lvs 简要lv信息显示

   lvdisplay 显示lv的详细信息



1、对了,你创建完lv后,它就如同一个块设备。你需要创建文件系统,并挂载使用呢

举例:mke2fs -t ext4 -b 1024 /dev/myvg/mylv

      mount /dev/myvg/mylv /mnt



2、当你发现自己的lv不够用了,怎么办呢?别忘了它是可以伸缩的

扩展逻辑卷:

# lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME   注:先扩展物理边界

# resize2fs /dev/VG_NAME/LV_NAME                  注:再扩展逻辑边界



3、当你某个lv空间要不了那么大,你想缩减怎么办?

缩减逻辑卷:

# 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    再挂载使用  注意:缩减剩下的空间一定得能存储你的现有的数据


 





你的数据如果想要更安全,就需要在lv上创建快照:snapshot

格式:

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

注:快照卷的大小要能装下未来数据增长的空间






btrfs文件系统



Btrfs (B-tree, Butter FS, Better FS), GPL, Oracle, 2007, CoW; 

ext3/ext4, xfs


核心特性:

1、多物理卷支持:btrfs可由多个底层物理卷组成;支持RAID,以联机“添加”、“移除”,“修改”;

2、写时复制更新机制(CoW):复制、更新及替换指针,而非“就地”更新;

3、数据及元数据校验码:checksum

4、子卷:sub_volume

5、快照:支持快照的快照;

6、透明压缩:


文件系统创建:

mkfs.btrfs

-L 'LABEL'

-d <type>: raid0, raid1, raid5, raid6, raid10, single      注:数据存储跨多设备存储机制

-m <profile>: raid0, raid1, raid5, raid6, raid10, single, dup 注:原数据跨多设备存储机制

-O <feature>   特性

-O list-all: 列出支持的所有feature;

举例:1、mkfs.btrfs -L mydata /dev/sda{b,c} 创建btrfs,多块硬盘组成B-tree
      2、btrfs device add /dev/sdd /mydata   添加硬盘
      3、btrfs device delete /dev/sdd /mydata 移除硬盘,数据会自动转移
      4、btrf balance start-dconvert=raid1  /mydata 硬盘要够,不然不支持
      5、btrfs subrolume create /mydata/logs  创建子卷,logs就是子卷
      6、mount -o subvol=logs /dev/sdb /mnt 子卷挂载
        注意:父卷挂载,子卷就会被挂载。单独挂载子卷,父卷看不到
      7、btrfs subvolume delete /mydata/logs  删除子卷
      8、btrfs subvolume snapshot /mydata/logs /mydata/logs_snapshot
      也可以对文件做快照,利用了写时复制的功能

     


属性查看:

btrfs filesystem show 


挂载文件系统:

mount -t btrfs /dev/sdb MOUNT_POINT


透明压缩机制:

mount -o compress={lzo|zlib} DEVICE MOUNT_POINT


子命令:filesystem, device, balance, subvolume




&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

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


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


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


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


练习5:对testlv创建快照,并尝试基于快照备份数据,验正快照的功能;



文件系统挂载使用:

挂载光盘设备:

光盘设备文件:

IDE: /dev/hdc

SATA: /dev/sr0


符号链接文件:

/dev/cdrom

/dev/cdrw

/dev/dvd

/dev/dvdrw


mount -r /dev/cdrom /media/cdrom

umount /dev/cdrom


dd命令:convert and copy a file  底层复制命令

用法:

dd if=/PATH/FROM/SRC of=/PATH/TO/DEST 

bs=#:block size, 复制单元大小;

count=#:复制多少个bs;


磁盘拷贝:

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


备份MBR

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


破坏MBR中的bootloader:

dd if=/dev/zero of=/dev/sda bs=256 count=1


两个特殊设备:

/dev/null: 数据黑洞;

/dev/zero:吐零机;



dd: 复制