python скрипт для резервного копирования
Бэкап при помощи Python
Примеры вариантов простых бакапов в Python
Бэкап данных можно выполнять и в Python, используя как собственные средства языка программирования так и внешние программы.
Хотите быть уверенными в сохранности данных и не знаете как настроить бэкап, воспользуйтесь услугами резервного копирования
1) Вариант: Бэкап Python + WinRaR
import os
import time
# Файлы и каталоги, которые необходимо скопировать, собираются в список.
source=[‘»D:\\bases-1c\\База1с\\1Cv8.1CD»‘, ‘C:\\Code’]
print(‘Я должен сделать’,len(source),’Бэкапа(ов)’)
dstdir=’E:\\backup’
print(dstdir,’-папка для бэкапа’)
dst = dstdir + os.sep + time.strftime(‘Year-%Y.%m.%d_’) + time.strftime(‘hour-%H.%M.%S’) + ‘.rar’
print(‘Там будет создан файл-‘, dst)
«»»os.sep – разделитель пути для конкретной операционной системы,
‘/’ в GNU/Linux ‘\\’ в Windows и ‘:’ в Mac OS.
Использование os.sep делает программу переносимой для ОС»»»
if os.system(rar)==0:
print(‘Резервная копия успешно создана в’, dst)
else:
print(‘Создание резервной копии НЕ УДАЛОСЬ’)
2) Вариант: Бэкап Python + Tarfile
date = time.strftime(‘Date-%Y.%m.%d_’)
time = time.strftime(‘Hour-%H.%M.%S_’)
#Переходим в каталог
os.chdir(‘C:\\My Documents’)
#Получаем текущую деректорию
directory = os.getcwd()
#Получаем список
contents = os.listdir()
tar = tarfile.open(‘E:\\backup\\’+ date + ‘.tar.gz’, «w:gz»)
# 1) Добавляем в архив всю папку C:\\My Documents
for i in contents:
tar.add(i)
tar.add(‘C:\\one\\’)
# 2) Добавляем еще в архив
tar.add(bases1c, arcname=time+’Bases.1CD’)
members = tar.getmembers()
print (members[0].name, ‘- «То же самое но при помощи getmembers»‘)
print (members[0].isdir(), ‘- «И проверить на истинность»‘)
tar.close()
# в результате получаем весь список из C:\\My Documents, а так же по файлу указанных в
# C:\\one\\o1.doc и D:\\bases-1c\\База1С\\1Cv8.1CD
# arcname применен для определения имени в архиве
3) Вариант: системные команды Python
Так же не забываем, что команды системы Windows, Linux могут быть выполнены в Python, что дает возможность использовать встроенные команды самой системы.
Пример выполнения xcopy(системной команды) из Python
Создание резервной копии файлов
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Создание резервной копии
import os import time source = target_dir = «D:\\python codes» # Подставьте тот путь.
Создание резервной копии
Добрый день. Извиняюсь за тупняк. Учу питон по книжке на винде в PyCharm. 1.import os 2.import.
Создание резервной копии файлов
Доброго времени суток. мне посоветовали такой.
просто введи zip и энтер, должен инфу выдать, если установлен
Добавлено через 40 секунд
а гнувин32 вообще для чего тут?
Вложения
bzip2-1.0.5-bin.zip (154.7 Кб, 37 просмотров) | |
zip-3.0-bin.zip (563.4 Кб, 37 просмотров) |
А зачем все так сложно(я не знаю что там в книге, но если не обязательно использовать GnuWin32, то:
DmFat, Да, далее в книге говорят что можно сделать и так. Спасибо
Добавлено через 34 секунды
tooru, Ура, наконец-то получилось. Спасибо большое!)
Добавлено через 57 секунд
Garry Galler, спасибо большое, буду знать если вдруг что
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Программа, которая создаёт резервные копии файлов
Учу «Укус питона» и там есть пример программы, которая у меня не работает import os import time.
Создание резервной копии файлов
Разработать программу, выполняющую поиск в текущем каталоге файлов по указанной пользователем.
Автоматическое создание резервной копии файлов проекта (visual studio 2013)
Можно ли сделать так, чтобы при сохранении проекта текущие файлы записывались в отдельную папку.
Простой самодельный бэкап данных (Python + DropBox)
Бэкапы я не делал давно. Было лень, да и данные я не терял уже несколько лет. Но недавно задумался об этом и решил-таки сделать что-то такое, что резервно сохраняло бы то, что не очень хочется потерять. Просто что бы скучно не было, и немного попрактиковаться.
Для начала нужно определиться где хранить копии файлов. По-моему DropBox это очень хороший выбор — это сервис для синхронизации данных на разных компьютерах. Бесплатно дают 2 Гб, плюс программу, которая отображает выбранную локальную папку на ихнее онлайн хранилище. Добавил файл в эту специальную папку — он добавился на всех компьютерх, на которых стоит специальная программа, настроенная на тот же аккаунт. Плюс доступ через веб-интерфейс. Для бэкапа это очень удобно — не надо заморчиваться как скопировать файлы на FTP, а просто копируем их в специальную папку. Всё работу по заливке/синхронизации сделает DropBox клиент.
Дальше нужно собственно скопировать необходимые файлы. Для этого был написан крохотульный скрипт на питоне, backup.py. Этот скрипт создаёт текстовый список файлов, которые нужно скопировать, и передаёт его WinRar’у, который создаёт архив с указанным именем.
Сначала я хотел полностью поручить WinRar’у создание бэкапа, написав немного кода в батниках, но к сожалению он не умеет пропускать заданные папки (только файлы). Поэтому пришлось писать промежуточный скрипт, который создаёт список файлов. Ну и хорошо, так даже веселее.
У скрипта есть единственный параметр — имя выходного файла-архива со скопированными файлами.
Я не зря указывал, что скрипт берёт файлы из текущей папки. Благодаря этому делать разные «профили» очень просто — достаточно создать новую папку, создать там файл tobackup.lst, опциональные ignore.lst и extra.lst, и новый профиль готов! Для удобства можно сделать батник, который будет вызывать backup.py и передавать ему имя файла-архива который должен получиться.
Сейчас, например, у меня есть две папки-профиля, projects (для бэкапа текущих проектов) и other (для бэкапа настроек программ). Сам скрипт лежит в папке core (на том же уровне что и папки профилей), вместе с WinRar’ом.
Папка core:
Rar.exe
WinRAR.exe
rarreg.key
backup.py
Папка projects:
tobackup.lst:
d:\projects
d:\svn
ignore.lst:
.svn
d:\projects\old
backup.bat:
..\core\backup.py «d:\dropbox\my dropbox\backup\dev.rar»
Батник backup.bat вызывает скрипт, передеаёт ему имя получающегося файла-архива, который будет создан в папке, связанной с DropBox. Скрипт берёт файлы-списки из текущей папки (projects в данном случае). Один запуск батника — новый бэкап готов, и DropBox грузит его на сервер.
Осталось прикрутить запуск по расписанию, но меня устроит и ручной запуск несколько раз в месяц.
for dir in dirs:
# Skip ignored folders
if (dir.lower() in ignoreList or (» %s\%s » % (root, dir)).lower() in ignoreList):
dirs.remove(dir)
# Append some files from extra files list
if (os.path.isfile(ExtraFile)):
out.writelines(open(ExtraFile, » r «).readlines())
out.close()
print(» Added %d file(s) » % (filesCount))
Резервное копирование-архивирование каталогов с помощью Python 3
В целях предварительного знакомства со скриптовым языком python я написал небольшой скрипт копирования-архивирования каталогов из заданного списка. Представляю вам этот скрипт:
import glob
import os
import datetime
import shutil
#Настройки:
#Путь к основному каталогу откуда надо копировать
pathtodata=»w:/Base_1c»
#Название каталогов, которые надо копировать с их содержимым:
organiz = [«Folder_01»,
«Folder_02»,
«Folder_03»,
«Folder_04»,
«Folder_05»,
«Folder_06»
]
# делаем каталог для копий по текущему времени
# по умолчанию должен быть создан каталог e:/_backups/
dt = datetime.datetime.now()
currentdate = dt.strftime(‘%Y_%m_%d-%H%M’)
os.mkdir(‘e:/_backups/’+currentdate)
# все сделал
print(«все сделано»)
КАК РАБОТАТЬ СО СКРИПТОМ:
1. Для начала нужно скачать и установить python 3.2. можно скачать здесь http://python.org/download/
2. Скопируйте скрипт из статьи и сохраните его в текстовый файл с расширением *.py (например, backup.py)
3. Создайте на диске e: каталог _backups и поместите туда этот файл backup.py
4. Настройте список копируемых каталогов в скрипте и сохраните его:
4.1. В моем примере скрипта мои копируемые каталоги лежат в общем каталоге на диске w:\Base_1c
В системе должен быть установлен winRar для создания архивов
Десятимиллионный скрипт резервного копирования
Это статья-мануал по скрипту резервного копирования, написанному мной. Скрипт написан на python для Linux. Кому интересно прошу под хабракат.
Возможности
Установка
В /etc/apt/source.list добавить:
И выполнить в терминале:
Обновление пакета выполняется командой:
ИЛИ
Вручную скачать пакет командой:
ИЛИ
Для дистрибутивов, отличных от Ubuntu/Debian выполнить:
И скопировать файлы ddd и py4backup в директорию с бинарными файлами (обычно /usr/bin), файл py4backup_lib.py в директорию библиотек python. Также потребуется поставить зависимости вручную. Необходим python 3.x, btrfs-tools (btrfs-progs), lvm2, rsync. В папке examples/ вы найдете примеры конфигурационных файлов. Их необходимо скопировать в /etc/py4backup/
Настройка
После установки необходимо скопировать конфигурационные файлы из примера. Для этого выполните:
И откройте файл py4backup.conf на редактирование текстовым редактором.
Для boolean параметров допустимо использование True/False, yes/no или 1/0.
Отделять параметр от его значения можно символами ‘=’ или ‘:’.
Каждый параметр должен находится в своей секции. Название секции пишется перед набором параметров в квадратных скобках (‘[]’)
Порядок следования параметров в секции и секций не важен. Если параметр не указан в конфигурационном файле, то используется стандартное значение.
Пример конфигурационного файла:
Рассмотрим параметры подробней:
[MAIL]: здесь определяются параметры отправки уведомлений через email.
send_mail_reports: включает/выключает отправку email отчетов после выполнения задания.
login: логин для входа на smtp сервер.
passwd: пароль для входа на smtp сервер.
sendto: получатели уведомления. Можно вписать несколько адресов через пробел.
server: доменное имя или IP адрес smtp сервера.
port: порт smtp сервера.
tls: включает/выключает использование TLS шифрования.
[DD]: здесь указываются параметры создания резервных копий с помощью программ DD и DDD.
bs: размер блока для программы DD (Используется для создания полных копий LVM томов). Можно указывать размер в байтах, килобайтах (k) и мегабайтах (M). Влияет на скорость создания копии. Оптимальное значение- 32M.
ddd_bs: размер блока для программы DDD (Используется для создания дифференциальных копий LVM томов). Можно указывать размер в байтах. Чем больше размер, тем больше места занимает дифференциальная копия, но тем быстрее она создается. Оптимальное значение- 4096.
ddd_hash: алгоритм хеширования блоков. Возможен выбор между md5, crc32 и None. MD5 сильнее нагружает процессор, чем crc32 и занимает больше места, но в случае использования md5 намного меньше шанс коллизий.
None выключает создание чек сумм. Время создания резервной копии, ее размер и нагрузка на процессор минимальны, но в случае повреждения резервной копии вы не будете знать об этом. Не рекомендуется к использованию.
[LOGGING]: настройка ведения журнала заданий.
logpath: путь до журнала. Если вы используете не стандартное размещение журнала не забудьте поменять настройки logrotate.
enable_logging: включает/выключает ведение журнала.
log_with_time: включает/выключает добавление к каждой записи журнала даты и времени.
traceback: включает/выключает добавление traceback’ов в лог при ошибках. Полезно при отладке.
command_output: включает/выключает добавление в лог консольного вывода команд. Полезно при отладке.
Задания
Общие сведения
Список заданий находится в файле /etc/py4backup/jobs.conf
Пример задания:
Типы резервного копирования
Рассмотрим их поближе.
file-full
file-diff
Создает дифференциальную резервную копию от источника (sopath) и последней полной копией, найденной в папке назначения (dpath). Если полная копия не будет найдена выполнение задания завершиться ошибкой.
Список параметров аналогичен типу ‘file-full’.
btrfs-full
Данный тип аналогичен типу ‘file-full’, но перед созданием резервной копии делается снапшот резервируемой директории и копия снимается уже со снапшота.
Для этого типа резервного копирования необходимо указание параметра snpath. В папке, указанной в snpath будет создан временный снапшот исходной папки (sopath). Причем указанный там путь должен находится на одной файловой системе с папкой, указанной в sopath. Обратите внимание, что копируется только содержимое данного subvolume файловой системы. Все примонтированные папки и вложенные subvolume будут проигнорированы. Список остальных параметров аналогичен типу ‘file-full’.
btrfs-diff
При этом типе рез. копирования сначала с исходной папки (sopath) снимается снапшот, а затем создается дифференциальная копия от снапшота и последней полной копией, найденной в папке назначения (dpath). Если полная копия не будет найдена выполнение задания завершиться ошибкой.
Так же, как и для типа ‘btrfs-full’ необходимо, что бы папка для снапшота (snpath) находилась на одной файловой системе с исходной папкой (sopath).
Обратите внимание, что копируется только содержимое данного subvolume файловой системы. Все примонтированные папки и вложенные subvolume будут проигнорированы. Список остальных параметров аналогичен типу ‘file-full’
btrfs-snap
Данный тип создает снапшоты от исходной папки, указанной в sopath в папку снапшотов, указанную в snpath.
Для данного типа не работают параметры exclude, include, dpath. Так же, как и для типа ‘btrfs-full’ необходимо, что бы папка для снапшотов (snpath) находилась на одной файловой системе с исходной папкой (sopath).
Обратите внимание, что копируется только содержимое данного subvolume файловой системы. Все примонтированные папки и вложенные subvolume будут проигнорированы.
lvm-full
Этот тип предназначен для создания полных копий LVM томов. Рассмотрим некоторые особенности данного типа. В параметре sopath указывается путь до Logical Volume Group (VG). Например:
sopath = /dev/main_vg/
По умолчанию скрипт сделает копию всех томов, находящихся в данном VG.
Параметр dpath указывает где сохранять резервную копию. Указывать удаленные хосты в качестве назначения резервной копии нельзя. Для того, что бы сделать копии только нужных томов можно использовать параметры include и exclude.
Параметр exclude указывает какие тома исключить из резервной копии. Кроме того он принимает кодовое слово all, обозначающее, что надо исключить все тома.
Параметр include указывает какие тома нужно включить в резервную копию. Имеет приоритет над exclude. Например:
сделает резервную копию только томов mail и root. А следующий пример сделает копию всех томов, кроме тома mail:
lvm-diff
И последний (для версии 1.5) тип резервного копирования предназначен для создания дифференциальных копий LVM томов.
Скрипт ищет в папке назначения (dpath) последнюю полную резервную копию и если находит, создает дифференциальную копию между ней и снапшотом текущего состояния. В папке назначения при этом появятся 2 файла *-diff.dd и *-diff.ddm Они ОБА необходимы для восстановления.
Все параметры аналогичны типу lvm-full
Запуск
Восстановление
Вот мы и подошли к самому интересному. Резервное копирование само по себе ничего не стоит, без возможности быстро восстановить резервную копию. В данном разделе я опишу типичные кейсы восстановления из резервных копий, созданных скриптом.
Файловые бэкапы
В обоих случаях в папке назначения вы получите полную копию данных, готовую к использованию.
Восстановление снапшотов
Таким образом мы во первых сделали наши данные доступными для записи и обезопасили их. Даже когда скрипт согласно ротации удалит снапшот от 2014-06-19 наш свежесозданный снапшот будет цел.
Восстановление полных бэкапов LVM
Тут все совсем просто.
Необходимо создать новый LVM том, размера равного или больше резервной копии и скопировать на него резервную копию с помощью dd.
Пример:
Восстановление дифференциальных бэкапов LVM
И мы хотим восстановить резервную копию за 2014-06-19 на устройство /dev/main_vg/volume Для этого выполним команду:
Предположим полная копия была перемещена в папку /backup_old/:
После восстановления ddd выведет список поврежденных блоков с указанием файла, где находится поврежденный блок. Запись full23 указывает на повреждение блока номер 23 в файле полной копии, а запись diff24 на повреждение блока 24 в дифференциальной копии.