![在Linux中将分区挂载到多个目录](https://linux22.com/image/1430808/%E5%9C%A8Linux%E4%B8%AD%E5%B0%86%E5%88%86%E5%8C%BA%E6%8C%82%E8%BD%BD%E5%88%B0%E5%A4%9A%E4%B8%AA%E7%9B%AE%E5%BD%95.png)
我有一台装有 SSD 和 HDD 的 PC。我运行的是 Linux。我希望将所有静态(很少更改)文件放在 SSD 上,其余文件放在 HDD 上。为了实现这一点,我希望将 /boot、/usr、/lib、/bin、/etc、/opt 放在 SSD 上,将其余文件(/var、/tmp、/home)放在 HDD 上。但是,我不想为每个文件创建单独的分区,我希望每个组都在自己的分区上。我想我可以将 SSD 安装到 /,将 HDD 安装到 /mnt/hdd 并将符号链接 /home 等指向 /mnt/hdd/home 等。
这样的设置会有什么问题吗?例如,在启动过程早期,在安装硬盘之前,程序试图读取/写入 /var?如果 /var(和 /var/log)不在根分区上,日志记录是否会正常工作?
解决这个问题的最佳方法是什么?
答案1
因此,经过进一步挖掘,我发现这是基于 systemd 的设置的正确咒语:
#
# /etc/fstab: static file system information
#
# <file system> <dir> <type> <options> <dump> <pass>
devpts /dev/pts devpts defaults 0 0
shm /dev/shm tmpfs nodev,nosuid 0 0
UUID=246b032f-0633-459a-867c-6013304c5b8d swap swap defaults 0 0
UUID=64ed9a87-7860-4538-bef6-05eff29ed5c1 / ext4 defaults,noatime,nodiratime,iversion,fail 0 1
UUID=e3b656bf-69c8-4b2a-bad8-6c051559b43f /mnt/hdd ext4 defaults,noatime,nodiratime,iversion,x-initrd.mount,fail 0 1
/mnt/hdd/home /home none rw,rbind,x-systemd.automount,fail 0 0
/mnt/hdd/root /root none rw,rbind,x-systemd.automount,fail 0 0
/mnt/hdd/tmp /tmp none rw,rbind,x-initrd.mount,fail 0 0
/mnt/hdd/var /var none rw,rbind,x-initrd.mount,fail 0 0
UUID=B084-4D66 /boot/efi vfat defaults,noauto,noatime,nodiratime,iversion 0 2
无论出于什么原因,tmp 和 var 必须是 x-initrd.mount,而 home 和 root 必须是 x-systemd.automount。希望这对其他人有所帮助。
答案2
使用mount --bind
,例如mount --bind /mnt/hdd/home /home
从手册mount
页:
调用此函数后,相同的内容可以在两个地方访问。也可以重新挂载单个文件(在单个文件上)。
(请注意,此绑定不遵循其他挂载,因此如果您在 上挂载了单独的分区/boot
,则执行的操作mount bind / /troll/root
将不包括该/boot
分区中的任何内容。如果您想要递归绑定,请使用--rbind
。)
要做到这一点fstab
,将其none
放在 FS 列和bind
选项列中,例如
/mnt/hdd/home /home none bind
根据手册fstab
页, “记录的顺序文件系统很重要,因为文件系统检查(8),山(8)卸载(8)依次迭代文件系统做他们的事情”,所以像这样的条目应该出现在条目“在 上安装物理设备”之后(下方)/mnt/hdd/home
。
我不知道这种方法有什么问题,但我没有尝试过您描述的设置。我使用了一个单独的分区,/var/log
没有问题,我不希望绑定安装有任何额外的效果。如果您不是从启动/
,我会使用一个单独的分区/boot
,因为它必须由引导加载程序以某种方式处理。