Bashスクリプトはディスクを検出できません

Bashスクリプトはディスクを検出できません

次のように/dev/disk/by-label/backup_disk再フォーマットしてインストールする必要があるスクリプトがあります。/mnt/backup_disk

/sbin/mkfs.ext4 -q -L backup_disk /dev/disk/by-label/backup_disk
mount -t ext4 /dev/disk/by-label/backup_disk /mnt/backup_disk -o noatime,data=writeback

バッシュ出力は次のとおりです

mount: special device /dev/disk/by-label/backup_disk does not exist

ただし、実行後に端末に入力すると、次のようになります。

mount /dev/disk/by-label/backup_disk /mnt/backup_disk/

エラーなしですべてが正常にインストールされました。

スクリプトを使用するとエラーが発生するのはなぜですか?

編集:コメントで提案されているように数秒の睡眠を追加することで修正されました。

答え1

一種の遅延ループ(最大反復回数を含む)を実行し、1秒間待機してからディレクトリが現在/dev/disk/by-label/backup_disk存在することを確認する必要があります。以下はうまくいきますが、デバッグが必要な場合があります。

#!/bin/bash
set -o errexit
set -o unset

$DIRECTORY=/dev/disk/by-label/backup_disk
# do your reformat here
until [ -d "$DIRECTORY" ]; do 
  sleep 1 
done
# now continue with the mount and other operations...

私は書くのが大好き防御的なbashスクリプト。これが2つの「set -o」ステートメントの目的です。

30/60/90秒後にループを出る前にループを何回通過したかを追跡するカウンタを追加することもできます。

答え2

新しくフォーマットされたパーティションが利用可能かどうかを実際に検出するには、オペレーティングシステムに数秒の時間を費やす必要があります。一つで始まる

sleep 10

with 行の前にmount ..(スクリプトの実行中にそれほど長く待たないようにするには減らすだけです)。

関連情報