SSD+HDD 最佳实践
我最近买了一块新的 250G 的固态硬盘,打算用来安装 Arch Linux,但是自己原来已经有 一块 1T 的 HDD,担心容量不足,以及本着物尽其用的原则,打算两块硬盘一起用。现在想 实现最佳的分区方案,即可以充分利用好 SSD 的速度以及 HDD 的容量。但是自己心中但是 感觉自己分区方案不是最佳实践,所以在实施分区之前就在 Reddit 和 V2ex 上各发了一个 贴子,跟社区的 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
参考
- https://wiki.archlinux.org/index.php/LVM
- https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) Enjoy Linux, Enjoy Tweaking :)