greyhole.example.conf
# This file is part of Greyhole.
#### Database Connection ####
# Only MySQL (or compatible) is supported.
db_host = localhost
db_user = greyhole_user
db_pass = 89y63jdwe
db_name = greyhole
#### Timezone ####
# You can comment this out if you already define a `date.timezone` in your php.ini. Otherwise, this config option is mandatory.
# See the list of allowed values here: http://www.php.net/manual/en/timezones.php
#timezone = America/Montreal
#### Email Recipient ####
# Will receive email reports for daily fsck, or when all drives are out of
# available space.
# When specifying no @hostname, the email will be delivered to the local
# mailbox of that user.
# Make sure you have a MTA installed (sendmail, postfix, ...), or no emails will be sent!
email_to = root
#email_to = root@test.com
#### Greyhole Daemon Niceness ####
# Niceness of the background daemon that handle most of the heavy lifting.
# Number between -20 and 19.
# The higher the number, the more 'nice' the daemon will be, i.e. the less
# resources it will get, versus other processes with a lower niceness.
# daemon_niceness = 1
#### Greyhole Log File ####
# If you define a greyhole_error_log_file, WARNING, ERROR and CRITICAL logs will be written there, instead of using greyhole_log_file.
# Notes:
# - greyhole_error_log_file will be ignored if greyhole_log_file = syslog.
# - you can't use syslog for greyhole_error_log_file and a normal file for greyhole_log_file.
# - if you use something else than /var/log/greyhole.*, you will want to change /etc/logrotate.d/greyhole accordingly.
# greyhole_log_file = syslog
greyhole_log_file = /var/log/greyhole.log
# greyhole_error_log_file = /var/log/greyhole.err
# Available verbosity levels: DEBUG, INFO, WARN, ERROR
log_level = DEBUG
# Log Greyhole memory usage on each log line?
log_memory_usage = no
# Look for other processes working on files on the Greyhole shares?
# Disable to get more speed, but this might break some files, if any
# application change your files while Greyhole tries to work on them.
check_for_open_files = yes
#### Copying ####
# Options for the command that will create file copies
# Calculate MD5 of new/changed files, while making file copies.
# calculate_md5 = yes
# Create all file copies simultaneously, instead of sequentially.
# parallel_copying = yes
#### Shares Settings ####
# Number of copies of each file you want Greyhole to keep, per Share.
# This is not the number of duplicates! 2 copies = 1 duplicate
# If you change one of those, you should run fsck manually, or wait for the
# daily fsck, to have the additional copies created, or extra copies deleted.
#
# Example:
#
# num_copies[Backups] = 2
# num_copies[CrashPlan] = 2
# num_copies[Games] = 2
# num_copies[Music] = 2
# # This will insure those files are on all HDD:
# num_copies[Photos] = max
# num_copies[RecordedTV] = 1
# num_copies[Software] = 2
# num_copies[TimeMachine] = 1
# num_copies[Videos] = 2
#### Storage Pool ####
# Where should the file copies be kept?
# You probably want to list all your physical hard drives here.
# Also specify how much free space you want to reserve on each drive. This is
# a soft limit that will be ignored if the necessary hard drives are below
# their minimum.
# For example, if you specify a 100 GB limit on all drives, and only one still
# have more than 100 GB of free space, and you save a new file on a share for
# which you specified you want multiple copies, this drive will be used first,
# but the other drives that have less free space will be used to store the
# additional copies.
#
# Example:
#
# storage_pool_drive = /mnt/hdd0/gh, min_free: 10gb
# storage_pool_drive = /mnt/hdd1/gh, min_free: 10gb
# storage_pool_drive = /mnt/hdd2/gh, min_free: 10gb
# storage_pool_drive = /mnt/hdd3/gh, min_free: 10gb
# If you'd like you drives to sleep when inactive, setting a schedule here will
# prevent the Greyhole daemon from keeping your drives awake by checking them every 10s.
# Specify the time(s) when Greyhole is allowed to check storage pool drives.
# Supported format: *:mi (i.e. once per hour) and hh:mi (once per day)
check_storage_pool_schedule = *:00
# The following can help you test Greyhole by defining multiple storage_pool_drive
# that are in fact just empty directories on the same drive.
# WARNING! Do NOT enable that option when you're not testing Greyhole.
# Doing so could result is lost data when a drive will fail.
#
# allow_multiple_sp_per_device = no
### Storage Drive Selection Groups ###
# The groups you define here will be available to use in the
# drive_selection_algorithm option(s) below.
# The group names (OK, NEW, BROKEN, REMOTE in the example below) can be
# anything you'd like, and are case-sensitive.
# Use one line per group, with the following syntax:
# group name: zero or more (comma-separated) storage pool drives
# If you ommit any storage pool drive from your groups, this drive
# will NOT be used by Greyhole!
#
# See https://github.com/gboudreau/Greyhole/wiki/SuggestedStorageSelectionAlgorithmUsage
# on how we suggest you use this feature.
# drive_selection_groups = OK: /mnt/hdd0/gh, /mnt/hdd2/gh
# drive_selection_groups = NEW: /mnt/hdd1/gh
# drive_selection_groups = BROKEN: /mnt/hdd3/gh
# drive_selection_groups = REMOTE: /mnt/remote1/gh
# You can also define drive_selection_groups for specific shares:
#
# drive_selection_groups[Photos] = SATA: /mnt/hdd0/gh
# drive_selection_groups[Photos] = IDE: /mnt/hdd1/gh, /mnt/hdd2/gh
# drive_selection_groups[Photos] = USB: /mnt/hdd3/gh
#### Storage Drive Selection Algorithm ####
# available algorithms: most_available_space, least_used_space
# most_available_space: use the drives with the most available space
# first, so that available space on all drives should become and stay
# balanced.
# least_used_space: use the drives with the least used space
# first, so that used space on all drives should become and stay
# balanced.
drive_selection_algorithm = most_available_space
# If you defined drive_selection_groups above, you'll want to use them here.
# Use the 'forced' keyword, then list the groups you want to use, in order, and
# prefix each group name with the number of drives you want to use from
# that group before using the next group.
# Use the 'all' keyword to indicate you want Greyhole to use all drives
# from a specific group before starting to use drives from the next group.
# You'll need to indicate how Greyhole should pick drives within a group by
# ending your line with either 'least_used_space' or 'most_available_space'.
#
# drive_selection_algorithm = forced (1xOK, 1xNEW, 1xBROKEN, 1xREMOTE) most_available_space
# You can also define drive_selection_algorithm for specific shares:
#
# drive_selection_algorithm[Videos] = least_used_space
# drive_selection_algorithm[Photos] = forced (all SATA, 1xIDE, 1xUSB) most_available_space
#### Sticky Files ####
# Sticky files are files that will always 'live' together, in the storage pool.
#
# This will allow you to read (and read-only!) those files by using the
# storage pool drives themselves, instead of using the mounted shares.
# To see when that might be useful, read Issue #3 at the URL below.
# [http://code.google.com/p/greyhole/issues/detail?id=3]
#
# Each sticky_files line should start with the name of a share, followed by a
# directory inside that share.
# One or more stick_into lines should follow each sticky_files line, if you
# want the files to go on specific hard drive(s).
# If you don't specify any stick_into, the drive with the most free space will
# be use to hold your files together.
#
# sticky_files = Music/
#
# sticky_files = Videos/Movies/
# stick_into = /mnt/hdd1/gh
# stick_into = /mnt/hdd5/gh
# How long should free space calculations be cached (in seconds).
# When selecting drives using their available / free space, the last cached
# value will be used.
# Use 0 to disable caching.
df_cache_time = 15
#### Trash ####
# The Trash (also called Attic or Recycle Bin), is used as a safeguard against
# human or machine errors.
# Greyhole can use the Trash for files that have been deleted and/or modified.
# It is strongly recommended that you keep both settings ON; this will further
# protect your files.
# You can specify per-share preferences that will override the global
# preference.
delete_moves_to_trash = yes
# delete_moves_to_trash[RecordedTV] = no
modified_moves_to_trash = yes
# modified_moves_to_trash[RecordedTV] = no
#### Frozen directories ####
# Directories listed below will not be touched by Greyhole until the user
# wants it to (greyhole --thaw=<dir>).
#
# This can be used to process often-updated files at regular intervals,
# instead of having Greyhole process them as soon as they change.
#
# Each frozen_directory line should start with the name of a share, followed
# by a directory inside that share.
# frozen_directory = Data/mysql
#### Maximum Queued Tasks ####
# Maximum number of queued tasks to store in MySQL, when parsing the
# spool directory. Use a lower number if you experience slowness while parsing
# spooled operations.
# Default is 10000000.
# Setting a value here will overwrite those defaults.
# max_queued_tasks = 10000000
#### Memory Limit ###
# Maximum amount of memory that Greyhole can consume while running.
# This can be higher than the global php.ini memory limit.
# If greyhole uses >95% of available memory while loading
# data, it will quit and throw an error in the logs.
# Default is 512M
# Setting a value here will overwrite this default.
# It is NOT advisable to lower the memory limit.
# memory_limit = 512M
#### Executed tasks retention ####
# How long should executed tasks be kept in the database, after having been executed.
# Those are strictly for debugging purposes; they serve no other purposes.
# Enter a number of days, or 'forever' (no quotes).
# The default is to keep 60 days.
# executed_tasks_retention = 60
#### Ignored files & folders ####
# Files that match the patterns below will be ignored by Greyhole.
# They will stay in the landing zone indefinitely, so be careful on what you
# define here. List here all files and folders that are temporary, to prevent
# Greyhole from working for nothing.
#
# Format is Regular Expressions (PCRE syntax)
#
# ignored_files is matched against the file name only.
# ignored_folders is matched against the concatenation of the share name and
# the full path to the file (without the filename), eg: Videos/Movies/HD/
# rsync temporary files
ignored_files = \..*\.[0-9a-zA-Z]{6}
# Microsoft Office temporary files
ignored_files = [0-9A-F]{8}\.tmp
# CrashPlan (restore) temporary files
ignored_files = \.cprestoretmp.*
# SABnzbd temporary folders when extracting a download
ignored_folders = .*/_UNPACK_.*
# NZBget temporary folders when extracting a download
ignored_folders = .*/_unpack.*
# Plex Optimized Versions temporary files
ignored_folders = .*/inProgress/.*
# Mac metadata files
ignored_files = \.DS_Store
# Windows thumbs database files
#ignored_files = Thumb.db
#### Hooks ####
# Call custom scripts on events.
#
# Available events type: create, edit, rename, delete, mkdir, rmdir, warning, error, critical, fsck, idle, not_idle, email
# - For create, edit, rename, delete, mkdir, and rmdir: the hooks are called after Greyhole finished processing the operation;
# - for warning, error, critical and fsck: the hooks are called after Greyhole created a log;
# - for idle and not_idle: the hooks are called just before the daemon will sleep, or when it's about to start working again.
# - for email: the hook is called after Greyhole sent an email;
#
# The parameters sent to the custom scripts are:
# - event_type (one of the above)
# If event is related to a file/folder on a share (create, edit, rename, delete, mkdir and rmdir), other params will be:
# - share_name
# - path_on_share
# - original_path_on_share (only for rename)
# If event is related to a log (warning, error, critical, fsck, idle and not_idle), other params will be:
# - event_code: one of the predefined values that define the actual error/event.
# Look here for the list of possible codes: https://github.com/gboudreau/Greyhole/blob/master/includes/Log.php#L62
# - log: user-readable log (might contain LF characters)
# For email event, two parameters are sent: subject and body.
#
# hook[create|edit|rename|delete|mkdir|rmdir] = /usr/share/greyhole/scripts-examples/greyhole_file_changed.sh
# hook[warning|error|critical] = /usr/share/greyhole/scripts-examples/greyhole_notify_error.sh
# hook[fsck] = /usr/share/greyhole/scripts-examples/greyhole_send_fsck_report.sh
# hook[email] = /usr/share/greyhole/scripts-examples/greyhole_sysadmin_notification.sh
# hook[idle|not_idle] = /usr/share/greyhole/scripts-examples/greyhole_idle.sh