有时候,我想卸载USB设备使用umount /run/media/theDrive,但我得到一个drive is busy错误。
如何找出哪些进程或程序正在访问设备?
我使用的是 Ubuntu 12.04,当我右键单击我的闪存驱动器图标(在 Unity 左侧栏中)时,我得到两个让我感到困惑的选项:弹出和安全删除.
我越接近答案是这个论坛帖子,它得出的结论是(对于闪存驱动器)它们既相同又等效于使用umount命令。然而,这最后的断言似乎是错误的。
如果我使用umount从控制台卸载我的闪现潜水,然后我使用命令lsblk,我仍然可以看到我的设备(当然,MOUNTPOINT 下没有任何内容)。另一方面,如果我弹出或安全移除我的闪存驱动器,lsblk则不再列出它。
所以,我的问题是,真正重现弹出和安全删除行为的控制台命令/命令是什么?
我经常遇到卸载目录的问题:
卸载/mnt/目录 umount: /mnt/dir: 设备正忙
设备繁忙的原因有很多。有时运行的进程上有打开的锁,有时还有其他目录安装在/mnt/dir.
我的问题:
检查为什么无法卸载目录的步骤是什么。
我知道有很多原因,但如果你解释一个具体的解决方案就可以了。
[编辑]
[X] 在安装的卷上运行进程。
[X] 另一个卷安装在我们要卸载的卷的顶部
[_] NFS 锁定我们要卸载的卷
我需要在我的脚本中卸载某些内容,但有时它会在所有数据完成复制之前卸载并导致卸载失败。我寻找一种方法来进行“阻塞”卸载,但我什么也没找到。所以,我试图编写一个脚本来循环直到它可以被卸载,但它不起作用。
while [ `sudo umount mount` ]
do
sleep 0.1
done
rmdir mount
Run Code Online (Sandbox Code Playgroud)
运行输出时:
umount: /home/evantandersen/mount: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
rmdir: failed to remove `mount': Device or resource busy
Run Code Online (Sandbox Code Playgroud)
它不应该循环直到返回值为sudo umount mount0,这意味着它已成功卸载吗?
我正在使用一个救援实时系统(类似于实时 CD)来修复我的 Debian 服务器的一些问题,如下所示:
# mkdir -p /mnt/rescue
# mount /dev/md2 /mnt/rescue
# mount --bind /dev /mnt/rescue/dev/
# mount --bind /proc /mnt/rescue/proc/
# mount --bind /sys /mnt/rescue/sys/
Run Code Online (Sandbox Code Playgroud)
现在我可以 chroot 到/mnt/rescue- 但是完成后,如何再次卸载文件系统?
umount: /mnt/rescue: target is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
Run Code Online (Sandbox Code Playgroud)
我猜这是因为dev,proc并且sys绑定到挂载的文件系统。但是也无法卸载它们......
当进入 chroot 时,有时需要使用 -rbind 而不是 -bind 挂载 /sys 和 /dev 以确保当有人去寻找时一切都在正确的位置。
卸载时出现问题。
一个简单的 umount 总是失败;随着孩子们也被安装,它似乎正在使用:
$ umount /mnt/chroot/sys
umount: /mnt/chroot/sys: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
Run Code Online (Sandbox Code Playgroud)
另一种可能的解决方案是从 proc 中列出挂载,然后像这样卸载每个挂载:
$ grep /mnt/chroot/sys /proc/mounts | cut -f2 -d" " | sort -r | xargs umount
Run Code Online (Sandbox Code Playgroud)
但是,这也失败了,因为递归挂载实际上并未在 mtab 中注册:
/mnt/chroot/sys/kernel/security is not mounted (according to mtab)
Run Code Online (Sandbox Code Playgroud)
也许解决方案是执行惰性卸载,但这对我来说似乎很危险。
有没有更好的方法来做到这一点,我错过了?
我如何安全地摆脱这种情况?
详情如下:
xen 服务器已将块设备分配给 VM。但这些设备也已经安装在 Xen 中。
事实上,这些块设备中有 44 个是这样安装的。更糟糕的是,每个物理设备在 4 条路径上可见,并且每条路径都安装在单独的挂载点上。换句话说,每个设备实际上安装了 5 次。
VM 来宾操作系统通过 PowerPath 伪设备(作为 phy:块设备分配给 domU)查看路径
一些设备被格式化为 ext2 和 reiserfs。
无需向我解释这里涉及的文件系统损坏风险。
恐怕只是卸载文件系统也有可能造成损坏,觉得此时拔掉主机的电源,是最安全的选择。
请注意,所有 VM 中的应用程序(大部分为 Oracle 数据库)仍在运行和使用中。
我在调查 dom0 上的高 CPU 使用率时发现了这一点。有一个无法杀死的“查找”进程,cwd -> /media/disk-12 从/dev/sdf1 挂载,属于/dev/emcpowerr
在有人问之前,我曾经见过进程无法被杀死并继续使用 CPU 和 RAM(与失效/僵尸进程不同)时,是当有未完成的提交 I/O,例如同步返回但尚未物理上磁盘时. 更常见的是,这发生在磁带 I/O 上。
建议!?
PS我希望设备在安装后被“保留”,以防止这种事情?或者这在 Linux 上是不可能的?
编辑:首先,我确信管理程序中的 KDE)是罪魁祸首。看起来 KDE 正在安装它可以在日志记录中创建桌面图标的设备。然而,同样的事情不会发生在其他 Xen 服务器上,但所有其他服务器都运行更旧版本的 SLES 和 KDE ...... V4 似乎是有问题的,3.4 表现更好)。
此外,两个非关键虚拟机已挂起。关闭它们后,由于文件系统损坏,它们将无法再次启动。主/生产虚拟机仍在运行,其上的数据库仍在运行,但显然这是一个定时炸弹。客户正尝试在另一台服务器上的另一台 VM 上重新构建环境,但在配置某些组件时遇到问题,因此我们正在等待...
无论如何,我觉得到目前为止没有一个答案不仅仅是“最佳实践总是优雅地关闭”而且我希望得到更具体的东西......无论如何,我觉得这种情况可能需要更加小心思维。关闭是否会导致未完成的 IO(特别是来自管理程序的文件系统元数据更新)同步并导致潜在的主要文件系统损坏?
我试图将我单独的 /home 分区与我在 linux mint 13 中的 / 分区合并。我被告知要卸载 /home,将其挂载到不同的位置并将内容复制到 / 分区上的 /home 目录。
我试过了,但我无法卸载 /home。当我尝试这样做时,我收到一条消息:
umount: /home device is busy (which processes use this device can be possibly be found with lsof or fuser)
Run Code Online (Sandbox Code Playgroud)
如何卸载我的 /home 并将其安装在单独的位置 (/dev/sda2/mnt/home) 以便能够将内容复制到 /home?
我读过一些umount -l不安全的地方:
如果您关心何时可以安全地拔下外部驱动器,请不要使用
umount's--lazy选项
umount --lazy是不安全的,也不能变得安全。[...]
这util-linux 通过Ruediger迈耶评论:
你应该完全避免使用
umount -l。只需杀死所有正在使用的进程,/tmp/mountpoint然后不带选项 umount 即可-l。
为什么umount -l不安全/危险?
有没有办法让它安全?
unmounting ×10
mount ×3
disk ×2
filesystems ×2
linux ×2
bash ×1
chroot ×1
command-line ×1
eject ×1
history ×1
home ×1
open-files ×1
process ×1
shell-script ×1
util-linux ×1
xen ×1