LINUX.ORG.RU
ФорумAdmin

Синхронизация данных между комп-носитель-комп


0

2

Хочу:

-Вставил флешку в свой Gentoo - все, что лежит в папке ~/VBox скопировалось в папку на флешке, если последняя дата синхронизации, указанная в спец файле на флешке раньше, чем дата в аналогичном файле в папке ~/VBox.Между Flash и Win такую программу сам напишу, не впервой. А вот под линем такого опыта нет. Что-то готовое подскажете? Механизм сравнения даты можно любой другой, этот указал только для примера.

Ответ на: комментарий от GotF

Так, судя по ману к udev все будет не так сложно, как я думал. Назревает вопрос - == ставить на заводской # флешки или на наличие файла? Или я чего не понима?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>> Назревает вопрос - == ставить на заводской # флешки или на наличие файла?

Смотри, какие сведения показывает udevadm и выбирай, что удобнее/надёжнее (дабы скрипт работал только на этой флэшке). Вроде бы там можно сверять несколько свойств сразу. Советую поискать руководства в интернетах — их там полно на все случаи жизни.

GotF ★★★★★
()
Ответ на: комментарий от GotF

Конкретно из этих двух свойств лучше выбрать номер, очевидно. Также можно проверять не саму флэшку, а раздел на ней, если она содержит таковые.

GotF ★★★★★
()
Ответ на: комментарий от GotF

# localhost alex # udevadm info --path=/media
# device path not found
# localhost alex # udevadm info --path=/media/FLASHCARD
# device path not found

Эм... ЧЯДНТ? Флешка присосалась к /media/FLASHCARD

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>> ЧЯДНТ?

Всё не так :)

Во-первых, нет опции --query — её значением можно указать property или all. Во-вторых, --path требует путь до устройства из sysfs (что-то в духе /devices/pci0000:00/0000:00:12.0/host0/target0:0:0/0:0:0:0/block/sda/sda1), поэтому используй --name (например, --name=sdc или sdc1).

GotF ★★★★★
()
Ответ на: комментарий от GotF

Ага, вот теперь вижу:

localhost alex # udevadm info --query=all --name=sdb
P: /devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host4/target4:0:0/4:0:0:0/block/sdb
N: sdb
W: 37
S: block/8:16
S: disk/by-id/usb-silicon_-power_E68902001DE3-0:0
S: disk/by-path/pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0:0
E: UDEV_LOG=3
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0/host4/target4:0:0/4:0:0:0/block/sdb
E: MAJOR=8
E: MINOR=16
E: DEVNAME=/dev/sdb
E: DEVTYPE=disk
E: SUBSYSTEM=block
E: ID_VENDOR=silicon
E: ID_VENDOR_ENC=silicon\x20
E: ID_VENDOR_ID=13fe
E: ID_MODEL=-power
E: ID_MODEL_ENC=-power\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_MODEL_ID=1f23
E: ID_REVISION=0.00
E: ID_SERIAL=silicon_-power_E68902001DE3-0:0
E: ID_SERIAL_SHORT=E68902001DE3
E: ID_TYPE=disk
E: ID_INSTANCE=0:0
E: ID_BUS=usb
E: ID_USB_INTERFACES=:080650:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usb-storage
E: ID_PATH=pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0:0
E: ID_PART_TABLE_TYPE=dos
E: UDISKS_PRESENTATION_NOPOLICY=0
E: UDISKS_PARTITION_TABLE=1
E: UDISKS_PARTITION_TABLE_SCHEME=mbr
E: UDISKS_PARTITION_TABLE_COUNT=2
E: DEVLINKS=/dev/block/8:16 /dev/disk/by-id/usb-silicon_-power_E68902001DE3-0:0 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:5:1.0-scsi-0:0:0:0

Теперь, насколько я понимаю нужно сделать следующее:
Создать в /etc/udev/rules.d/ файл 60-persistent-serial.rules
Создать в нем запись: ACTION==«add|change», ID_SERIAL==«silicon_-power_E68902001DE3-0:0», RUN+=«~/Scripts/backupgf.sh»
И создать скрипт с правами.

Не? Я опять дурак?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Похоже где-то я все-таки дурак - сделал как выше, но ничига не работает. Запускал скрипт руками - срабатывает.

AlexCones ★★★
() автор топика
Ответ на: комментарий от GotF

Имеете в виду замену ~ на /home/alex? Если нет, то везде используются полные пути.

Как можно проверить, что действительно выполняется это правило в файле?

AlexCones ★★★
() автор топика
Ответ на: комментарий от marvin_yorke

Ок, сделал по псто здесь: http://welinux.ru/post/5241/

ACTION==«add», ENV{ID_SERIAL_SHORT}==«E68902001DE3», RUN+=«/home/alex/Scripts/backupgf.sh»

Но нифига не вышло.

В скрипте тоже поправил ~ на свою папку, но nil результата.

Может перезагрузиться надо?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

рабочий пример

ACTION==«add», KERNEL==«sd*», ENV{ID_USB_DRIVER}==«usb-storage», ENV{ID_FS_TYPE}==«ext2», RUN+=«/bin/mount -t ext2 -o rw,nodev,noexec,nosuid,noauto,noatime,nodiratime,sync /dev/%k /media/%k»

попробуй в свой скрипт добавить KERNEL==«sd*»

sprutos ★★★
()
Ответ на: комментарий от sprutos

Что вот так:
KERNEL=«sd*», ACTION==«add», ATTRS{serial}==«E68902001DE3», RUN+=«/home/alex/Scripts/backupgf.sh»

Что вот так:
KERNEL=«sd*», ACTION==«add», ENV{ID_SERIAL_SHORT}==«E68902001DE3», RUN+=«/home/alex/Scripts/backupgf.sh»

Тестовый файл не копируется

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Так, вот, сейчас работает, но немного не так, как хотелось бы.

ACTION==«add», ENV{ID_FS_LABEL}==«FLASHCARD», RUN+=«/usr/local/bin/backupgf.sh»

Переместил скрипт туда и все чудесным образом заработало. НО! Скрипт такой:

#!/bin/bash

cp /home/alex/Vbox/testfile /home/alex/Vbox/testfile2
cp /home/alex/Vbox/testfile /media/FLASHCARD/testfile2

На компьютере файл появляется, на флешке - нет. Значит флешка еще не успевает примонтироваться. Листал сейчас интернет:

Вобшем наконец (после вдумчивого чтения) нашел строчку,

в которой было написано, что при обработке правила,


(допустим при вставке флешки) , RUN+=«program» udev ждёт


от «program» кода завершения. А в это время блокирует любые


попытки достучаться до устройства через шину. А хал в это время


не может получить свойств устройства, а я не могу их обработать,


а udev ждёт.



И как эту заразу обхитрить?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Если в скрипте смонтировать флешку, забекапить данные и размонтировать обратно, дабы удав с халом без дела не маялись - это велосипед с квадратными колесами?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>> И как эту заразу обхитрить?

Монтировать флэшку из скрипта?

GotF ★★★★★
()
Ответ на: комментарий от AlexCones

>> Если в скрипте смонтировать флешку, забекапить данные и размонтировать обратно, дабы удав с халом без дела не маялись - это велосипед с квадратными колесами?

Нет, это нормально.

GotF ★★★★★
()
Ответ на: комментарий от GotF

#!/bin/bash

mount /dev/sdb /mnt/flash
su alex -c 'cp /home/alex/Vbox/testfile /home/alex/Vbox/testfile2'
su alex -c 'cp /home/alex/Vbox/testfile /media/FLASHCARD/testfile2'
umount /dev/sdb

Не копирует на флешку ( Пробовал закомментить umount - флешки в mnt/flash нет.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Скрипт:

#!/bin/bash

mkdir /mnt/flash
mount -vvv /dev/sdb /mnt/flash > /home/alex/myout
mkdir /mnt/flash5
mount -vvv /dev/sdb5 /mnt/flash5 >> /home/alex/myout5
su alex -c 'cp /home/alex/Vbox/testfile /home/alex/Vbox/testfile2'
su alex -c 'cp /home/alex/Vbox/testfile /mnt/flash5/testfile2'
umount /dev/sdb5
rmdir /mnt/flash5
umount /dev/sdb
rmdir /mnt/flash

Выводы:

out1: http://paste.org.ru/?bg75t5
out5: http://paste.org.ru/?mtdouz

Файл на флешке все еще не создается... Хм...

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Я ЭТО СДЕЛАЛ!!!11

#!/bin/bash

mkdir /mnt/flash5
mount -vvv /dev/sdb5 /mnt/flash5 > /home/alex/myout5
su alex -c 'cp /home/alex/Vbox/testfile /home/alex/Vbox/testfile2'
cp /home/alex/Vbox/testfile /mnt/flash5/testfile2
umount /dev/sdb5
rmdir /mnt/flash5

Т.к. в удаве я хватаю момент, когда примонтировалось все, кроме самого раздела, то монтировать сам sdb не надобно, только sdb5. Файл создается. Единственный момент - не напомните, как сменить права уже созданному файлу - дать пользователю alex полный доступ? Просто запись в этот раздел от пользователя недоступна - приходится здесь создавать только от рута.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>> монтировать сам sdb не надобно

Это очевидно же.

Единственный момент - не напомните, как сменить права уже созданному файлу - дать пользователю alex полный доступ?

chown на точку монтирования и монтировать с опциями uid/gid (описано в man mount).

GotF ★★★★★
()
Ответ на: комментарий от GotF

Вы знаете, сейчас попробовал в «боевом» режиме - все скопировалось с правами на пользователя.

Единственное но:

cp -r /home/alex/Vbox/ /mnt/flash5/Backup/

Проходит около минуты «зависания» флешки в пустоте и только потом появляется. Всего 17 мегабайт, а так долго копирует...

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Все, достигнут предел мечтаний:

#!/bin/bash

mkdir /mnt/back
mount /dev/sdb5 /mnt/back
cd /home/alex/Vbox
tar zcf grayfur.tar /home/alex/Vbox/GrayFur/
cp /home/alex/Vbox/grayfur.tar /mnt/back/Backup/
rm /home/alex/Vbox/grayfur.tar
umount /dev/sdb5
rmdir /mnt/back

Последний штрих - как добавить к имени архива текущую дату?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

>tar zcf grayfur.tar /home/alex/Vbox/GrayFur/

cp /home/alex/Vbox/grayfur.tar /mnt/back/Backup/

rm /home/alex/Vbox/grayfur.tar



очевидней заменить на

tar cfz /mnt/back/Backup/grayfur_`date +%F`.tgz /home/alex/Vbox/GrayFur/

sprutos ★★★
()
Ответ на: комментарий от sprutos

А как эту тварь заставить не так делать в архиве:

home
alex
Vbox
GrayFur

А так:

Grayfur

?

Вроде бы cd раньше делаю...

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

cd тут не причем, раз ты прямой путь для tar'а указываешь

элементарного не понимаешь. учи матчасть.
и не тварь, а tar))

sprutos ★★★
()
Ответ на: комментарий от AlexCones

тебе видимо так

tar cfz /mnt/back/Backup/grayfur.tgz /home/alex/Vbox

/home/alex/Vbox — прямой путь то того, что архивить
строчку с cd вообще можешь убрать

sprutos ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.