首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在未卸载的情况下,SD卡被移除后无法挂载

在未卸载的情况下,SD卡被移除后无法挂载
EN

Stack Overflow用户
提问于 2016-02-24 08:19:46
回答 2查看 2K关注 0票数 1

下午好,

我有一个项目,SD卡可能会变得暂时断开,因为在SD检测引脚上的弱接触。我希望能够检查它是否已经卸载,并在软件中重新挂载它。

我的SD卡分区是/dev/mmcblk1p1,它最初是在Linux启动时自动挂载的

如果我执行umount /mnt/storage命令,然后取出SD卡,我可以重新插入它,然后执行mount /dev/mmcblk1p1 /mnt/storage而不会出现问题

但是,如果我先移除SD卡,而不使用umount,则执行mount /dev/mmcblk1p1 /mnt/storage将导致

代码语言:javascript
复制
mounting /dev/mmcblk1p1 on /mnt/storage failed: No such device or address

我试着跑步

代码语言:javascript
复制
umount /mnt/storage
rmdir /mnt/storage
mkdir /mnt/storage

在未卸载SD卡的情况下移除SD卡时,总是会出现此错误

我使用的是在Imx6上运行的Yocto发行版。

EN

回答 2

Stack Overflow用户

发布于 2016-02-25 06:24:41

如果SD卡是由C++应用程序写入的,则可以强制将其移除,但在该应用程序关闭文件描述符之前,不能将其卸载。应用程序本身不需要关闭。

此解决方案适用于机械应用,其中SD卡(或其他闪存介质)可能会暂时断开连接,并且需要由应用程序恢复写入:

答案:

检测SD卡已断开连接

最简单的方法是检查SD卡的安装大小

代码语言:javascript
复制
read file "/sys/block/mmcblk1/size" and check it's > 0

  1. 关闭正在写入SD卡上文件的所有文件描述符。

请注意,在移除卡之前,没有必要关闭这些设备。Linux足够健壮,可以写入不存在的文件。但这需要在卸载SD卡之前完成,否则卸载将失败,这就是导致我的问题的原因。当SD卡已经重新插入时,也不能运行Umount。

  1. 卸载SD卡

system("umount /mnt/storage");'

  • Now re-insert reinserted

  • Mount

SD卡

  • Detect the Card has card

  • card card

系统(“装载/开发/mmcblk1p1 /mnt/storage")

票数 3
EN

Stack Overflow用户

发布于 2016-02-24 20:01:36

如果您的系统上正在运行udev,则可以让udev的挂载脚本在设备被删除时自动卸载它们。因此,在/etc/udev/scripts/mount.sh中添加如下内容

代码语言:javascript
复制
UMOUNT="/bin/umount"

if [ "$ACTION" = "remove" ] && [ -x "$UMOUNT" ] && [ -n "$DEVNAME" ]; then
        for mnt in `cat /proc/mounts | grep "$DEVNAME" | cut -f 2 -d " " `; do
                $UMOUNT $mnt
        done
fi

此外,您必须告诉udev在添加和删除的设备上运行该挂载脚本。因此,我创建了/etc/udev/rules.d/autounmount.rules

代码语言:javascript
复制
SUBSYSTEM=="block", ACTION=="remove" RUN+="/etc/udev/scripts/mount.sh"

这对我在armv7平台上使用Yocto "Daisy“很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35590945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档