将 /opt 移动到不同的、已经存在的驱动器

将 /opt 移动到不同的、已经存在的驱动器

我同时启动 Ubuntu 16.04 和 Windows 8.1。Ubuntu 的所有程序都位于 SSD 上,Windows 的核心程序也位于其中的一个单独分区中。主用户Windows 文件夹(文档、下载等)位于单独的硬盘上。

我的 Ubuntu 空间不足。我想将它们移至/opt硬盘/usr/local。然而,我发现的所有关于此问题的问答都始于这样的假设:这些文件夹已经安装在不同的分区上,或者我可以格式化目标驱动器。但这两种情况对我来说都不成立。

我不记得我设置这台计算机时具体做了什么,但我知道硬盘可以从 Ubuntu 访问(并且位于/dev/sdb1,安装在/media/steve/storage)。我可以做我想做的事情吗?

答案1

您可以简单地链接到它:

  1. 移动/opt目录:

    sudo mv /opt /mnt/otherDisk/
    
  2. 创建到新位置的符号链接:

    sudo ln -s /mnt/OtherDisk/opt /
    

您现在将拥有:

$ ls -ld /opt
lrwxrwxrwx 1 root root 5 Apr  6 14:23 /opt -> /mnt/OtherDisk/opt

正如 Rinzwind 在评论中正确指出的那样,如果您移动包含启动期间所需文件的目录,这可能会破坏您的系统。例如,您当然不想这样做/bin/opt但应该没问题。

答案2

我赞成移动/home,但您可以做您想做的事情。

如果我理解正确的话,您有两个驱动器,一个装有 ubuntu(可能还有一些 Windows 内容),另一个装有 Windows 用户文件。您需要做的是缩小 Windows 分区(虽然我已经多次成功完成此操作,但调整分区大小可能会导致数据丢失,因此请备份数据),这样可以释放该驱动器上的空间。您可以使用 GParted 之类的程序来调整分区大小。完成后,您可以利用剩余空间创建一个新分区(也可以使用 GParted 完成)。然后,您需要将 /usr/local 和 /opt 的内容复制到新分区(我通常通过插入实时 CD 并挂载所有内容并复制来完成此部分)。最后,您需要编辑 /etc/fstab 并告诉它将 /usr/local 和 /opt 挂载到哪里。

上面给出的移动 /home 的步骤与上述链接相同,因此您可以按照该指南移动 /usr/local 和 /opt。您需要做的是先调整 Windows 分区的大小。

答案3

风险过程,数据可能丢失!进行备份

  1. 我刚刚在我的 raspberrypi 上使用过这种方法,它运行着不同的 Linux 操作系统(raspbian)。
  2. 在我的情况下,使用与文件夹相同的权限设置现有分区。这是唯一已安装到 /mnt/existingpartitionfolder/ 的分区。
  3. 使用 rsync 将 opt 的所有内容复制到现有分区文件夹 $sudo rsync -avX /opt/ /mnt/existingpartitionfolder/。现有分区文件夹中的现有数据将很快成为 opt 的一部分。
  4. 我祈祷我的符号链接相对于复制过程移动,并且没有链接到旧的 opt 位置。我相信 -l 可以做到这一点(包含在 -a 开关中),它们看起来还好吗???
  5. 将 /etc/fstab 条目从 /mnt/existingpartitionfolder 调整为 /opt
  6. 我在 /mnt/ 文件夹上运行了一个 nfs,因此我还调整了 /etc/exports 条目以指向 /opt,重启后它将是相同的逻辑位置。
  7. 重命名 /opt $ sudo mv /opt /optold (我的备份)
  8. $sudo 立即重启
  9. 一切都恢复完美和完整,现在只需要删除 /optold(删除备份,或将其移动到新的 /opt)如果需要空间,然后进行测试。

如果数据正在移动,则在其他顶级文件夹上执行此操作可能不起作用。可以通过将 HDD 放入另一台机器或运行 LIVE 磁盘来采取相同的方法。只需小心 fstab 中的 UUID 以及文件夹和文件的权限。如果启动顺序失败,很可能是 fstab 中的 UUID(大假设)。如果您需要复制整个磁盘,请使用 dd 命令。

相关内容