Выключить rsync, просто подключив USB-накопитель?

4515
Mister IT Guru

Я хотел бы знать, возможно ли автоматически смонтировать и запустить rsync для синхронизации USB-накопителя с каталогом? В частности, я хотел бы скопировать столько данных, сколько может вместить диск, и удалять только самые старые файлы, если требуется место. Я бы предположил, что сделаю что-то подобное со скриптом, но моя проблема в том, с чего начать! Любые комментарии и предложения приветствуются.

Благодарю вас

6

2 ответа на вопрос

1
Dan M.

Возможно, вы захотите изучить правило Udev для запуска скрипта. Что хорошо в правилах udev, так это то, что вы можете заблокировать, какой usb-диск используется для резервного копирования, поэтому не каждый usb-диск запускает его.

Первый шаг - заставить работать правило udev:

Вот отличный учебник по написанию правил udev,
а вот еще один

Затем вы можете перейти к вашему аспекту сценариев. Первая ссылка посвящена запуску скрипта из udev, поэтому вам просто нужно вызвать из него rsync.

man: rsync имеет много информации об использовании.

Еще одна ссылка, которую я собирался опубликовать: https://wiki.archlinux.org/index.php/Udev В разделе «Советы и хитрости» есть интересные примеры. matthias krull 13 лет назад 0
@Mugen Kenichi - Вы должны любить документацию Arch. Dan M. 13 лет назад 0
0
Linker3000

Вот внутренняя часть задания резервного копирования, которое проверяет наличие смонтированного жесткого диска на основе USB. Было бы легко изменить его для других целей, а затем продолжать вызывать его через cron или, возможно, запустить его в фоновом режиме с циклом сна вокруг ключевых частей. Этот сценарий позволяет вам указать, где USB-диск может быть найден (sdd), но было бы довольно легко изменить его для поиска USB-накопителя по идентификатору диска.

Источником резервной копии является смонтированный диск NFS, но, очевидно, его можно изменить / удалить при необходимости.

В середине есть цикл for, который указывает места для резервного копирования

 # V1.01 # Uses variable for usbdisk partition  started=`date` usbdisk='sdd1'  if [ $(mount | grep -c /mnt/usbdisk) != 1 ]; then echo "USB disk is not mounted - trying to mount..." mount /dev/$usbdisk /mnt/usbdisk if [ $(mount | grep -c /mnt/usbdisk) != 1 ]; then echo "USB disk still not mounted - alerting admins and quitting" echo "USB disk is not mounted on TUX9 so backup cannot continue" | mail -s "TUX9 backup problem" myemailaddress@here.tld exit 1 fi fi  if [ $(mount | grep -c /mnt/nas) != 1 ]; then echo "NAS NFS mount is not present - trying to mount..." mount -t nfs -o proto=tcp,port=2049 mynas3:nas /mnt/nas if [ $(mount | grep -c /mnt/nas) != 1 ]; then echo "NAS NFS mount is still not present - alerting admins and quitting" echo "NAS NFS mount is not present on TUX9 so backup cannot continue" | mail -s "ASLTUX9 backup problem" myemailaddress@here.tld exit 1 fi fi  echo "All mount points present - backup starting..."  for i in /boot / /home /var /mnt/nas # for testing for i in /boot do if [ $i = "/" ]; then rsync -axv --delete root@tux8.test.lan:$i /mnt/usbdisk/backup/root elif [ $i = "/mnt/nas" ]; then rsync -axv --delete $i/ /mnt/usbdisk/backup/nas else rsync -axv --delete root@tux8.test.lan:$i/ /mnt/usbdisk/backup$i fi done  echo done, started at $started, finished at `date` echo "Backup of NAS3 and TUX8 to USB disk on TUX9 done. Started at $started, finished at `date`" | mail -s "TUX9 backup completed" myemailaddress@here.tld