Теневые копии на линукс

Руководства, вопросы, обсуждения
Правила форума
Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа.

Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 04 авг 2017, 17:43

Есть ли что то подобное на линукс, как теневые копии на винде? Собственно, не обязательно точно такое. Нужно делать копии определенных папок и файлов, лучше по событию изменения. Слышал про Incron, насколько он удобен в моей ситуации?

Еще, чтобы не создавать новую тему. Вопрос по поводу резервных копий линукса. С помощью какой программы это лучше делать?
Последний раз редактировалось пользователем 1 sana-555; всего редактировалось раз: 4


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 08 авг 2017, 08:14

Решил попробовать Incron. Установил: apt-get install incron
Создал файл по пути: /usr/local/sbin/inotify.sh с таким содержанием:

Код: Выделить всё

#!/bin/sh
# Создадим директорию для бекапов (если не существует)
mkdir -p /var/backups/inotify
# Скопируем файлы, указанные в качестве аргумента нашего скрипта
cp -p --parents $1 /var/backups/inotify
# Добавим отметку о времени
mv /var/backups/inotify$1 /var/backups/inotify$1_`date +'%Y-%m-%d_%H:%M'
Далее:
chmod 755 /usr/local/sbin/inotify.sh
Далее в:
incrontab -e
Добавил:
/home/sana IN_MODIFY,IN_CREATE,IN_CLOSE_WRITE /usr/local/sbin/inotify.sh $@/$#
В конфигурационный файл /etc/incron.allow
Добавил пользователя: sana
В итоге в директории /home/sana создаю файлы, папки, редактирую файлы и ничего не копируется в /var/backups/inotify. В чем может быть дело?

Аватара пользователя

slant
Сообщения: 301
Зарегистрирован: 21 июн 2017, 15:09
Решено: 5
Поблагодарили: 110 раз

Теневые копии на линукс

Сообщение slant » 08 авг 2017, 10:02

По поводу incron помочь не могу, а вот по поводу организации в общем...

А вам именно сохранение состояния файлов сразу после каждого изменения нужно, или устроит, например, раз в сутки по часам?
Если последнее - посмотрите в сторону btrfs снапшотов (снимков) по расписанию. Получите полный срез (под)раздела а не отдельных файлов, и при этом неизменные файлы не будут отъедать место.
Вот тут для знакомства с самой btrfs: help.ubuntu.ru/wiki/btrfs

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

В сети

Unborn
Сообщения: 792
Зарегистрирован: 03 сен 2016, 10:36
Решено: 15
Благодарил (а): 2 раза
Поблагодарили: 120 раз

Теневые копии на линукс

Сообщение Unborn » 08 авг 2017, 10:38

slant писал(а): Если последнее - посмотрите в сторону btrfs снапшотов (снимков) по расписанию.
Не нужна никакая btrfs ТСу. Как же раньше то без неё обходились?
sana-555 писал(а): /var/backups/inotify. В чем может быть дело?
А права то какие?
И вообще, что ты там собрался бекапить?

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Теневые копии на линукс

Сообщение Dja » 08 авг 2017, 10:41

sana-555,
slant писал(а): По организации бекапа
еще есть такой гуйный вариант. Еще не юзал, но symon2014 юзает активно
fsarchiver
и его гуй
Новичок? - ознакомься с правилами

В поисках истины :grabli:


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 08 авг 2017, 10:51

У меня, оказывается, под именем моего пользователя не работал. Сейчас добавил в файл /etc/bin/incron.allow имя root и, соответственно, задание под root sudo incrontab -e /home/sana IN_MODIFY,IN_CLOSE_WRITE /usr/local/sbin/inotify.sh $@/$#, и все заработало. Не знаю почему так... Но, почему то создаются два файла, один с нормальным именем + дата, а другой типа: ".goutputstream-GWZT4Y_2017-08-08_15:18" - содержание у них одно и тоже...)
slant писал(а): А вам именно сохранение состояния файлов сразу после каждого изменения нужно, или устроит, например, раз в сутки по часам?
Да, скорее вы правы раз в сутки или по часам, скорее предпочтительнее. Куда их столько копий то плодить...) Это нужно для базы данных (наверное достаточно 1 раз в сутки), ну и для одной общей папки (там скорее раз в час).
slant писал(а): Получите полный срез (под)раздела а не отдельных файлов, и при этом неизменные файлы не будут отъедать место.
Хорошо, посмотрю.
slant писал(а): В первую очередь надо определится какого типа бекап нужен. Только пользовательские файлы, или образ раздела (с возможностью загрузки системы).
Если честно, я даже не знаю, скорее образ раздела, потому что для сервера нужно..
Unborn писал(а): А права то какие?
И вообще, что ты там собрался бекапить?
Снимок экрана в 2017-08-08 15-46-14.png
Базу данных. Да, еще момент, нужно одну папку, которая в ntfs бэкапить.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Теневые копии на линукс

Сообщение Dja » 08 авг 2017, 10:57

sana-555 писал(а): нужно для базы данных

Код: Выделить всё

#!/bin/bash
rsync -rlstvupx --delete --progress /media/Data/ /media/dja/usb2Tb/DataBackup/
сохранение атрибутов, если файл перемещен в оригинале - переместит и в окончательном результате. Что уже имеется - не копирует, пропускает. Идеальный вариант, имхо. Подсказал di_mok
sana-555 писал(а): папку, которая в ntfs бэкапить.
Data в ntfs )))
А как та называется указал. fsarchiver
Новичок? - ознакомься с правилами

В поисках истины :grabli:


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 08 авг 2017, 11:06

Dja писал(а): Что уже имеется - не копирует, пропускает.
Пока на винде сидел, пока еще сижу, но уже скоро перейду..), имел привычку держать копии базы данных за последний месяц (каждый день в 2-00 копировалась). Бывает, что нибудь редактирую в бд, а вдруг чего нибудь не доглядел, есть возможность открыть предыдущий файл и посмотреть как было...) Так что, наверное, не совсем то.

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Теневые копии на линукс

Сообщение Dja » 08 авг 2017, 11:08

sana-555 писал(а): что нибудь редактирую в бд
вообще у сикуля должна быть опция бэкапирования. Или что там у вас?
Новичок? - ознакомься с правилами

В поисках истины :grabli:

В сети

Unborn
Сообщения: 792
Зарегистрирован: 03 сен 2016, 10:36
Решено: 15
Благодарил (а): 2 раза
Поблагодарили: 120 раз

Теневые копии на линукс

Сообщение Unborn » 08 авг 2017, 11:13

sana-555 писал(а): Базу данных. Да, еще момент, нужно одну папку, которая в ntfs бэкапить.
Так это и нужно решать на уровне СУБД, а не ОС. Просто каталог в ntfs - скриптом.
sana-555 писал(а): Если честно, я даже не знаю, скорее образ раздела, потому что для сервера нужно..
Так ты узнай сначала. Создавать каждый день образ раздела размером, может быть на надцать гигов, когда нужны только конкретные данные, это даже не идиотизм.


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 08 авг 2017, 11:17

Dja писал(а): Data в ntfs )))
Чет, не понял юмора, о чем это?...) У меня просто база данных будет на ntfs диске, вот ее и надо бэкапить.
Dja писал(а): Или что там у вас?
Аксесс, будь он не ладен. Не он бы, много бы мороки с виндами отпало бы само собой...) Вот перенести бы его на mysql, но только с формами проблема, много их очень, жалко проделанный труд...
Unborn писал(а): Создавать каждый день образ раздела размером, может быть на надцать гигов, когда нужны только конкретные данные, это даже не идиотизм.
Согласен, значит только пользовательские данные...)
Последний раз редактировалось пользователем 1 sana-555; всего редактировалось раз: 8

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Теневые копии на линукс

Сообщение Dja » 08 авг 2017, 11:30

sana-555 писал(а): Чет, не понял юмора, о чем это?.
о том, что бэкапируемая папка в моем примере как раз на ntfs. Папка называется Data.
Новичок? - ознакомься с правилами

В поисках истины :grabli:


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 08 авг 2017, 11:50

Dja писал(а): Идеальный вариант, имхо.
А как вы его запускаете, вручную?

В сети
Аватара пользователя

Dja
Сообщения: 2785
Зарегистрирован: 27 авг 2016, 17:03
Решено: 11
Откуда: Воскресенск
Благодарил (а): 393 раза
Поблагодарили: 284 раза

Теневые копии на линукс

Сообщение Dja » 08 авг 2017, 11:53

sana-555, Как настроить unattended-upgrades ? (Пост Dja #22459)
только соответственно указать от пользователя, а дальше вместо команды можно указать сам скрипт.
Опять же это подразумевает, что синк идет с разделов линухи ) Если же нужно дергать из сети (с виндовой машины), то тут немного иначе ))
Новичок? - ознакомься с правилами

В поисках истины :grabli:


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 08 авг 2017, 14:57

Проверил, все работает. :thumbs: Сначала правда думал что не получилось, поскольку синхронизация происходит не секунда в секунду в заданное время, а через 34 секунды синхронизировалось.
Никто не пользовался Systemback, для резервного копирования?: http://compizomania.blogspot.com/2014/0 ... linux.html
п.с. где лучше располагать свои скрипты?

Аватара пользователя

slant
Сообщения: 301
Зарегистрирован: 21 июн 2017, 15:09
Решено: 5
Поблагодарили: 110 раз

Теневые копии на линукс

Сообщение slant » 08 авг 2017, 20:54

Unborn писал(а):Так ты узнай сначала. Создавать каждый день образ раздела размером, может быть на надцать гигов, когда нужны только конкретные данные, это даже не идиотизм.
Вот тут как раз снапшоты btrfs очень в тему. Т.к. место на них не тратится. Тратится только место под измененные данные.
Unborn писал(а): Не нужна никакая btrfs ТСу. Как же раньше то без неё обходились?
Когда-то раньше и без компьютеров обходились. А еще раньше - вообще без электричества. Вам не кажется, что ваш аргумент несколько сомнительный?
sana-555 писал(а): Базу данных. Да, еще момент, нужно одну папку, которая в ntfs бэкапить.
Вообще-то на счет базы - там должен быть свой механизм бекапа, Dja, и Unborn правы. Но если хочется именно на уровне системы а не базы - обязательно останавливать сервер базы данных перед созданием снапшота.
Ну и для непосредственно раздела с базой данных, btrfs - не самый лучший выбор в смысле производительности, пока, по крайней мере. Если база нагруженная - этот вариант действительно далеко не лучший. Зато если база используется мало - может быть выгодно использовать сжатие btrfs на ее каталоге.

В сети

Unborn
Сообщения: 792
Зарегистрирован: 03 сен 2016, 10:36
Решено: 15
Благодарил (а): 2 раза
Поблагодарили: 120 раз

Теневые копии на линукс

Сообщение Unborn » 09 авг 2017, 09:25

slant писал(а): Вот тут как раз снапшоты btrfs очень в тему. Т.к. место на них не тратится. Тратится только место под измененные данные.
Вчера вечером сделал снапшот раздела. (Преобразовал из ext в btrfs или заново создал ФС, перенёс все свои файлы гигов 200-300 сделал базовый снапшот). Какой его размер будет? За день загрузил чего-нибудь из Инета гигов так надцать. Вечером вечером сделал снапшот раздела. Какой будет его размер?

Аватара пользователя

slant
Сообщения: 301
Зарегистрирован: 21 июн 2017, 15:09
Решено: 5
Поблагодарили: 110 раз

Теневые копии на линукс

Сообщение slant » 09 авг 2017, 15:28

Не видя точной конфигурации - это конечно гадание, но в идеальном случае (при правильной работе с FS), разница по занятому месту будет именно эти "гигов так надцать".

Дело в том, что понятие "размер снапшота" для BTRFS довольно размыто. Если посчитать суммарный объем файлов на всех подразделах/снапшотах как их видит система, они запросто могут занимать места больше, чем объем физического диска (если снапшотов много, а данные на них не менялись). Потому как если в снапшоте блоки не менялись - FS их будет брать из "родительского" подраздела. (Или если блоки поменялись в "родителе" - то оригинальные блоки остаются у снапшота, а для родителя пишутся новые). Потому ты можешь создать хоть десяток снапшотов - и пока данные не менялись, объем свободного места не поменяется.

Ближайшая аналогия поведения BTRFS с блоками данных в разных снапшотах - это хардлинки на файлы в ext2/3/4. (Не симлинки, а именно хардлинки. Те самые абсолютно равноценные имена для одного файла, находящиеся в различных каталогах, или просто различающиеся, но ведущие на один и тот же файл). Т.е. пока есть хоть одна ссылка на файл (имя файла в FS) - он существует и место занято. Как только последняя ссылка (имя файла) удалена - место которое занимало тело файла снова свободно. То же самое у BTRFS с блоками данных в разных подразделах.

Свежий снапшот, можно считать - нулевого размера. Т.к. он идентичен "родителю". (Кстати идентичен - и в смысле равноправия - после создания он просто имеет общие блоки с родителем, но совершенно от него независим - родителя например можно удалить без последствий для снапшота. Собственно вся разница между снапшотом и подразделом в методе создания. Новый подраздел пуст, а снапшот - копия другого подраздела на момент создания.)
После того как снапшот создан - новые данные записанные в снапшот (или в родительский подраздел) и будут тем объемом, который потребуется для записи. Т.е. допустим новых данных 200 мегабайт - именно на 200 мегабайт места станет меньше на диске.

При этом у снапшоты и подразделы не имеют собственного максимального размера вообще - они динамически берут нужное пространство у из общего пула раздела. Т.е. система всегда видит максимально возможное количество свободного места на btrfs, не зависимо к какому подразделу или снапшоту текущий каталог относится, лишь бы в пределах одной FS. (А если ограничение таки нужно - есть механизм квот).

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


Автор темы
sana-555
Сообщения: 205
Зарегистрирован: 21 июл 2017, 17:38
Благодарил (а): 172 раза
Поблагодарили: 3 раза

Теневые копии на линукс

Сообщение sana-555 » 09 авг 2017, 17:38

slant писал(а): Вообще-то на счет базы - там должен быть свой механизм бекапа, Dja, и Unborn правы.
Я не спорю, не правильно выразился просто...) у меня есть батник, который запускался с помощью планировщика заданий. Но в принципе, поскольку бд это аксесс и она все равно остается на винде в виртуалбоксе, буду продолжать пользоваться планировщиком...)

Код: Выделить всё

chcp 1251 >nul
rem chcp 1251 >nul - для того чтобы русский текст сообщений выглядел нормально, а не кракозябрами

::задаем, по умолчанию, имя базы данных
set NameBd=felicita

rem "rem" или "::" - комментарии
goto start
Здесь, между: "goto start" и ":start", можно тоже писать большие комментарии
:start
::"pause" - приостановить выполнение кода
:: "echo + какое то значение или текст" - вывод на экран .cmd

rem Получение даты и времени зависит от региональных настроек Windows. 
rem Поэтому строка: "rem @echo off" - закомментирована для возможности смотреть на результат каждой команды:
rem @echo off
rem Этот код для добавления текущей даты + времени в название резервной копии БД:
rem=======================================================================================
set dd=%DATE%
set tt=%TIME%

SET day=%dd:~0,2%
set month=%dd:~3,2%
set year=%dd:~6,4%
 
set /a ttt=%tt:~0,2%
 
IF %ttt% LSS 10 (
  SET hour=0%ttt%) else (
  SET hour=%ttt%)
 
SET minute=%tt:~3,2%
SET sec=%tt:~6,2%

:: Компануем свою строку с датой и временем в переменную (чтобы было удобнее вставлять в имя файла), 
:: и заключаем в кавычки (поскольку могут быть пробелы и файл не скопируется)
SET DateTime="%year%.%month%.%day%_%hour%;%minute%;%sec%"

echo %day% %month% %year% %hour% %minute% %sec%
rem========================================================================================

goto start
===========================================================================================
На всякий случай, дожидаемся завершения программы (бд Access из которой был запущен этот батник), 
или проверяем запущено ли какое нибудь другое приложение Access (другая база данных Access), иначе сжатия не будет! 
Для ожидания нужен файл: sleep.js с кодом:
-----------------------------------------------------
if(WScript.Arguments.Unnamed.length){
      var milliseconds=WScript.Arguments.Unnamed(0);
      WScript.Sleep(milliseconds);
    }
-----------------------------------------------------
п.с. Можно не использовать sleep.js, а использовать команду: "ping localhost -n 10 >nul",
но тогда нельзя делать задержку в 200 или 500 мсек, а только кратно 1 секунде. 
В примере выше задержка 10 секунд.
-----------------------------------------------------------------------------------------------
Для закрытия окна сообщения: "msg * /time:10 Закройте все запущенные копии приложения Access!"
нужен файл: close.vbs с кодом:
---------------------------------------------
Set sh=WScript.CreateObject("WScript.Shell")
str="Сообщение от"
sh.appactivate str
sh.sendkeys "{ENTER}"
---------------------------------------------
п.с. Можно не использовать close.vbs, окно само закроется через заданный таймер msg, если юзер сам его не закроет!
===========================================================================================
:start

:: Вывод первоначального сообщения (если аксесс открыт)
set imagename=msaccess.exe
tasklist /fi "IMAGENAME eq %imagename%" | find /i "%imagename%"
if errorlevel 1 (
    	echo %imagename% не запущен    
) else (
    	echo %imagename% запущен
    	msg * /time:10 Закройте все запущенные копии приложения Access!
    	:: "*" -значит показывать сообщения всем
    	:: "/time:10" -закрыть сообщение через 10 секунд, иначе их накопится, мама не горюй...)	
)

:: Вывод последующих сообщений (если аксесс открыт)
set /a nrec=0 :: начальное значение счетчика
set imagename=msaccess.exe
:CheckProgram
set /a nrec=%nrec%+1
echo %nrec%
if %nrec% EQU 10 goto msg1 :: ("EQU" - это равно) когда счетчик достигнет 10 (т.е. пройдет 10 секунд), то произойдет переход к msg1
tasklist /fi "IMAGENAME eq %imagename%" | find /i "%imagename%"
if not errorlevel 1 (
	:: "%~dp0" - команда, определяющая текущее расположение батника
	cscript.exe %~dp0\sleep.js 1000 && goto CheckProgram :: 1000- 1 секунда
:msg1 
	echo %imagename% запущен
	msg * /time:10 Закройте все запущенные копии приложения Access!	
	set /a nrec=0
	goto CheckProgram
) else (
	echo %imagename% не запущен
	start cscript close.vbs
)

:: Если нет указанного файла, то переход к метке :error
if not exist %~dp0\%NameBd%.accdb goto error

:: На всякий случай, выжидаем 1 секунду, чтобы .laccdb успел исчезнуть
ping localhost -n 1 >nul
rem Если файл с расширением .laccdb(.ldb) существует, то удаляем
rem Указываем абсолютные пути:
rem if exist C:\Users\Aleksandr\Desktop\%NameBd%.laccdb (
rem Или относительные пути:
if exist %~dp0\%NameBd%.laccdb ( rem "%~dp0" - команда, определяющая текущее расположение батника
        del %~dp0\%NameBd%.laccdb
)

:: Если файл с расширением .laccdb(.ldb) не существует, то делаем резервную копию и сжатие
if not exist %~dp0\%NameBd%.laccdb (
rem Делаем резервную копию и сжатие    	
	copy %~dp0\%NameBd%.accdb %~dp0\backup\%NameBd%_%DateTime%.accdb
	copy %~dp0\%NameBd%.accdb C:\Users\superuser\YandexDisk\backup\%NameBd%_%DateTime%.accdb    
	start %~dp0\%NameBd%.accdb /compact		
	msg * Резервное копирование и сжатие базы данных успешно завершенно !
	exit 
) ELSE (	
	msg * Резервное копирование и сжатие базы данных не удалось. Отключите всех пользователей!
	exit 
)
:error	
	:: Закрываем close.vbs, иначе он закроет наше сообщение...)
	taskkill /im close.vbs/ %~dp0\%NameBd%.accdb :: закрыть программу
	msg * Резервное копирование и сжатие базы данных не удалось. Указанный файл %NameBd%.accdb, не найден!
	exit 

В сети

Unborn
Сообщения: 792
Зарегистрирован: 03 сен 2016, 10:36
Решено: 15
Благодарил (а): 2 раза
Поблагодарили: 120 раз

Теневые копии на линукс

Сообщение Unborn » 09 авг 2017, 17:40

slant, что ты простыни выкладываешь? Ты конкретнее ответь про объём базового снапшота у хоме-юзера на разделе для данных, которые, как правило, - картинки, музыка, видео, которые не сжимаются, прибавляются , да ещё по дефолту размер блока у btrfs 16К, про время создания базового снимка с такого объёма промолчу, всё-таки только один раз. На разделе для данных хоме-юзеру btrfs не нужна вообще. Для этого xfs давно придумали.
Если ты используешь btrfs на /, так и используй, но не нужно давать вредных советов. И btrfs - это ФС не для средних умов. Кроме снимков хомячки больше про неё ничего не знают. Обрадовались, откат можно безболезненно сделать если нарукожопил.

Вернуться в «Параметры и оптимизация»