Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #--------------------------------------------------
- # |
- # Кобель Бен писал это |
- # для истинных ценителей fluxbox и тюнинга |
- # в год от Рождества Христова 2011 |
- # |
- # |
- # |
- # последнее измение 20 января 2015 |
- #--------------------------------------------------
- #
- # Устанавливаем лимит (в процентах) занятого данными места
- # если в корне системы ( / ) занято более указанного лимита
- # скрипт не запуститься
- # Значение по умолчанию 80 %
- #
- limit_free=90
- #
- # Если размер несжатых данных больше чем Limit_work начинаеться пересоздание слепка
- #
- Limit_work=5000000
- #
- # Делаем последнее китайское предупреждение юзеру.....
- #
- work="no"
- #
- # Cкрипт не запуститься пока юзер явно не разрешит это
- #
- # Задаём цвета вывода
- RED="\e[01;31m" GRN="\e[01;32m" YLW="\e[01;33m" RST="\e[00m"
- echo "Скрипт выполняет сжатие /usr и /opt "
- #echo ""
- echo -e ${GRN}" Изменить список каталогов подлежащих сжатию можно отредактировав строку скрипта" ${RST}
- echo -e ${YLW}"for Katalog in usr opt ; do"${RST}
- echo -e ${GRN}"просто добавьте или удалите то что нужно" ${RST}
- echo ""
- echo -e ${RED}"Не уверен - не запускай"${RST}
- echo "Работаем ? yes/no "
- read work
- if [ "$work" = "yes" ] ; then
- true
- else
- echo "Вы не ввели yes .... Завершаем работу"
- exit 1
- fi
- #
- # Проверяем версию и наличие mksquashfs
- #
- if [ -n "$(type -p mksquashfs)" ] ; then
- #
- # Версия это
- #
- Squa_ver=$(mksquashfs -version | grep "mksquashfs version" | cut -f3 -d" " | cut -f2 -d. )
- [ "$Squa_ver" -ge "3" ] || Only_gzip="Yes"
- #
- # Если версия больше или равнв 4.3 то можно использовать xz или lzo
- #
- else
- echo "Инсталлируйте пакет squashfs-tools. Использование сжатия xz или lzo возможно только если версия больше или равнв 4.3 "
- exit 1
- fi
- # Проверка свободного места в корне ( / )
- used_space=$(df / | sed '1d;s/%//' | awk '{print $5}' )
- if [ "$limit_free" -ge "$used_space" ]
- then
- echo -e ${GRN}"Занято $used_space% при лимите в $limit_free% - Работаем !"${RST}
- true
- else
- echo -e ${RED} "Занято $used_space% при лимите в $limit_free% - освободите место на разделе "${RST}
- echo -e ${RED} " Или увеличте переменную limit_free в скрипте "${RST}
- exit 1
- fi
- #
- # Проверим , что утилита mkdir на своем месте
- #
- if [ -f /bin/mkdir ] ; then
- true
- else
- echo -e ${RED}" /bin/mkdir not found ! "${RST}
- exit 1
- fi
- #
- # Проверим , что утилита chown на своем месте
- #
- if [ -f /bin/chown ] ; then
- true
- else
- echo -e ${RED}" /bin/chown not found ! "${RST}
- exit 1
- fi
- #
- # Метод сжатия
- # Осторожно ! Узнай что поддерживает утилита unsquafs !
- #
- echo ""
- echo "Сжатие xz или lzo возможно только для AgiliaNext !!! "
- echo ""
- if [ "$Only_gzip" = "Yes" ]
- then
- Compress="gzip"
- else
- echo ""
- echo "Выберите метод сжатия xz - 1 lzo - 2 lz4 - 3"
- read Compress
- case $Compress in
- 1)
- Compress="xz"
- ;;
- 2)
- Compress="lzo"
- ;;
- 3)
- Compress="lz4"
- ;;
- *)
- echo "Значение $Compress неверно!!!!"
- exit 1
- esac
- fi
- echo " Метод сжатия устанавливаем $Compress "
- # Метод монтирования пока не ясен
- #Mount_Metod="None"
- Mount_Metod_Sys="None"
- # Cмотрим поддерживает ли система Aufs или OverlayFS
- if cat /proc/filesystems | grep aufs &> /dev/null || modprobe aufs &> /dev/null
- then
- echo -e ${GRN}" Монтирование через AuFS включено "${RST}
- Mount_Metod_Sys="Aufs"
- elif cat /proc/filesystems | grep overlay &> /dev/null || modprobe overlay &> /dev/null
- then
- echo -e ${GRN} " Монтирование через OverlayFS включено "${RST}
- Mount_Metod_Sys="OferlayFS"
- else
- echo -e ${RED}"Ваша система не поддерживает ни OverlayFS ни aufs продолжение невозможно! "${RST}
- exit 1
- fi
- for Katalog in usr opt home/flux ; do
- #
- # Выяcняем полддерживаеться ли монтирование через OverlayFS
- # если нет то используем AuFS. Если поддержки AuFS нет прекращаем работу.
- #
- if [ "$Mount_Metod_Sys" = "Aufs" ]
- then
- Parametr_Mount="/${Katalog} /${Katalog} aufs rw,noatime,udba=reval,br:/${Katalog}-${Compress}/rw:/${Katalog}-${Compress}/ro,xino=/dev/shm/aufs.xino 0 0"
- elif [ "$Mount_Metod_Sys" = "OferlayFS" ]
- then
- Parametr_Mount="/${Katalog} /${Katalog} overlay rw,noatime,lowerdir=/${Katalog}-${Compress}/ro,upperdir=/${Katalog}-${Compress}/rw,workdir=/${Katalog}-${Compress}/workdir 0 0"
- fi
- # Имя сжатиго файла - это имя каталога + метод сжатия
- # Если в имени каталога присутствует символ "/" заменяем его на "-"
- Filename1="${Katalog}.$Compress"
- Filename=$(echo ${Filename1//"/"/"-"})
- # Переменная позволяют узнать надо ли перемещать
- # для последующего удаления несжатые /opt и /usr
- Do_mv=1
- #
- # Проверяем сушествует ли каталог который мы хотим сжимать
- #
- if [ -d /${Katalog} ] ; then
- # Если этот каталог существует то запоминаем группу и владельца каталога
- Vlad_kat=$(ls -ld /${Katalog} | awk '{print $3 ":" $4;}')
- echo "Группа и владелец каталога /${Katalog} $Vlad_kat"
- if [ -d /${Katalog}-${Compress} ] ; then
- echo "Директория /${Katalog}-${Compress} уже существует... хорошо"
- else
- /bin/mkdir -p /${Katalog}-${Compress}/{ro,rw,workdir} || exit 1
- echo "Директория /${Katalog}-${Compress} успешно создана"
- fi
- if [ -f /${Katalog}-${Compress}/$Filename ] ; then
- # Проверяем изменения в каталоге ( сколько новых файлов записано)
- File_diff=$(du /${Katalog}-${Compress}/rw -sb 2> /dev/null | cut -f1 )
- echo -e ${GRN}" В каталоге /${Katalog}-${Compress}/rw $File_diff несжатых данных"${RST}
- # И если размер изменений ( File_diff ) больше 5 000 000 байт пересоздаем слепок
- if [ "$File_diff" -ge "$Limit_work" ]
- then
- echo "Обнаружен старый слепок /${Katalog} ! начинаем пересоздание...."
- echo "Создаем новый слепок /${Katalog}...."
- mksquashfs /${Katalog} /${Katalog}-${Compress}/$Filename.tmp -b 65536 -comp $Compress || exit 1
- echo "Размонтируем текущий /${Katalog}...."
- umount -l /${Katalog} || echo " /${Katalog} not mounted?...."
- umount -l /${Katalog}-${Compress}/ro || echo " /${Katalog}/ro not mounted?...."
- echo "Удаляем старый слепок...."
- rm /${Katalog}-${Compress}/$Filename
- echo "Перемещам вновь созданный...."
- mv /${Katalog}-${Compress}/$Filename.tmp /${Katalog}-${Compress}/$Filename
- echo "Удаляем старую подсистему...."
- rm -rf /${Katalog}-${Compress}/rw/* || echo " rm -rf /${Katalog}-${Compress}/rw/* Failed ! "
- echo " Восстанавливаем группу и владельца /${Katalog} "
- /bin/chown $Vlad_kat /${Katalog}
- else
- echo -e ${GRN}" Размер директории /${Katalog}-${Compress}/rw/ - $File_diff нет смысла пересоздавать слепок"${RST}
- continue
- fi
- else
- echo "Сжимаем ${Katalog}..."
- mksquashfs /${Katalog} /${Katalog}-${Compress}/$Filename -b 65536 -comp $Compress || exit 1
- echo "Прописываем в /etc/fstab"
- echo "#">>/etc/fstab
- echo "# Сжатые разделы">>/etc/fstab
- echo "/${Katalog}-${Compress}/$Filename /${Katalog}-${Compress}/ro squashfs loop,ro,compress=${Compress} 0 0">> /etc/fstab || exit 1
- echo "$Parametr_Mount" >> /etc/fstab || exit 1
- echo "#">>/etc/fstab
- echo "Перемещаем старый /${Katalog} в /${Katalog}.old"
- mv /${Katalog} /${Katalog}.old
- /bin/mkdir /${Katalog}
- echo "Несжатый /${Katalog} перемещен в /${Katalog}.old и может быть удалён после перезагрузки!"
- fi
- rm -rf /${Katalog}-${Compress}/rw/* || echo " rm -rf /${Katalog}-${Compress}/rw/* Failed ! "
- echo "Перемонтируем с новым слепком...."
- mount /${Katalog}-${Compress}/ro || echo " /${Katalog}-${Compress}/ro does not exist"
- (mount /${Katalog} && echo "Готово новый /${Katalog} на марще!!!!") || echo " mount /${Katalog} Failed!"
- echo " Восстанавливаем группу и владельца /${Katalog} "
- /bin/chown $Vlad_kat /${Katalog}
- else
- echo " А нету /${Katalog}..."
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment