![对整个机器建立符号链接是否安全?](https://linux22.com/image/1203604/%E5%AF%B9%E6%95%B4%E4%B8%AA%E6%9C%BA%E5%99%A8%E5%BB%BA%E7%AB%8B%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5%E6%98%AF%E5%90%A6%E5%AE%89%E5%85%A8%EF%BC%9F.png)
我有一台虚拟机,其存储空间有限,这已成为一个问题。我将我的主目录链接到服务器上的 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 好得多。
您不能随便在任何地方进行剪切:您远程放置的内容在启动过程中一定不需要太早。我认为/usr
Ubuntu 目前没有正式支持在 进行剪切,但 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
。可能不会,但要检查一下。
无论如何,那些可能就是占据空间的。