在Linux中将分区挂载到多个目录

在Linux中将分区挂载到多个目录

我有一台装有 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,因为它必须由引导加载程序以某种方式处理。

相关内容