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三者之间的关系。如下图:
注:物理卷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: 复制