常规设置

常规设置

我有一台新机器,配有一个 128GB SSD 和两个 1TB HDD。SSD 上是操作系统,我最初的想法是将两个 HDD 放在 RAID 1 中以存储用户数据。

经过进一步的思考后,我想出了另外两种设置,但现在我很怀疑:)有人可以建议哪种设置最好吗?

1:单个 SSD 和 HDD 组成 RAID 1(最初的想法)

2:在 HDD 上创建 2 个分区(128GB 和 872GB)。将两个 872GB 放入 RAID 1,并使用 SSD 和一个 128GB HDD 分区创建另一个 RAID 1。

3:在 HDD(750/250)上创建 2 个分区,将 705GB 放入 RAID 1 中,并使用 2 个 250GB 作为备份,并将 SSD 自动快照到这些分区(之一)。

我认为两个主要问题是:

是否建议仅使用部分驱动器来创建 raid 阵列并积极使用该驱动器的其他部分,还是应始终使用整个磁盘?

是否建议使用 SSD 和 HDD 创建 raid 1 阵列,或者这会破坏 SSD 的整体速度优势?

答案1

我想在可能的解决方案池中添加不同的建议。我建议您根据以下情况进行设置文件系统' 子卷和快照功能与雙方 计划任务

设置它并不一定是一件小事,但很大程度上取决于您的技能和以前的经验。网上有很多文献可以帮助您。最终,您将获得一种非常灵活和快速的方法来定期备份您的 SSD,并且有很多选项可以创建最适合您需求的解决方案。

注意事项:任何形式的突袭都不能且不应该取代常规备份。(幸运的是,btrbk 可以轻松扩展到外部驱动器或 ssh 可访问的主机,请参阅它的手册

常规设置

我的建议的总体思路是使用 SSD 作为包含根和相关子卷的 btrfs 系统驱动器,并使用 btrfs raid1 中的两个 HDD 作为数据和备份驱动器。

结合 btrbk,您可以自动将系统 SSD 增量备份到备份 HDD。由于 HDD 设置为镜像,因此所有备份也将保持镜像状态。

此外,btrfs 发送和接收子卷的能力(btrbk 利用子卷进行备份)使您可以在系统和数据驱动器之间自由移动数据和备份。这样您就可以更改存储在快速 SSD 上的数据,同时始终维护所有数据的版本和镜像备份。

设置 btrfs

首先,您需要将 Ubuntu 重新安装到 SSD 上并选择 btrfs 作为根文件系统,或者将现有安装文件系统转换为 btrfs。这两种方法均在Ubuntu 社区关于 btrfs 的帮助页面,如果您刚刚开始在 Ubuntu 上使用 btrfs,那么这篇文章值得一读。

接下来,你需要使用以下命令将 HDD 转换为 btrfs raid1,其中/dev/sdx/dev/sdy是两个驱动器(这些驱动器上的所有数据都将丢失!)

mkfs.btrfs -d raid1 /dev/sdx /dev/sdy

如果您不熟悉快照或 btrfs,我建议您先熟悉文件夹、子卷和快照之间的区别,并在将任何实际数据写入您的 raid1 之前尝试一些命令。

您可以使用多种方式来组织数据,并且可以在 btrfs 内核 wiki 的系统管理员指南中找到一些示例。

一种方法是将 btrfs 根目录(subvolid 05)挂载到某处,并使用它来管理子卷和快照,并将所有数据存储在适当的子卷中,然后将其挂载到文件系统中的方便位置。这样,您就可以随意快照、移动、恢复和替换任何数据。

对于您的具体示例,这可能意味着以下内容(所有命令都应以 root 身份/使用 sudo 运行):

  • 将系统 btrfs 根目录 ( subvolid=0) 挂载到/btrfs/system
  • 将数据 btrfs raid1 root ( subvolid=0) 挂载到/btrfs/data

无需手动安装这些卷,只需将它们添加到您的文件系统( /etc/fstab) 后再挂载,因此它们也会在启动时挂载。我建议通过它们的 UUID 来挂载它们,您可以通过运行 来检索它们sudo btrfs filesystem show

UUID=<UUID of system> /btrfs/system btrfs defaults,subvolid=0 0 0
UUID=<UUID of data> /btrfs/data btrfs defaults,subvolid=0 0 0

现在使用以下命令安装它们:

sudo mkdir /btrfs
sudo mkdir /btrfs/data
sudo mount /btrfs/data
sudo mkdir /btrfs/system
sudo mount /btrfs/system

现在,您可以将任何可能需要的附加子卷添加到每个 btrfs 文件系统。Ubuntu 通常默认为您的根/( subvol=@) 和主目录/home( subvol=@home) 创建一个子卷。通常将/var/tmp转换为自己的子卷或创建特定于应用程序的子卷,例如/var/www/

我个人更喜欢将所有子卷保存在 btrfs 根目录中,然后使用 mount 和 fstab 条目将它们挂载到特定位置。

例如,要在 HDD raid1 上为你的音乐收藏创建一个子卷,我会执行以下操作:

btrfs subvolume create /btrfs/data/@music

然后我将使用以下 fstab 条目将其挂载到/music

UUID=<UUID of data> /music btrfs defaults,subvol=@music 0 0

btrbk 的设置

其次,您必须为想要快照并备份到 HDD raid 的子卷设置 btrbk。

作为关于如何定期备份@@home保留备份定期间隔历史记录的一个简单示例,您可以将以下内容写入/etc/btrbk.conf

# The long timestamp recommended for more then one snapshot a day
timestamp_format        long

# Set time spacing of snapshots kept on SSD
snapshot_preserve_min      2d
snapshot_preserve          7d 4w 3m

# Set time spacing of snapshots kept on HDD raid
target_preserve_min        no
target_preserve            8w *m

snapshot_dir               /btrfs/system/snapshots

volume /btrfs/system
  subvolume @
    target send-receive /btrfs/data/backup/

  subvolume @home
    target send-receive /btrfs/data/backup/

请阅读btrbk 文档了解详细信息。它还将解释如何从快照中恢复数据。

最后,你必须将 btrbk 添加到你的定时任务例如sudo crontab -e,要每天中午运行 btrbk 快照和备份,请添加以下行:

0 12 * * * /path/of/btrbk run

其他考虑因素

交换

虽然总体而言,交换空间在具有至少 8 GB RAM 的现代个人计算机系统中,仍有一些用例可以帮助您,尤其是当位于 SSD 上时,交换对性能的影响并不明显。因此,通常仍建议设置交换文件或分区。

话虽如此,btrfs 不支持交换文件。这意味着,如果您希望在系统上使用交换,则必须将部分 SSD 空间分配到单独的交换分区中。

btrfs SSD 检测

Btrfs 会自动检测安装的文件系统是否位于 SSD 上,并在这种情况下启用磨损均衡。

然而,这不再是必要的,因为现代 SSD 会自动进行磨损平衡,同时导致可用空间碎片化的问题。因此,我个人建议您使用该nossd选项安装 SSD。

更多详情请参阅btrfs 内核 维基

文件系统压缩

Btrfs 支持透明文件压缩。通过将该compress选项添加到挂载标志,它将对所有新写入的文件启用。

例如,为了对@music我之前用作示例的子卷启用压缩,我将把 fstab 条目更改为:

UUID=<UUID of data> /music btrfs defaults,compress,subvol=@music 0 0

要应用此更改,请不要忘记重新安装(卸载并再次安装)受影响的子卷。

对于大多数最新的计算机来说,在写入文件之前和读取文件之后压缩文件的开销通常可以忽略不计。启用压缩后,将大型但可压缩的文件写入较慢的磁盘可能会更快。

如果您担心速度,您也可以使用速度更快但效率较低的 LZO 压缩compress=lzo

更多详细信息请参阅btrfs 内核 维基

主文件夹的位置

Ubuntu 默认将您的主文件夹放入@home系统驱动器上的子卷中。是否将主文件夹移至 HDD 镜像取决于您的个人喜好。您还可以将其保留在 SSD 上并将其包含在您的 btrbk 备份中,如我上面所示。

备份的时间间隔

虽然我的示例为所有子卷设置了相同的保留时间,但 btrbk 允许您为每个子卷单独设置此时间。

您还可以-c以不同的间隔运行具有不同配置的 btrbk(参见选项),以更好地控制何时对子卷进行快照和/或备份。

由于 btrfs 的写时复制特性,快照可以快速创建,您甚至可以让 btrbk 每小时创建一个快照,但对于经常更改的文件夹(例如主文件夹),每天仅将它们传输到备份磁盘一次。

检测位衰减

要使用 btrfs 位腐烂/数据损坏检测(以及 raid1 的自动修复),您应该确保定期运行 btrfs 清理,例如作为 cron 作业,使用以下命令:

btrfs scrub start /btrfs/system
btrfs scrub start /btrfs/data

答案2

第一个选项并不完全愚蠢。如果配置正确,“混合 RAID1”确实有效。我自己也运行过这个设置,直到我的 SSD 开始出现异常并开箱即用。

请参阅以下文章以获取指导:

http://tansi.info/hybrid/

http://www.vinsec.net/2012/05/hybrid-hdd-ssd-raid1.html

https://superuser.com/questions/293144/combining-ssd-and-hard-disk-in-software-raid1

答案3

是否建议仅使用部分驱动器来创建 raid 阵列并积极使用该驱动器的其他部分,还是应始终使用整个磁盘?

建议始终尽可能多地使用类似的设备。我不确定这些建议有多少是迷信,但让我们先看看这个:

是否建议使用 SSD 和 HDD 创建 raid 1 阵列,或者这会破坏 SSD 的整体速度优势?

不。不要这样做,否则速度会降低。除了它们是不同的设备等事实之外,我非常确定的一件事是,你的速度会下降,因为你将以最慢的磁盘的速度工作 -> 你的 ssd-hdd 组合将比你的 SSD 慢得多:

您不应该对您的 SSD 这样做。您的第一个选择是最好的。只需为自己提供安全的用户空间和快速的系统磁盘。备份该磁盘。(请记住,RAID 不是备份策略)

答案4

  1. 也许是最好的。

你可以把所有东西都放到 BTRFS RAID-1 阵列中,这样就可以得到 1064 GB 的空间(按照https://carfax.org.uk/btrfs-usage/) 并且 BTRFS 优化了读取(而不是写入),当数据可用时它们来自 SSD,但更有可能的是,您确切知道需要更快地访问哪 128 GB(例如系统分区),并且您可以将其作为自己的分区以避免随机分配。

我会避免每个硬盘驱动器有多个分区,每个分区都是多个 RAID 的一部分,这可能会使访问时间变得不可预测,因为您的文件系统认为它们应该均衡,但其中一个分区的繁忙程度是原来的两倍。将 SSD 分成一个分区和一个属于 RAID-1 的分区应该没问题,但这么小的空间几乎没有什么好处。

相关内容