![숨겨진 파일? (아마도 잘못된 스크립트일 가능성이 높습니다)](https://rvso.com/image/122419/%EC%88%A8%EA%B2%A8%EC%A7%84%20%ED%8C%8C%EC%9D%BC%3F%20(%EC%95%84%EB%A7%88%EB%8F%84%20%EC%9E%98%EB%AA%BB%EB%90%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%BC%20%EA%B0%80%EB%8A%A5%EC%84%B1%EC%9D%B4%20%EB%86%92%EC%8A%B5%EB%8B%88%EB%8B%A4).png)
저는 Debian Jessie의 Beaglebone Black에 새 sdcard를 삽입할 때 Udev가 실행하는 스크립트를 작업 중입니다.
스크립트에서 가장 먼저 수행할 작업은 디렉터리 를 만드는 것입니다 /media/sdcard
. 쉬워야 하는데 어떤 모호한 이유로 작동하지 않습니다...
내가 작성한 스크립트는 다음과 같습니다.
#!/bin/bash -xe
#This script creates the /media/sdcard folder in order to mount the sdcard in it
#Error codes:
# - 2 : /media/sdcard already exist but is not a directory
# - 1 : Failed to create /media/sdcard/
logger -t SDCardscripts 'Entering /root/ServolineScripts/PrepareSDCard.sh script'
if [ -d /media/sdcard ]; then
logger '/media/sdcard is already present. Deleting it.' && rm -rf /media/sdcard;
elif [ -f /media/sdcard ]; then
logger -t SDCardscripts 'A file /media/sdcard already exist! Stopping process, Please look in the /media directory and take a decision with it content'
exit 2
else
logger -t SDCardscripts '/media/sdcard does not exist creating a new one'
fi
mkdir -p /media/sdcard
if [ $? -eq 0 ];then
logger -t SDCardscripts '/media/sdcard directory successfully created';
else
logger -t SDCardscripts 'Failed to create /media/sdcard directory'
exit 1;
fi
logger -t SDCardscripts 'Leaving /root/ServolineScripts/PrepareSDCard.sh script'
SD 카드를 연결할 때 생성되는 로그 라인은 다음과 같습니다.
Nov 24 14:06:34 undefined kernel: [ 5546.379851] mmc0: host does not support reading read-only switch, assuming write-enable
Nov 24 14:06:34 undefined kernel: [ 5546.383558] mmc0: new high speed SDHC card at address 0007
Nov 24 14:06:34 undefined kernel: [ 5546.401181] mmcblk0: mmc0:0007 SD08G 7.42 GiB
Nov 24 14:06:34 undefined rsyslogd-2007: action 'action 17' suspended, next retry is Fri Nov 24 14:07:04 2017 [try http://www.rsyslog.com/e/2007 ]
Nov 24 14:06:34 undefined kernel: [ 5546.413258] mmcblk0: p1
Nov 24 14:06:34 undefined SDCardscripts: Entering /root/ServolineScripts/PrepareSDCard.sh script
Nov 24 14:06:35 undefined logger: /media/sdcard is already present. Deleting it.
Nov 24 14:06:35 undefined systemd-udevd[2003]: Process '/root/ServolineScripts/PrepareSDCard.sh' failed with exit code 1.
Nov 24 14:06:35 undefined systemd-udevd[2003]: Process '/bin/mount /dev/%K /media/sdcard' failed with exit code 32.
그래서 내가 이해하는 것은 다음과 같습니다.
- Udev는 내 스크립트에 입력합니다. 확인
- Udev가 파일이 존재하는지 성공적으로 확인했습니다.
- Udev가 mkdir 실행에 실패함
이 스크립트를 실행한 후 다음을 시도했습니다.
root@undefined:~/ServolineScripts# cd /media
root@undefined:/media# ls -l
total 0
댓글이 없습니다...
마지막으로 /media/sdcard가 이미 존재하는지 확인하기 위해 행을 삭제하려고 시도했으며(첫 번째 if 및 elif 모두) 이 경우 mkdir 실행에서 프로세스가 실패합니다.
이 증상은 µSdcard를 플러그인할 때 발생하지만, 를 입력하여 스크립트를 실행하면 bash -xe /root/ServolineScripts/PrepareSDCard
다음과 같은 결과가 나타납니다.
+ logger -t SDCardscripts 'Entering /root/ServolineScripts/PrepareSDCard.sh script'
+ '[' -d /media/sdcard ']'
+ logger '/media/sdcard is already present. Deleting it.'
+ rm -rf /media/sdcard
+ mkdir -p /media/sdcard
+ '[' 0 -eq 0 ']'
+ logger -t SDCardscripts '/media/sdcard directory successfully created'
+ logger -t SDCardscripts 'Leaving /root/ServolineScripts/PrepareSDCard.sh script'
(그리고 분명히 mkdir 실행에 성공했고 /media/sdcard/가 생성되었습니다...)
* 문제가 어디에 있는지에 대한 아이디어가 있거나 이 문제를 디버깅하는 데 도움이 될 수 있는 것이 있으면...*
(4일째인데... 비글을 새로운 이미지로 복원해보기도 했어요... :-( )
추신: 제가 작성한 다른 반환이 좋은 명령이 아니라는 것을 이미 보았습니다... 값을 반환하는 동안 스크립트를 중단하는 방법을 알고 있다면 그것을 사용하겠습니다! 하지만 이건 두 번째 주제인데...
답변1
활성화했기 때문에 오류가 발생하는 즉시 스크립트가 종료됩니다 bash -e
.
실패한 명령은 입니다 rm -rf
. 스크립트가 실행되는 시점에 파일 시스템이 마운트되어 있기 때문입니다 /media/sdcard
.
예
# Prepare disk as image
dd if=/dev/zero bs=1M count=100 >100M.img
lo=$(losetup --find --show 100M.img | tee /dev/stderr)
fdisk $lo <<X
n
p
1
w
X
losetup -d $lo
lo=$(losetup --find --show --partscan 100M.img | tee /dev/stderr)
# Create and mount new filesystem
mkfs -t ext4 ${lo}p1
mkdir -p /mnt/dsk
mount ${lo}p1 /mnt/dsk
# Demonstrate trying to remove the directory tree (and failing)
rm -rf /mnt/dsk
echo SS=$?
# All done
umount /mnt/dsk
losetup -d $lo
rm 100M.img