Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # Примечание. Я использую в качестве загрузчика Syslinux.
- import subprocess
- import os
- # Каталог, куда будут сохраняться архивы. Слеш в конце указывать не надо.
- output_path = "/home/backup"
- output_ext = "tar.gz"
- # Приоритет, с которым будет выполняться tar.
- priority_process = "19"
- # Понижение приоритета программы, чтобы не мешала заниматься чем-то другим.
- os.nice(int(priority_process))
- # Формирование пути для финального файла.
- def create_path(name_element):
- name_element = list(name_element)
- del name_element[0]
- name_element = ''.join(name_element)
- path_to_file = output_path + '/' + name_element + '.' + output_ext
- return path_to_file
- # Сохранение в файл вывода ls.
- def ls_save(path_to_file, out_list):
- fd = open(path_to_file, 'wb')
- fd.write(out_list)
- fd.close()
- def main():
- root_folders = []
- # Список для архивирования, только от корня. И только один элемент в пути.
- root_folders.append("/bin")
- root_folders.append("/boot")
- root_folders.append("/etc")
- root_folders.append("/home")
- root_folders.append("/lib32")
- root_folders.append("/lib64")
- root_folders.append("/opt")
- root_folders.append("/root")
- root_folders.append("/run")
- root_folders.append("/sbin")
- root_folders.append("/usr")
- root_folders.append("/var")
- #root_folders.append("/system")
- root_folders.append("/mnt_remote")
- # Переход в корневую директорию и бекап каталогов, которые там находятся.
- os.chdir('/')
- for i in root_folders:
- path_to_output_file = create_path(i)
- if i == "/home":
- cmd = []
- cmd.append("nice")
- cmd.append("-n")
- cmd.append(priority_process)
- cmd.append("tar")
- cmd.append("cpvfz")
- cmd.append(path_to_output_file)
- # Исключения должны быть добавлены здесь.
- cmd.append("--exclude=/home/userbackup")
- cmd.append("--exclude=/home/backup")
- cmd.append("--exclude=/home/yura/Exclude")
- cmd.append("--exclude=/home/lost+found")
- cmd.append("--exclude=/home/yura/temp")
- cmd.append(i)
- subprocess.call(cmd)
- else:
- subprocess.call([ "nice", "-n", priority_process, "tar", "cpvfz", path_to_output_file, i ])
- # Диск, с которого выполняется загрузка ОС. Нужно для создания бекапа mbr.
- boot_disk = "/dev/sda"
- # Выполнение бекапа mbr.
- boot_disk = "if=" + boot_disk
- path_to_file = "of=" + output_path + '/' + "backup.mbr"
- subprocess.call([ "dd", boot_disk, path_to_file, "bs=446", "count=1" ])
- # Сохранение списка файлов и папок корневого каталога.
- path_to_file = output_path + '/' + "spisok_failov_i_papok_kornya"
- ls_list = subprocess.check_output(["ls", "-h", "-a", "-l", "/" ])
- ls_save(path_to_file, ls_list)
- # Сохранение списка файлов и папок /mnt .
- path_to_file = output_path + '/' + "spisok_failov_i_papok_mnt"
- ls_list = subprocess.check_output([ "ls", "-h", "-a", "-l", "/mnt" ])
- ls_save(path_to_file, ls_list)
- # Сохранение списка файлов и папок /media .
- path_to_file = output_path + '/' + "spisok_failov_i_papok_media"
- ls_list = subprocess.check_output([ "ls", "-h", "-a", "-l", "/media" ])
- ls_save(path_to_file, ls_list)
- # Сохранение ReadMe.
- readme = []
- readme.append("В случае, если потребуется восстановить mbr, была создана копия mbr (без таблицы разделов). \n")
- readme.append("Файл называется backup.mbr. Для восстановления mbr нужно выполнить что-нибудь вроде: \n\n")
- readme.append("dd if=mbr_backup.mbr of=/dev/sdX bs=446 count=1 \n\n")
- readme.append("Нужно заметить, что mbr можно восстанавливать не с помощью копии dd, а с помощью SystemRescueCD. На этом \n")
- readme.append("диске (SystemRescueCD) уже есть Syslinux, поэтому и файл загрузчика и mbr можно взять оттуда.")
- readme.append("Также нужно будет создать каталоги dev, proc, sys, tmp, mnt и media в корневой директории. \n")
- readme.append("В каталогах mnt и media также нужно создать подкаталоги, в соответствии со списками для этих каталогов \n")
- readme.append("Кроме того, в корневой директории нужно создать симлинк lib, указывающий на каталог lib64, также \n")
- readme.append("находящийся в корневой директории.")
- path_to_file = output_path + '/' + "ReadMe"
- fd = open(path_to_file, 'w')
- fd.writelines(readme)
- fd.close()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement