把Ubuntu系统安装在LVM上并且添加SSD做cache加速
把--cachemode 改为了writeback 后,写入速度有了大幅提高,和SSD几乎一样的。但是注意,这样做有数据丢失的风险。
原文中的 --cachemode 是设为 writethrough 的,如果已经跟着我的原文设置了的,可以用下面命令更改这个设置:
sudo lvchange --cachemode writeback MyVg/root
更改后的 Bonnie++ 测试成绩:
Version 1.98 ------Sequential Output------ --Sequential Input- --Random-
-Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Name:Size etc /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
ubuntu-d-lvm 15664M 327k 96 463m 88 262m 53 1112k 89 642m 80 +++++ +++
Latency 27652us 196ms 160ms 7894us 4781us 1972us
Version 1.98 ------Sequential Create------ --------Random Create--------
ubuntu-d-lvm-2g -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP
16 0 41 +++++ +++ 3072 58 +++++ +++ +++++ +++ +++++ +++
Latency 302us 381us 539us 188us 32us 339us
Block Write 463MB, 几乎和SSD一样了。
前段时间看到一篇介绍如何为LVM添加SSD作为cache加速的文章,不禁为之拍案叫绝。这么好的东西我之前怎么不知道呢!!!
顺带学习了一下LVM相关的知识 《LVM 命令参考》,LVM的命令很多,但是还是很容易理解的。也找到了@春之叔 这篇文章的英文版本 -- Redhat上关于创建cache LV的介绍:
为什么我对这个技术怎么感兴趣呢?
这里要交待一下背景,我有一台老电脑,Q45主板,Intel Q9500 四核CPU,8G DDR。因为机箱很大,其他地方不要了的垃圾就往里面一扔。所以它有:
让我郁闷的是 它的主板太老,不支持PCIe的启动,也就是说我不能把系统安装在SSD上,而那几块机械硬盘的速度都非常慢,装什么系统都让我觉得十分不爽。(Windows上可以在SSD上开启ReadyBoost 来给机械盘加速,但是性能几乎没有提升)
看完上面这些LVM的介绍,我简直就像发现了新大陆一样:有了LVM我就可以把所有这些乱七八糟的盘合并成一个2T的逻辑盘,然后用整个500G的SSD给它加速。如果速度够快我就可以用它做编译服务器了,耶!!!
开始操作
先安装一个Ubuntu,选硬盘的时候勾选LVM选项,它会自动在第一个硬盘上创建一个卷组vgubuntu,里面有两个逻辑卷root和swap。照着上面的两篇文章,添加两个逻辑卷cache和meta,然后把它绑定到root卷。
一路都很顺利,然后重启。What?!!!
开不了机了,在座的各位有懂 grub 命令的吗? 我只会一个命令“exit”。
去春之叔的文章里提问也没有人理我
只好自己研究了......
经过一番研究(好几天过去了),原来跟 GRUB 对 LVM 的支持有关系,改进的方法有两种:
改一堆GRUB里的设置,使它支持LVM,并找到相应的逻辑卷
把/boot目录放到LVM外面来
以我的水平当然使用第二种方法了。
Ubuntu的安装程序可以选择LVM安装,但是它只会把/boot放在LVM里面。我们需要点"Try Ubuntu"来自己创建相应的分区。
手工创建EFI和Boot分区
这个可以用GPartEd,也可以用fdisk。先建一个EFI分区
sudo fdisk /dev/sda
n
p
1
<use default first sector>
+512M
t
ef (不知道选啥code 可以敲L看一下,这里选ef 表示 EFI 分区)
w
再建一个分区给/boot 用
sudo fdisk /dev/sda
n
p
<use default 2>
<use default first sector>
+2G
w
再把剩下的所有空间建成一个分区,格式用格式代码8e,FDISK就会把它设成一个LVM的PV(物理卷)。
sudo fdisk /dev/sda
n
p
<use default 3>
<use default first sector>
<use default last sector>
t
<select patition 3>
8e (不知道选啥可以敲 L 看一下,这里写8e 表示 LVM 分区)
w
上面这个命令相当于把 PV(物理卷)也已经建好了,我们直接创建VG(卷组)就好。
sudo vgcreate MyVg /dev/sda1
sudo lvcreate -n swap -L 2G MyVg
sudo lvcreate -n root -l 100%VG MyVg
这里我们建了一个名为“MyVg”的卷组,然后添加了两个逻辑卷:swap和root。这里有个小技巧,建swap的时候用的参数 -L,后面跟具体大小;建root的时候用的 -l,后面跟百分比把所有空间用完。
好了 现在可以启动Ubuntu的安装程序了,在安装类型(Installation Type)里选择 Something Else。
然后这里要把每一个盘都点一下 Change,手工改一下的它的Type和MountPoint。
sda1 设为efi
sda2 设为ext4,mount to /boot
MyVg/swap 设为 swap
MyVg/root 设为ext4,mount to /
开始安装吧。
安装好了以后 基本上就跟着春之叔的文章操作,把SSD也转成PV,加入MyVg,然后在它上面建两个LV(逻辑卷)一个叫cache,一个叫meta。然后进行绑定。
先把SSD也转换成LVM格式
sudo fdisk /dev/nvme0n1
d (如果有必要先删除所有现有分区)
n
p
<use default patition number>
<use default first sector>
<use default last sector>
t
8e
w
然后把SSD加入 M'y'VG
sudo vgextend MyVg /dev/nvme0n1p1
sudo lvcreate -n lv_cache -L 470G MyVg /dev/nvme0n1p1
sudo lvcreate -n lv_meta -l 100%VG MyVg /dev/nvme0n1p1
前面的链接文章里要求 cache:meta 不小于 1000:1,我这里把500G里的 470G的空间给了cache,剩下的空间100%(大约10G左右)给了meta,这样算下来差不多100:2了。
sudo lvconvert --type cache-pool --cachemode writethrough --poolmetadata MyVg/lv_meta MyVg/lv_cache
sudo lvconvert --type cache --cachepool MyVg/lv_cache MyVg/root
有可能在做绑定的过程中它会报错,说没有空间了。因为它需要一个额外的卷来存放卷管理数据。而我在前面的命令里把剩余空间全部分给 my_vg/root 了。这时候需要用到 lvreduce 命令
sudo lvreduce MyVg/root -L-512M -r
然后再操作一遍绑定cache的命令,应该就好了。
最后看到这句话应该就是大功告成了
Good Luck!!!
下面我们来测试一下各种盘的 Disk IO 速度吧
测试方法:Bonnie++
sudo apt install bonnie++
测试比较的对象:HDD;SSD;LVM-On-HDD;LVM+SSD-Cache
Bonnie的测试方法很简单,
bonnie++ -d <后面加上一个你要测试盘下的一个目录就好>
测试的结果有些遗憾,在写入上没有作用,反而有所降低,在读取上有显著提升,但是和SSD还是有很大差距。
最后
我的方法是把/boot移出LVM的,如果有完美主义者希望/boot也能被cache加速,或者想把现有的LVM移到一个有cache的LVM。可以参考下面的文章。
继而研究一下LVM的灾难恢复。如果系统是安装在LVM上的,恢复起来那是相当的困难啊,而且是在备份了LVM配置的情况下。所以一般专家都是不建议把系统安装在LVM上的。LVM上的任意一个硬盘起不来,整个LVM就不能起来,LVM起不来,系统也就起不来了。










校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案