Guest User

/usr and /opt squashfs compress and mount script

a guest
Oct 18th, 2016
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 10.14 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #--------------------------------------------------
  4. #                          |
  5. #   Кобель Бен писал это              |
  6. # для истинных ценителей fluxbox и тюнинга     |
  7. # в год от Рождества Христова 2011          |
  8. #                          |
  9. #                          |
  10. #                                                  |
  11. # последнее измение 20 января 2015                 |
  12. #--------------------------------------------------
  13.  
  14. #
  15. # Устанавливаем лимит (в процентах) занятого данными места
  16. #  если в корне системы ( / ) занято более  указанного лимита
  17. #    скрипт не запуститься
  18. #    Значение по умолчанию 80 %
  19. #
  20.  
  21. limit_free=90
  22.  
  23. #
  24. # Если размер несжатых данных больше чем Limit_work начинаеться пересоздание слепка
  25. #
  26.  
  27. Limit_work=5000000
  28.  
  29. #
  30. # Делаем последнее китайское предупреждение юзеру.....
  31. #
  32.  
  33. work="no"
  34.  
  35. #
  36. # Cкрипт не запуститься пока юзер явно не разрешит это
  37. #
  38.  
  39. # Задаём цвета вывода
  40. RED="\e[01;31m" GRN="\e[01;32m" YLW="\e[01;33m" RST="\e[00m"
  41.  
  42.  
  43. echo "Скрипт выполняет сжатие /usr и /opt "
  44. #echo ""
  45. echo -e ${GRN}"  Изменить список каталогов подлежащих сжатию можно отредактировав строку скрипта" ${RST}
  46. echo -e ${YLW}"for Katalog in usr opt ; do"${RST}
  47. echo -e ${GRN}"просто добавьте или удалите то что нужно"  ${RST}
  48. echo ""
  49. echo  -e ${RED}"Не уверен - не запускай"${RST}
  50. echo  "Работаем ? yes/no "
  51.  
  52.  
  53.  
  54. read work
  55.  
  56. if [ "$work" = "yes" ] ; then
  57.     true
  58.     else
  59.     echo "Вы не ввели yes .... Завершаем работу"
  60.     exit 1
  61. fi
  62.  
  63.  
  64.  
  65. #
  66. # Проверяем версию и наличие mksquashfs
  67. #
  68.  
  69. if  [ -n "$(type -p mksquashfs)"  ] ; then
  70.  
  71. #
  72. # Версия это
  73. #
  74.      Squa_ver=$(mksquashfs -version | grep "mksquashfs version" | cut -f3 -d" " | cut -f2 -d. )
  75.    
  76.      [ "$Squa_ver" -ge "3" ] || Only_gzip="Yes"
  77.  
  78. #
  79. # Если версия больше или равнв 4.3 то можно использовать xz или lzo
  80. #
  81.     else
  82.     echo "Инсталлируйте пакет squashfs-tools. Использование сжатия xz или lzo возможно только если версия больше или равнв 4.3  "
  83.     exit 1
  84. fi
  85.  
  86. # Проверка свободного места в корне ( / )
  87.  
  88. used_space=$(df / | sed '1d;s/%//' | awk '{print $5}' )
  89.  
  90.  
  91. if [ "$limit_free" -ge "$used_space" ]
  92.     then
  93.     echo -e ${GRN}"Занято $used_space% при лимите в $limit_free% - Работаем !"${RST}
  94.     true
  95.     else
  96.     echo -e ${RED} "Занято $used_space% при лимите в $limit_free% - освободите место на разделе "${RST}
  97.     echo -e ${RED} " Или увеличте переменную limit_free в скрипте "${RST}
  98.     exit 1
  99.  
  100. fi
  101.  
  102. #
  103. # Проверим , что утилита mkdir на своем месте
  104. #
  105.  
  106. if [ -f /bin/mkdir ] ; then
  107.     true
  108.     else
  109.     echo -e ${RED}" /bin/mkdir not found ! "${RST}
  110.     exit 1
  111. fi    
  112.  
  113. #
  114. # Проверим , что утилита chown на своем месте
  115. #
  116.  
  117. if [ -f /bin/chown ] ; then
  118.     true
  119.     else
  120.     echo -e ${RED}" /bin/chown not found ! "${RST}
  121.     exit 1
  122. fi    
  123.  
  124.  
  125. #
  126. # Метод сжатия
  127. # Осторожно ! Узнай что поддерживает утилита unsquafs !
  128. #
  129.  
  130. echo ""
  131. echo "Сжатие xz или lzo возможно только для AgiliaNext !!! "
  132. echo ""
  133.     if [ "$Only_gzip" = "Yes" ]
  134.     then
  135.     Compress="gzip"
  136.     else
  137.     echo ""
  138.     echo "Выберите метод сжатия  xz - 1 lzo - 2 lz4 - 3"
  139.     read Compress
  140.     case $Compress in
  141.     1)
  142.     Compress="xz"
  143.     ;;
  144.     2)
  145.     Compress="lzo"
  146.     ;;
  147.     3)
  148.     Compress="lz4"
  149.     ;;
  150.     *)
  151.     echo "Значение $Compress неверно!!!!"
  152.     exit 1
  153.     esac
  154.        
  155.     fi
  156.  
  157. echo " Метод сжатия устанавливаем $Compress "
  158.  
  159. # Метод монтирования  пока не ясен
  160. #Mount_Metod="None"
  161. Mount_Metod_Sys="None"
  162.  
  163. # Cмотрим поддерживает ли система Aufs или OverlayFS
  164.  
  165. if cat /proc/filesystems | grep aufs &> /dev/null || modprobe aufs &> /dev/null
  166. then
  167.     echo -e ${GRN}" Монтирование через AuFS  включено "${RST}
  168.     Mount_Metod_Sys="Aufs"
  169.     elif cat /proc/filesystems | grep overlay &> /dev/null || modprobe overlay &> /dev/null
  170.     then
  171.     echo -e ${GRN} " Монтирование через OverlayFS включено "${RST}
  172.     Mount_Metod_Sys="OferlayFS"
  173.     else
  174.      echo -e ${RED}"Ваша система не поддерживает ни OverlayFS ни aufs продолжение невозможно! "${RST}
  175.         exit 1
  176. fi
  177.  
  178. for Katalog in usr opt home/flux ; do
  179.  
  180. #
  181. # Выяcняем полддерживаеться ли  монтирование через OverlayFS
  182. # если нет то используем AuFS. Если поддержки AuFS нет прекращаем работу.
  183. #
  184.  
  185. if [ "$Mount_Metod_Sys" = "Aufs" ]
  186.     then
  187.     Parametr_Mount="/${Katalog}       /${Katalog}    aufs   rw,noatime,udba=reval,br:/${Katalog}-${Compress}/rw:/${Katalog}-${Compress}/ro,xino=/dev/shm/aufs.xino 0 0"
  188.     elif [ "$Mount_Metod_Sys" = "OferlayFS" ]
  189.     then
  190.     Parametr_Mount="/${Katalog} /${Katalog} overlay rw,noatime,lowerdir=/${Katalog}-${Compress}/ro,upperdir=/${Katalog}-${Compress}/rw,workdir=/${Katalog}-${Compress}/workdir 0 0"
  191. fi
  192.  
  193.  
  194.     # Имя сжатиго файла - это имя  каталога + метод сжатия
  195.     # Если в имени каталога присутствует символ "/" заменяем его на "-"
  196.     Filename1="${Katalog}.$Compress"
  197.          Filename=$(echo ${Filename1//"/"/"-"})
  198.          
  199.     # Переменная позволяют узнать надо ли перемещать
  200.     # для последующего удаления несжатые /opt и /usr
  201. Do_mv=1
  202.  
  203.  
  204. #
  205. # Проверяем сушествует ли каталог который мы хотим сжимать
  206. #
  207.  
  208. if [ -d /${Katalog} ] ; then
  209. # Если этот каталог существует то запоминаем группу и владельца  каталога
  210. Vlad_kat=$(ls -ld /${Katalog} | awk '{print $3 ":" $4;}')
  211. echo "Группа и владелец каталога /${Katalog} $Vlad_kat"
  212.  
  213.     if [ -d /${Katalog}-${Compress} ] ; then
  214.    
  215.     echo "Директория /${Katalog}-${Compress} уже существует... хорошо"
  216.    
  217.     else
  218.  
  219.     /bin/mkdir -p /${Katalog}-${Compress}/{ro,rw,workdir} || exit 1
  220.     echo "Директория  /${Katalog}-${Compress}  успешно создана"
  221.  
  222.     fi
  223.     if [ -f /${Katalog}-${Compress}/$Filename ] ; then
  224. # Проверяем изменения в каталоге ( сколько новых файлов записано)
  225.         File_diff=$(du /${Katalog}-${Compress}/rw -sb 2> /dev/null | cut -f1 )
  226.         echo -e ${GRN}" В каталоге /${Katalog}-${Compress}/rw $File_diff несжатых данных"${RST}
  227. # И если размер изменений ( File_diff ) больше 5 000 000 байт пересоздаем слепок
  228.         if [ "$File_diff" -ge "$Limit_work" ]
  229.             then
  230.             echo "Обнаружен старый слепок /${Katalog} ! начинаем пересоздание...."
  231.             echo "Создаем новый слепок  /${Katalog}...."
  232.             mksquashfs /${Katalog} /${Katalog}-${Compress}/$Filename.tmp -b 65536 -comp $Compress || exit 1
  233.             echo "Размонтируем текущий /${Katalog}...."
  234.             umount -l /${Katalog} || echo " /${Katalog} not mounted?...."
  235.             umount -l /${Katalog}-${Compress}/ro || echo " /${Katalog}/ro not mounted?...."
  236.             echo "Удаляем старый слепок...."
  237.             rm /${Katalog}-${Compress}/$Filename
  238.             echo "Перемещам вновь созданный...."
  239.             mv /${Katalog}-${Compress}/$Filename.tmp /${Katalog}-${Compress}/$Filename
  240.             echo "Удаляем старую подсистему...."
  241.             rm -rf /${Katalog}-${Compress}/rw/* || echo " rm -rf /${Katalog}-${Compress}/rw/* Failed ! "
  242.             echo " Восстанавливаем группу и владельца /${Katalog} "
  243.         /bin/chown  $Vlad_kat /${Katalog}
  244.         else
  245.             echo -e ${GRN}" Размер директории /${Katalog}-${Compress}/rw/ - $File_diff нет смысла пересоздавать слепок"${RST}
  246.             continue
  247.         fi
  248.     else
  249.  
  250.         echo "Сжимаем ${Katalog}..."
  251.                 mksquashfs  /${Katalog} /${Katalog}-${Compress}/$Filename  -b 65536 -comp $Compress  || exit 1
  252.        
  253.         echo "Прописываем в /etc/fstab"
  254.         echo "#">>/etc/fstab
  255.         echo "# Сжатые разделы">>/etc/fstab
  256.         echo "/${Katalog}-${Compress}/$Filename      /${Katalog}-${Compress}/ro squashfs loop,ro,compress=${Compress} 0 0">> /etc/fstab || exit 1
  257.         echo "$Parametr_Mount" >> /etc/fstab || exit 1
  258.         echo "#">>/etc/fstab
  259.             echo "Перемещаем старый /${Katalog} в /${Katalog}.old"
  260.             mv /${Katalog} /${Katalog}.old
  261.             /bin/mkdir /${Katalog}
  262.         echo "Несжатый /${Katalog} перемещен в /${Katalog}.old и может быть удалён после перезагрузки!"
  263.     fi
  264.         rm -rf /${Katalog}-${Compress}/rw/* || echo " rm -rf /${Katalog}-${Compress}/rw/* Failed ! "
  265.         echo "Перемонтируем с новым слепком...."
  266.         mount /${Katalog}-${Compress}/ro || echo " /${Katalog}-${Compress}/ro does not exist"
  267.         (mount /${Katalog} && echo "Готово новый /${Katalog} на марще!!!!") || echo " mount /${Katalog} Failed!"
  268.         echo " Восстанавливаем группу и владельца /${Katalog} "
  269.         /bin/chown  $Vlad_kat /${Katalog}
  270. else
  271.  
  272.     echo " А нету /${Katalog}..."
  273.  
  274. fi
  275.  
  276. done
Advertisement
Add Comment
Please, Sign In to add comment