CouchDB vs. VirtualBox 5.x: битва за место

Если вы запускали сервер Faraday IPE на довольно продолжительное время (в моём случае мне хватило одной ночи), вы могли заметить через некоторое время что Linux сервер начинает дико тупить и тормозить, а кроме того сайты, которые хостятся на нём, могут быть недоступны. Проблема в движке баз данных CouchDB, который и использует Faraday для хранения данных. Не зря так прозвали эту СУБД, лёжа на диване трудно оставаться стройным 🙂

Но отбросим прелюдии. Делать-то что? Есть два пути (можно выбрать оба):

  1. Увеличить размер диска. Логично? Логично. Моя Kali Linux работает в VirtualBox и, как оказалось, разработчики VB не удосужились добавить возможность изменения диска в GUI. Но можно через консоль в VirtualBox Command Line Management Interface (подробности ниже).
  2. Понять причину и устранить её. CouchDB — прекрасная и очень удобная в работе СУБД, но за простоту приходится расплачиваться неудобствами в виде повышенной обжорливости. Периодически движок делает сжатие и бэкап существующих БД, это требует места и если его немного, то CouchDB продолжает до тех пор пока не кончится место на диске, а как закончится, вырубается, не прибрав за собой. Можно удалить эти временные файлы чтобы освободить место на диске  (подробности ниже).

Начнём с конца 🙂 Для начала, расчистим пространство на диске, а затем увеличим размер самого диска.

  1. Удаляем временные файлы, которые насоздавал CouchDB, «dead compact jobs». Когда на диске не остаётся места, CouchDB может продолжать пытаться создавать пустые файлы compact jobs, которые будут блокировать создание новых compact jobs даже после того как мы увеличим/почистим диск. В моём Kali Linux эти файлы лежат в /var/lib/couchdb/. Для начала можно удалить .compact файлы с нулевым размером (первая команда ниже), затем перезапустить сервис couchdb. Если не поможет, то удалить все .compact файлы из папки и сделать reboot.
    find /var/lib/couchdb/ -name '*.content' -size 0c -print0 -delete
    
  2. Имеет также смысл воспользоваться замечательной утилитой baobab, уже входящей в состав Kali Linux (а если не стоит, то можно поставить командой apt-get install baobab), для того чтобы посмотреть в каких папках перевес (так, я обнаружил что в системе кучу места занимали логи CouchDB в /var/log/couchdb/).
    kalilinux_baobab
  3. Далее увеличим размер диска в VirtualBox. Если это вам не нужно/интересно, то можно пропустить этот раздел.Небольшая ремарка — изменять размер возможно только Dynamically Allocated Size дисков и нельзя у Fixed Size дисков. Узнать какой у вас диск очень просто — нужно зайти в настройки виртуалки и посмотреть (системный диск — тот что самый верхний в списке):
    vbox-fixedsizedisk

    1. Для начала выключите свою Linux виртуалку. Также нужно закрыть приложение VirtualBox.
    2. Далее сделайте копию виртуалки на всякий случай (можно сделать копию всей папки с виртуалкой или выбрать Clone -> Full Clone в GUI VirtualBox)
    3. Открываем консоль и переходим в папку где у вас установлен VirtualBox, на Windows это скорее всего C:\Program Files\Oracle\VirtualBox (для удобства добавьте этот путь в системную переменную PATH и вызывайте утилиту откуда угодно).
    4. Нам понадобится VBoxManage — это утилита управления виртуалками и самим гипервизором, она умеет буквально всё, что мы можете себе представить. Как оказалось, мой системный диск был когда-то импортирован из VMWare а посему имеет неродной формат .vmdk, перед изменением размера нужно сконвертировать его в .vdi, далее мы изменим размер диска (указывается в мегабайтах), а потом обратно сконвертируем в .vmdk (можете и не конвертировать, если не хотите, но тогда нужно будет заменить диск на .vdi в настройках):
      VBoxManage clonehd "SourceDisk.vmdk" "TempDisk.vdi" --format vdi
      VBoxManage modifymedium "TempDisk.vdi" --resize 122880
      VBoxManage clonehd "TempDisk.vdi" "SourceDisk.vmdk" --format vmdk
      
    5. После обратного клонирования у созданного диска появится новый ID:
      Clone medium created in format 'vmdk'. UUID: 6f29715b-bede-420c-b62c-2d0c14b13fba

      ID нового диска нужно связать с виртуальной машиной, которой он принадлежит. Попробуйте запустить вирталку. Если VirtualBox не даёт и показывает какие-то ошибки, то можно попробовать пересоздать виртуалку указав VirtualBox использовать существующий диск (.vdi/.vmdk). Ещё у меня был запущен инстанс VirtualPC, что также мешало VirtualBox, пришлось расквитаться с конкурентом (taskkill /IM «vpc.exe» /F). Мне помогло.

    6. Теперь диск большего размера, чем у нас был раньше. Однако размеры разделов на диске остались прежними, нужно их также изменить — и это наша следующая задача. Есть замечательная утилита gparted, уже скорее всего входящая в состав вашей сборки (если не установлена, то ставим apt-get install gparted). Удобный GUI для работы. Как видно на скриншоте ниже, 90 GB диска не размечено (unallocated), т.е. не используется, а основной раздел (/dev/sda1) занимает только 28 GB.
      kalilinux_gparted_before
      Как видно, unallocated область находится справа на диске, а наша рабочая — слева, и между ними расположен раздел с файлом подкачки (linux-swap), который мешает просто взять и увеличить размер рабочего раздела. Мы удалим раздел swap (/dev/sda5, /dev/sda2), а потом создадим его снова (в другом месте диска) т.к. он нужен для работы системы. Кликаем правой кнопкой по разделу swap и выбираем Delete (сначала для  /dev/sda5, затем для /dev/sda2). Далее выбираем наш рабочий раздел /dev/sda1, правой кнопкой по нему и выбираем Resize/Move. В окне Resize тащим ползунок за стрелочку вправа и видим, что New size увеличивается и Free space соответственно уменьшается. Оставляем на Free space примерно 2000Mb и жмём Resize. Теперь у нас есть один большой рабочий раздел.
      kalilinux_gparted_process_1
      Нужно создать раздел для swap. Жмём правой кнопкой на unallocated -> New -> выбираем Create as: Extended Partition -> Add. Теперь у нас есть extended partition, пока без файловой системы swap. Снова жмём на unallocated -> New -> выбираем Create as: Logical Partition и File System: linux-swap -> Add. Готово.
      kalilinux_gparted_process_2
      Осталось подтвердить операции. Жмём Edit->Apply All Operations->Apply.
      kalilinux_gparted_process_3
      Если всё прошло успешно, gparted должен показать новую структуру нашего диска. Теперь нам доступно почти 120 Gb дискового пространства:
      kalilinux_gparted_process_4

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.