我想对我的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
.这会在引导过程中留下一段时间,在此期间主目录在其最终位置不可用。由于这些是主目录,因此在引导过程中不应该使用太多(如果有的话),所以没关系。我能想到的一件事是@reboot
crontab 指令。如果您有其中任何一个,则主目录需要可用,因此您应该将其添加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 下通常是单独的分区。