无需开机即可自动挂载USB驱动器到树莓派

问题描述 投票:0回答:2

我有树莓派3B。它在 Raspbian GNU/Linux 9(延伸)上运行。我看到了一些关于安装 USB 驱动器的教程,但大多数有 2 种方法:

-手动安装该驱动器, - 启动时自动安装该驱动器

我正在寻找在生命周期(无需启动)在特定路径上自动安装该 USB 驱动器。我假设在 Linux 配置上没有选项可以做到这一点,但也许有一个选项可以通过 python 脚本来做到这一点?

我的驱动器具有 exfat 文件系统(没有其他驱动器具有该文件系统),因此它应该是管理 uuid 并挂载的。我认为它应该看起来像:

  1. 后台进程会时不时地检查“exfat”驱动器是否已连接
  2. 如果是,获取他的UUID
  3. 在特定路径上安装具有该 UUID 的驱动器*

*当 USB 驱动器未连接时,该路径也应该存在

我可以那样做吗?或者也许已经有解决方案了?

python linux raspberry-pi usb mount
2个回答
0
投票

usbmount
是一个漂亮的包,添加了
udev
挂钩用于自动安装/卸载。

只需安装:

sudo apt install usbmount

似乎存在一个问题使其无法正常工作,简而言之,解决方案如下:

  1. 在编辑器中编辑以下文件:
    sudo nano /lib/systemd/system/systemd-udevd.service
    
  2. 查找包含内容的行:
    PrivateMounts=yes
  3. 将行中的
    yes
    更改为
    no
    ,如下所示:
    PrivateMounts=no
  4. 保存文件并重新加载
    udev
    守护进程:
    sudo systemctl daemon-reload
    sudo systemctl restart systemd-udevd
    
    (或者只是重新启动)

您的 USB 设备现在应该自动安装在

/media/usb0
/media/usb1
等位置。


0
投票

美好的一天

我知道有点晚了,但这可能会有所帮助。我确实找到了自动挂载 USB 的方法:

创建目录:

sudo mkdir -p /media/ducorp

创建Python脚本

import os
import time

def mount_usb():
    # Define the mount point and device
    mount_point = '/media'
    device = '/dev/sda1'  # Adjust if necessary

    # Create mount point directory if it doesn't exist
    if not os.path.exists(mount_point):
        os.makedirs(mount_point)

    # Mount the device
    os.system(f'sudo mount {device} {mount_point}')
    print(f'Device {device} mounted to {mount_point}')

def unmount_usb():
    # Define the mount point
    mount_point = '/media/ducorp'

    # Unmount the device
    os.system(f'sudo umount {mount_point}')
    print(f'Device unmounted from {mount_point}')

def check_usb():
    # Check if the device is mounted
    mount_point = '/media'
    return os.path.ismount(mount_point)

def device_exists():
    # Check if the device file exists
    device = '/dev/sda1'  # Adjust if necessary
    return os.path.exists(device)

def main():
    usb_was_mounted = False
    while True:
        if device_exists():
            if not check_usb():
                mount_usb()
                usb_was_mounted = True
            elif usb_was_mounted:
                print('USB is already mounted')
        else:
            if check_usb():
                unmount_usb()
                usb_was_mounted = False

        time.sleep(10)  # Check every 10 seconds

if __name__ == "__main__":
    main()

创建服务:

sudo nano /etc/systemd/system/usb-mount.service

服务内容

[Unit]
Description=USB Automount Service
After=network.target

[Service]
ExecStart=/usr/bin/python3 /path/to/your/script.py
Restart=always
User=youruser
Group=yourgroup

[Install]
WantedBy=multi-user.target

注册并开始

sudo systemctl daemon-reload
sudo systemctl enable usb-mount.service
sudo systemctl start usb-mount.service

希望这对某人有帮助。请注意,插入 USB 后检查:lsblk 以确保 sda、sda1 等并进行调整

© www.soinside.com 2019 - 2024. All rights reserved.