我生成了一个简单的 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