URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 56910
[ Назад ]

Исходное сообщение
"Резервирование файлов под FreeBSD"

Отправлено Sergetv , 31-Май-05 10:00 
Стоит Файл-сервер (Free+Samba).
4 IDE винта (20Gb,60Gb,60Gb, 160Gb)
Сетевыми ресурсами являюстя каталоги на первых трех винтах (20,60,60).
Юзеры с Виндовых пишут туда свои файлы.
4 винт - резервный
Задача раз в сутки синхронизировать содержимое расшареных каталогов с первых трех винтов на четвером (резервном)
Я пробовал делать так:
$1 - Исходный каталог
$2 - Каталог на резервном диске, куда копируется исходный

1 скрипт:
(проверяет не создавались ли за день новые каталоги, если да - должен создавать их же на резервном)
#!/bin/sh
find $1 -type d -mtime 1 > $1/reserv_d.list
for a in `cat $1/reserv_d.list`; do
mkdir $2$a
echo  mkdir \'$2$a\'
done

2 скрипт:
(проверяет не создавались ли за день новые файлы, если да - должен копировать их на резервный)
find $1 -type f -mtime 1 > $1/reserv_f.list
for a in `cat $1/reserv_f.list`; do
        cp -v \'$a\' \'$2\'
done
Скрипты по крону в 3 ночи.
Проблема в том, что пользователи создают каталоги и файлы русскими буквами и с пробелами, типа ("Песни и фильмы Васи")
поэтому mkdir и cp с такими параметрами в скрипте у меня не работают

Я во Free недавно, вот в эту проблему уперся. Подскажите идею


Содержание

Сообщения в этом обсуждении
"Резервирование файлов под FreeBSD"
Отправлено Skif , 31-Май-05 10:28 
Самое простое решение - не писать скрипт на фре. сделать шару доступную с одной из выневых машин и в ней по шедулеру пускать бекап с архивированием или без на шару бекапа. Там с кодировками проблем не будет.

"Резервирование файлов под FreeBSD"
Отправлено Skif , 31-Май-05 10:30 
>Самое простое решение - не писать скрипт на фре. сделать шару доступную
>с одной из выневых машин и в ней по шедулеру пускать
>бекап с архивированием или без на шару бекапа. Там с кодировками
>проблем не будет.

Хотя, добавлю, меня сей момент смущает - чудесно скрипты беапят данные. Может локаль не по человечески настроенна? Или в скрипте не помешает в принудиловку указать параметры локализации, так как в профиле пользователя от которого пускается скрипт стоит LANG C и т.д.?


"Резервирование файлов под FreeBSD"
Отправлено else , 31-Май-05 11:05 
Локализация bash и монтирование дисков с нужной кодировской должно решить проблему.



"Резервирование файлов под FreeBSD"
Отправлено sergetv , 31-Май-05 15:15 
С локализацией как раз все вроде в порядке
- основная проблема- ПРОБЕЛЫ в именах файлов и каталогов - не хочет из скрипта такие файлы копировать и каталоги создавать, хоть застрелись. то что после пробела считает параметрами. :-( . Причем та же команда из консоли выполняется на ура. може с синтаксисом в скрипте что-то не то- кавычки не те  /не там? может кто подскажет (или проверит)? Фри 4.11.


"Резервирование файлов под FreeBSD"
Отправлено else , 31-Май-05 15:28 
А может перед копированием эти пробелы в подчеркивания перегонять?



"Резервирование файлов под FreeBSD"
Отправлено Sergetv , 31-Май-05 16:00 
Пробелы в подчеркивания не очень хорошая идея. Копия и оригинал должны по максимуму совпадать, потому, что раз в месяц
файлы присутствующие в копии и отсутствующие в оригинале из копии удаляются.
я думаю что проблема в

for a in `cat $1/reserv_f.list`; do

если в файле reserv_f.list строки типа
/data21/video_2/Tonya Video/Stih.mp3
то скрипту отдается сначала
/data21/video_2/Tonya
а потом
Video/Stih.mp3

как такое лечить?


"Резервирование файлов под FreeBSD"
Отправлено AMDmi3 , 31-Май-05 16:38 
>я думаю что проблема в
>
>for a in `cat $1/reserv_f.list`; do
>
>если в файле reserv_f.list строки типа
>/data21/video_2/Tonya Video/Stih.mp3
>то скрипту отдается сначала
>/data21/video_2/Tonya
>а потом
>Video/Stih.mp3
Совершенно верно.

>как такое лечить?
Что-то вроде:

exec < "$1/reserv_f.list"
while read a; do
  cat "$a"
done


"Резервирование файлов под FreeBSD"
Отправлено Brainbug , 31-Май-05 16:40 
>>я думаю что проблема в
>>
>>for a in `cat $1/reserv_f.list`; do
>>
>>если в файле reserv_f.list строки типа
>>/data21/video_2/Tonya Video/Stih.mp3
>>то скрипту отдается сначала
>>/data21/video_2/Tonya
>>а потом
>>Video/Stih.mp3
>Совершенно верно.
>
>>как такое лечить?
>Что-то вроде:
>
>exec < "$1/reserv_f.list"
>while read a; do
>  cat "$a"
>done

[test@test shell]$ cat 3.sh
#!/bin/sh

file=`cat 1`
echo $file
touch "$file"
[test@test shell]$ cat 1
test test
[test@test shell]$ ./3.sh
test test
[test@test shell]$ ls -l test\ test
-rw-rw-r--    1 test    test           0 May 31 15:40 test test
[test@test shell]$


"Резервирование файлов под FreeBSD"
Отправлено Sergetv , 31-Май-05 20:23 
>Что-то вроде:
>
>exec < "$1/reserv_f.list"
>while read a; do
>  cat "$a"
>done

вроде ближе.
по в файле $1/reserv_f.list список файлов:

/data21/video_2/Tonya Video/Stih1.mp
/data21/video_2/Tonya Video/Stih2.mp
/data21/video_2/Tonya Video/Stih3.mp
/data21/video_2/Tonya Video/film1.mp
/data21/video_2/Tonya Video/еще чего-то.mp

и т.п.
как быть в таком случае?



"Резервирование файлов под FreeBSD"
Отправлено AMDmi3 , 31-Май-05 21:14 
>>Что-то вроде:
>>
>>exec < "$1/reserv_f.list"
>>while read a; do
>>  cat "$a"
>>done
>
>вроде ближе.
>по в файле $1/reserv_f.list список файлов:
>
>/data21/video_2/Tonya Video/Stih1.mp
>/data21/video_2/Tonya Video/Stih2.mp
>/data21/video_2/Tonya Video/Stih3.mp
>/data21/video_2/Tonya Video/film1.mp
>/data21/video_2/Tonya Video/еще чего-то.mp
>
>и т.п.
>как быть в таком случае?

Попробовал бы сначала. Это как раз для списка файлов.

man sh


"Резервирование файлов под FreeBSD"
Отправлено Sergetv , 01-Июн-05 09:17 
>>>Что-то вроде:
>>>
>>>exec < "$1/reserv_f.list"
>>>while read a; do
>>>  cat "$a"
>>>done

>Попробовал бы сначала. Это как раз для списка файлов.
>
>man sh

sorry, попробую, вчера до сервера некогда было "дойти"


"Резервирование файлов под FreeBSD"
Отправлено Sergetv , 29-Июн-05 13:02 
Наконец то "дошел" и настроил это резервое копирование
запускается так:
sh rezerv.sh /data12 /rezerv2
/data12 - каталог, который резервируется
/rezerv2 - каталог, куда резервируются файлы

Сам скрипт:
#!/bin/sh
find $1 -type d -mtime 1 > $1/reserv_d.list
tr ' ' '?' < $1/reserv_d.list > $1/reserv_d2.list
cat  $1/reserv_d2.list
exec > $1/reserv_d.sh
echo "#!/bin/sh"
for a in `cat  $1/reserv_d2.list`; do
echo "mkdir \"""$2$a"\"
done
find $1 -type f -mtime 1 > $1/reserv_f.list
tr ' ' '?' < $1/reserv_f.list > $1/reserv_f2.list
exec > $1/reserv_f.sh
echo "#!/bin/sh"
for a in `cat  $1/reserv_f2.list`; do
echo "cp -v \"""$a"\" \"$2$a\"
done
exit 0

Заумно, конечно, но зато работает (и с именами с пробелами и с русскими, только символов " и ? не должно быть в именах файлов, пока и не было :-)

если кто сможет лучше - пусть напишет

Теперь вторая проблема возникла: таким же макаром удалять из копии католога файлы, удаленные из оригинала.
Жду идей. (сам, конечно, тоже копаю:-)


"Резервирование файлов под FreeBSD"
Отправлено Sergetv , 29-Июн-05 13:04 
Забыл добавить, в конце скрипта еще
sh  $1/reserv_d.sh
sh  $1/reserv_d.sh