среда, 28 декабря 2016 г.

bacula очистка баз от бэкапов





На данный момент сделать второю полную копию хранилища на сервере PDC невозможно – недостаточно места на разделе /mnt/bacula/ ( примонтирован по iSCSI nas4free )
Для этого делается очистка баз от бэкапов:
1. меняем дату в файле:
sudo vi /usr/local/bin/purge-db-and-files.sh


до какого числа очистить базу
DATEFROM=2015-02-12
 и запускаем его
cd /usr/local/bin/
purge-db-and-files.sh

2. далее чистим хранилище /mnt/bacula/
эта папка (/mnt/bacula/) примонтирована по ISCSI с сервера nas4Free
sudo rm -rf /mnt/bacula/*_volume-*
если действительно хотим удалить все:
sudo rm -rf /mnt/bacula/*_volume-*



purge-db-and-files.sh

 #!/bin/bash

  DATEFROM=2016-12-26
  BACKUPFOLDER="/mnt/bacula"

  #GETLISTFROM="BCONSOLE"
  GETLISTFROM="MYSQL"

  # get list to prune
  if [[ "${GETLISTFROM}" == "BCONSOLE" ]] ; then
    DELETELIST=`echo -e "sqlquery\nselect VolumeName from Media where LastWritten < '${DATEFROM}' order by VolumeName;\n.\nexit" | bconsole | grep '^|' | grep -v ' VolumeName ' | sed -e 's/[ ]*|[ ]*//g'`
    echo "Using bconsole"
  elif [[ "${GETLISTFROM}" == "MYSQL" ]] ; then
    DELETELIST=`mysql --database=bacula --column-names=FALSE -e "select VolumeName from Media where LastWritten < '${DATEFROM}' order by VolumeName;" | sed -e 's/[ ]*|[ ]*//g'`
    echo "Using mysql"
  fi
  if [[ -z "${DELETELIST}" ]] ; then
    echo "No records found earlier than ${DATEFROM}"
    exit 1
  fi
  #echo -e "${DELETELIST}"
  echo  "${DELETELIST}"
  echo
  echo "WARNING: IT WILL DESTROY THAT FILES ON THE DISK"
  echo "Are you sure you want to proceed?"
  read -p 'Type YES if you really want to proceed: ' input
  echo
  if [[ ${input} != YES  ]]; then
    echo "Ok. Aborting."
    exit 1
  fi

  echo -e "${DELETELIST}" | xargs -I '{}' echo delete yes volume='{}' | bconsole
  echo -e "${DELETELIST}" | xargs -I '{}' echo "rm ${BACKUPFOLDER}/"'{}' | while read LINE ; do echo "${LINE}"; "${LINE}"; done

Bacula. Fatal error: Uncaught exception 'Zend_Exception' with message 'Fatal error: Can't connect to SQL server'

Изначально Система резервного копирования строилась по этой статье:


Развертывание Bacula в малом офисе 

Все работает по статье нормально.

НО что у меня объем хранилища 4ТБ, а объем данных более 2 ТБ. В итоге приходится чистить базу и запускать бэкап заново

Однажды после такой чистки получил  ошибку:


Fatal error: Uncaught exception 'Zend_Exception' with message 'Fatal error: Can't connect to SQL server' in /var/www/webacula/html/index.php:178
Stack trace:
#0 {main}
  thrown in /var/www/webacula/html/index.php on line 178

проблема с SQL server
 
проверяем место на жестком диске

user@bacula:/$ df -h
Файл.система                Размер Использовано  Дост Использовано% Cмонтировано в
/dev/mapper/bacula--vg-root    71G          67G     0          100% /
udev                          994M         4,0K  994M            1% /dev
tmpfs                         201M         736K  200M            1% /run
none                          5,0M            0  5,0M            0% /run/lock
none                         1004M            0 1004M            0% /run/shm
/dev/sda1                     236M          35M  189M           16% /boot
overflow                      1,0M            0  1,0M            0% /tmp
/dev/sdb1                     2,5T          62G  2,3T            3% /mnt/bacula
 


подозрительно

/dev/mapper/bacula--vg-root    71G          67G     0          100% /

ищем самую большую папку

user@bacula:/$ sudo du -s * | sort -nr | head

получили 
 
64186796        mnt
2844792         var
870928          usr
213648          lib


user@bacula:/var/lib$ sudo du -s * | sort -nr | head
2373428 mysql
120132  apt
56068   mlocate
34008   postgresql
29968   dpkg
8036    aptitude
3488    aspell
2072    apt-xapian-index
1648    bacula

в итоге нашел файл


user@bacula:/var/lib$ sudo ls -la  /var/lib/mysql/ibdata1
-rw-rw---- 1 mysql mysql 2418016256 дек.  26 17:52 /var/lib/mysql/ibdata1


что такое ibdata1 нашел здесь

Второй параметр – задаёт размещение файла ibdata1 (т.к. путь не указан – будет использоваться “хранилище” MySQL – /var/lib/mysql )

ibdata1 увеличился видимо, когда /mnt/bacula не был примонтирован

не запускался MySql






в итоге удалил 
ibdata1 и логи

после этого 
запускался MySq

но webacula не запустился

было решено пересоздать базу bacula и таблицы webacula по статье

выполнить команды:
 
Если после наших эксперементов нам нужно удалить все тестовые джобы, делаем это так:
$ mysql -u root -p
mysql> drop database bacula;
mysql> quit

$ dpkg-reconfigure bacula-director-mysql
Мы уничтожили базу данных, а затем создали ее вновь. Осталось удалить сами файлы томов.
 и
Далее создаем таблицы Webacula, пользователей и роли:
$ cd install/MySql
$ ./10_make_tables.sh
$ ./20_acl_make_tables.sh


после этого система заработала





вторник, 13 сентября 2016 г.

USB-Keyboard with Arduino


http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/



https://florianfries.me/en/arduino-as-a-keyboard.html




http://www.vladcazan.com/electronics/arduino-keyboard-emulator
http://robocraft.ru/blog/1002.html


Arduino как HID-устройство


Необходимо перепрошить mega8u2
















взято с https://vk.com/blynk

Немного предистории:
Посте того, как сгорел мой "ноутбук", я вспомнил про свой старый системник (точнее материнку и блок питания).
Достав его из кучи барахла, заметил что кроме мышки нету никакого устройства ввода, немного посидел,и начал рыть инет. Так как у меня в асоррименте только Arduino UNO R3 смотрел статьи только с ней. Многие делают клавиатуру на Arduino micro (ну там все просто).

В поисках наткнулся на статью где ардуино играет в 2048. Так как для упавления игрой надо нажимать клавиши, нужно превратить ардуино в клавиатуру.То что надо!


Приступим:

Нам понадобится:
  • Arduino UNO R3
  • Перемычка
  • Arduino IDE
  • Фирменная утилита Atmel – Flip
  • Архив с прошивками и примером + библиотека
Цель: написать скетч для Arduino UNO, который будет эмулировать нажатие клавиш стрелок на клавиатуре.
Алгоритм наших действий:
  • Пишем скетч с нужным функционалом и заливаем в МК ATmega328
  • Прошиваем загрузчик Arduino, usb контроллер ATmega16U2
Для эмулирования нажатий клавиш я использовал библиотеку HIDKeyboard.
Что ж теперь переходим к самому интересному – будем превращать Arduino UNO в HID устройство, а конкретней в USB клавиатуру.
Немного теории.
Прошивка загрузчика — для начала нужно перевести Arduino в режим Device Firmware Update или в более часто используемом варианте DFU. Он служит для перепрошивки контроллера выполняющего роль конвертера serial to usb.
Как известно, основное отличие Arduino UNO от предыдущих моделей плат Arduino заключается в наличие второго контроллера ATmega8U2, на смену аппаратному конвертору USB <-> COM (FT232R). Преимуществом данного решения является возможность замены прошивки в интерфейсном контроллере с целью эмуляции произвольного устройства при подключении Arduino к ПК (накопителя, hid-устройства и т.д.). Как это сделать? У интерфейсного контроллера имеется режим DFU – прошивка контроллера ATmega8U2 через подключение через USB. Почти как прошивка центрального контроллера Arduino. Для этого можно воспользоваться фирменной утилитой Flip. Для того чтоб перевести контроллер в этот режим программирования потребуется небольшая аппаратная модернизация Arduino.
Для  Arduino UNO R3 достаточно поставить перемычку.


После этих действий компьютер обнаружит новое устройство и попытается самостоятельно поставить драйвера, но у него ничего не получится. Настало время установить фирменную утилиту Flip от Atmel. Открываем диспетчер задач и видим новое устройство Arduino Uno DFU.

Выберем драйвер из папки недавно установленной утилиты FLIP. В итоге у нас появится новое устройство – ATmega16U2. В дальнейшем при подключении Arduino, устройство будет определять как USB устройство. Теперь нам следует залить HEX файл с инструкциями USB клавиатуры. Чтоб компьютер в дальнейшем распознавал нашу Arduino как usb клавиатуру. Запускаем FLIP.


  • Выбираем в меню Device > Select > ATmega16U2
  • Выбираем в меню Setting > Communication > USB
  • Жмем Open берем прошивку
  • Приступаем к прошивке, жмем Run
По окончании процесса прошивки можно закрыть программу и проверить, как работает устройство. В итоге мой Arduino успешно играл в 2048 почти неделю. Даже на ночь его не выключал. В подтверждение вот мой результат.

Вот так можно превратить Arduino UNO в HID-устройство. Кстати можно не только играться в игры но и разыграть друга, подключив к его компьютеру устройство, которое запустит блокнот и будет писать там анекдоты, либо запускать команды, ведь клавиатура это главный пульт управления компьютером. К сожалению нельзя применить этот метод к плате Arduino Nano. Как уже говорилось ранее – второй контроллер Arduino UNO (ATmega8U2) используется в роли конвертера USB to Serial для определения компьютером Arduino UNO как USB устройство. Можно сделать вывод: реализовать этот метод, без посторонних устройств, возможно лишь при наличии на плате Arduino микроконтроллера запрограммированного как USB-to-serial конвертер. Но что делать, если у вас Arduino Nano или иная плата без конвертера USB to Serial? В таком случае можно купить отдельно конвертер подобный этому.

Чтобы вернуть Arduino UNO к жизни надо перепрошить ATmega16U2
Найти прошивку можно тут:
C:\Program Files\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
На всякий случай собрал весь софт который использовал в

  - Arduino-HID-Bot-2048.ino - Скетч для Arduino UNO для игры в 2048.
   
  - Arduino-keyboard.hex       - этот hex файл заливаем при помощи FLIP для перевода arduino
в режим USB клавиатуры (но сначала нужно залить основной скетч).

прошиваем вот так!


шьем по isp

делаем клавиатуру

avrdude -p m16 -b 19200 -F -P COM4 -c avrisp -U flash:w:Arduino-keyboard-0.3.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m




"-p m16" это код atmega16u2


делаем копию arduino uno R3

avrdude -p m328p -b 19200 -c avrisp
 -P COM13 -e -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex

   
  - Arduino-usbserial-uno.hex - этот файл нужен для того чтоб обратно вернуть Arduino UNO
в стандартный режи работы, чтоб она определялась в ПК как виртуальный COM-порт
в котром мы можем загружать скетчи. 
https://vk.com/doc5127466_437873517

http://www.atmel.com/tools/FLIP.aspx


 Дополнительно:

Arduino UNO R3 Mouse HID

 http://pythoneiro.blogspot.ru/2015/04/transformando-seu-arduino-uno-em-um-usb.html





четверг, 28 июля 2016 г.

Удаления файла или каталога по маске в Linux

Удаления файла или каталога по маске

Удаляем файлы и каталоги по заданным критериям или маске. Есть несколько вариантов удаления. Прицеп прост, собрать структуру файлов или директорий и удалить.
Для сбора данных как всегда используем команду find, но многие не смотрели ее дополнительных возможностей. Есть ключ -delete с помощь которого можно сразу и удалить выбранные объекты.
Удаляем все файлы (ключ -type f ) с именем упоминание в имени "*text*" в каталоге ./test/:
find ./test/* -type f -name "*text*" -delete
Удаляем все пустые каталоги по маске
find ./test/* -type d -name "*" -empty -delete
А если каталог или директория заполнена прибегаем к команде rm .

Удаление каталога с файлами

Удаляем конкретный каталоги с файлами.
rm -dfR ./test/dir1
Удаляем каталог с файлами по маске
find ./test/* -type d -name "*dir*" | xargs rm -dfR
Приятного использования и удаления.



 источник1

Удалить файлы, содержащие в названии определенный текст можно следующими способами:
1: locate *часть_имени* | xargs rm
2: find . -name "*~" -type f | xargs rm -f


источник2

Предположим что файловая шара Samba находится у нас по адресу: /home/samba/public в которой уже лежат папки и файлы пользователей.
Тогда запрос принимает вид:

find /home/samba/public -type f -name "~$*.*" -delete


"~$*.*" -маска имени файла, если нужно удалить например: файлы mp3, то будет иметь вид "*.mp3", а если требуется удалять приложения, то "*.exe"
Данное задание можно засунуть в Cron и выполнять по ночам, когда сервер не используется.
Решение подходит для всех дистрибутивов Linux.

вторник, 26 июля 2016 г.

Поиск самой большой папки unix, linux

du —max-depth=1 -B M |sort -rn
 
-h -x забыл
-h — human, что бы не в байтах, а в гигабайтах/магабайтах/килобайтах и т.д. писало
-x — одна файловая система, если внутри просматриваемого каталога примонтирован другой диск, то пропускать его
и вместо —max-depth=1, можно писать -d 1

понедельник, 11 июля 2016 г.