我有 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