SSD HDD 双硬盘安装 Arch Linux

IO性能最高效探究

Created on 2017-09-26 04:08

SSD+HDD 最佳实践

我最近买了一块新的 250G 的固态硬盘,打算用来安装 Arch Linux,但是自己原来已经有 一块 1T 的 HDD,担心容量不足,以及本着物尽其用的原则,打算两块硬盘一起用。现在想 实现最佳的分区方案,即可以充分利用好 SSD 的速度以及 HDD 的容量。但是自己心中但是 感觉自己分区方案不是最佳实践,所以在实施分区之前就在 RedditV2ex 上各发了一个 贴子,跟社区的 Linux 用户一起讨论一下。其中绝大多数有建设性的建议都提到了 Cache, 我突然意识到之前自己似乎在一个误区,一直在考虑的是,什么样的路径对应怎么分区,但 是我可以组合来用嘛。正如一位朋友所言:

一个原则: 频繁读写的数据放高速存储 至于怎么叫频繁,得你自己定义了,每天都要开机关机的,那系统本身也算频繁数据,因此 一般家用机器都把系统安装在 SSD ;然而服务器极少开关机,因此系统不算频繁数据,而 是把数据库数据等真正服务频繁的放到 SSD ; home 目录虽然数据很多,但是很多情况下 都只是沉淀下来的个人数据。 因此这些麻烦的考虑,完全可以交给程序决定!!!于是早就有软件实现了自动把频繁数据 在 SSD Cache,沉淀数据写 HHD 的方案了

所以他给我提供了三个方案: bcache,lvmcache,EnhanceIO. Reddit 上的朋友也提到了 lvmcache. 我突然又意识到自己从一个误区走到了另外一个误区,在看了社区的朋友提供的 方案,我就一直在考虑如何高效组合地利用 SSD 和 HDD; 但是我最初的问题是想使用 SSD, 但是担心以后容量不够,扩展起来不容易,可能需要为整个根目录迁移数据。但是如果我使 用 lvm, 即使新增加一块硬盘,也是非常容易扩展的。之前的担忧自然都解决了。

LVM

最后我决定直接使用 LVM, 在 LVM 之上安装 Arch Linux, 以后容量不足,就可以直接再 把另外一块磁盘添加进来。可能有朋友对 LVM 不太了解,我在这里就简单介绍一下,详 情就需要自行去查看文档了。LVM 是逻辑卷管理器 (logical volume manager), 是 Linux 内核所特有的管理磁盘设备以及管理其他大容量存储设备的工具。简而言之,就是 Linux 内核使用 LVM 在存储设备上添加了一层抽象层,可以让用户更方便地进行存储的 管理。以 Arch wiki 上提到的例子说明,假如你有两块磁盘,总共3个分区:

Physical disks

Disk1 (/dev/sda):
	_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|Partition1 50GB (Physical volume) |Partition2 80GB (Physical volume)     |
|/dev/sda1                         |/dev/sda2                             |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |

Disk2 (/dev/sdb):
	_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
|Partition1 120GB (Physical volume)                 |
|/dev/sdb1                                          |
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _|

当你对磁盘进行操作的时候,就只能操作对应的分区,例如你想给 /media 目录划一个 200G 的分区,你就没办法实现了,因为单个磁盘最大的容量只有 130G,但是又无法把两 个磁盘合起来划分分区。但是,当你使用了 LVM:

LVM logical volumes

Volume Group1 (/dev/MyStorage/ = /dev/sda1 + /dev/sda2 + /dev/sdb1):
	_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
|Logical volume1 15GB  |Logical volume2 35GB      |Logical volume3 200GB               |
|/dev/MyStorage/rootvol|/dev/MyStorage/homevol    |/dev/MyStorage/mediavol             |
|_ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |

通过 LVM, 可以把两个磁盘 "拼" 在一次,组成一个单元(用 LVM 的术语来表述,就是一 个 VG(Volume group)),然后你不在对磁盘进行操作,因为 LVM 这个抽象层的存在,你操 作的是 VG(Volome group) 和 LV(Logical volume). 因此我可以轻易为 /media 划分一 个 200G 的分区 (用 LVM 的术语来表述,就是一个 LV(Logical Volume)). 所以话题再 回到我安装 Arch Linux 的话题上,因为我使用把 SSD 做成 LVM, 所以即使以后我容量 不足,我只需将我 1T 的 HDD 也做成 LVM, 添加到同一个 VG, 再使用 lvmcache, 还是 可以快乐地玩耍

小结

关于怎么使用 LVM 安装 Arch Linux,Arch Wiki 描述得非常仔细了,珠玉在前,我就不赘言了。我 之前也写了一篇关于然后安装 Arch Linux 的文章了,只是其中分区的部分变成了构建 LVM 。最后,展示一下我的 LVM 分区结果:

NAME                  MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                     8:0    0 232.9G  0 disk 
└─sda1                  8:1    0 228.9G  0 part 
├─volgroup-lvolroot 254:0    0   100G  0 lvm  /
└─volgroup-lvolhome 254:1    0 128.9G  0 lvm  /home
sdb                     8:16   0 931.5G  0 disk 
sdc                     8:32   1  14.7G  0 disk 
└─sdc4                  8:36   1  14.7G  0 part 
sr0                    11:0    1  1024M  0 rom 

参考