将来自不同磁盘的多个目录永久挂载到 / 下

将来自不同磁盘的多个目录永久挂载到 / 下

我有 SSD 和 HDD。一些目录(如/var/srv和 )/tmp应该放在 HDD 上,而/boot/usr/lib应该放在 SSD 上。但我是否必须为每个目录创建单独的分区?我想要有 2 个左右的分区。每个磁盘一个,并根据需要分配目录。这可能吗?如何做?

我听说过符号链接mount --bind硬盘文件系统但:

  • 符号链接在不同的工具中有不同的处理方式,例如cp,所以我不确定将主系统目录符号链接是否安全
  • 我不知道如何使用mount --bind硬盘文件系统fstab

答案1

我从未使用过这个,但我猜你可以在 ssd 设备上挂载 / 目录。然后创建一个名为 /hdd 的文件夹,之后创建你想要的文件夹,如 /hdd/var /hdd/srv /hdd/tmp。

并使用绑定挂载来更新这些条目

mount --bind /hdd/var /var
mount --bind /hdd/tmp /tmp

只需创建 /boot、/usr、/lib 文件夹。无需重新挂载。

答案2

如果你不想有很多分区,并且还想灵活地移动东西,我建议使用逻辑卷管理器

在 SSD 上创建/boot分区,并创建另外 2 个大分区:一个在 HDD 上,另一个在 SSD 上。这两个分区将是 LVM 的物理卷 (PV)。将它们添加到卷组 (VG),然后为所需 PV 上的每个目录创建一个逻辑卷 (LV)。如果您稍后发现该分区/var应该在 SSD 上,而不是在 HDD 上,则可以使用移动将其对应的 LV 从 HDD 移动到 SSD。

例子:

pvcreate /dev/disk/by-id/hdd-part1
pvcreate /dev/disk/by-id/sdd-part2 # part1 is /boot
vgcreate my_vg /dev/disk/by-id/hdd-part1 /dev/disk/by-id/sdd-part2
lvcreate -n root -L 6G my_vg /dev/disk/by-id/sdd-part2
lvcreate -n var -L 2G my_vg /dev/disk/by-id/hdd-part1
lvcreate -n srv -L 10G my_vg /dev/disk/by-id/hdd-part1
pvmove -n var /dev/disk/by-id/hdd-part2 /dev/disk/by-id/sdd-part2

我想强调的是移动也可以只移动 PV 的片段,称为物理范围 (PE)。PE 的默认大小为 4 MiB,可以在创建 VG 时设置。

答案3

绑定挂载应该可以完成您要做的事情。您可以在 fstab 中轻松使用绑定挂载:绑定挂载 fstab 条目如下所示

/path/to/original /mount/point none bind 0 0

请注意,您需要先将某些东西挂载到 /,因此我建议您将 SSD 挂载到 /,然后根据需要将 HDD 中的各种目录绑定挂载。因此,fstab 类似于(假设为 ext4 分区,根据需要进行更改)

### /etc/fstab ###

# Mount SSD to /
/dev/disk/by-uuid/your-ssd-partition-uuid / ext4 0 1

# Mount HDD somewhere (in this case /mnt/hdd)
/dev/disk/by-uuid/your-hdd-partition-uuid /mnt/hdd ext4 0 2

# Bind mounts
/mnt/hdd/var /var none bind 0 0
/mnt/hdd/srv /srv none bind 0 0
/mnt/hdd/tmp /tmp none bind 0 0

你也可以为 / 设置一个专用的“根”目录,比如在你的 SSD 上,这将使 fstab 看起来像

### /etc/fstab ###

# Mount SSD somewhere
/dev/disk/by-uuid/your-ssd-partition-uuid /mnt/ssd ext4 0 1

# Mount HDD somewhere (in this case /mnt/hdd)
/dev/disk/by-uuid/your-hdd-partition-uuid /mnt/hdd ext4 0 2

# Mount /
/mnt/ssd/root / none bind 0 0

# Other Bind mounts
/mnt/hdd/var /var none bind 0 0
/mnt/hdd/srv /srv none bind 0 0
/mnt/hdd/tmp /tmp none bind 0 0
/mnt/ssd/lib /lib none bind 0 0
/mnt/ssd/usr /usr none bind 0 0

相关内容