Linux 中自动挂载 U 盘教程

Linux 中自动挂载 U 盘教程

本文翻译自 https://itsfoss.com/automount-drives-linux/

如何在 Linux 中实现外部磁盘的自动挂载

想象这样的场景:你将一个外部 USB 或 SSD 磁盘连接到系统,作为额外的存储设备。这在以下情况下非常常见,例如你为树莓派设置媒体服务器或其他 Linux 系统。

在 Linux 中,通常需要在文件管理器中点击挂载选项,或使用挂载命令才能使用外部驱动器。这可能会带来不便,尤其是在系统启动时需要挂载磁盘的场景。例如,媒体存储在外部磁盘上,而媒体服务器无法读取,因为磁盘未被挂载。

幸运的是,你可以通过以下两种方法实现外部磁盘自动挂载:

  1. 配置 fstab 文件以在启动时挂载。
  2. 使用 udevautofs 实现更动态的设置。

接下来,我们逐一探讨这两种方法。

方法 1:通过 fstab 在启动时自动挂载

如果你希望外部磁盘在系统启动时自动挂载,可以通过 fstab 文件(文件系统表)来实现。这种方法适用于系统启动时已经连接的磁盘,我个人常用这种方法用于我的家庭实验室。

连接了 1.5TB HDD,希望自动挂载 /sdb2 分区

fstab 自动挂载步骤:

  1. 获取设备名称和 UUID 首先,连接你的 USB 驱动器,然后运行以下命令查看设备名称和 UUID:

    1
    sudo blkid

    找到对应外部磁盘的行,例如:

    1
    /dev/sdb2: UUID="12ab345cd-1234-4166-8539-ff4ff3ff2ff1" TYPE="ntfs"
  2. 编辑 fstab 文件 使用你喜欢的文本编辑器编辑 /etc/fstab 文件(需要超级用户权限):

    1
    sudo nano /etc/fstab

    在文件末尾添加如下内容:

    1
    UUID=12ab345cd-1234-4166-8539-ff4ff3ff2ff1 /media/hdd auto defaults,nofail,x-systemd.automount 0 2

    替换 UUID 为你磁盘的实际值,并根据需要调整挂载点(例如 /media/hdd)。

  3. 重载 systemd 并重启系统 保存文件后,运行以下命令使配置生效:

    1
    sudo systemctl daemon-reload

    然后重启系统。启动后,磁盘应会自动挂载到指定位置。

💡 提示:这种方法同样适用于双系统中自动挂载 Windows 分区。

方法 2:使用 udevautofs 动态挂载

如果你希望外部磁盘仅在插入时自动挂载,而不是启动时挂载,可以使用 udev 规则和 autofs 实现动态挂载。

这种方法更适合经常更换 USB 驱动器或不希望它们在启动时挂载的情况。

udevautofs 动态挂载步骤:

  1. 创建 udev 规则文件/etc/udev/rules.d/ 目录下创建新规则文件:

    1
    sudo nano /etc/udev/rules.d/usb_auto_mount.rules

    添加以下内容:

    1
    2
    3
    4
    5
    ACTION=="add", KERNEL=="sd*", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="usb", \
    SYMLINK+="usbdisks/%k", MODE:="0660", \
    RUN+="/bin/ln -sf /media/hdd/%k /media/usb-sticks/%k"
    ACTION=="remove", KERNEL=="sd*", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="usb", \
    RUN+="/bin/rm /media/usb-sticks/%k"

    解释

    • ACTION=="add":触发规则,当检测到新设备(如 USB)。
    • KERNEL=="sd*":匹配设备名以 "sd" 开头的设备(典型的存储设备)。
    • ENV{DEVTYPE}=="partition":仅针对分区设备。
    • SYMLINK+="usbdisks/%k":在 /dev/usbdisks/ 中为设备创建符号链接。
    • RUN+:在设备添加或移除时运行指定的命令。
  2. 重新加载 udev 规则

    1
    sudo udevadm control --reload-rules
  3. 配置 autofs 编辑 auto.master 文件,指示 autofs 挂载 USB 驱动器:

    1
    sudo nano /etc/auto.master

    添加如下行:

    1
    /media/hdd /etc/auto_mount.usb --timeout=60

    然后创建对应的自动挂载映射文件:

    1
    sudo nano /etc/auto_mount.usb

    添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    fstype=$(/sbin/blkid -o value -s TYPE /dev/usbdisks/${1})
    if [ "${fstype}" = "vfat" ] ; then
    echo "-fstype=ntfs,sync,uid=0,gid=plugdev,umask=007 :/dev/usbdisks/${key}"
    exit 0
    fi
    exit 1

    解释

    • 检测驱动器的文件系统类型(如 NTFS、FAT32)。
    • 根据文件系统类型设置挂载选项。
  4. 测试设置 保存文件后,测试自动挂载功能。驱动器应在连接时挂载,并在闲置 60 秒后卸载。

提示

  • 优先使用 UUID:在配置 fstab 时,建议使用 UUID,而不是 /dev/sdX,因为后者在重启时可能改变。
  • 检查文件系统支持:确保你的系统支持 USB 驱动器的文件系统(例如安装 ntfs-3g 支持 NTFS 驱动器)。
  • 测试配置:配置完成后务必进行测试,确保磁盘正常挂载。使用 journalctl 可帮助诊断问题。

结论

通过自动挂载功能,你可以极大地简化工作流程。我最近在为树莓派设置 DIY NAS(网络附加存储)时遇到了这个问题。驱动器未能在重启后自动挂载,导致备份进程中断。

通过本文的两种方法,你可以确保外部存储设备在无需人工干预的情况下始终可用。根据需求选择适合你的方法:fstab 适合启动时挂载,udev 更适合动态挂载。

💬 如果在配置外部磁盘自动挂载时遇到问题,请随时向我提问!


Linux 中自动挂载 U 盘教程
https://lixuannan.github.io/posts/60226.html
作者
CodingCow Lee
发布于
2024年12月17日
许可协议