把Ubuntu系统安装在LVM上并且添加SSD做cache加速

2020-12-26 16:40:12 13点赞 65收藏 18评论

把--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加速的文章,不禁为之拍案叫绝。这么好的东西我之前怎么不知道呢!!!

Ubuntu Server使用LVM Cache机制为大容量机械硬盘加速(保姆级教程)小编注:此篇文章来自#原创新人#激励计划,新人发文前三篇文章,篇篇额外奖励50金币。参加超级新人计划活动,新人发文即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击查看活动详情追加修改(2020-10-1413:19:21):ubuntulvmcache官方文档地址最近用UbuntuSe春之叔| 17 评论21 收藏66查看详情

顺带学习了一下LVM相关的知识 《LVM 命令参考》,LVM的命令很多,但是还是很容易理解的。也找到了@春之叔 这篇文章的英文版本 -- Redhat上关于创建cache LV的介绍:

Creating LVM Cache Logical Volumesaccess.redhat.com去看看

为什么我对这个技术怎么感兴趣呢?

这里要交待一下背景,我有一台老电脑,Q45主板,Intel Q9500 四核CPU,8G DDR。因为机箱很大,其他地方不要了的垃圾就往里面一扔。所以它有:

  • 一块1T的笔记本硬盘

  • 3块 320G的台式机硬盘

  • 还有一个500G的M.2 SSD 用转接卡插在它的PCIe槽上

让我郁闷的是 它的主板太老,不支持PCIe的启动,也就是说我不能把系统安装在SSD上,而那几块机械硬盘的速度都非常慢,装什么系统都让我觉得十分不爽。(Windows上可以在SSD上开启ReadyBoost 来给机械盘加速,但是性能几乎没有提升)

看完上面这些LVM的介绍,我简直就像发现了新大陆一样:有了LVM我就可以把所有这些乱七八糟的盘合并成一个2T的逻辑盘,然后用整个500G的SSD给它加速。如果速度够快我就可以用它做编译服务器了,耶!!!

开始操作

先安装一个Ubuntu,选硬盘的时候勾选LVM选项,它会自动在第一个硬盘上创建一个卷组vgubuntu,里面有两个逻辑卷root和swap。照着上面的两篇文章,添加两个逻辑卷cache和meta,然后把它绑定到root卷。

一路都很顺利,然后重启。What?!!!

GRUB界面GRUB界面

开不了机了,在座的各位有懂 grub 命令的吗? 我只会一个命令“exit”。

去春之叔的文章里提问也没有人理我 把Ubuntu系统安装在LVM上并且添加SSD做cache加速


只好自己研究了......

经过一番研究(好几天过去了),原来跟 GRUB 对 LVM 的支持有关系,改进的方法有两种:

  1. 改一堆GRUB里的设置,使它支持LVM,并找到相应的逻辑卷

  2. 把/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的命令,应该就好了。

最后看到这句话应该就是大功告成了

It is now cachedIt is now cached

Good Luck!!!

下面我们来测试一下各种盘的 Disk IO 速度吧

测试方法:Bonnie++

sudo apt install bonnie++

测试比较的对象:HDD;SSD;LVM-On-HDD;LVM+SSD-Cache

Bonnie的测试方法很简单,

bonnie++ -d <后面加上一个你要测试盘下的一个目录就好>

LVM+SSD-CachedLVM+SSD-Cached

测试结果测试结果

相对SSD的性能表现(SSD为100%)相对SSD的性能表现(SSD为100%)

测试的结果有些遗憾,在写入上没有作用,反而有所降低,在读取上有显著提升,但是和SSD还是有很大差距。


最后

我的方法是把/boot移出LVM的,如果有完美主义者希望/boot也能被cache加速,或者想把现有的LVM移到一个有cache的LVM。可以参考下面的文章。

BootdevicetoLVM:Migratefromsingle-partitionbootdevicetoLVMinCentOS7Convert from a single partition boot device to LVM. FileSystem contains all of the files for Linux and user files into a system need a separate partitwww.linuxsysadmins.com去看看

继而研究一下LVM的灾难恢复。如果系统是安装在LVM上的,恢复起来那是相当的困难啊,而且是在备份了LVM配置的情况下。所以一般专家都是不建议把系统安装在LVM上的。LVM上的任意一个硬盘起不来,整个LVM就不能起来,LVM起不来,系统也就起不来了。


展开 收起
18评论

  • 精彩
  • 最新
  • writethrough会确保写入的数据同时写入磁盘和缓存;writeback则是先写入缓存,再后续从缓存写入磁盘。所以writethrough模式必然会性能下降,而writeback则有数据丢失的风险。

    校验提示文案

    提交
    谢谢指正,我后面会尝试一下。 我都用3个320G的硬盘组了个Raid0在用的人 还怕什么“数据丢失的风险”

    校验提示文案

    提交
    用bcache,前置缓存用两个ssd做raid1。快得很。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • Q9550配ssd加8g内存 一般家庭日常用完全无压力。。。

    校验提示文案

    提交
  • q9500没毛病,我依然在用,日常足够用。

    校验提示文案

    提交
  • 哈哈哈哈,这封面图,阿土伯够富了好不好

    校验提示文案

    提交
  • 备用,以后学习

    校验提示文案

    提交
  • 我用的q9505 无故躺枪 [撞墙]

    校验提示文案

    提交
  • 果然还有真么多人在用…我的是Q9300,大概10年了吧

    校验提示文案

    提交
  • 10年的电脑,q9550路过,平时上网,做CAd方案无压力

    校验提示文案

    提交
  • 使用Q8200的飘过,日常办公使用没有什么压力就是风扇噪音太大了。尤其是关机以后,感觉整个世界都安静了下来。

    校验提示文案

    提交
  • 我还在用Q8500

    校验提示文案

    提交
  • 8400没有排面吗

    校验提示文案

    提交
  • 装的centos8也是选LVM卷,因为当时觉得这是种可以无限堆的硬盘池,添硬盘方便。 [阴笑]

    校验提示文案

    提交
  • 有意思,g41+l5430+4Gddr2+80Gssd+500g机械,显卡GT440ddr5 512 ,pci千兆网卡,家用完全够

    校验提示文案

    提交
  • E8400刚刚升级9550的路过。

    校验提示文案

    提交
  • 巧了!我还在用G31+E7400

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
65
扫一下,分享更方便,购买更轻松