此脚本创建十个图像文件并将文件复制到它们。
#!/bin/bash
# script to create multiple floppy images for installing hwp30
#+on virtualbox.
# umount image in case mounted
sudo umount /media/floppy
# create ten blank 2.88mb images.
#+then mount each image and copy over file(s).
for n in {1..10}; do
mkfs.msdos -C "hwp30-${n}.img" 2880
sudo mount -o loop "hwp30-${n}.img" /media/floppy
sudo cp -v "../DISK${n}" /media/floppy
# if first disk then copy over INSTALL.EXE
if [[ $n -eq 1 ]]; then
sudo cp -v ../INSTALL* /media/floppy
fi
sudo umount /media/floppy
done
# done?
if [[ $? -eq 0 ]]; then
echo "done!"
fi
当我运行这个脚本时,文件的挂载、复制和卸载不同步;它们没有按正确的顺序完成。卸载时说“设备正忙”几次。
脚本完成后,我需要umount
多次执行命令以将它们全部卸载(即使它是相同的安装点?)。
我认为这被称为竞争条件。怎么修?
问题可能是,即使复制已经完成,仍然有 IO 从缓存到挂载的映像进行。
sync; sync
在带有 .. 的行之前添加sudo umount /media/floppy
这将请求刷新未写入的数据 - 并等待它发生。