【问题标题】:Linux umount a device from a script running in the device itselfLinux 从设备本身运行的脚本中卸载设备
【发布时间】:2013-11-15 11:55:43
【问题描述】:

我在路径中有一个挂载的 iso 映像:

/mnt/iso

在这个 iso 里面我有一个安装脚本 install.sh 我从 iso 运行安装脚本,最后脚本询问用户是否要卸载 iso 本身。 如果用户按“y”,则脚本执行以下代码:

cd /
umount /mnt/iso
echo "Installation completed!"

不幸的是,当脚本尝试执行 umount 时出现错误

umount: /mnt/iso: device is busy

我想这是由于脚本本身的虚拟设备很忙。 怎样才能让它发挥作用? 天呐

【问题讨论】:

  • 您是否从 /mnt/iso 内部运行 install.sh?如果您尝试从外部运行它会怎样?我的假设是问题不在于安装脚本(因为它确实有cd /),而是调用shell 在/mnt/iso 内。
  • 一定有一些文件正在被使用。使用lsof 进行检查。

标签: linux bash shell umount


【解决方案1】:

使用-l--lazy 切换到umount,这将执行惰性卸载,只有在不再使用时才会完全卸载。手册页中的完整描述(这是一个特定于 linux 的选项)是:

延迟卸载。从文件系统层次结构中分离文件系统 现在,并在没有文件系统时立即清理所有对文件系统的引用 忙了。 (需要内核 2.4.11 或更高版本。)

【讨论】:

  • 嗨,我现在才注意到一个问题。当我使用惰性 umount 时,iso 已正确卸载,但如果我尝试执行 losttup -a 我会看到循环设备仍然存在。 /dev/loop0: [0801]:773311 (/myIso.iso) /dev/loop1: [0801]:773311 (/myIso.iso) /dev/loop2: [0801]:773311 (/myIso.iso) /dev /loop3: [0801]:769575 (/myIso.iso) 我怎样才能避免这种行为?
【解决方案2】:

如果您使用的是最新版本,TomH 的解决方案将解决该问题。否则,Simone Palazzo 的评论是你最好的选择。您正在通过位于要卸载的区域中的脚本卸载某些东西。如果你从根目录运行脚本就会成功。

【讨论】:

    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 2011-01-16
    • 2019-07-22
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多