UMGUM.COM (лучше) 

Автоматизация MHDDFS ( Автоматизация сборки файловых систем в единую точку посредством MHDDFS. )

18 сентября 2012  (обновлено 17 июля 2019)

Эта публикация отнесена в архив. Она неактуальна.

OS: "Linux Debian 5/6/7 (Lenny/Squeeze/Wheezy)".


Устанавливаем пакет утилит файловой системы MHDDFS:

# aptitude install mhddfs

Заранее готовим точку монтирования:

# mkdir -p /mnt/storage-core0

Создадим конфигурационный файл с перечнем и описанием характеристик ресурсов, готовых к инициализации и использованию.

# vi /usr/local/etc/storage/cnf.d/mhddfs.cnf

....
mhddfs.target=/mnt/storage-core0

mhddfs.source=/mnt/import/node0
mhddfs.source=/mnt/import/node1
mhddfs.source=/mnt/import/node2
mhddfs.source=/mnt/import/node3
....


Фрагмент кода автоматизации функционала сборки в единую точку файловых систем подсистемы хранения:

# vi /usr/local/etc/storage/fnc.d/mhddfs.fnc

#!/bin/bash
# This file contains the code snippet for the shell Bash v.4 (Bourne again shell)
# Файл содержит фрагмент кода для командного интерпретатора Bash v.4 (Bourne again shell)

# Функция сбора разрозненых файловых систем хранилища в одну точку монтирования
function start-mhddfs() {

  # Вычленяем адрес точки сбора файловых систем
  MTARGET=`grep --ignore-case "^mhddfs.target=" "${CNF}" | awk -F = '{print $2}'`

  # Проверяем наличие пути к точку сбора файловых систем
  if [ ! -d "${MTARGET}" ] ; then
    echo "${DATE}: Collection point file system is not available. Aborting." | tee -a "${LOGT}"
    return 1
  fi

  # Проверяем, не смонтирована ли уже сборная файловая система
  STATE=`mount | grep --count --ignore-case "on[ ]*${MTARGET}[ ]*type[ ]*fuse.mhddfs"`
  if [ "${STATE}" -eq "0" ] ; then

    MHDDFS=""

    # Перебираем все строки адресов собираемых файловых систем
    for MSOURCES in `grep --ignore-case "^mhddfs.source=" "${CNF}" | uniq`; do

      MSOURCE=`echo ${MSOURCES} | awk -F = '{print $2}'`

      # Проверяем наличие пути к собираемым файловым системам
      if [ ! -d "${MSOURCE}" ] ; then
        echo "${DATE}: Mounted file system ${MSOURCE} is not available. Aborting." | tee -a "${LOGT}"
        return 1
      fi

      # Добавляем точку монтирования в список
      MHDDFS=${MHDDFS}",${MSOURCE}"

    done

    # Отрезаем лишнюю запятую впереди строки
    MHDDFS=`echo "${MHDDFS}" | cut -c 2-`

    # Собираем файловые системы в единой точке монтирования (-o logfile=...)
    nice --adjustment=-1 mhddfs -o mlimit=100G,direct_io,async,noatime,allow_other "${MHDDFS}" "${MTARGET}" >/dev/null 2>&1

    # Проверяем успешность завершения операции
    if [ "${?}" != "0" ] ; then
      echo "${DATE}: Mounting file systems into a single point with error. Aborting." | tee -a "${LOGT}"
      return 1
    fi

    # Даём системе пару секунд на завершение монтирования
    sleep 2

    # Проверяем успешность монтирования сборной файловой системы
    STATE=`mount | grep --count --ignore-case "on[ ]*${MTARGET}[ ]*type[ ]*fuse.mhddfs"`
    if [ "${STATE}" -ne "0" ] ; then
      echo "${DATE}: Team of the file system is successfully installed." | tee -a "${LOGT}"
    else
      echo "${DATE}: Mounting the file system team with error. Aborting." | tee -a "${LOGT}"
      return 1
    fi

  else
    echo "${DATE}: Team of the file system is already installed at ${MTARGET}." | tee -a "${LOGT}"
  fi

  # Создаём файл блокировки, показывающий на состояние работы подсистемы
  touch "${LOCK}/mhddfs.lck"

return $?
}

# Функция разбора разрозненых файловых систем хранилища из единой точки монтирования
function stop-mhddfs() {

  # Вычленяем адрес точки сбора файловых систем
  MTARGET=`grep --ignore-case "^mhddfs.target=" "${CNF}" | awk -F = '{print $2}'`

  [ -d "${MTARGET}" ] && fusermount -uz "${MTARGET}"

  # Удаляем файл блокировки, показывающий на состояние работы подсистемы
  rm --force "${LOCK}/mhddfs.lck"

return $?
}

# Функция проверки состояния сборной файловой системы
function check-mhddfs() {
  # Удостоверимся в том, что публикация ресурсов прошла успешно (в противном случае проверку не запускаем - бессмысленно)
  if [ -f "${LOCK}/mhddfs.lck" ]; then
    echo "check"
  fi
return $?
}


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )