跳转到内容
实战指南storage

安全挂载移动存储

通过多项属性识别移动设备,以只读方式挂载、验证并正常卸载。

状态
已审阅
难度
进阶
风险
会改变系统
平台
linux · raspberry-pi-os

通过容量、型号、传输总线、文件系统和 UUID 识别目标,以只读方式挂载到独立目录,确认来源和选项后正常卸载。

  • 已保存重要数据;未知或疑似损坏的介质应先制作镜像,不在原件上试错。
  • 当前用户可使用 sudo;不要把整段操作放入 root Shell。
  • 不得仅凭 /dev/sdX 名称选择设备,也不得使用本页占位值。
  1. 记录根文件系统来源,再列出块设备:

    Terminal window
    findmnt -no SOURCE,TARGET,FSTYPE,OPTIONS /
    lsblk -o NAME,PATH,TYPE,SIZE,FSTYPE,UUID,LABEL,MOUNTPOINTS,MODEL,TRAN

    根据插拔前后变化及多项属性识别目标,并确认它不属于根文件系统设备链。

  2. 把已核对的 UUID 写入变量,并阻断未替换的占位值:

    Terminal window
    DEVICE=/dev/disk/by-uuid/UUID_FROM_LSBLK
    MOUNT_POINT=/mnt/removable
    if [[ "$DEVICE" == */UUID_FROM_LSBLK ]]; then
    printf '%s\n' '请替换并核对 UUID' >&2
    elif [[ ! -b "$DEVICE" ]]; then
    printf '%s\n' '目标不是块设备' >&2
    elif findmnt --source "$DEVICE"; then
    printf '%s\n' '设备已挂载,请先核对现有挂载' >&2
    else
    lsblk -o NAME,PATH,SIZE,FSTYPE,UUID,LABEL,MOUNTPOINTS -- "$DEVICE"
    fi

    只有最后一条 lsblk 成功显示且再次人工核对无误,才继续下一步。

  3. 创建专用目录并只读挂载:

    Terminal window
    sudo mkdir -p -- "$MOUNT_POINT"
    sudo mount -o ro -- "$DEVICE" "$MOUNT_POINT"
    findmnt -no SOURCE,TARGET,FSTYPE,OPTIONS --mountpoint "$MOUNT_POINT"
  4. 确认来源是目标 UUID、选项含 ro 后再只读查看:

    Terminal window
    ls -la -- "$MOUNT_POINT"
  5. 退出目录、关闭打开的文件并卸载:

    Terminal window
    cd -- /
    sudo umount -- "$MOUNT_POINT"
    if findmnt --mountpoint "$MOUNT_POINT" >/dev/null; then
    printf '%s\n' '仍处于挂载状态,暂勿拔出' >&2
    else
    sudo rmdir -- "$MOUNT_POINT"
    fi

挂载后 findmnt 必须显示预期来源、目标和 ro。卸载后再次查询不应返回该挂载点;只有确认已卸载后才移除设备。

挂载失败时不要格式化或反复尝试写入。若只创建了空目录,执行 sudo rmdir -- "$MOUNT_POINT"。若挂载到了错误设备,停止访问并按上一步正常卸载;不要删除介质内容来“回滚”。

现象 检查 处理
找不到设备 重新运行 lsblk,查看最新 dmesg 检查供电、线缆和内核消息,不猜设备名。
未知文件系统 查看 FSTYPE 与内核错误 不要格式化;确认系统是否支持该文件系统。
target is busy 终端是否位于挂载点,文件是否仍打开 离开目录并关闭程序后重试,不立即强制或延迟卸载。
选项不是 ro findmntOPTIONS 立即停止写入并正常卸载,重新核对命令。