You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux Shell脚本检测挂载并备份文档执行异常排查

Shell脚本备份问题排查与修正

错误点汇总

  • 变量名拼写错误:你提前定义的备份目标路径变量为docsbackup,但调用sync_files函数时误写为docksbackup,多了字母k,导致rsync接收的目标参数为空,执行逻辑完全不符合预期。
  • 挂载检测逻辑错误:你当前检测的挂载点是/run/media/user1,这个是系统默认的移动介质挂载父目录,本身默认就处于挂载状态,会导致判断永远走「已挂载」分支;且你计划挂载的/dev/sdc3实际对应挂载点应该是/run/media/user1/linux_backup而非上层父目录,挂载逻辑也匹配错误。
  • 权限缺失:普通用户执行mount挂载块设备需要root权限,你脚本里的mount $filesystem $mount没有加sudo,执行时会直接报错权限不足。
  • 变量引用不规范:所有变量引用都没有加双引号,若路径中存在空格、特殊字符时,会导致参数被错误拆分,命令执行失败。
  • 退出状态码不规范:awk脚本中返回exit -1不符合shell脚本的状态码规范,shell中错误状态码范围为1-255,返回-1会被自动转换为255,虽然不影响当前判断但存在潜在兼容问题。

修正后的完整脚本

#!/bin/bash
# 检测linux_backup文件系统是否已挂载
# 未挂载则先挂载再执行文档备份

docs="/home/user1/Documents"
# 修正为备份盘实际对应的挂载点
mount_point="/run/media/user1/linux_backup"
docsbackup="${mount_point}/home/user1/Documents"
filesystem="/dev/sdc3"

sync_files() {
    local SOURCE="$1"
    local TARGET="$2"
    # 提前创建目标目录避免rsync路径错误
    sudo mkdir -p "$TARGET"
    sudo rsync --progress -r --update -aAXv "$SOURCE"/ "$TARGET"/
}

# 用findmnt检测挂载点比解析mount输出更稳定
if findmnt --mountpoint "$mount_point" >/dev/null 2>&1;
then
    echo "linux_backup已挂载,开始备份"
    sync_files "$docs" "$docsbackup"
else
    echo "linux_backup未挂载,先执行挂载操作"
    # 提权挂载,提前创建挂载点目录
    sudo mkdir -p "$mount_point"
    sudo mount "$filesystem" "$mount_point"
    # 挂载成功校验,避免挂载失败仍然执行备份
    if [ $? -ne 0 ]; then
        echo "挂载失败,退出备份流程"
        exit 1
    fi
    sync_files "$docs" "$docsbackup"
fi

补充说明

  • rsync的源路径末尾加/表示同步目录内的内容,而非把整个源目录复制到目标路径下,避免出现嵌套目录的问题
  • 新增了挂载成功判断逻辑,避免挂载失败后备份文件写入本地磁盘占用空间

内容的提问来源于stack exchange,提问作者Python_plusSharp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:45:03