安装闪存驱动器-安装到主目录

安装闪存驱动器-安装到主目录

我想挂载我的闪存驱动器,但错误地将挂载路径设置为/home/my_name。现在,我的所有文档、下载、图片等都不可用,因为我的闪存驱动器已经取代了我以前的主文件夹。

当我进入终端并输入时,sudo umount /home/my_name我收到错误消息:

umount: /home/my_name: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))

有没有办法解决这个问题,我可以恢复我的旧/home/my_name文件夹,然后将闪存驱动器安装到适当的位置?

答案1

在非空目录上挂载会隐藏其中包含的文件,这通常称为跟踪。这不会导致文件本身处于危险之中。您可以采取几个简单的步骤来排除故障、修复或(必要时)解决此问题。

确保您的 shell 不会阻止文件系统卸载。

对于安装在 的文件系统sudo fuser -km /home/my_name,运行sudo fuser -km /home/my_name以终止访问文件系统的所有进程(如您所做)通常足以让您卸载它。您报告说,当您执行此操作时,您的终端因此被关闭。

如果您在 shell 中的当前目录是您要卸载的挂载点或其子目录之一,就会发生这种情况。(您的 shell 被终止,然后运行它的终端程序会发现 shell 已关闭,并且在大多数设置下也会自动退出,就像您运行命令时一样exit。)

要解决此问题,只需导航到挂载点之外并尝试再次卸载它。例如,您可以将目录更改为/第一个:

cd /
sudo umount /home/my_name

查找并关闭或终止正在访问挂载文件的所有进程。

如果您不想使用 终止进程fuser,或者无法终止进程但需要找出这些进程,则可以使用多种方法查找它们,包括一些图形实用程序。我将在此简要说明其中一种选项。

您可以lsof在目录上运行以查看哪些进程正在访问其中的文件:

lsof /home/my_name

这对于挂载点很有效。有时,lsof如果以 root 身份运行,则可以获得更好的信息,尽管这通常不是必需的:

sudo lsof /home/my_name

输出lsof通常如下所示:

ek@Io:~$ sudo lsof ~/mnt/old
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
flock   15529   ek  cwd    DIR    7,0     2048 1280 /home/ek/mnt/old
flock   15529   ek    3rW  REG    7,0    21114 1311 /home/ek/mnt/old/md5sum.txt
less    15530   ek  cwd    DIR    7,0     2048 1280 /home/ek/mnt/old
less    15530   ek    3r   REG    7,0    21114 1311 /home/ek/mnt/old/md5sum.txt
less    15530   ek    5r   REG    7,0      231 1325 /home/ek/mnt/old/README.diskdefines
bash    27465   ek  cwd    DIR    7,0     2048 1280 /home/ek/mnt/old

这会告诉您正在使用的文件和进程。特别是,如果您遇到 shell 阻止其卸载的情况,而您没有注意到这种情况,则lsof可以使用以下输出将其清楚地显示出来:

ek@Io:~$ lsof ~/mnt/old
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    27465   ek  cwd    DIR    7,0     2048 1472 /home/ek/mnt/old/boot

在上面的例子中,唯一能阻止文件系统被卸载的是,我使用我的 shell ( bash) 导航到了挂载点的子目录,并且仍然在那里。

如果您需要有关某个进程的更多信息,一种方法是使用其进程 ID 运行,该进程 ID 在输出ps的第二列中给出:lsof

ek@Io:~$ ps 27465
  PID TTY      STAT   TIME COMMAND
27465 pts/3    Ss+    0:04 -bash

您还可以通过进程的 PID 来终止进程(,但请根据您的情况使用适当的数字)。通常最好先尝试此方法,然后再使用更强的。(如果 ,该标志也可以正常工作。)kill 27465kill -KILL 27465-9-KILL

当然,在使用该kill命令或类似功能之前,最好先尝试以正常方式关闭程序,尤其是当可能存在重要数据时。例如,最好保存文档并关闭文字处理器,而不是使用该命令退出文字处理器kill

通过非递归绑定挂载访问影子文件。

作为保罗是否可以访问被挂载“阴影”的文件?超级用户,您可以通过创建绑定挂载并导航到挂载所阴影的文件来访问它们:

sudo mkdir /mnt/root
sudo mount --bind / /mnt/root

这些命令略微改编自保罗的精彩回答回答该问题。(我鼓励您查阅该页面以了解更多详细信息。)您不必使用/mnt/root,但它和其他选择一样好。

如果您这样做,您的整个根文件系统都可以通过 访问/mnt/root

如果你有一个单独的/home分区,那么你需要将绑定挂载绑定到该分区:

sudo mkdir /mnt/home
sudo mount --bind /home /mnt/home

这与 相同/,只是带有/home

重启。

oldfred 的建议重新启动系统是解决此问题的合理方法。如果需要,您应该能够关闭并重新启动系统。您的数据被挂载所隐藏,但不应有丢失的风险。

重新启动应该是安全的,但如果您不想,您不需要重新启动来解决这个问题。如果您在使用上述方法时遇到问题并希望使它们发挥作用,请发表评论或(最好)编辑您的帖子。(其他遇到类似问题的人应该考虑发布新问题。)

相关内容