【问题标题】:Raspberry Pi 3 (Raspbian) programatically accessing a USB drive: best way to do this?Raspberry Pi 3 (Raspbian) 以编程方式访问 USB 驱动器:最好的方法是什么?
【发布时间】:2016-10-13 04:17:18
【问题描述】:

我在 RP3 上运行 Raspbian 1.0、v9/15。我正在开发一个应用程序,该应用程序将访问专用的 USB 闪存驱动器来存储收集的数据。写入数据的静态路径是“/media/user/kingston”。这很好用,除非我发生系统崩溃,此时“/media/user/kingston”的所有者和组更改为 root,并且闪存驱动器的挂载点现在更改为“/media/user/kingston1” " 这(显然)不适用于我的应用程序中定义的静态路径。是否有适用于此设备和操作系统的标准动态路径选项?提前谢谢...

更新:根据 BJ Black 的建议,这是我在文件系统的根目录创建名为 /usb 的目录后添加到 fstab 的,

/dev/sda1  /usb  vfat noatime,nofail,user,rw,exec,umask=000   0  3

优点是, 1) 即使没有插入 USB 驱动器也允许启动, 2) 允许在此处使用任何 USB 存储设备。

缺点是在移除闪存驱动器之前必须关闭系统电源(或卸载驱动器),否则会发生坏事(我试过这个)。问题:如果有人在安装 USB 时拔出 USB,我能做些什么来减少“坏事”?提前致谢。

【问题讨论】:

  • 希望没有人告诉您使用同步选项安装驱动器;它会导致对闪存的大量写入并快速磨损(尽管它会减少断电或类似情况下文件系统损坏的可能性)。如果您有一些空闲的 RAM 并且可以忍受中断时的一些数据丢失,我实际上会登录到 RAM 磁盘并使用 rsync 或 logrotate 将其定期推送到闪存。或者您可以使用低调的 USB 记忆棒(例如 p3e9.qr.ai)使其更难移除并减少您的用户变得愚蠢的可能性 :-)
  • 这将位于远程位置,Raspberry Pi 连接到相机板和太阳能电池板以及可充电电池。没有键盘或显示器。技术人员每隔几周就会访问该站点,断开电源,移除 USB,插入新的 USB,重新连接电源。
  • 嗯。是否值得在那里放置一个或两个状态 LED 以确保设备处于良好状态?否则,我会说使用像 f2fs 这样的日志结构文件系统作为一种快乐的媒介。见en.m.wikipedia.org/wiki/F2FS

标签: raspbian raspberry-pi3 usb-drive


【解决方案1】:

一般来说,我倾向于使用硬挂载点来处理这类事情。 /sys 中可能有一些巧妙的技巧(或者通过对 mount(1) 或 /proc/mounts 的输出使用 grep),但是一旦您为其他供应商更换金士顿棒,它们就会失败(哎呀)。

查看this link 以更好地了解什么是自动挂载您的 USB 记忆棒以及如何关闭该机制。

至于安装在永久位置,我会尝试:

  1. 创建一个挂载点(例如 /data)并在 fstab(5) 中添加一个条目,以便在启动时自动挂载。
  2. 与 1 相同,但使用 noauto 和 user 并从您的应用程序显式调用 mount(1),或者...
  3. 安装 autofs 并在 auto.misc 中添加一个条目,以便在使用时自动挂载设备(可能是 /dev/sda1)。然后符号链接 /data -> /misc/data。

其中,我最喜欢选项 3,因为在空闲时摇杆会自动卸载。那么您的应用程序只需要事先仔细检查该路径是否可写。

在写入时也要格外小心,因为便宜的 USB 记忆棒往往会以大块的形式擦除,而且它们的磨损均衡充其量也很弱(因此小型随机写入和大型写入都倾向于快速磨损闪存)。使用 f2fs 或仔细的写入缓冲会有所帮助(并且 mount 上的 noatime 选项会有所帮助)。并且不要在您的应用程序中一直调用 fsync()!

【讨论】:

    猜你喜欢
    • 2018-09-19
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2013-12-16
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多