Как избежать состояния гонки при монтировании, копировании файлов в и монтировании образов

Этот скрипт создает десять файлов образов и копирует на них файл(ы).

#!/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 несколько раз, чтобы смонтировать их все (даже если это одна и та же точка монтирования?).

Я думаю, это называется состояние гонки. Как исправить?

0
задан 1 August 2021 в 09:08

1 ответ

Проблема может заключаться в том, что даже несмотря на то, что копирование завершено, все еще выполняется ввод-вывод из кеша в смонтированный образ.

Добавить синхронизацию; sync непосредственно перед строкой с sudo umount / media / floppy .. это запросит сброс незаписанных данных - и будет ждать, пока это произойдет.

2
ответ дан 20 August 2021 в 10:30

Другие вопросы по тегам:

Похожие вопросы: