![如何跟上不断变化的块设备,而无需卸载并重新安装?](https://linux22.com/image/1392851/%E5%A6%82%E4%BD%95%E8%B7%9F%E4%B8%8A%E4%B8%8D%E6%96%AD%E5%8F%98%E5%8C%96%E7%9A%84%E5%9D%97%E8%AE%BE%E5%A4%87%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E5%8D%B8%E8%BD%BD%E5%B9%B6%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85%EF%BC%9F.png)
因此,我在微型系统(BeagleBone Black)上运行 Arch。在此板上,我使用 g_mass_storage 内核模块将 SD 卡(/dev/mmcblk1)通过 USB 传输到主机。这运行得非常好,我对这个假 USB 驱动器所做的任何更改都会立即显示在块设备文件中。
问题在于我想用这个块设备做什么。我想把它以只读方式挂载到 Nginx 服务器的文档根目录。在大多数情况下,这可以正常工作,而且我对 USB 驱动器所做的任何更改似乎都可以在服务器根目录中正常显示。 然而,这些更改需要先卸载并重新安装块设备,然后才能显示出来。理想情况下,只要我对 USB 驱动器进行更改,它就会显示在安装点上,但我认为这会很复杂。
是否有任何简单的方法可以以 Linux 期望它不断变化的方式来挂载块设备,类似于 SSH 和 FTP 等网络挂载对外部变化的反应?
答案1
一些想法 -
您是否真的需要卸载并重新安装才能使更改显示出来?通常,您可以使用语法 mount /dev/resource -o remount,ro 和 mount/dev/resource -o remount,rw 来将设备重新安装为只读或读写。
我不明白您要做什么的具体细节,但听起来答案可能在于“udev”。在大多数版本的 Linux 中,都有一组规则(在 Ubuntu 12.04 中为 /etvc/udev/rules.d - 我希望在许多其他发行版中也有类似的东西),这些规则将设备和内核事件映射到您可以对其采取行动的事物上。(例如,我曾经检测外部 USB 驱动器何时插入并运行脚本。为了做到这一点,您需要计算出特定于块设备的属性(运行 udevadm info -a -p $(udedm info -q path -n /dev/sdX),然后使用这些属性构建规则,以便在检测到更改时制定操作。
使用 UDEV 并不难,但要让它正常工作却相当棘手。