Słowa kluczowe: synchronizacja, montowanie, HAL, cron, rsync, notify-osd, pmount, env, dual boot, terminal, skrypt, shell, bash, Ubuntu, Windows
Artykuł przedstawia sposób rozwiązania zadania automatycznej synchronizacji zawartości folderu Moje dokumenty umieszczonego na partycji systemu Windows z katalogiem Dokumenty na partycji Ubuntu.
W przypadku, gdy zachodzi potrzeba użycia systemu Windows jako platformy dla programów, które nie działają zbyt dobrze pod Ubuntu ani w wirtualnej maszynie (np. karty telewizyjne, wideo) pożądana jest synchronizacja efektów pracy na Windows z katalogiem domowym na Ubuntu. Osiągnąć to można stosując narzędzie rsync, które potrafi synchronizować i kopiować pliki oraz katalogi na lokalnych dyskach lub dyskach sieciowych. Artykuł przedstawia synchronizację między dyskami lokalnymi.
Podczas instalacji systemu, Ubuntu rozpoznaje partycje NTFS Windows oraz domyślnie montuje je w katalogu /media. Zakładam, że ten krok został wykonany. Jeżeli partycje nie montują się przy starcie systemu należy je ręcznie zamontować przed przystąpieniem do synchronizacji.
W przypadku, gdy dane znajdują się na dysku przenośnym (removable devices) do zamontowania można użyć programu pmount. Takie podejście nie wymaga tworzenia wpisów w /etc/fstab oraz w pełni polega na warstwie abstrakcji sprzętowej (HAL). Oznacza to (w bardzo dużym uproszczeniu), że HAL automatycznie stworzy katalog w /media, podmontuje tam wskazane urządzenie, i co - bardzo istotne - wszystkie te operacje nie będą wymagać praw administratora (root).
Co w przypadku, gdy dane nie znajdują się na dysku przenośnym, a na przykład na dysku SATA? Program pmount odmówi zamontowania dysku SATA. Można wymusić montowanie dysków SATA umieszczając ścieżkę do urządzenia w pliku /etc/pmount.allow. W tym przypadku wskazane urządzenie nie może mieć już istniejącego wpisu w /etc/fstab.
Przykład dla dysku wskazywanego przez /dev/sdb1 (dysk SATA, dowiedz się więcej o oznaczeniach urządzeń dyskowych). Jeżeli nie masz zainstalowanego pmount, zainstaluj go używając
sudo apt-get install pmount
Program pmount nie pozwoli na zamontowanie dysku SATA, należy to wymusić dodając do /etc/pmount.allow linijkę (użyj sudo vim /etc/pmount.allow):
/dev/sdb1
Montowanie (uzyskanie dostępu do danych na dysku):
pmount /dev/sdb1
i odmontowanie (zamknięcie dostępu do danych na dysku):
pumount /dev/sdb1
Synchronizacja plików powierzona zostanie programowi rsync. Pełną listę opcji narzędzia można uzyskać wpisując man rsync, najważniejsze z nich przedstawiono tutaj. Program zainstalujesz wpisując w konsolę:
sudo apt-get install rsync
Skrypt basha (umieszczony w /usr/local/etc/rsync/win2ubuntu.sh), który zajmie się synchronizacją, ma następującą strukturę:
#!/bin/bash USER_NAME="user" DISK_DEVICE="/dev/sdb1" DISK_LABEL="/media/WINDOWS" # Synchronizacja dokumentów "/home/$USER_NAME/Moje dokumenty" z dokumentami # "Moje dokumenty" w systemie Windows XP na dysku $DISK_DEVICE /usr/bin/notify-send -t 10000 -u normal "Synchronizacja dokumentów" "Trwa synchronizacja dokumentów z folderem Moje dokumenty w systemie Windows dla użytkownika $USER_NAME." pmount $DISK_DEVICE $DISK_LABEL /usr/bin/rsync -q -r -b -t -z -h --delete --copy-unsafe-links "$DISK_LABEL/Documents and Settings/$USER_NAME/Moje dokumenty/" "/home/$USER_NAME/Moje dokumenty/" pumount $DISK_DEVICE /usr/bin/notify-send -t 5000 -u normal "Synchronizacja dokumentów" "Zakończono synchronizację dokumentów z folderem Moje dokumenty w systemie Windows dla użytkownika $USER_NAME."
Ścieżka /dev/sdb1 odpowiada punktowi montowania /media/WINDOWS. Program notify-send wyświetli odpowiednie powiadomienie przed i po synchronizacji.

Powiadomienie przed rozpoczęciem synchronizacji.
Automatyczne uruchomienie skryptu co 12 godzin zapewni ustawienie go jako zadania cron. W tym celu należy wykonać sudo crontab -e i dodać linijkę
0 12 * * * env DISPLAY=:0.0 /bin/sh /usr/local/etc/rsync/win2ubuntu.sh
Wywołanie skryptu w zmienionym środowisku (polecenie env) z obsługą trybu graficznego (DISPLAY=:0.0) umożliwi wyświetlenie graficznego powiadomienia przez notify-send. Należy wykonać xhost +local:, aby móc odebrać graficzne powiadomienie.