从 /home 子目录到挂载驱动器的符号链接在重新启动时中断

从 /home 子目录到挂载驱动器的符号链接在重新启动时中断

我的 Kubuntu 工作站有一个 SSD 和一个 HDD。 SSD 包含 Kubuntu 安装,而我想使用 HDD 进行一般存储,其中驱动器速度不是问题。

我使用以下命令通过 /etc/fstab 安装了 HDD: UUID=... /mnt/hdd ext4 defaults 0 2

我使用以下命令为 HDD 的一些 /home 子目录创建了符号链接: ln -s /mnt/hdd/Downloads/ ~/Downloads

这将创建所需的结果 - 例如,Firefox 下载将下载到/mnt/hdd/Downloads已安装的 HDD 分区而不是 SSD。这并不是唯一的用例。目的是将“下载”和“文档”等目录存储在已安装的 HDD 上,同时显示在默认的 /home 位置(对于应用程序和我自己来说)。

但是,当我重新启动时,此符号链接会中断并出现以下结果:

$ ls -l ~
...
Downloads -> /mnt/hdd/Downloads/
...

$ ls -l /mnt/hdd/
...
Downloads -> /home/<username>/../../../../../mnt/hdd/Downloads
...

我不确定为什么/mnt/hdd/Downloads重新启动时会变成损坏的符号链接。

这是全新安装,没有设置其他符号链接。

我在这里做错了什么吗?

编辑:经过一些实验,我发现这种行为并不一致。有时符号链接会损坏,有时则不会。我遇到过 5 个符号链接中只有 1 或 2 个会在重新启动时损坏的情况。

答案1

如果您粘贴的输出正确的话,/mnt/hdd/Downloads 上会发生一些非常奇怪的事情。

具体输出

$ ls -l /mnt/hdd/
...
Downloads -> /home/<username>/../../../../../mnt/hdd/Downloads
...

这看起来像路径 /mnt/hdd/Downloads 是一个符号链接...嗯...从 /home/Zach 开始,返回到 /home,到达 root ('/'),​​再次向上,再次...再次...(将仅保留在根目录),然后向下导航到 /mnt/hdd/Downloads

因此,首先,看起来 /mnt/hdd/Downloads 一定是错误创建的,并且似乎是一个指向其自身的循环链接。

你从中得到什么mount | grep /mnt/hdd?如果它显示您的驱动器,那么您的 /etc/fstab 似乎工作正常。如果它为空,则说明您的驱动器未安装。


如果驱动器已安装

抱歉,您以前的下载可能已丢失。

此时我能建议的最好方法是unlink /mnt/hdd/Downloads删除循环符号链接,然后重新创建正确的下载目录mkdir -p /mnt/hdd/Downloads(该标志-p对于此处的下载目录可能不是必需的,但对于其他目录可能是必需的)。


如果未安装驱动器

使用以下命令从路径中删除所有文件/mnt/hdd/(如果未安装驱动器,则该路径实际上位于 SSD 上,而不是 HDD 上) sudo mv /mnt/hdd /mnt/hdd.bkup; sudo mkdir -p /mnt/hdd

然后运行sudo mount -a并验证驱动器现在是否已安装。如果不是,那么您需要修复 /etc/fstab。

假设一切顺利,您就可以mkdir -p /mnt/hdd/Downloads按照上面的方法进行操作。


真正的问题

我必须在这里做一些推断,但事实上你有一个表单的链接/mnt/hdd/Downloads -> /home/<username>/../../../../../mnt/hdd/Downloads看起来非常错误。

您提到您通过运行创建了符号链接ln -s /mnt/hdd/Downloads/ ~/Downloads

有问题的路径表明您可能ln在某些时候以错误的顺序运行带有参数的命令,或者在某些时候从错误的目录运行命令(例如ln -s ~/Downloads /mnt/hdd/Downloads)。

根据发生这种情况的时间,它可能会在路径中放置一个符号链接/mnt/hdd/Downloads 在你的SSD上这会阻止硬盘正确安装。在这种情况下,请按照“如果未安装驱动器”的说明进行操作

您可以获取有关文件所在驱动器的更多信息df /mnt/hdd/Downloads,但这些详细信息对于此问题似乎并不完全重要。


最后一点

这种奇怪的行为似乎与重启 Linux 没有任何关系。如果您的ln命令由脚本运行(在重启时或任何时候),那么您需要提供有关该脚本的详细信息,因为它是最有可能的罪魁祸首。

相关内容