把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起不来,系统也就起不来了。
值友2852289022
校验提示文案
大尺度
校验提示文案
FireArk
校验提示文案
小万361
校验提示文案
情哥
校验提示文案
ZY余生有你
校验提示文案
OPENXBMC
校验提示文案
HIKELEX
校验提示文案
谁敢动我的牙
校验提示文案
krads
校验提示文案
值友5958074270
校验提示文案
焱炎火
校验提示文案
伯劳鸟
校验提示文案
ashhell
校验提示文案
转身不再回眸
校验提示文案
转身不再回眸
校验提示文案
ashhell
校验提示文案
伯劳鸟
校验提示文案
焱炎火
校验提示文案
值友5958074270
校验提示文案
krads
校验提示文案
值友2852289022
校验提示文案
谁敢动我的牙
校验提示文案
HIKELEX
校验提示文案
OPENXBMC
校验提示文案
ZY余生有你
校验提示文案
情哥
校验提示文案
大尺度
校验提示文案
小万361
校验提示文案
FireArk
校验提示文案