외부 SSD가 연결될 때마다 rsync를 수행하는 쉘 스크립트를 어떻게 작성합니까?

외부 SSD가 연결될 때마다 rsync를 수행하는 쉘 스크립트를 어떻게 작성합니까?

rsync 명령을 실행하여 로컬 디렉터리를 외부 SSD와 동기화하고 싶습니다. 나는 다음에 주어진 지시를 따랐다.이 링크.udev 규칙에 따라 일부 명령을 실행합니다. 이는 idVendor 및 idProduct를 기반으로 특정 USB 드라이브에 대해 명령을 실행하는 방법을 보여줍니다. 이건 내 명령이야/etc/udev/rules.d/test.rules:

ATTRS{idVendor}=="0781", ATTRS{idProduct}=="558c", RUN+="/temp/auto_back.sh"

/tmp/auto_back.sh방금 그랬어

#!/bin/bash

# auto backup command 

rsync -avzh /home/abhishek/Dropbox /media/abhishek/Hachiko

나는 이것에 대해 많은 통찰력을 가지고 있지 않습니다. 나는 이것이 유용할 것이라고 생각했습니다. 그러나 그것은 진실이 아니다. 때때로 드라이브가 마운트되기 전에 이 명령이 실행된다는 것을 읽었습니다. 내가 뭘 잘못하고 있고 이것이 어떻게 작동하는지에 대한 통찰력을 줄 수 있습니까? 또한 스크립트의 명령을 실행하기 전에 일정 시간 동안 기다리게 하는 방법이 있습니까?

답변1

udev는 올바른 정보(예: usb)를 전달한 경우에만 작동합니다.

KERNEL=="sd*", ATTRS{vendor}=="<Vendor name>", ATTRS{model}=="<Model>", ATTRS{serial}=="<serial>", RUN+="/your script path"

또는,

하드웨어 종류나 기타 세부 사항을 잘 모르기 때문에 전체 코드를 작성할 수는 없지만 이 로직을 확인하고 넣어주세요.예약 된 일들장기 실행 프로세스를 사용하거나 로그를 계속 확인하세요. 새 하드웨어가 dmesg 출력에 표시되어야 합니다.

if "string matching in dmesg" && "within 30s"; then 
     check disk is properly mounted
     check disk is writable
     start backup
fi

백업을 시작하기 전에 디스크가 논리적으로 쓰기 가능하고 올바르게 마운트되었는지 확인하십시오.

답변2

디스크가 마운트될 때까지 기다리는 시간을 추가할 수 있습니다.

예를 들어:

while ! [ -w /media/abhishek/Hachiko ]
do sleep 1
done

하지만 이렇게 하려면 드라이브를 삽입할 때 GUI에 로그인해야 합니다. 자동 마운트를 무시하고 드라이브를 명시적으로 마운트하는 것이 더 좋습니다.

관련 정보