Provided by: inn2_2.6.5-1_amd64 bug

NAME

       cycbuff.conf - Configuration file for INN CNFS storage method

DESCRIPTION

       This file defines the cyclical buffers that make up the storage pools for CNFS (Cyclic
       News File System).  Some options controlling the behavior of the CNFS storage system can
       also be set here.  cycbuff.conf is required if the CNFS (Cyclic News File System) storage
       method is used.  INN will look for it in pathetc (as set in inn.conf).

       CNFS stores articles in logical objects called metacycbuffs.  Each metacycbuff is in turn
       composed of one or more physical buffers called cycbuffs.  As articles are written to the
       metacycbuff, each article is written to the next cycbuff in the list in a round-robin
       fashion (unless "sequential" mode is specified, in which case each cycbuff is filled
       before moving on to the next).  This is so that you can distribute the individual cycbuffs
       across multiple physical disks and balance the load between them.  Note that in order to
       use any cycbuff larger than 2 GB on 32-bit platforms (and some very rare 64-bit platforms
       that aren't Linux), you need to build INN with the --enable-largefiles option.

       For information about how to configure INN to use CNFS, see storage.conf(5).

       Blank lines and lines beginning with a hash sign ("#") are ignored.  All other lines must
       be of one of the following forms:

           cycbuffupdate:<interval>
           refreshinterval:<interval>
           cycbuff:<name>:<file>:<size>
           metacycbuff:<name>:<buffer>[,<buffer>,...][:<mode>]

       (where items enclosed in [] are optional).  Order is mostly not significant, but all
       cycbuff lines must occur before all metacycbuff lines.  Long lines can be continued on the
       next line by ending the line with a backslash ("\").

       cycbuffupdate:<interval>
           Sets the number of articles written before the cycbuff header is written back to disk
           to <interval>.  Under most operating systems, the header doesn't have to be written to
           disk for the updated data to be available to other processes on the same system that
           are reading articles out of CNFS, but any accesses to the CNFS cycbuffs over NFS will
           only see the data present at the last write of the header.  After a system crash, all
           updates since the last write of the CNFS header may be lost.  The default value, if
           this line is omitted, is 25, meaning that the header is written to disk after every 25
           articles stored in that cycbuff.

       refreshinterval:<interval>
           Sets the interval (in seconds) between re-reads of the cycbuff header to <interval>.
           This primarily affects nnrpd and controls the frequency with which it updates its
           knowledge of the current contents of the CNFS cycbuffs.  The default value, if this
           line is omitted, is 30.

       cycbuff:<name>:<file>:<size>
           Configures a particular CNFS cycbuff.  <name> is a symbolic name for the buffer, to be
           used later in a metacycbuff line.  It must be no longer than seven characters.  <file>
           is the full path to the buffer file or block device, and must be no longer than 63
           characters.  <size> is the length of the buffer in kilobytes (1 KB is 1024 bytes).  If
           <file> is not a block device, it should be <size> * 1024 bytes long.

           If you're trying to stay under 2 GB, keep your sizes below 2097152.

           Note that CNFSv4 supports files and partitions up to 16 TB.

       metacycbuff:<name>:<buffer>[,<buffer>,...][:<mode>]
           Specifies a collection of CNFS buffers that make up a single logical storage location
           from the perspective of INN.  Metacycbuffs are referred to in storage.conf as storage
           locations for articles, so in order to actually put articles in a cycbuff, it has to
           be listed as part of some metacycbuff which is then referenced in storage.conf.

           <name> is the symbolic name of the metacycbuff, referred to in the options: field of
           "cnfs" entries in storage.conf.  It must be no longer than eight characters.  <buffer>
           is the name of a cycbuff (the <name> part of a cycbuff line), and any number of
           cycbuffs may be specified, separated by commas.

           If there is more than one cycbuff in a metacycbuff, there are two ways that INN can
           distribute articles between the cycbuffs.  The default mode, "INTERLEAVE", stores the
           articles in each cycbuff in a round-robin fashion, one article per cycbuff in the
           order listed.  If the cycbuffs are of wildly different sizes, this can cause some of
           them to roll over much faster than others, and it may not give the best performance
           depending on your disk layout.  The other storage mode, "SEQUENTIAL", instead writes
           to each cycbuff in turn until that cycbuff is full and then moves on to the next one,
           returning to the first and starting a new cycle when the last one is full.  To specify
           a mode rather than leaving it at the default, add a colon and the mode ("INTERLEAVE"
           or "SEQUENTIAL") at the end of the metacycbuff line.

       innd only reads cycbuff.conf on startup, so if you change anything in this file and want
       innd to pick up the changes, you have to use "ctlinnd xexec innd"; "ctlinnd reload all ''"
       is not sufficient.

       When articles are stored, the cycbuff into which they're stored is saved as part of the
       article token.  In order for INN to retrieve articles from a cycbuff, that cycbuff must be
       listed in cycbuff.conf.  However, if INN should not write to a cycbuff, it doesn't need to
       be (and shouldn't be) listed in a metacycbuff.

       This provides an easy way to retire a cycbuff.  Just remove it from its metacycbuff,
       leaving in the cycbuff line, and restart innd (with, for example, "ctlinnd xexec innd").
       No new articles will be put into the cycbuff, but neither will any articles expire from
       it.  After you no longer need the articles in the cycbuff, just remove it entirely from
       cycbuff.conf.  Then all of the articles will appear to have been deleted to INN, and the
       next nightly expire run will clean up any remaining references to them.

       Adding a new cycbuff just requires creating it (see below), adding a cycbuff line, adding
       it to a metacycbuff, and then restarting innd.  Similarly, changing the allocation of an
       existing cycbuff from a metacycbuff to another one just requires modifying the two
       metacycbuffs accordingly, and then restarting innd.  (Only the cycbuff is noted noted in
       the storage API tokens.)

CREATING CYCBUFFS

       When creating a new cycbuff, there are two different methods for creating the buffers in
       which the articles will be stored.

       1.  Create a large file on top of a regular file system.  The easiest way to do this is
           probably with dd(1), using a command like:

               dd if=/dev/zero of=/path/to/cycbuff bs=1024 count=<size>

           where <size> is the size from the cycbuff line in cycbuff.conf.  INSTALL contains a
           script that will generate these commands for you from your cycbuff.conf file.

           This is the simplest method, but has the disadvantage that very large files on regular
           file systems can be fairly slow to access, particularly at the end of the file, and
           INN incurs unnecessary file system overhead when accessing the cycbuff.

       2.  Use block devices directly.  If your operating system allows you to call mmap() on
           block devices (Solaris and recent versions of Linux do, FreeBSD at last report does
           not), this is the recommended method since you can avoid all of the native file system
           overhead.

           Note that some OSes do not support files larger than 2 GB, which will limit the size
           you can make a single cycbuff, but you can still combine many cycbuffs into each
           metacycbuff.  Very old versions of Linux (before 2.4 kernels, that raised the limit to
           2 TB) are known to have this limitation; FreeBSD does not.  Some OSes that support
           large files don't support direct access to block devices for large partitions (Solaris
           prior to Solaris 7, or not running in 64-bit mode, is in this category); on those
           OSes, if you want cycbuffs over 2 GB, you'll have to use regular files.  If in doubt,
           keep your cycbuffs smaller than 2 GB.

           Partition the disk to make each partition equal to or smaller than 2 GB.  If you're
           using Solaris, set up your partitions to avoid the first cylinder of the disk (or
           otherwise the cycbuff header will overwrite the disk partition table and render the
           cycbuffs inaccessible).  Then, create device files for each block device you're going
           to use.

           It's not recommended to use the block device files in /dev, since the news system
           doesn't have permission to write to them and changing the permissions of the system
           device files may affect something else.  Instead, use mknod(1) to create a new set of
           block devices (in somewhere like pathspool/cycbuffs that's only writable by the news
           user).  To do this, run "ls -Ll" on the devices in /dev that correspond to the block
           devices that you want to use.  The major and minor device numbers are in the fifth and
           sixth columns (right before the date), respectively.  Then run mknod like:

               mknod <file> b <major> <minor>

           where <file> is the path to the device to create (matching the <file> part of the
           cycbuff line) and <major> and <minor> are the major and minor device numbers as
           discovered above.

           Here's a short script to do this when given the path to the system device file as an
           argument:

               #!/bin/sh
               base=`echo "$1" | sed 's%.*/%%'`
               major=`ls -Ll "$1" | awk '{print $5}' | tr -d ,`
               minor=`ls -Ll "$1" | awk '{print $6}`
               mkdir -p <pathspool in inn.conf>/cycbuffs
               mknod <pathspool>/cycbuffs/"$base" b "$major" "$minor"
               chown news:news <pathspool>/cycbuffs/"$base"
               chmod 644 <pathspool>/cycbuffs/"$base"

           Make sure that the created files are owned by the news user and news group, as
           specified at configure time (the default being "news" for both).  Also make sure that
           the permissions on the devices allow the news user to read and write, and if you want
           other users on the system to be able to use sm to retrieve articles, make sure they're
           world-readable.

       Once you have everything configured properly and you start innd, you should see messages
       in news.notice that look like:

           innd: CNFS: no magic cookie found for cycbuff ONE, initializing

       where "ONE" will be whatever you called your cycbuff.

HISTORY

       Written by Katsuhiro Kondou <kondou@nec.co.jp> for InterNetNews.  Rewritten into POD by
       Russ Allbery <eagle@eyrie.org>.

SEE ALSO

       ctlinnd(8), innd(8), nnrpd(8), sm(1), storage.conf(5).