Network Attached Storage - сетевое хранилищ данных. 

В целях лучшей производительности рекомендуется хранить данные индексации на компьютере, на котором запущена Архива. Другие данные, тем не менее, можно хранить в сетевом хранилище данных (NAS) или в сети хранения данных (SAN).  

Windows

В Windows, ссылаясь на удаленный путь, можно указать сетевой путь в качестве стандартного UNC пути (к примеру,  "\\server\share\file_path").

Сервис Архива для Windows может не иметь достаточного доступа к жестким дискам. Может возникнуть необходимость смены аккаунта пользователя, под которым запущен данный сервис. Чтобы это осуществить, из апплета Панели Управления Сервисами (Services Control Panel) (но не значок конфигурации на панели задач Архива!) выберите Сервисы, затем Свойства, затем Logon Tab, введите логин и пароль для Администратора сети, сохраните и перезагрузите сервер Архива.  

В разделе Настройка выберите категорию Тома и кликните по кнопке "Новый том". Введите сетевой UNC-путь в качестве папки хранилища (например, server\store\store0). Убедитесь, что путь к индексу, который вы вводите, находится на вашем рабочем компьютере (к примеру, c:\index).   

Linux 

Для использования внешнего хранилища, лучше всего создать точку монтирования этого хранилища (к примеру, \mnt\mailarchiva) используя комманды mount, smbmount или nfsmount. Если вы хотите добавить несколько томов в конфигурации Архива, в поле папки хранилища укажите подпапку в точке монтирования (например, \mnt\mailarchiva\store1).

Архива автоматически создат папку store1 (вам не придется делать это собственноручно!). Используя эту конфигурацию, нет необходимости создавать множество точек монтирования для каждого тома. Удостоверьтесь, что вы добавили точку монтирования в fstab, так что после перезагрузки Архива  будет иметь снова доступ к устройству.   

Если Архива настроена на запись и редактирование во внешнем сетевом хранилище, в не зависимости том хранилища или резервное хранилище, важно удостовериться, что папка, куда создана точка монтирования неприкосновенна (т.е. не может быть изменена даже администратором с правами ROOT). Это гарантирует, что Архива не будет записывать данные на локальную машину в случае, если точка монтирования будет отсоединена. Это особенно важно в ситуациях, когда точки монтирования нестабильны.   

  1. Создайте папку монтирования на своем компьютере
    a) mkdir mnt/store1
  2. Выполните в терминале "chattr +i /mnt/store1" (это установит неприкосновенность для папки так, что даже ROOT не сможет переписать её) 
  3. Примонтируйте внешнее сетевое хранилище (NAS) к точке монтирования /mnt/store1 добавлением следующегот кода в  /etc/fstab
    a. smbfs
    //192.14.12.122/archive mnt/archive smbfs username=admin,password=pw
    b. nfs
    192.14.12.122:/archive mnt/archive nfs
    c. check by typing mount
Установка прав по умолчанию

Отредактируйте скрипт startserver, находящийся /usr/local/mailarchiva/server/startserver. Добавьте в самое начало строку umask 022, чтобы права rw (чтение+запись) были только у ROOT.

SMB/NFS блокировка раздачи на удаленный диск

Архивный движок Архива очень сложен и использует весьма изощренную блокировку. Вы можете использовать примонтированные хранилища, но некоторые из подобных сетевых хранилищ плохо реализованы, из-за чего они не соответствуют требованиям блокировки и синхронизации нашего архивного движка. Чтобы решить эту проблему, пожалуйста, отключите строгую блокировку у SMB и NFS драйверов.

К примеру, для SMB раздачи отключите строгую блокировку в smb.conf, как показано ниже: 

[global]
strict locking = no

Если это не помогло решить проблему, то можно использовать более простой файловый формат в Архива. Чтобы его установить, в Настройках выберите категорию Настройки архива и установите Формат хранилища Архива V1 вместо V2.  


Скрипт для автомонтирования

Чтобы удаленные точки монтирования гарантированно перемонтировались, вставьте следующий скрипт в cron job:

 

----------------------------------------------------------------------
created check_mount script    [ /usr/local/sbin/check_mounts.sh ]
----------------------------------------------------------------------
#!/bin/sh
# --------------------------------------------------------------------
# purpose: check mounted partitions,
#  log if not mounted + mount and notify admins
# args:  none
# deps:  bash, GNU utils, logger, /proc, /etc/fstab
# --------------------------------------------------------------------
# --------------------------------------------------------------------
# configuration
# --------------------------------------------------------------------
FSTAB_EXCL="(^#|noauto|none|user)"
PROGNAME=$(basename $0)
export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
# --------------------------------------------------------------------
# --------------------------------------------------------------------
# configure destination address for emails (admins)
# --------------------------------------------------------------------
if [ -f /etc/default/suk_scripts ]; then
. /etc/default/suk_scripts;
else
ROOTMAIL="root@`hostname --fqdn`"
fi
# --------------------------------------------------------------------
# --------------------------------------------------------------------
# functions
# --------------------------------------------------------------------
function err_descr() {
case "$?" in
  0) err_rv="OK"
   ;;
  1) err_rv="FAILED"
   ;;
  *) err_rv="$?"
   ;;
esac;
}
function log() {
/usr/bin/logger -i -p kern.warn -t ${PROGNAME} "$@";
}
function log_mail() {
mail -s "$@" ${ROOTMAIL} ; log "$@";
}
# --------------------------------------------------------------------
# --------------------------------------------------------------------
# check mounts
# --------------------------------------------------------------------
if [ ! -f /proc/mounts ]; then
log "WARN: /proc wasn't mounted!"
mount -t proc proc /proc; err_descr
err_descr
log_mail "WARN: mounted /proc (${err_rv})"
fi
egrep /etc/fstab -ve "${FSTAB_EXCL}" | while read i; do i=( ${i} )
# empty ?
case ${#i[0]} in
  0) log_mail "FATAL: I shouldn't have read ${i[@]} !"
     eval ${i[0]:=ERROR} 2>/dev/null
     ;;
esac
# select device
case ${i[0]} in
  /dev*)
   dev=( ${i[0]} ${i[1]} )
   ;;
  *)
   dev=( UNKNOWN UNKNOWN )
   ;;
esac
# munge rootfs
case "${#dev[1]}" in
  1) case "${dev[1]}" in
   /) dev[0]=/dev/root
   ;;
     esac
     ;;
esac
# check mounts
grep /proc/mounts -e ${dev[0]} &> /dev/null
case "$?" in
  1) case ${dev[0]} in
   /dev/root)
    /bin/true
    ;;
   UNKNOWN)
    ;;
   *)
    log "WARN: ${dev[1]} isn't mounted"
    mount ${dev[1]}; err_descr
    log_mail "INFO: mounted ${dev[1]}"
    ;;
     esac
     ;;
esac
done
# --------------------------------------------------------------------
exit $?
----------------------------------------------------------------------
----------------------------------------------------------------------
added check_mounts to cron    [ /etc/cron.d/check_mounts ]
----------------------------------------------------------------------
*/15 * * * * root /usr/local/sbin/check_mounts.sh
----------------------------------------------------------------------