linux 发行版中在容器内访问热插拔 U 盘的分区内容

这篇具有很好参考价值的文章主要介绍了linux 发行版中在容器内访问热插拔 U 盘的分区内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在 UOS 如何实现自动将 U 盘挂载到指定目录中?这篇文章中,我描述了 UOS 自动挂载 U 盘到指定目录的方式,现有的发行版处理逻辑大致相同。

当挂载位置确定后,容器内的业务逻辑要访问 U 盘分区中的内容,看上去只需要映射宿主机目录到容器内就万事大吉了,实际测试却发现这种方式存在一个严重的问题,最后使用了 docker volume 来实现此需求,在本文中记录一下。

需求描述

项目功能开发需要支持自动将 U 盘挂载到某个业务文件夹中在 docker 容器内进行访问,需要调研现有方式。

-v 映射宿主机目录方式

操作方法

在 docker 容器创建时映射 U 盘挂载目录的上级目录,在这个场景中其位置是 /media/user。

测试情况与存在的问题

  1. 容器启动前 U 盘成功挂载,容器启动后能够在容器内看到 U 盘分区内容
  2. 容器启动后热插拔 U 盘,宿主机能够看到 U 盘挂载目录下的文件,容器内看不到,观察发现容器内部看到的目录跟宿主机上的目录不是同一个

volume 的尝试

操作方法

  1. 执行 docker volume 创建一个 bind 到 /media/user 的 docker 卷
  2. 容器创建时映射上述 docker 卷

测试情况与存在的问题

  1. 容器启动后,动态插拔 U 盘,能够在容器内观察到 U 盘挂载目录的创建与移除,创建后能够正常看到分区内容
  2. U 盘成功挂载后再启动容器,容器内看不到 U 盘挂载分区内容,宿主机中可以正常看到
  3. 容器启动后挂载 U 盘,能够正常访问分区内容,此时退出容器,U 盘被 docker 自动卸载,此后 docker volume 异常,容器内无法访问 U 盘分区内容,重新删除、创建 docker volume 部署容器后恢复

问题分析

docker volume 在容器退出后自动卸载是 docker 自身的逻辑,这个逻辑在我们的场景中带来的问题是 docker 容器内再也无法正常访问 U 盘挂载目录,那有什么方式能解决此问题呢?

下班路上突发奇想,如果有两个容器同时映射了同一个 docker volume,那其中一个退出另外一个在运行 docker 是否还会卸载 U 盘。

我的答案是不会,因为如果是这样的行为,那就对正常运行的容器功能造成了影响,实现侧可能实现为一个 reference,只有当没有人引用时才会卸载。

测试了下确实是这样的效果,于是创建了一个 docker 自动启动的最简容器,此容器映射了我们创建的 docker volume,此时业务容器退出也不会影响卷本身,这个容器的目的就是增加引用计数,就这样不完美的解决了这个问题。

volume vs 映射宿主机目录

虽然问题得到了解决,但是对于内部的原理并没有太多了解。不禁要问 volume 与直接映射宿主机目录的差别在哪里?
从观察到的现象上我发现有如下两点要素:

  1. 直接映射宿主机目录是静态的,容器启动前有目录内容,启动后就有目录内容,容器启动后,目录内动态的挂载,挂载后的新目录并不会映射到容器内
  2. docker volume 是动态的,需要有挂载与卸载的动作来触发 volume 动态映射目录,如果没有这个动作容器内也无法访问映射目录

具体内部原理还需要进一步研究,解决此问题已经绰绰有余。

总结

对某些技术原理的欠缺容易造成错误的判断,误认为它应该是怎么样,实际测试却发现它不是那样。有时候觉得问题已经无解了,其实只是自己对技术的掌握度相对欠缺不容易想到新的解决方案,此时应该跟同事讨论,看看大家有没有啥新的点子,对这些点子大胆尝试可能会有意料之外的结果。文章来源地址https://www.toymoban.com/news/detail-692439.html

到了这里,关于linux 发行版中在容器内访问热插拔 U 盘的分区内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IRIS75 DM蓝牙5.2双模热插拔PCB

    LDN通用蓝牙双模固件和驱动使用帮助文档请点击如下链接: 功能参考链接 请参阅这个链接 1、先把排线的插头对正小板和大板的插座,再插入,注意方向不要插错,不要大力出奇迹,否则容易怼弯插座里的针,或者搞坏插座。 2、 不要插电池 ,然后插入USB,此时电脑应可以

    2024年02月07日
    浏览(51)
  • R730服务器热插拔换磁盘(raid阵列)

    r730服务器发现磁盘闪橙等,说明磁盘报警了,这时候我们就要换磁盘了。 由于本服务器磁盘是raid5的阵列磁盘,所以要采用热插拔的方式换磁盘。 这边要注意的是,不能关机的时候,直接来换磁盘。 因为关机换磁盘,那个更换的磁盘不能正常在线。 所以我们必须开机换磁盘

    2024年02月08日
    浏览(62)
  • 解析Sermant热插拔能力:服务运行时动态挂载JavaAgent和插件

    本文分享自华为云社区《服务运行时动态挂载JavaAgent和插件——Sermant热插拔能力解析》,作者:华为云高级软件工程师 栾文飞 Sermant是基于Java字节码增强技术的无代理服务网格,其利用Java字节码增强技术,为宿主应用程序提供服务治理功能,以解决大规模微服务场景中的服

    2024年02月21日
    浏览(45)
  • rk3588 双HDMI冲突问题与HDMI不能热插拔问题

    rk3588在开发时现在发现只能在插入HDMI时上电才能输出信号,而当开机之后,再插入HDMI显示器则无信号。 通过kernel显示,在开机后,插拔HMDI是有log提示的,说明内核能够检测到HDMI的插拔动作。 首先先排查软件问题,尝试重启显示进程 但还是无效果。 然后排查驱动问题,查

    2024年02月16日
    浏览(56)
  • RK35XX系列(RK3568)Camera 热插拔功能 调试记录

    SOC:RK3568 system:Android12 kernel:kernel-4.19 芯片:NVP6158C xs9922 目前我的主板上NVP6158接入4路Camera走DVP通道,xs9922接入4路AHDCamera走mipi通道 RK kernel-4.19支持xs9922 nvp6158c驱动路径       drivers/media/i2c/xs9922/xs9922.c  drivers/media/i2c/nvp6158_drv/nvp6158_v4l2.c RK支持Camera热插拔复位机制,如果

    2024年02月13日
    浏览(51)
  • 【深入理解SSD 实践】对NVMe SSD热插拔时,正确做法是怎样的?

    声明 主页 :元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 概念 SAS/SATA 和NVMe 区别 热插拔分类 热插拔基本原理

    2024年02月06日
    浏览(126)
  • 电池可热插拔拆卸对三防加固平板有什么意义|亿道三防onerugged

    今天我要和大家聊聊三防加固平板电脑中一个非常重要的功能——电池的可热插拔拆卸。是的,亿道三防onerugged系列产品具备这一亮点功能,给用户带来了极大的便利和灵活性。 首先,让我们来看看电池可热插拔拆卸的优势之一——双电池设计。亿道三防onerugged平板电脑采用

    2024年02月21日
    浏览(56)
  • Ruoyi框架中在提示认证失败,无法访问系统资源

    解决办法: 方法1:在 SecurityConfig 中设置httpSecurity 配置匿名访问 方法2:在对应的方法或类上面使用@Anonymous注解。 参考文献:http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#%E5%A6%82%E4%BD%95%E4%B8%8D%E7%99%BB%E5%BD%95%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE

    2024年02月16日
    浏览(42)
  • 红帽“背叛”开源:限制RHEL源码访问,突袭下游发行版

    红帽决定停止公开提供其企业发行版 Red Hat Enterprise Linux (RHEL) 源代码。 从现在开始, CentOS Stream 将成为公共 RHEL 相关源代码发布的唯一仓库 , 付费客户和合作伙伴可通过 Red Hat Customer Portal 访问到源代码 。 CentOS Stream 是由 Red Hat 公司推出的滚动更新发行版,它与 RHEL 密切相

    2024年02月11日
    浏览(36)
  • linux中在指定路径中按照文件名模糊查找文件之find命令

    大家在实际项目中,可能有时候在排查问题中需要查找一些系统文件,然后看下对应文件信息。例如日志文件信息,数据文件信息等,太多不方便查找时,就可以使用该相关命令来查找最合适; 精准搜索 find 指定路径 -name \\\"搜索内容\\\" 模糊搜索 find 指定路径 -name \\\"*模糊搜索内

    2024年02月06日
    浏览(100)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包