Advertisement
Guest User

Untitled

a guest
Oct 7th, 2014
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.53 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Примечание. Я использую в качестве загрузчика Syslinux.
  5.  
  6. import subprocess
  7. import os
  8.  
  9. # Каталог, куда будут сохраняться архивы. Слеш в конце указывать не надо.
  10. output_path = "/home/backup"
  11. output_ext = "tar.gz"
  12.  
  13. # Приоритет, с которым будет выполняться tar.
  14. priority_process = "19"
  15.  
  16. # Понижение приоритета программы, чтобы не мешала заниматься чем-то другим.
  17. os.nice(int(priority_process))
  18.  
  19. # Формирование пути для финального файла.
  20. def create_path(name_element):
  21.     name_element = list(name_element)
  22.     del name_element[0]
  23.     name_element = ''.join(name_element)    
  24.     path_to_file = output_path + '/' + name_element + '.' + output_ext
  25.     return path_to_file
  26.  
  27. # Сохранение в файл вывода ls.
  28. def ls_save(path_to_file, out_list):
  29.     fd = open(path_to_file, 'wb')
  30.     fd.write(out_list)
  31.     fd.close()
  32.  
  33. def main():
  34.     root_folders = []
  35.     # Список для архивирования, только от корня. И только один элемент в пути.
  36.     root_folders.append("/bin")
  37.     root_folders.append("/boot")
  38.     root_folders.append("/etc")
  39.     root_folders.append("/home")
  40.     root_folders.append("/lib32")
  41.     root_folders.append("/lib64")
  42.     root_folders.append("/opt")
  43.     root_folders.append("/root")
  44.     root_folders.append("/run")
  45.     root_folders.append("/sbin")
  46.     root_folders.append("/usr")
  47.     root_folders.append("/var")
  48.     #root_folders.append("/system")
  49.     root_folders.append("/mnt_remote")
  50.    
  51.     # Переход в корневую директорию и бекап каталогов, которые там находятся.
  52.     os.chdir('/')
  53.     for i in root_folders:
  54.         path_to_output_file = create_path(i)
  55.         if i == "/home":
  56.             cmd = []
  57.             cmd.append("nice")
  58.             cmd.append("-n")
  59.             cmd.append(priority_process)
  60.             cmd.append("tar")
  61.             cmd.append("cpvfz")
  62.             cmd.append(path_to_output_file)
  63.             # Исключения должны быть добавлены здесь.
  64.             cmd.append("--exclude=/home/userbackup")
  65.             cmd.append("--exclude=/home/backup")
  66.             cmd.append("--exclude=/home/yura/Exclude")
  67.             cmd.append("--exclude=/home/lost+found")
  68.             cmd.append("--exclude=/home/yura/temp")
  69.             cmd.append(i)
  70.             subprocess.call(cmd)
  71.         else:
  72.             subprocess.call([ "nice", "-n", priority_process, "tar", "cpvfz", path_to_output_file, i ])
  73.  
  74.     # Диск, с которого выполняется загрузка ОС. Нужно для создания бекапа mbr.
  75.     boot_disk = "/dev/sda"
  76.    
  77.     # Выполнение бекапа mbr.
  78.     boot_disk = "if=" + boot_disk
  79.     path_to_file = "of=" + output_path + '/' + "backup.mbr"
  80.     subprocess.call([ "dd", boot_disk, path_to_file, "bs=446", "count=1" ])
  81.  
  82.     # Сохранение списка файлов и папок корневого каталога.
  83.     path_to_file = output_path + '/' + "spisok_failov_i_papok_kornya"
  84.     ls_list = subprocess.check_output(["ls", "-h", "-a", "-l", "/" ])
  85.     ls_save(path_to_file, ls_list)
  86.  
  87.     # Сохранение списка файлов и папок /mnt .
  88.     path_to_file = output_path + '/' + "spisok_failov_i_papok_mnt"
  89.     ls_list = subprocess.check_output([ "ls", "-h", "-a", "-l", "/mnt" ])
  90.     ls_save(path_to_file, ls_list)
  91.  
  92.     # Сохранение списка файлов и папок /media .
  93.     path_to_file = output_path + '/' + "spisok_failov_i_papok_media"
  94.     ls_list = subprocess.check_output([ "ls", "-h", "-a", "-l", "/media" ])
  95.     ls_save(path_to_file, ls_list)
  96.  
  97.     # Сохранение ReadMe.
  98.     readme = []
  99.     readme.append("В случае, если потребуется восстановить mbr, была создана копия mbr (без таблицы разделов). \n")
  100.     readme.append("Файл называется backup.mbr. Для восстановления mbr нужно выполнить что-нибудь вроде: \n\n")
  101.     readme.append("dd if=mbr_backup.mbr of=/dev/sdX bs=446 count=1 \n\n")
  102.     readme.append("Нужно заметить, что mbr можно восстанавливать не с помощью копии dd, а с помощью SystemRescueCD. На этом \n")
  103.     readme.append("диске (SystemRescueCD) уже есть Syslinux, поэтому и файл загрузчика и mbr можно взять оттуда.")
  104.     readme.append("Также нужно будет создать каталоги dev, proc, sys, tmp, mnt и media в корневой директории. \n")
  105.     readme.append("В каталогах mnt и media также нужно создать подкаталоги, в соответствии со списками для этих каталогов \n")
  106.     readme.append("Кроме того, в корневой директории нужно создать симлинк lib, указывающий на каталог lib64, также \n")
  107.     readme.append("находящийся в корневой директории.")
  108.     path_to_file = output_path + '/' + "ReadMe"
  109.     fd = open(path_to_file, 'w')
  110.     fd.writelines(readme)
  111.     fd.close()
  112.  
  113. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement