这篇文章介绍的是利用SSD给HDD做LVM Cache加速,SSD容量小但是速度快,HDD容量大但是延迟高,我们可以利用一个小SSD给HDD缓存加速访问速度。
LVM存储池
- 系统已安装好并分好区如下所示,其中sda为HDD,sdb为SSD
- SSD上除了已分配的系统root、home之外,还有少量空间富裕
- HDD大容量硬盘做数据盘挂载到/var上,SSD富裕部分做Cache
1 2 3 4 5 6 7 8 9 10 11
| clhu@G7:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk └─sda1 8:1 0 931.5G 0 part sdb 8:16 0 477G 0 disk ├─sdb1 8:17 0 512M 0 part /boot/efi ├─sdb2 8:18 0 2G 0 part /boot ├─sdb3 8:19 0 32G 0 part [SWAP] ├─sdb4 8:20 0 100G 0 part /home ├─sdb5 8:21 0 60G 0 part / └─sdb6 8:22 0 282.4G 0 part
|
添加物理卷
1 2
| sudo pvcreate /dev/sda1 sudo pvcreate /dev/sdb6
|
添加卷组g7
1 2
| sudo vgcreate g7 /dev/sda1 sudo vgextend g7 /dev/sdb6
|
添加逻辑卷
var为存储卷,cache为缓存卷,meta为缓冲卷索引,其中cache:meta不能大于1000:1,meta最小为8M。最后要注意的是,不要分配完pv内所有空间,要留一点给lvm创建自己的元数据索引。
1 2 3
| sudo lvcreate -l 100%FREE -n var g7 /dev/sda1 sudo lvcreate -L 280G -n cache g7 /dev/sdb6 sudo lvcreate -L 300M -n meta g7 /dev/sdb6
|
添加缓存池
注意meta和cache顺序
1
| sudo lvconvert --type cache-pool --poolmetadata g7/meta g7/cache
|
绑定缓存池与存储卷
- writeback会在写入cache完成后,再写入var中
- writethrough会在写入cache的同时,写入var,写入var慢于cache,writethrough写入较慢,但数据不易丢失
1
| sudo lvconvert --type cache --cachepool g7/cache --cachemode writethrough g7/var
|
中间成果
应该可以看到如下所示结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| clhu@G7:~$ sudo pvs -a PV VG Fmt Attr PSize PFree /dev/g7/var --- 0 0 /dev/sda1 g7 lvm2 a-- <931.51g 0 /dev/sdb1 --- 0 0 /dev/sdb2 --- 0 0 /dev/sdb3 --- 0 0 /dev/sdb4 --- 0 0 /dev/sdb5 --- 0 0 /dev/sdb6 g7 lvm2 a-- <282.44g 1.85g clhu@G7:~$ sudo lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert var g7 Cwi-aoC--- <931.51g [cache] [var_corig] 1.13 3.61 0.00 clhu@G7:~$ sudo lvs -a LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert [cache] g7 Cwi---C--- 280.00g 1.14 3.61 0.00 [cache_cdata] g7 Cwi-ao---- 280.00g [cache_cmeta] g7 ewi-ao---- 300.00m var g7 Cwi-aoC--- <931.51g [cache] [var_corig] 1.14 3.61 0.00 [var_corig] g7 owi-aoC--- <931.51g [lvol0_pmspare] g7 ewi------- 300.00m
|
格式化
此时g7/var
在系统中被映射为/dev/mapper/g7-var
,它可以被视作一块未格式化的新盘,下面开始格式化
1
| sudo mkfs.ext4 /dev/mapper/g7-var
|
安装缓存工具包
否则在重新开机的时候会发现系统无法识别新挂载的/var
1
| sudo apt install -y thin-provisioning-tools
|
挂载/var
拷贝/var到新盘中
这一步是因为我们希望把数据盘挂载在`/var`上,需要迁移已有的/var上的数据,否则可以跳过这一步
1 2 3 4 5 6 7 8 9
| sudo mkdir -p /mnt/var sudo mount /dev/mapper/g7-var /mnt/var
sudo rsync -avHPSAX /var/ /mnt/var/
sudo diff -r /var/ /mnt/var/
sudo umount /mnt/var
|
修改fstab
在fstab末尾加上/var的挂载
1
| /dev/mapper/g7-var /var ext4 defaults 0 0
|
挂载/var到新盘上
1 2 3
| sudo mv /var /var_old sudo mkdir /var sudo mount /var
|
此时新盘应该已经挂载好了/var,查看mount命令应如下所示
1 2
| clhu@G7:~$ mount /dev/mapper/g7-var on /var type ext4 (rw,relatime,stripe=80)
|
重启
1 2 3 4
| sudo mount
sudo reboot
|
最终成果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| clhu@G7:~$ df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sdb5 ext4 59G 5.7G 51G 11% / /dev/sdb2 ext4 2.0G 168M 1.7G 10% /boot /dev/sdb4 ext4 98G 92M 93G 1% /home /dev/sdb1 vfat 511M 6.1M 505M 2% /boot/efi /dev/mapper/g7-var ext4 916G 1.1G 869G 1% /var clhu@G7:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk └─sda1 8:1 0 931.5G 0 part └─g7-var_corig 253:2 0 931.5G 0 lvm └─g7-var 253:3 0 931.5G 0 lvm /var sdb 8:16 0 477G 0 disk ├─sdb1 8:17 0 512M 0 part /boot/efi ├─sdb2 8:18 0 2G 0 part /boot ├─sdb3 8:19 0 32G 0 part [SWAP] ├─sdb4 8:20 0 100G 0 part /home ├─sdb5 8:21 0 60G 0 part / └─sdb6 8:22 0 282.4G 0 part ├─g7-cache_cvar 253:0 0 280G 0 lvm │ └─g7-var 253:3 0 931.5G 0 lvm /var └─g7-cache_cmeta 253:1 0 300M 0 lvm └─g7-var 253:3 0 931.5G 0 lvm /var
|
参考链接