我有一些samba驱动器,每天都有多个用户访问。我已经有了识别共享驱动器(从SQL表)的代码,并将它们挂载到所有用户都可以访问它们的特殊目录中。
我想知道,如果我从我的SQL表中删除驱动器(有效地使其脱机)如何,甚至是,有一种方法来卸载繁忙的设备?到目前为止,我发现任何形式的umount都不起作用。
忽略破坏数据的可能性-是否有可能卸载当前正在读取的设备?
我有一些samba驱动器,每天都有多个用户访问。我已经有了识别共享驱动器(从SQL表)的代码,并将它们挂载到所有用户都可以访问它们的特殊目录中。
我想知道,如果我从我的SQL表中删除驱动器(有效地使其脱机)如何,甚至是,有一种方法来卸载繁忙的设备?到目前为止,我发现任何形式的umount都不起作用。
忽略破坏数据的可能性-是否有可能卸载当前正在读取的设备?
当前回答
使用exportfs -v检查导出的NFS文件系统。如果发现,使用exportfs -d share:/directory删除。这些不会在fuser/lsof列表中显示,并且会阻止umount成功。
其他回答
看看umount2:
Linux 2.1.116 added the umount2() system call, which, like umount(), unmounts a target, but allows additional flags controlling the behaviour of the operation: MNT_FORCE (since Linux 2.1.116) Force unmount even if busy. (Only for NFS mounts.) MNT_DETACH (since Linux 2.4.11) Perform a lazy unmount: make the mount point unavailable for new accesses, and actually perform the unmount when the mount point ceases to be busy. MNT_EXPIRE (since Linux 2.6.8) Mark the mount point as expired. If a mount point is not currently in use, then an initial call to umount2() with this flag fails with the error EAGAIN, but marks the mount point as expired. The mount point remains expired as long as it isn't accessed by any process. A second umount2() call specifying MNT_EXPIRE unmounts an expired mount point. This flag cannot be specified with either MNT_FORCE or MNT_DETACH. Return Value On success, zero is returned. On error, -1 is returned, and errno is set appropriately.
如果可能的话,让我们定位/识别繁忙的进程,终止该进程,然后卸载samba共享/驱动器,以最大限度地减少损害:
Lsof | grep '< /dev/sda1的挂载点>'(或任何被挂载的设备) kill target_process(将busy proc.按名称| kill PID | killall target_process) Umount /dev/sda1(或任何已挂载的设备)
尝试下面的操作,但在运行之前请注意-k标志将终止所有使设备处于繁忙状态的正在运行的进程。
-i标志使fuser在kill前询问。
fuser -kim /address # kill any processes accessing file
unmount /address
文件夹内的多个挂载
另一个原因可能是在你的主挂载文件夹中有一个副挂载,例如,在你为嵌入式设备使用SD卡后:
# mount /dev/sdb2 /mnt # root partition which contains /boot
# mount /dev/sdb1 /mnt/boot # boot partition
卸载/mnt将失败:
# umount /mnt
umount: /mnt: target is busy.
首先我们必须卸载引导文件夹,然后卸载根目录:
# umount /mnt/boot
# umount /mnt
当您尝试卸载时,请确保您不在已安装的设备中。