通过 bash 脚本将文件复制到 SD 卡会损坏数据

通过 bash 脚本将文件复制到 SD 卡会损坏数据

我生成了一个简单的 bash 脚本来将文件复制到 SD 卡。我想将启动映像复制到启动分区,将二进制文件/库复制到根分区。这是我的脚本:

#!/bin/bash

if [ -d /media/user/boot ]
then
    if [ -d /media/user/root ]
    then
        cp -v output/boot/boot.bin /media/user/boot
        sudo cp -rvp output/devroot/* /media/user/root/
        echo "Sync"
        sync
        echo "Eject"
        sudo eject /dev/sdc
        echo "Ready to test"
    else
        echo "Mount root!"
    fi
else
    echo "Mounting boot!"
fi

当我再次插入 SD 卡时,运行 dmesg 时我读到了如下消息:

FAT-fs (sdc1):卷未正确卸载。部分数据可能已损坏。

请运行 fsck。I/O 错误,dev sdc,扇区 90514

并且隔板安装得不太好。

如果我手动运行命令,一切都会顺利。

答案1

问题与脚本无关。当我更换读卡器时,它开始正常工作。

我考虑了 Videonauth 的评论:“另一个想法是用 && 结束同步命令,这样脚本只有在命令成功时才会继续。” 因此,这是我的最终脚本,它将节省我几秒钟的时间:

#!/bin/bash

BOOT=$1
ROOT=$2

if [ -d $BOOT ]
then
    if [ -d $ROOT ]
    then
        cp -v output/boot/boot.bin $BOOT
        sudo cp -rvp output/devroot/* $ROOT
        echo "Sync"
        sync &&
        echo "Eject"
        sudo eject /dev/sdc
        echo "Ready to test"
    else
        echo "Mount root!"
    fi
else
    echo "Mount boot!"
fi

相关内容