具有加密 LVM 的混合 SSD+HDD 设置

具有加密 LVM 的混合 SSD+HDD 设置

在任何人给出简单答案之前,我的 SSD 是不是大到足以容纳所有东西。我的/home充满了数据、文档和虚拟机,大约。 720GB。我不想买更大的SSD。

现在的SSD只是一块140GB的SATA磁盘/dev/sda。我的硬盘(现在/dev/sdb)是另一回事。容量为 2 TB。 HDD 当前装有 Linux 安装,由于一些不相关的原因,我需要用旧的忠实 Debian 安装替换它。该系统有点像野兽(16 核,32 GB RAM),并且使用加密的 LVM。

(这样做的原因与性能无关。由于我当前的发行版(基本操作系统)做出的决定,我在升级方面陷入了死胡同,我终于找到了一些时间来最终做到这一点。这篇文章不是为了开始发行版火焰大战或讨论Elementary OS 6是否是一个不错的选择,因为我相信安装一次并永久升级的方法,我也没有足够的时间在Arch和其他发行版上投入时间。很长一段时间(15 年以上)我一直是一个善于获取信息的人,并且计划保持这种状态,很高兴有不同的选择适合你。)

所以,回到这个问题,由于无论如何我都要进行新安装,所以似乎是使用 SSD 加速的好时机。

当然,由于写入周期限制,尽管近年来它们已经变得更好,但我只想将那些实际上受益最大、同时造成磨损最少的分区放在 SSD 上。我的预感是分区会进行大量读取,但不会进行写入。一组好的初始选择似乎是/boot//usr/local/opt

自从 18 年前我托管 Slackware 系统以来,我一直将我的/tmp/var/log放在单独的分区上。好习惯很难改掉。

以下是一个好的计划吗:

/boot 1GB SSD
/boot/efi 650 M SSD
/ 50 GB SSD
/usr/local 50 GB SSD
/opt 38 GB SSD
swap 64 GB HD
/var/log 20 GB HD
/tmp 20 GB HD
/home 1.89 TB HD

请提出任何更改建议。一件可能相关的事情是,我还在虚拟机中运行 Windows 10,以应对极少数需要本机 Microsoft Word 安装的情况。将 docker 或 kvm 映像放在自己单独的分区上是否值得?将其中一项放在 SSD 上是否有可能克服人们所看到的一点滞后?即使镜像位于 SSD 上,如何确保 docker 日志记录仍保留在 HD 上?

答案1

这是我分享经验的好地方。

我的 HP ProBook 上安装了 Gentoo,在 SSD+HDD 上设置了非常自定义的文件系统。这是我现在正在写这篇文章的系统。

SSD (sda) 有三个 GPT 分区,HDD (sdb) 有两个。

SSD上的第一个分区(sda1),127M是ESP,它也是承载 grub 配置、内核和 initramfs 的引导分区。我没有 /boot/efi 来挂载 ESP,我的 /boot 已经是一个 ESP 并且包含 /boot/EFI 和 /boot/grub 等。这没有问题。

HDD 上的第一个分区 (sdb1),127M 未使用。它的目的是成为“放置 ESP 的备用空间”。

SSD 上的第二个分区 (sda2) 为 20G,是缓存设备,HDD 上的第二个分区 (sdb2) 填充了整个磁盘 (500G),是后端设备。这两者构成了一个缓存硬盘—bcache0。

这个 bcache0 是一个加密卷,也就是LVM里面的PV,称为pv1

SSD上的第三个分区(sda3),剩余空间,也是一个加密卷,里面是LVM PV,称为pv0。

这些pv0和pv1构成了左室容量VG。由于所有卷都已加密,我觉得这是安全的地方。 VG 有一个交换它被放置在 pv0 上并用于休眠(大小与 RAM 大小差不多),只读根再次在 pv0 上的文件系统,即 squashfs(当前大约 7G),以及r/w ext4 根覆盖也在 pv0 上并且没有剩余空间。这/家位于pv1上,但跨度约为300G,因此还剩下一些空间。

自定义 initramfs 脚本组装缓存、解锁加密、组装VG。它会挂载overlay,挂载squashfs,然后挂载overlay文件系统,其中下层是squashfs,上层是overlay中的目录。然后它重新排列挂载,这样在 switch_root 之后一切看起来都很好,然后切换根。

我成功地使用此设置一年半。升级非常方便,我像往常一样升级系统(emerge -av... @world),所有内容都放入覆盖层,然后我从升级后的根创建新的squashfs,然后pvmove旧的squashfs和覆盖层到硬盘(pv1)并为它们创建新卷在 SSD (pv0) 上。 init 脚本会识别更新的卷,并在组装根之前重命名所有内容,因此在重新启动后,新的卷集将接管根。但老的仍然在那里;要恢复升级,我只需清除覆盖并重新启动即可。我还在外部 HDD 上保留了旧的 squashfs(和存档的 /boot)的踪迹,因此我可以返回到以前的任何升级点。

该设置看起来非常复杂,因此我还使用脚本在 Live CD 环境中组装它,以防我需要修复某些问题。


关于你的计划。

我太贪心了,不愿意在 ESP+/boot 上浪费 1G + 650M。我为此只投入了 127M,比您计划的少 10 倍。这仍然太多了,因为它只使用了 23M!

我的根FS有大约20G的原始数据,包括一些游戏、STM32CubeIDE及其下载(大约3-4G)、包管理器数据库(portage)和其他一些巨大的blob。压缩成7G左右。访问速度很快,并且由于有squashfs,任何恶意者都很难闯入。

/var我觉得将或/usr/local/opt放入单独的分区没有任何好处。在我 20 多年的 Linux 经验中,我从未遇到过这有任何帮助的情况。事实恰恰相反:我当然希望它们全部一致且彼此相关,因此我认为将它们放在单个文件系统中会更容易。我将其称为“系统”或“根”,并将其作为一个整体进行管理(备份、轮换更新)。这就是为什么我从来没有遇到过“单独的/usr”之类的问题,并且我嘲笑那些这样做的人。

拥有/home一个单独的分区是值得的;备份策略有很大不同,文件系统的用途也完全不同。但是,请记住,这是/home您需要读取和写入许多小文件的地方,尤其是当您登录系统或启动应用程序(您的个人资料和配置)时。对于感知的机器响应能力而言,使用/homeSSD 比将系统安装在 SSD 上更重要!这就是为什么我使用缓存来增强我的 /home 体验。

答案2

我给你的建议是这样的

  • 不必担心大量读/写以及在何处或如何创建分区; linux 将使用 RAM 进行磁盘缓存,并且您有 32GB 的 RAM,而不是 1GB。
  • systemctl enable tmp.mount。这将/tmp使用内存而不是磁盘,这是正确的方法。
  • 我使用 RHEL/CentOS,它们在XFS文件系统上是默认的。我的分区方案如下

..

 Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        95M   10M   85M  11% /boot/efi
/dev/sda2       950M  237M  714M  25% /boot
/dev/sda3       3.5T  176G  3.4T   5% /
/dev/sdb1        18T  5.0T   13T  29% /data

我建议使用 XFS 或 EXT4 作为文件系统,您的大小显然会与我的不同。标准默认约定适用/home/于用户帐户;这可以/像我一样位于根分区下,或者您可以创建一个完整的单独磁盘分区(在任何磁盘上)/home 或者您可以将用户帐户放在指定的位置。在我的情况/etc/default/useraddHOME=/data/users,重点是只有我的帐户(作为管理员)位于 /home 下,所有用户帐户都位于我的 /data 卷下,这是许多磁盘的硬件突袭,但在您的情况下可以是一个单独的磁盘

在您学习困难的方法之前,现在就了解数据管理和组织。

如果系统处于任何类型的多用户工作环境(其中数据很重要),那么系统中至少总共有 3 个磁盘。一张用于操作系统的磁盘,如果它死了,您将重新安装操作系统,但不会在上面存储任何有价值的数据。第二个磁盘安装为/data,第三个磁盘安装为/bkup您以某种方式安装的位置(查看快照/data)尽可能频繁地从到复制所有数据,/bkup以防止数据磁盘损坏。您可以从任何磁盘上的任何分区挂载任何目录,linux 不关心,所以组织它最适合您的需要。我更喜欢让它尽可能简单。

即使镜像位于 SSD 上,如何确保 docker 日志记录仍保留在 HD 上

您将 docker (或任何)日志记录配置为写入任何位置,但它不会被下/var/log。因此,如果您预计必须保留大量日志,请找出哪个磁盘拥有最多的空间,这将是最实用的,它不必与根分区位于同一磁盘上。为了更好地说明这个概念:我在上面给出的分区方案作为示例,这 4 个分区方案中的每一个都可以位于不同的分区上磁盘如果我想要它,以及/usr从不同的磁盘或分区或/home任何/opt目录安装,并在 Linux 下使用 LUKS 加密对您有意义的任何内容(如果您没有在服务器上使用自加密磁盘)支持这一点。就您而言,我怀疑您将仅限于驱动器托架以及购买更大尺寸的额外磁盘/SSD 的能力。希望有帮助。

相关内容