Форум русскоязычного сообщества Ubuntu


Автор Тема: Резервное копирование файлов с виндовой шары  (Прочитано 6556 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн $mert(Nick)

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Странный
    • Просмотр профиля
Доброго времени суток....
Столкнулся с такой проблемой, надо с расшареного каталога в винде (\\10.71.46.25\base) ежедневно копировать все файлы и папки( на всяк случай ;) )...
Нужен скрипт, для дальнейшего запуска ч\з крон ...
Прошу пинка в нужную сторону... Понятия не имею с чего начать рыть...
« Последнее редактирование: 27 Май 2009, 23:43:34 от $mert(Nick) »

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
Примерный шаблон скрипта:
mount -t cifs ...
cp -R ...
umount ...

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Завтра покажу наколенный скрипт, который юзаю на работе :)

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25931
    • Просмотр профиля
Поставить на винду крон (nncron f.e.), настроить архивацию (полную или инкрементальную).
А сархивированные уже вытаскивать на сервер.
У меня задача была обратная, надо было с сервера растащить бэкап по машинам-киентам, но решение было аналогичное.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн zilog82

  • Активист
  • *
  • Сообщений: 420
  • Hello, World!!!
    • Просмотр профиля
Примерный шаблон скрипта:
mount -t cifs ...
cp -R ...
umount ...

Лучше, мне кажется, так
smbmount //10.71.46.25/base {mount_point} -o guest; //или user={user},passw={pass}
....
smbumount {mount_point};
ибо к венде просто cifs замучаешься применять, проще смбфс-ом.

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Вот... не судите строго это наколенное поделие ;D
сам скрипт
#!/bin/bash
# Script for backing up documents from windows shares
# (c) 2008 by Yury Chudnovsky
if [ "x"$USER == "xroot" ]; then echo "Do not run this under root for safety reasons, run under user!"; return -254; fi
# Include config
. $0.cfg
# Check if network is up
ping -qc 2 $local_ip >> /dev/null || return -1
# Is there master? If yes, wee do need to do anything, master will send files to us
if [ "x"$clt == "x1" ]; then ping -qc 2 $master >> /dev/null && exit 1; fi
pswd=$0.pswd
if [ ! -f $pswq ]; then echo "Can not open passwords file!" && exit -2; fi
# Complete list of computers by names
cmp_list=`smbtree -N | awk '{ print $1 }' | grep -e '^\\\\\\\\[A-Z0-9]*\\\\[A-Z]\\$$' | sed -e 's/[A-Z]\\$//g' | sed -e 's/\\\\//g' | uniq`
if [ "x$DEBUG" == "x1" ]; then echo "Total computers:" && echo $cmp_list | wc -w; fi
# Did we have some work?
if [ "0`echo $cmp_list | wc -c`" -eq 0 ]; then exit 1; fi
cd $bkp_home || return -3
# Receive complete shared disk list
disks=`smbtree -N | awk '{ print $1 }' | grep -e '^\\\\\\\\[A-Z0-9]*\\\\[A-Z]\\$$'`
# Dirs by date
#mkdir `date +%d` 2> /dev/null
#cd `date +%d` || return -4
# or by day of week
mkdir `date +%u` 2> /dev/null
cd `date +%u` || return -5
# Wipe old data
rm -rf *
for i in $disks; do
# Each share will be downloaded in separate dir
        mkdir -p `echo $i | sed -e 's/\\\\\\\\//g' | sed -e 's/\\\\/\\//g'` 2> /dev/null
        cd `echo $i | sed -e 's/\\\\\\\\//g' | sed -e 's/\\\\/\\//g'` || return -6
        if [ "x$DEBUG" == "x1" ]; then echo Backing up `echo $i | sed -e 's/\\\\\\\\//g' | sed -e 's/\\\\/\\//g'`; fi
        smbclient $i -A$pswd -c 'recurse on; prompt off; mask *.doc; mget \; mask *.xls; mget \; mask *.dbf; mget \; mask *.fpt; mget \; mask *.cdx; mget \; mask *.shs; mget \; mask *.tcb; mget \; mask *.ini; mget \; mask *.fr3; mget \; mask *.rtf; mget \; mask *.mdb; mget \; mask *.std; mget \; mask *.imd; mget \; mask *.mem; mget \; mask *.xml; mget \' 2> /dev/null | grep -v 'NT_STATUS_ACCESS_DENIED' | grep -v 'NT_STATUS_SHARING_VIOLATION'
        if [ "x$clt" != "x1" ]; then
                # For a disk space economy, let's compress data and send to slave
                7z a -t7z -r -mmt=on /tmp/$i.7z * > /dev/null 2> /dev/null
                scp /tmp/$i.7z frank@vserver-slave:/home/backups/`date +%d`/`echo $i | sed -e 's/\\\/_/g'`.7z
                rm /tmp/$i.7z
        fi
done
cd $bkp_home/`date +%u`
echo "Done"
.cfg к нему - то, что я вынес из скрипта
# Config file for smb_backup
local_ip=192.168.1.254
master=192.168.1.254
w_grp=WORKGROUP
bkp_home=/home/backups
DEBUG=1
clt=0
надо бы типы файлов туда же, а так же имена серверов и логинов юзаемых для быкапа на слейв-сервер...
.pswd - файл для логина и пароля
username = Administrator
password = ххххххх
domain   =
Маленькая не решённая проблемка - вызывать скрипт надо с полным путём, иначе не срабатывает определение конфига и парольного файла.
Как всё работает: при запуске определяется, есть ли сеть, сконфигурирован ли сей комп как запасной (слейв, переменная clt в конфиге), если да и жив мастер - больше ничего не делается.
Если мастер не пингуется или мы и есть мастер - начинаем получать все локальные виндовые диски, которые у винды расшарены всегда на автомате. Поиск делается по всем компам одной рабочей группы. На клиентах, соответственно, ничего делать не надо - достаточно включить комп в нашу рабочую группу и обеспечить логин и пароль администратора такой же, как на остальных, и он уже будет бэкапиться.
По номеру текущего дня (1-7, 1-5 для пятидневки) создаётся директория, в которую и складываются бэкапы: отдельная директория на каждый компьютер, в которой по отдельной директории для каждого диска. В этой директории диска сохраняется полная структура виндовых папок (всех-всех), плюс в этих папках файлы указанного в скрипте типа :)
Далее, если мы - мастер-сервер, то сжимаем бэкапы дисков в архивы (тип и силу сжатия - по вкусу/силам) и заливаем на слейв.
Для заливки используется беспарольный доступ по ssh по ключам, заранее настроенный между юзером на мастере, под которым делается бэкап и аналогичным юзером на слейве.
И на последок. Если вызывыаете скрипт из крона - то делайте это так:
LC_ALL=ru_RU.UTF-8 /home/user/smb_backup
иначе будут нечитаемые имена файлов (т.е. по дефолту при вызове из крона почему-то LC_ALL=C, хотя это может быть только для главного кронтаба)
Коды ошибок, выводимые скриптом:
0: сделали что смогли
1: мы слейв, жив мастер, всё в порядке, выходим, либо просто не нашлось ни одного компа с виндой в данной рабочей группе
-1: сетка лежит
-2: не получилось открыть файл паролей - либо права, либо путь не найден - убедитесь, что запускали с полным путём
-3: не получилось перейти в директорию для бэкапов, проверьте права
-4: не получилось в директории для бэкапа создать папку по сегодняшнего дня, проверьте права
-5: создали, а войти не смогли... странно конечно, если случилось, в первую очередь проверьте права - может директория уже есть но с неправильными правами
-6 аналогично, проблемы с созданием или переходом в директорию отдельного виндового диска (c$, d$ и т.д.)
« Последнее редактирование: 28 Май 2009, 11:40:54 от Frank »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 25931
    • Просмотр профиля
Слишком сложно. Даже вчитываться не стал.
Принцип "чем проще, тем меньше вероятность ошибки" еще никто не отменял.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Принцип "чем проще, тем меньше вероятность ошибки" еще никто не отменял.
странно что ты не в DOS'е сидишь :) Принцип, в общем случае, неверен.

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
zilog82, хз, у меня вроде бы проблем не было, а smbfs по-любому надо ставить.

Оффлайн $mert(Nick)

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Странный
    • Просмотр профиля
Всем гуру большое СПС за подсказки....
Я воспользовался этим

mount //10.71.46.25/baza /media/smb 
cp -R /media/smb/*.* /home/smertnick/Backup

но, проблемы с кирилицей, не копирует файлы с кирилическими символами в имени....  Есть решение?

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
man mount раз через него делаешь, правильную кодировку выставляй

Оффлайн zilog82

  • Активист
  • *
  • Сообщений: 420
  • Hello, World!!!
    • Просмотр профиля
mount .... .... -o utf8

Оффлайн graddata

  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1771
  • BIGCloud
    • Просмотр профиля
$ cd /bekup
$smbget --guest -R smb://192.168.0.0/test

Ну и в крон его засунуть или в $nano /etc/rc.local

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15194
    • Просмотр профиля
    • aetera.net
grad-data, замечательное рядом, спасибки за smbget.

***
Кстати, советую обратить внимание на ключик -r -- в хозяйстве пригодится. :)

Оффлайн graddata

  • PreSale
  • Администратор
  • Старожил
  • *
  • Сообщений: 1771
  • BIGCloud
    • Просмотр профиля
grad-data, замечательное рядом, спасибки за smbget.
Всегда рад помочь.

Я баловался этой темой ранее.
https://forum.ubuntu.ru/index.php?topic=29135.0



Синхронизация файлов с монтированной папки.
1 &#; в /etc/fstab прописываем:
//172.172.172.172/sync /mnt/sync smbfs iocharset=utf8,codepage=cp866 0 0
2 &#; ждём чуда, что всё монтируется.
3 &#; PS: естественно перед этим создать папку /mnt/sync и дать ей права 0777

После того, как всё смонтировано удачно, приступаем к следующим операциям.
1 &#; Ставим Grsync.
2 &#; Указываем папку исходную, далее конечную.
3 &#; Обзываем наш профиль «1». Так меньше писать.
4 &#; тестируем его.
5 &#; радуемся, что всё работает.
В консоли тестируем :

$ rsync -r -t /mnt/sync/ /home/.test/

Лезем в редактор создания скриптов. Выглядеть он должным быть следующим образом:

#!/bin/sh
# Интервал (в секундах) между проверками
CHECKTIME=900
while :
do
rsync -r -t /mnt/sync/ /home/.test/
/usr/bin/notify-send --urgency normal --expire-time=5000 --icon xfce-schedule "Внимание" "Документ обновлены"
sleep ${CHECKTIME}
done

Обзываем его skript.sh . Ставим его в автозагрузку системы. $gnome-session-properties
ещё можно в загрузку поместить команду: $ smbget -R smb://MSHOME:guest:""@172.172.172.172/sync/ Данная команда копирует файлы куда требуется, но через сеть.

Это инструкция, точнее выдержка, которую написал сам для себя.


Далее, наверное сами разберётесь, применив это к своему случаю.
« Последнее редактирование: 29 Май 2009, 01:12:34 от grad-data »

 

Страница сгенерирована за 0.061 секунд. Запросов: 22.