在 fstab 中装载驱动器上的文件夹。移动?

在 fstab 中装载驱动器上的文件夹。移动?

我想对我的fstab文件进行临时更改,以便我的文件/home位于另一个驱动器上。但是,我不想安装整个分区,而只想安装该分区上的一个文件夹(“home”)。我同意其余数据不可用。

表达这一点的规范方式是什么fstab?我想不出一种方法可以在一个命令中执行此操作(因为我无法引用尚未安装的文件系统上的文件夹)。我想我应该进行第一次安装,然后将文件夹移动到/home.但我不知道我是否可以搬进去fstab,还没有找到它man(而且我不想盲目尝试,因为我现在只能通过 ssh 访问机器)。

现在我有一个绑定安装fstab

/dev/sdd1 /mnt/temphome ntfs defaults,errors=remount-ro 0 2
/mnt/temphome/home /home none bind

然而,这使得/dev/sdd1两个点都安装了。

总结一下:

  • 我可以在其中进行移动安装操作吗fstab?如果可以,那么如何进行?
  • 这是正确的方法吗?如果不是,那什么是?

提前致谢。

答案1

我不认为你可以执行 的动作/etc/fstab。如果您想这样做,请mount --move/etc/rc.local.这会在引导过程中留下一段时间,在此期间主目录在其最终位置不可用。由于这些是主目录,因此在引导过程中不应该使用太多(如果有的话),所以没关系。我能想到的一件事是@rebootcrontab 指令。如果您有其中任何一个,则主目录需要可用,因此您应该将其添加mount --move到正确的位置/etc/rc.sysinit(就在 之后mount -a)。

不过,使用绑定安装可能没问题。可能出错的主要是遍历整个磁盘的进程,例如备份和updatedb。保留绑定挂载/etc/fstab是风险最小的选项,但您应该将磁盘遍历过程配置为跳过/mnt/temphome/home

另一种可能性是建立/home符号链接。但是,这可能会导致某些程序记录用户主目录的绝对路径,即/mnt/temphome/home/bob.绑定安装或移动子安装不会出现此问题。

答案2

不,你不能做你所要求的事情。正如您所指出的,您无法引用尚未安装的文件系统中的文件。[*]

但是,有一个方案可能适合您:捐赠者分区上的文件系统,通过循环设备安装。考虑:

# cd /mnt/temphome
# chmod 700 .
# chown root.root .
# dd if=/dev/zero of=temphome bs=4k count=1M
# mke2fs -j temphome
(answer yes to the annoying question)
# mount temphome /home -o loop

其作用是创建一个 4 GiB/home文件系统,该文件系统位于/mnt/temphome分区根目录的文件中。您仍然需要挂载捐赠者分区并保持其挂载状态,但只有 root 可以挂载它或直接更改其内容,包括/home通过循环设备挂载。然而,一旦安装了新的/home文件系统,普通用户就可以写入该新的文件系统,因为他们是通过内核执行此操作的,而内核有能力执行此操作,这是由权限控制的权力循环文件系统

如果由于某种原因,/mnt/temphome分区仍然面临比您希望接受的更大的风险,我能想到的最好的选择是使用gparted缩小捐赠分区并使用腾出的空间创建新的临时/home分区。使用完毕后,返回 gparted,删除临时分区,然后重新扩展捐赠分区以使用释放的空间。但这也有其自身的风险:修改分区并不是 100% 安全。


[*] 嗯,这并不完全正确。有时您会看到涉及其他文件系统中文件的确切磁盘位置(扇区、磁头、磁道)的知识的欺骗行为。这在低级活动中最常见:休眠、交换、启动...要实现此目的,您需要一个永远不会移动的完全连续的文件(即没有碎片),以便您可以开始读取和写入原始扇区以及未安装的分区。

不过,如果你观察这些事情随着时间的推移的趋势,你会发现它们往往会变得较少的随着时间的推移,由于各种后果而流行。一方面,碎片整理程序往往会破坏此类计划。这是原因之一/boot,并且swap在 Linux 下通常是单独的分区。

相关内容