Этот скрипт создает десять файлов образов и копирует на них файл(ы).
#!/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
Когда я запускаю этот сценарий, монтирование, копирование файлов и umounting рассинхронизируются; они выполняются не в правильном порядке. При монтировании несколько раз появляется сообщение "устройство занято".
После завершения сценария мне нужно выполнить команду umount
несколько раз, чтобы смонтировать их все (даже если это одна и та же точка монтирования?).
Я думаю, это называется состояние гонки. Как исправить?
Проблема может заключаться в том, что даже несмотря на то, что копирование завершено, все еще выполняется ввод-вывод из кеша в смонтированный образ.
Добавить синхронизацию; sync
непосредственно перед строкой с sudo umount / media / floppy
.. это запросит сброс незаписанных данных - и будет ждать, пока это произойдет.