对整个机器建立符号链接是否安全?

对整个机器建立符号链接是否安全?

我有一台虚拟机,其存储空间有限,这已成为一个问题。我将我的主目录链接到服务器上的 NFS 存储,并且它一直运行正常。但现在我需要将我的整个机器链接到 NFS,因为我的存储空间一直不足!

我只是想知道将整个机器(也就是说整个:)链接起来是否安全/)到 NFS?

我想使用以下命令来执行此操作:

/storage/nfs基本上是我挂载的 NFS。

$ mkdir /storage/nfs/myvmroot
$ sudo cp -rp /* /storage/nfs/myvmroot
$ sudo mv /* /old-root
$ sudo ln -s /storage/nfs/myvmroot /

答案1

您无法创建/符号链接。这根本不可能。/必须是一个目录。如果/是符号链接,它将指向某个路径 — 并且要解析该路径,系统将经过/,这是一个符号链接,因此需要解析...指向自身的符号链接在取消引用时始终会导致错误,但无论如何,您都无法创建/符号链接,因为它已经是一个现有目录。

你可以做的,并且会达到你想要的效果,就是NFS 文件系统作为根文件系统,而不是像通常那样挂载本地文件系统。这是可能的,并且受 Ubuntu 支持。Ubuntu 社区 wiki 上有一个教程(它涵盖了完整的无盘安装,如果您在本地保存,则可以跳过有关 TFTP 的部分/boot。)移动现有系统与执行初始安装略有不同,因此不要指望完全按照教程进行操作。

您需要确保初始化内存文件系统包含必要的驱动程序。initramfs 由以下命令生成update-initramfs根据当前系统配置和 下的配置文件/etc/initramfs-tools。您需要明确将 NFS 设置添加到/etc/initramfs-tools/initramfs.conf,至少添加一行BOOT=nfs(我认为其他参数可以在启动时指定,但BOOT=nfs为了包含 NFS 驱动程序是必要的,并且DEVICE=…可能还需要包含以太网驱动程序)。修改后/etc/initramfs-tools/initramfs.conf,运行update-initramfs

如果尚未分开,我建议将其保留/boot为本地分区,与之分开。/

请勿用于cp -rp /* /storage/nfs/myvmroot复制文件,这样不行。您需要从副本中排除已挂载的文件系统。传递选项-x。此外,使用-a而不是-rp,有些属性-rp不会保留。

cp -ax /* /storage/nfs/myvmroot

或者,如果复制被中断

rsync -axAX / /storage/nfs/myvmroot

另一个可能更简单的选择是将根文件系统保留在本地,只移动其中的一部分。即使服务器和网络速度很快,本地文件系统的性能和可靠性通常也比 NFS 好得多。

您不能随便在任何地方进行剪切:您远程放置的内容在启动过程中一定不需要太早。我认为/usrUbuntu 目前没有正式支持在 进行剪切,但 Ubuntu 的父发行版 Debian 支持,因此它有可能成功。另一个很有可能成功的地方是/usr/share。我不推荐/var,如果出现任何问题,可能会很麻烦,因为那里保存着日志。(如果 NFS 客户端对某些东西不满意,并尝试将日志写入/var/log/var没有响应,那么诊断故障就很难了。)

答案2

不会。这会导致虚拟机无法启动。NFS 系统在启动过程的某个时刻加载。在此之前,NFS 上的任何文件都无法访问。这意味着机器将无法访问启动所需的文件。这些文件包括(但不限于)内核本身、默认 shell/bin/sh以及/bin包含挂载 NFS 共享所需命令的所有内容。

所以,这不是一个好主意。更重要的是,这不是必要的。大多数目录/都不是很大。只需找出占用空间的目录并将其放在那里即可。您应该能够移动以下任一目录而不会出现重大问题:

  • /var/cache
  • /usr/local
  • /usr本身通常也可以移动,但要确保里面没有必需品/usr/local/bin。可能不会,但要检查一下。

无论如何,那些可能就是占据空间的。

相关内容