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 스크립트. 이것이 바로 두 개의 "set -o" 명령문의 목적입니다.

또한 30/60/90초 후에 루프를 벗어나기 전에 루프를 몇 번이나 통과했는지 추적하는 카운터를 추가할 수도 있습니다.

답변2

새로 포맷된 파티션을 사용할 수 있는지 여부를 실제로 감지하려면 운영 체제에 몇 초의 시간을 주어야 합니다. 하나로 시작하다

sleep 10

with 줄 앞에 mount ..(스크립트를 실행하는 동안 그렇게 오래 기다리지 않으려면 줄이면 됩니다).

관련 정보