sol*_*ate 5 linux busybox linux-kernel embedded-linux
像 eSATA、USB 驱动器这样的可拆卸设备可以突然移除(只需拔掉插头)。
如果分区上有打开的文件句柄,则该分区不会卸载,即 Linuxumount命令将失败,即使在驱动器被物理分离后也是如此。
如果卸载失败,则在重新连接设备时,mount也将失败。因此,您必须找出哪些进程正在使用驱动器并杀死它们或关闭所有句柄。如果您不能这样做,则必须重新启动盒子才能安装驱动器。而且我绝对不能终止使用它的进程。
我看不到“强制卸载”选项,有一个-f选项,但它仅适用于 NFS。
这听起来很奇怪,Linux 不适应用户简单地猛拉驱动器的这种情况吗?有谁知道如何在 Linux 中优雅地处理这种情况?
有什么方法可以找出在特定分区/设备上打开了哪些文件句柄,或者仅针对特定设备有选择地刷新和关闭所有文件句柄?
注意:该lsof命令在我使用的嵌入式 Linux (busybox) 中不可用。
“fuser”在我的嵌入式 linux 中不可用。
我尝试了懒惰的 umount -l。但是,它似乎并不能始终如一地工作。比如说,我保持一个文件句柄打开(在设备上的某个文件上使用“tail -f”)。然后我分离一个驱动器,然后我执行“umount -l”并卸载它。然后我重新连接驱动器并尝试在相同的安装点上再次安装它,而尾部仍在运行。它不能始终如一地工作。有时它会成功,有时它不会。这让我不舒服使用惰性选项,如果它使文件系统处于不一致状态怎么办。而且也不确定这个懒惰的选项是否打算用于这种情况。
我无法终止打开文件句柄的进程。
似乎我已经将设备安装在 /mnt/abc 上,如果我断开驱动器然后重新连接,Linux 似乎将设备的文件系统重新附加到相同的安装点“/mnt/abc”,而我们没有做任何事情卸载或安装。然后相同的旧打开文件句柄似乎在重新附加后开始工作(至少对于文件读取操作)。这是我的观察。我不确定这是否是预期的行为。但是,这似乎也没有持续有效。
我有一个用于读取的打开文件句柄(“tail -f”),我将其保持打开状态,然后我分离并重新附加,然后修改了被拖尾的文件,我看到“tail -f”输出随着更改而更新。但是,如果我在设备消失后尝试修改文件(它按预期给出错误)然后重新附加,则设备的文件系统无法正确重新附加到相同的安装点。在文件写入的情况下(当设备不存在时)它似乎不起作用。
当突然移除驱动器而不关闭所有句柄并正确卸载所有分区时,Linux 是否遵循任何标准/一致的行为?
| 归档时间: |
|
| 查看次数: |
3511 次 |
| 最近记录: |