snapraid/log.html
Andrea Mazzoleni 2e4c68f65e Auto update
2025-12-14 22:21:44 +01:00

2677 lines
92 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="description" content="A backup program for disk arrays. It stores parity information of your data and it recovers from up to six disk failures">
<meta name="keywords" content="snapraid snapshot raid backup disk array redundancy parity">
<meta name="author" content="Andrea Mazzoleni">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" type="text/css" href="style.css">
<title>SnapRAID</title>
<!-- Google Analytics 4 -->
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-W1Z5FKHYQ4"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-W1Z5FKHYQ4');
</script>
<!-- Google Universal Analytics -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21967501-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<div id="header">
<img src="index.jpg" width="1200" height="150" alt="Title">
</div>
<div id="menu">
<a href="/">About</a>
<a href="download">Download</a>
<a href="design">Design</a>
<a href="compare">Compare</a>
<a href="faq">FAQ</a>
<a href="manual">Manual</a>
<a href="support">Support</a>
<a href="authors">Authors</a>
</div>
<div id="main">
<p>
Log Tags Documentation for <span class="bold">SnapRAID</span>.
</p>
<h2><a name="1">1</a>
Description
</h2>
<p>This document describes the structured log tags output by SnapRAID,
which are designed to be used by tools monitoring the SnapRAID
processing state. The tags provide information in an easy-to-parse
format, ideal for automation and integration.
</p><p>To capture these structured log tags, you must use the `--log` option
with SnapRAID.
</p><p>You can direct the output to a specific file, or force the output to
the standard output or standard error using the special arguments
`&gt;&amp;1` or `&gt;&amp;2`. Note that these arguments often need to be quoted on
the command line to prevent the shell from interpreting them.
</p><p>Example:
</p><table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td width="5%"></td><td width="95%">
<pre>
snapraid status --log "&gt;&amp;2"
</pre>
</td></tr></table>
<p>The output tags strictly adhere to the following format:
</p><pre>
NAME:VALUE:VALUE:VALUE...&lt;EOL&gt;
</pre>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
NAME
</strong></td></tr><tr><td>
This is the primary tag identifier, always a lowercase string
without spaces (e.g., `summary`, `block`, `info_time`).
</td></tr>
<tr valign="top" align="left"><td><strong>
VALUE
</strong></td></tr><tr><td>
Following the `NAME`, these can be additional sub-identifiers,
descriptive names (like a disk name), or numeric/string data
values. They are separated by a colon `:`.
</td></tr>
<tr valign="top" align="left"><td><strong>
&lt;EOL&gt;
</strong></td></tr><tr><td>
Each tag is terminated by an end-of-line character.
</td></tr>
</table>
<p>This document provides a summary of the tags generated by SnapRAID.
For the most detailed and up-to-date information regarding the meaning
and context of the values, it is recommended to check the source
code's `log_tag()` statements.
</p><p>When a path is output, it is always escaped using a backslash (\) as
the escape character.
</p><p>The following characters are escaped into sequences:
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
The colon
</em></td><td width="90%">
is escaped to \d.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
The newline
</em></td><td width="90%">
is escaped to \n.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
The carriage return
</em></td><td width="90%">
is escaped to \r.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
The backslash
</em></td><td width="90%">
is escaped to \\.
</td></tr>
</table>
<p>Some tags are output only when the `--gui` option is used. They provide
extra verbose state and runtime progress only useful for a GUI
interface.
</p><h2><a name="2">2</a>
Configuration Tags
</h2>
<p>These tags report the memory usage and global configuration after
scanning the disk and reading the list of files.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
conf:file:&lt;path&gt;
</strong></td></tr><tr><td>
Configuration file loaded (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
conf:missing:
</strong></td></tr><tr><td>
Operating without a configuration file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
blocksize:&lt;bytes&gt;
</strong></td></tr><tr><td>
The configured block size in bytes (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
data:&lt;disk_name&gt;:&lt;dir&gt;
</strong></td></tr><tr><td>
The data disks as defined in the configuration file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The assigned name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;dir&gt;
</em></td><td width="90%">
The directory entry point of the disk.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
mode:&lt;raidname&gt;
</strong></td></tr><tr><td>
The RAID mode used. One of `par1`, `par2`, `par3`, `par4`,
`par5`, `par6` or `parz`. The number indicates the maximum
number of simultaneous disk failures the array can withstand.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
&lt;parity_level&gt;:&lt;split_index&gt;:&lt;path&gt;
</strong></td></tr><tr><td>
The parity files as defined in the configuration file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;parity_level&gt;
</em></td><td width="90%">
One of `parity`, `2-parity`, ..., `6-parity`.
This corresponds to the level of redundancy.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;split_index&gt;
</em></td><td width="90%">
The split index (uint). If no
multiple split parity is configured, there is only the
index 0. A split parity configuration distributes parity
blocks across multiple files.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;path&gt;
</em></td><td width="90%">
The path (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
pool:&lt;dir&gt;
</strong></td></tr><tr><td>
The configured dir to the pool mount point (escaped).
This is the optional mount point for the 'pool' feature.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
share:&lt;dir&gt;
</strong></td></tr><tr><td>
The configured dir to the pool mount point (escaped).
This is the optional mount point for the 'share' feature.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
autosave:&lt;bytes&gt;
</strong></td></tr><tr><td>
If the autosave feature is enabled, and after how many bytes
(uint64). This specifies the interval for content file saving.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
filter:&lt;pattern&gt;
</strong></td></tr><tr><td>
All the active filters with their patterns. These patterns
exclude specific files or directories from the SnapRAID array.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
filter:nohidden:
</strong></td></tr><tr><td>
If the no-hidden filter is enabled, meaning hidden files/directories
(starting with '.') are excluded from the array.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
content:&lt;path&gt;
</strong></td></tr><tr><td>
The absolute path to a content file being used (escaped).
Content files store the metadata (like file hashes and timestamps)
for the array.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
content:&lt;parity_level&gt;:&lt;split_index&gt;:&lt;path&gt;:&lt;uuid&gt;:&lt;size&gt;
</strong></td></tr><tr><td>
The parity files as stored in the content file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;parity_level&gt;
</em></td><td width="90%">
One of `parity`, `2-parity`, ..., `6-parity`.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;split_index&gt;
</em></td><td width="90%">
The split index (uint). If no
multiple split parity is configured, there is only the
index 0.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;path&gt;
</em></td><td width="90%">
The path (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;uuid&gt;
</em></td><td width="90%">
The UUID of the partition containing the path.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size&gt;
</em></td><td width="90%">
The size of the parity file. Size is -1 if not yet
fixed, meaning it can grow. This happens for the
latest split.
</td></tr>
</table>
<h2><a name="3">3</a>
Diagnostics Tags
</h2>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
version:&lt;version&gt;
</strong></td></tr><tr><td>
The version of SnapRAID run.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
unixtime:&lt;time&gt;
</strong></td></tr><tr><td>
The current time in the unix format (uint64), representing
seconds since the epoch.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
time:&lt;YYYY-MM-DD HH:MM:SS&gt;
</strong></td></tr><tr><td>
The current time in human format.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
command:&lt;command&gt;
</strong></td></tr><tr><td>
The command run. One of `sync`, `scrub`, `check`, `fix`, `status`, ...
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
argv:&lt;number&gt;:&lt;argument&gt;
</strong></td></tr><tr><td>
All the arguments of the executable command. The 0 one is the
executable run.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
memory:used:&lt;bytes&gt;
</strong></td></tr><tr><td>
The total memory currently used by the application in bytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
memory:block:&lt;bytes&gt;
</strong></td></tr><tr><td>
Size of the internal `snapraid_block` structure in bytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
memory:extent:&lt;bytes&gt;
</strong></td></tr><tr><td>
Size of the internal `snapraid_extent` structure in bytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
memory:file:&lt;bytes&gt;
</strong></td></tr><tr><td>
Size of the internal `snapraid_file` structure in bytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
memory:link:&lt;bytes&gt;
</strong></td></tr><tr><td>
Size of the internal `snapraid_link` structure in bytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
memory:dir:&lt;bytes&gt;
</strong></td></tr><tr><td>
Size of the internal `snapraid_dir` structure in bytes (uint64).
</td></tr>
</table>
<h2><a name="4">4</a>
Scan Tags
</h2>
<p>These tags report detected differences between the filesystem and the
content file. They are output for every discovered change, and
`scan:equal` is only output when the `--gui` option is used.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:equal:&lt;disk_name&gt;:&lt;path&gt;
</strong></td></tr><tr><td>
A file, link, or directory is equal (unchanged) (GUI only).
No action is required for this item.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
Name of the data disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;path&gt;
</em></td><td width="90%">
Path to the file/link/dir relative to the disk mount
(escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:add:&lt;disk_name&gt;:&lt;path&gt;
</strong></td></tr><tr><td>
A new file, link, or directory was found that is not in the
content file. This item will be added to the array in a `sync`.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:remove:&lt;disk_name&gt;:&lt;path&gt;
</strong></td></tr><tr><td>
A file, link, or directory has been removed from the filesystem
since the last sync. This item will be removed from the
content file in a `sync`.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:update:&lt;disk_name&gt;:&lt;path&gt;
</strong></td></tr><tr><td>
A file or link has been updated (size, timestamp, or link target changed).
This item will have its content data blocks re-hashed in a `sync`.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:move:&lt;disk_name&gt;:&lt;old_path&gt;:&lt;new_path&gt;
</strong></td></tr><tr><td>
A file was moved on the same disk. This is an efficient operation
that only updates the path metadata without re-hashing blocks.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;old_path&gt;
</em></td><td width="90%">
The old path to the file (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;new_path&gt;
</em></td><td width="90%">
The new path to the file (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:copy:&lt;disk_name&gt;:&lt;path&gt;:&lt;source_disk&gt;:&lt;source_path&gt;
</strong></td></tr><tr><td>
A new file was found to be a copy of a file from another disk.
This is detected by matching file size and timestamp, and is an
efficient operation that avoids re-hashing all blocks.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;source_disk&gt;
</em></td><td width="90%">
The original file's disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;source_path&gt;
</em></td><td width="90%">
The original file's location (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scan:restore:&lt;disk_name&gt;:&lt;path&gt;
</strong></td></tr><tr><td>
A file's inode has changed but not its date-time and size,
which suggests the file may be restored from backup.
The file won't be re-hashed in `sync` as its precomputed hash
is assumed to be correct.
</td></tr>
</table>
<p>These tags provide a final count of all detected changes.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:equal:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of equal (unchanged) files/links/firs found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:added:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of new files/links/dirs found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:removed:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of removed files/links/dirs found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:updated:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of updated files/links found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:moved:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of moved files found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:copied:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of copied files found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:restored:&lt;count&gt;
</strong></td></tr><tr><td>
Total number of restored files found (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:equal
</strong></td></tr><tr><td>
A zero-argument tag indicating that no differences were found.
The array is already synchronized.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:diff
</strong></td></tr><tr><td>
A zero-argument tag indicating that differences were found.
The array needs a `sync` operation.
</td></tr>
</table>
<h2><a name="5">5</a>
General Progress and Execution Tags
</h2>
<p>These tags are used to report the runtime processing of the commands.
Only produced when `--gui` option is used.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
run:begin:&lt;blockstart&gt;:&lt;blockend&gt;:&lt;countmax&gt;
</strong></td></tr><tr><td>
A tag indicating the start of the command execution.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;blockstart&gt;
</em></td><td width="90%">
Starting block index (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;blockend&gt;
</em></td><td width="90%">
Ending block index + 1 (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;countmax&gt;
</em></td><td width="90%">
Number of blocks to process. It may be less
than &lt;blockend&gt; - &lt;blockstart&gt; + 1 if some blocks
are going to be skipped (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
run:end
</strong></td></tr><tr><td>
A zero-argument tag indicating the end of the command execution.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
run:pos:&lt;blockpos&gt;:&lt;countpos&gt;:&lt;countsize&gt;:&lt;perc&gt;:&lt;eta&gt;:&lt;size_speed&gt;:&lt;cpu&gt;:&lt;elapsed&gt;
</strong></td></tr><tr><td>
Detailed progress information during command execution.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;blockpos&gt;
</em></td><td width="90%">
Current block index position (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;countpos&gt;
</em></td><td width="90%">
Current item count position (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;countsize&gt;
</em></td><td width="90%">
Current size processed (uint64).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;perc&gt;
</em></td><td width="90%">
Percentage complete (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;eta&gt;
</em></td><td width="90%">
Estimated time of arrival in minutes (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size_speed&gt;
</em></td><td width="90%">
Data processing speed in MiB/s (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;cpu&gt;
</em></td><td width="90%">
CPU usage percentage (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;elapsed&gt;
</em></td><td width="90%">
Elapsed time in seconds (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
sigint:&lt;blockpos&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
A user interruption (e.g., Ctrl+C) was signaled. The process
is gracefully aborting.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;blockpos&gt;
</em></td><td width="90%">
Current block index position (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
Text message exactly as it's printed on screen.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
msg:&lt;level&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Messages printed to the screen.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;level&gt;
</em></td><td width="90%">
One of `fatal`, `error`, `expected`, `status`,
`progress` or `verbose`.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
fatal
</em></td><td width="90%">
A fatal error occurred. Program will abort after this
message.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
error
</em></td><td width="90%">
A generic error condition that doesn't prevent the
program to continue.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
expected
</em></td><td width="90%">
An expected error condition. At present it
happens only when using the `-m` option with files
expected missing.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
status
</em></td><td width="90%">
A status message, usually providing context or a summary.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
progress
</em></td><td width="90%">
A progress message, often part of an ongoing operation.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
verbose
</em></td><td width="90%">
A verbose informative message, only shown in verbose mode.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
Text message exactly as it's printed on screen.
</td></tr>
</table>
<h2><a name="6">6</a>
Thermal Tags
</h2>
<p>The following tags are produced by the thermal monitoring functions
when SnapRAID is processing, typically during operations that involve
disk access.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:ambient:device:&lt;hwmon_dir&gt;:&lt;name&gt;:&lt;temp_file&gt;:&lt;label&gt;:&lt;temp&gt;
</strong></td></tr><tr><td>
Logs a temperature reading found in the system using the Linux
/sys/class/hwmon interface. Only present in Linux.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;hwmon_dir&gt;
</em></td><td width="90%">
The hwmon directory name (e.g., hwmon0).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;name&gt;
</em></td><td width="90%">
The name of the hwmon device (e.g., k10temp).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp_file&gt;
</em></td><td width="90%">
The temperature file name (e.g., temp1_input).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;label&gt;
</em></td><td width="90%">
The label associated with the temperature sensor (e.g., Tdie).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
The temperature reading in degrees Celsius.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:ambient:candidate:&lt;temp&gt;
</strong></td></tr><tr><td>
Reports a temperature reading that is a candidate for the
ambient temperature, used in the heating model calculation.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
The candidate temperature in degrees Celsius.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:system:candidate:&lt;temp&gt;
</strong></td></tr><tr><td>
Logs a temperature reading from a connected disk that is being
considered as a candidate for determining the ambient system
temperature.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
The current temperature read from the disk
(uint, degrees Celsius).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:system:final:&lt;temp&gt;
</strong></td></tr><tr><td>
Logs the final ambient system temperature calculated. This
value is the lowest valid temperature observed among all
candidates, representing the room temperature.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
The calculated ambient temperature in degrees Celsius.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:current:&lt;disk_name&gt;:&lt;device&gt;:&lt;temp&gt;
</strong></td></tr><tr><td>
Logs the most recent temperature reading for a specific disk
device.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;device&gt;
</em></td><td width="90%">
The unique device ID (uint64).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
The current temperature read from the disk in degrees
Celsius.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:highest:&lt;temp&gt;
</strong></td></tr><tr><td>
Logs the highest temperature observed among all monitored disks
in the current measurement cycle. This is used for thermal
throttling.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
The highest temperature observed in degrees Celsius.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:heat:&lt;disk_name&gt;:&lt;device&gt;:&lt;count&gt;:&lt;data_points&gt;
</strong></td></tr><tr><td>
Logs the entire history of temperature data points collected
so far for a specific disk, used for fitting the heating model.
Only monotone increasing temperatures are included in the history.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;device&gt;
</em></td><td width="90%">
The unique device ID (uint64).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of collected data points (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;data_points&gt;
</em></td><td width="90%">
A comma-separated list of temperature/time pairs.
Each pair is formatted as &lt;temp&gt;/&lt;time_offset&gt;.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;temp&gt;
</em></td><td width="90%">
Temperature reading in degrees Celsius.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;time_offset&gt;
</em></td><td width="90%">
Time offset from the start of the thermal
monitoring (uint, seconds).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:params:&lt;disk_name&gt;:&lt;device&gt;:&lt;k_heat&gt;:&lt;t_ambient&gt;:&lt;t_steady&gt;:&lt;rmse&gt;:&lt;r_squared&gt;:&lt;max_error&gt;
</strong></td></tr><tr><td>
Logs the estimated parameters for the exponential heating model
(fit using least squares) and associated quality metrics for a
specific disk.
The model is: T(t) = T_steady - (T_steady - T_0) e^(-kt),
where T_0 is the initial temperature.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;device&gt;
</em></td><td width="90%">
The unique device ID (uint64).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;k_heat&gt;
</em></td><td width="90%">
The heating rate constant, k (double).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;t_ambient&gt;
</em></td><td width="90%">
The ambient temperature, T_ambient (double).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;t_steady&gt;
</em></td><td width="90%">
The estimated steady-state temperature, T_steady (double),
which is the maximum expected temperature of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;rmse&gt;
</em></td><td width="90%">
Root Mean Square Error of the fit (double).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;r_squared&gt;
</em></td><td width="90%">
Coefficient of determination (R^2) of the fit (double).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;max_error&gt;
</em></td><td width="90%">
Maximum absolute error of the fit (double).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:spindown
</strong></td></tr><tr><td>
Indicates that the thermal alarm limit has been reached, and
the process is initiating a disk spindown to begin the
cooldown procedure, preventing overheating.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:cooldown:&lt;sleep_time&gt;
</strong></td></tr><tr><td>
Indicates the duration of the cooldown waiting period after
spindown.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;sleep_time&gt;
</em></td><td width="90%">
The total time the system will wait for
cooldown (uint, seconds).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
thermal:spinup
</strong></td></tr><tr><td>
Indicates that the cooldown period is complete, and the disks
are being spun back up to resume the operation.
</td></tr>
</table>
<h2><a name="7">7</a>
Command Status Tags
</h2>
<p>This section describes the tags output with the `status` command.
</p><h4>
Summary Tags
</h4>
<p>These tags provide general information about the array configuration
and overall state.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:block_size:&lt;uint&gt;
</strong></td></tr><tr><td>
The size of a block in bytes. This is the unit of parity
protection.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:parity_block_count:&lt;uint&gt;
</strong></td></tr><tr><td>
The total number of blocks allocated for all parity levels
combined.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:parity_block_total:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Total blocks available for a specific parity level (e.g.,
`parity`, `2-parity`).
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:parity_block_free:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Free blocks available for a specific parity level.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:parity_block_free_min:&lt;uint&gt;
</strong></td></tr><tr><td>
The minimum number of free blocks across all parity levels.
This determines the maximum size of data that can be added.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:file_count:&lt;uint&gt;
</strong></td></tr><tr><td>
Total number of files in the array.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:file_block_count:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total number of data blocks used by files.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:fragmented_file_count:&lt;uint&gt;
</strong></td></tr><tr><td>
Total number of fragmented files, meaning files whose blocks
are not contiguous.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:excess_fragment_count:&lt;uint&gt;
</strong></td></tr><tr><td>
Total number of excess fragments (one less than the total fragments).
This is a measure of data fragmentation overhead.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:zerosubsecond_file_count:&lt;uint&gt;
</strong></td></tr><tr><td>
Total number of files with a zero sub-second timestamp. This
can occur on certain filesystems and may affect change detection.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:file_size:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total size of all files in bytes.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:parity_size:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total size of allocated parity blocks in bytes.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:parity_size_max:&lt;uint64&gt;
</strong></td></tr><tr><td>
Maximum possible parity size (allocated + min free) in bytes.
This is the effective maximum protection size.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:hash:&lt;name&gt;
</strong></td></tr><tr><td>
The current hash algorithm in use (e.g., `sha256`).
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:prev_hash:&lt;name&gt;
</strong></td></tr><tr><td>
The previous hash algorithm used, if a rehash is in progress.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:best_hash:&lt;name&gt;
</strong></td></tr><tr><td>
The best hash algorithm for optimal performance based on
system capabilities.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:total_wasted:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total wasted space (space on data disks exceeding parity
capacity) in bytes.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:total_used:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total used space by data files in bytes.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:total_free:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total free space (usable by data) in bytes, limited by parity
capacity.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:total_use_percent:&lt;uint&gt;
</strong></td></tr><tr><td>
Overall array use percentage.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:has_unsynced:&lt;uint&gt;
</strong></td></tr><tr><td>
Count of blocks that are unsynced (need a sync), meaning their
parity data is out of date.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:has_unscrubbed:&lt;uint&gt;
</strong></td></tr><tr><td>
Count of blocks that are unscrubbed (just synced), meaning they
have never been verified since the last sync.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:has_rehash:&lt;uint&gt;
</strong></td></tr><tr><td>
Count of blocks needing a rehash, usually due to a content file
update or hash algorithm change.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:has_bad:&lt;count&gt;:&lt;first&gt;:&lt;last&gt;
</strong></td></tr><tr><td>
Count of bad blocks, along with the first and last bad block index.
Bad blocks indicate data or parity corruption.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:scrub_oldest_days:&lt;uint&gt;
</strong></td></tr><tr><td>
Days ago the oldest block was last scrubbed.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:scrub_median_days:&lt;uint&gt;
</strong></td></tr><tr><td>
Days ago the median block was last scrubbed.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:scrub_newest_days:&lt;uint&gt;
</strong></td></tr><tr><td>
Days ago the newest block was last scrubbed.
</td></tr>
</table>
<h4>
Per-Disk Tags
</h4>
<p>These tags provide statistics for individual data disks. &lt;name&gt;
is the disk name.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:disk_file_count:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Number of files on the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_count:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Number of blocks used by files on the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_fragmented_file_count:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Number of fragmented files on the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_excess_fragment_count:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Number of excess fragments on the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_zerosubsecond_file_count:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Number of files with zero sub-second timestamp on the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_file_size:&lt;name&gt;:&lt;uint64&gt;
</strong></td></tr><tr><td>
Total size of files on the disk in bytes.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_allocated:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Highest block index used on the disk + 1.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_total:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Total blocks on the disk (physical size).
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_free:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Free blocks on the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_max_by_space:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Total blocks by disk space (used + free blocks), representing
the physical limit of the disk.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_max_by_parity:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Total blocks limited by parity space (parity size + min parity
free blocks).
This is the logical limit imposed by the parity files.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_block_max:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Maximum usable blocks (minimum of `..._by_space` and `..._by_parity`).
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_space_wasted:&lt;name&gt;:&lt;int64&gt;
</strong></td></tr><tr><td>
Wasted space on the disk in bytes (positive if disk is larger
than usable parity space).
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_used:&lt;name&gt;:&lt;uint64&gt;
</strong></td></tr><tr><td>
Used space on the disk in bytes.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_free:&lt;name&gt;:&lt;uint64&gt;
</strong></td></tr><tr><td>
Free usable space on the disk in bytes, limited by `disk_block_max`.
</td></tr>
<tr valign="top" align="left"><td><strong>
summary:disk_use_percent:&lt;name&gt;:&lt;uint&gt;
</strong></td></tr><tr><td>
Disk use percentage relative to `disk_block_max`.
</td></tr>
</table>
<h4>
File Timestamp Tags
</h4>
<p>These tags list files with zero sub-second timestamps.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
zerosubsecond:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Lists files that have a zero sub-second timestamp.
Up to 50 are logged per disk.
</td></tr>
</table>
<h4>
Block Information Tags
</h4>
<p>These tags are generated when the GUI option is enabled (`state-&gt;opt.gui`).
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
block_count:&lt;uint&gt;
</strong></td></tr><tr><td>
The total number of blocks in the array.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
block:&lt;index&gt;:&lt;time&gt;:&lt;used&gt;:&lt;unsynced&gt;:&lt;bad&gt;:&lt;rehash&gt;
</strong></td></tr><tr><td>
Status of a specific block.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;index&gt;
</em></td><td width="90%">
Block index.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;time&gt;
</em></td><td width="90%">
Last scrub time (Unix timestamp). A value of 0 means
the block has never been scrubbed.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;used&gt;
</em></td><td width="90%">
`used` if the block contains data, otherwise empty.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;unsynced&gt;
</em></td><td width="90%">
`unsynced` if the block needs a sync, otherwise empty.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;bad&gt;
</em></td><td width="90%">
`bad` if the block has errors, otherwise empty.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;rehash&gt;
</em></td><td width="90%">
`rehash` if the block needs a rehash, otherwise empty.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
block_noinfo:&lt;index&gt;:&lt;used&gt;:&lt;unsynced&gt;
</strong></td></tr><tr><td>
Status of an unused block (no info recorded) in the content file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;index&gt;
</em></td><td width="90%">
Block index.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;used&gt;
</em></td><td width="90%">
`used` if the block contains data, otherwise empty.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;unsynced&gt;
</em></td><td width="90%">
`unsynced` if the block needs a sync, otherwise empty.
</td></tr>
</table>
<h4>
Scrub History Tags
</h4>
<p>These tags provide details on the scrub/sync time distribution.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
info_count:&lt;uint&gt;
</strong></td></tr><tr><td>
Total number of info records about past scrub and sync
operations stored in the content file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
info_time:&lt;time&gt;:&lt;count&gt;:&lt;status&gt;
</strong></td></tr><tr><td>
All the info records.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;time&gt;
</em></td><td width="90%">
Unix timestamp of the scrub/sync.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
Number of blocks processed at this timestamp.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;status&gt;
</em></td><td width="90%">
"scrubbed" (for blocks verified to be correct) or
"new" (for synced blocks that haven't been scrubbed yet).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scrub_graph_range:&lt;max_columns&gt;:&lt;max_height&gt;
</strong></td></tr><tr><td>
Dimensions of the scrub history graph obtained from the
`info_time` records. This provides the boundary for the
precomputed graph data available in the `scrub_graph_bar` tags.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;max_columns&gt;
</em></td><td width="90%">
The number of columns in the graph (constant
GRAPH_COLUMN).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;max_height&gt;
</em></td><td width="90%">
The maximum height (peak count) of blocks found
in any column (the highest sum of scrubbed and new blocks).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
scrub_graph_bar:&lt;index&gt;:&lt;days_ago&gt;:&lt;scrubbed&gt;:&lt;new&gt;
</strong></td></tr><tr><td>
Data for a column of the scrub history graph. Each column
represents a time period.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;index&gt;
</em></td><td width="90%">
Column index. From 0 to max_columns - 1.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;days_ago&gt;
</em></td><td width="90%">
Days ago for this column's time range.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;scrubbed&gt;
</em></td><td width="90%">
Count of scrubbed blocks in that day range.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;new&gt;
</em></td><td width="90%">
Count of newly synced (unscrubbed) blocks in that day range.
</td></tr>
</table>
<h2><a name="8">8</a>
Command Sync/Scrub Tags
</h2>
<p>Tags specific for the `sync` and `scrub` commands.
Also the error tags are possible.
</p><h4>
Summary Tags
</h4>
<p>These tags provide summary statistics at the end of the command.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
hash_summary:error_file:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total count of file-related errors that caused a
block to be skipped during the hashing phase. These are often
due to file changes (missing, size/time change) during the
sync operation. This happens only in `sync`.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
Total number of file errors (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:error_file:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total count of file-related errors encountered during
the process (e.g., missing files, file attribute changes).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of file errors encountered (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:error_io:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total count of input/output errors encountered on
data or parity disks.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of I/O errors encountered (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:error_data:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total count of "silent data errors" (data blocks
not matching their expected hash) encountered during the sync
process.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of silent data errors encountered (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:&lt;status&gt;
</strong></td></tr><tr><td>
Logs the overall exit status of the command. The `status` is
one of the following:
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
ok
</em></td><td width="90%">
No errors were found.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
error
</em></td><td width="90%">
If any errors were found (file, I/O, or data errors).
</td></tr>
</table>
<h2><a name="9">9</a>
Command Check/Fix Tags
</h2>
<p>Tags specific for the `check` and `fix` commands.
Also the error tags are possible.
</p><h4>
Fixed/Recovered Tags
</h4>
<p>These tags log successful repairs during fix operations.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
fixed:&lt;block_pos&gt;:&lt;disk_name&gt;:&lt;file_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Indicates that a file was successfully fixed using parity data.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;block_pos&gt;
</em></td><td width="90%">
The block position being processed (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the fix
(e.g., `Fixed size`, `Fixed data error at position...`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
parity_fixed:&lt;block_pos&gt;:&lt;parity&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Indicates that corrupted parity data was successfully
recomputed and written.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;block_pos&gt;
</em></td><td width="90%">
The block position being processed (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;parity&gt;
</em></td><td width="90%">
The name of the parity level (e.g., "parity", "2-parity").
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the fix
(e.g., `Fixed data error`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
empty_fixed:&lt;disk_name&gt;:&lt;file_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs successful recreation of a missing or corrupted empty file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the fix
(e.g., `Fixed empty file`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
hardlink_fixed:&lt;disk_name&gt;:&lt;link_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs successful recreation of a hard link during fix operation.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;link_path&gt;
</em></td><td width="90%">
The hard link path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the fix
(e.g., `Fixed hardlink error`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
symlink_fixed:&lt;disk_name&gt;:&lt;link_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs successful recreation of a symbolic link during fix operation.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;link_path&gt;
</em></td><td width="90%">
The symlink path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the fix
(e.g., `Fixed symlink error`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
dir_fixed:&lt;disk_name&gt;:&lt;dir_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs successful recreation of a missing directory during fix
operation.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;dir_path&gt;
</em></td><td width="90%">
The directory path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the fix
(e.g., `Fixed dir error`).
</td></tr>
</table>
<h4>
Unrecoverable Error Tags
</h4>
<p>These tags log errors that could not be recovered.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
unrecoverable:&lt;block_pos&gt;:&lt;disk_name&gt;:&lt;file_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Indicates that a block error could not be fixed due to
insufficient parity or other recovery limitations.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;block_pos&gt;
</em></td><td width="90%">
The block position being processed (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the problem
(e.g., `Unrecoverable error at position &lt;file_pos&gt;`,
`Unrecoverable unsynced error at position &lt;file_pos&gt;`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
collision:&lt;disk_name&gt;:&lt;file_path&gt;:&lt;collision_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs that the modification time was not set on a recovered file to
avoid inode collision with another file.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;collision_path&gt;
</em></td><td width="90%">
The path of the colliding file (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the problem
(e.g., `Not setting modification time to avoid inode collision`).
</td></tr>
</table>
<h4>
File Status Tags
</h4>
<p>These tags log the final status of files after processing.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
status:unrecoverable:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Indicates that a file has unrecoverable errors and was renamed to
`.unrecoverable` (in fix mode) or cannot be recovered (in check mode).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
status:recovered:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Logs that a file was successfully recovered during fix operation.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
status:damaged:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Indicates that a file is damaged (in audit-only mode, e.g., using `check`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
status:recoverable:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Logs that a file has errors but could be recovered in fix mode.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
status:correct:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Indicates that a file passed all checks successfully (verbose mode only).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to disk root (escaped).
</td></tr>
</table>
<h4>
Summary Tags
</h4>
<p>These tags provide summary statistics at the end of the command.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:error:&lt;error_count&gt;
</strong></td></tr><tr><td>
Logs the total number of errors encountered.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;error_count&gt;
</em></td><td width="90%">
Total number of errors (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:error_recovered:&lt;recovered_count&gt;
</strong></td></tr><tr><td>
Logs the total number of errors successfully recovered (fix mode only).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;recovered_count&gt;
</em></td><td width="90%">
Number of recovered errors (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:error_unrecoverable:&lt;unrecoverable_count&gt;
</strong></td></tr><tr><td>
Logs the total number of unrecoverable errors (not in audit-only mode).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;unrecoverable_count&gt;
</em></td><td width="90%">
Number of unrecoverable errors (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:&lt;status&gt;
</strong></td></tr><tr><td>
Logs the overall exit status of the command. The `status` is one of
the following:
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
`ok`
</em></td><td width="90%">
Indicates that the operation completed with no errors.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
`recovered`
</em></td><td width="90%">
Indicates that the operation completed with all
errors successfully recovered (fix mode only).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
`recoverable`
</em></td><td width="90%">
Indicates that errors were found but are all
recoverable (check mode only).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
`unrecoverable`
</em></td><td width="90%">
Indicates that unrecoverable errors were
found.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
`error`
</em></td><td width="90%">
Indicates that errors were found (audit-only mode).
</td></tr>
</table>
<h2><a name="10">10</a>
Command List Tags
</h2>
<p>This section describes the tags output with the `list` command.
</p><h4>
List Tags
</h4>
<p>These tags log details about individual files and links processed during
the listing operation.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
file:&lt;disk_name&gt;:&lt;subpath&gt;:&lt;size&gt;:&lt;mtime_sec&gt;:&lt;mtime_nsec&gt;:&lt;inode&gt;
</strong></td></tr><tr><td>
Logs details for a regular file found on a disk.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;subpath&gt;
</em></td><td width="90%">
The path of the file relative to the disk's root
(escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size&gt;
</em></td><td width="90%">
The size of the file in bytes (uint64).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;mtime_sec&gt;
</em></td><td width="90%">
The file's modification time in seconds since the
Epoch (int64).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;mtime_nsec&gt;
</em></td><td width="90%">
The file's modification time nanosecond component
(uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;inode&gt;
</em></td><td width="90%">
The file's inode number (int64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
link_&lt;type&gt;:&lt;disk_name&gt;:&lt;subpath&gt;:&lt;linkto&gt;
</strong></td></tr><tr><td>
Logs details for a link found on a disk. The `&lt;type&gt;` component
varies based on the kind of link.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;type&gt;
</em></td><td width="90%">
The type of link, one of: `hardlink`, `symlink`,
`symdir` (symlink to a directory), `junction`
(Windows-specific reparse point).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk (string).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;subpath&gt;
</em></td><td width="90%">
The path of the link relative to the disk's root
(escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;linkto&gt;
</em></td><td width="90%">
The target path of the link (escaped).
</td></tr>
</table>
<h4>
Summary Tags
</h4>
<p>These tags log final statistics about the entire listing operation.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:file_count:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total number of regular files processed.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of files (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:file_size:&lt;size&gt;
</strong></td></tr><tr><td>
Logs the total size of all regular files processed.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size&gt;
</em></td><td width="90%">
The cumulative size of all files (uint64, bytes).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:link_count:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total number of links processed (hardlinks, symlinks,
symdirs, junctions).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of links (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:ok
</strong></td></tr><tr><td>
Indicates a successful completion of the listing operation.
Note that if a fatal error happens, the program will abort,
and you won't get this tag.
</td></tr>
</table>
<h2><a name="11">11</a>
Command Dup Tags
</h2>
<p>This section describes the tags output with the `dup` command.
</p><h4>
Duplicate Tags
</h4>
<p>These tags log information about detected duplicate files and provide
a summary of the duplicate finding process. The content hash of the
whole file is used to determine duplicates.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
dup:&lt;diskname1&gt;:&lt;file_path1&gt;:&lt;diskname2&gt;:&lt;file_path2&gt;:&lt;size&gt;: dup
</strong></td></tr><tr><td>
Logs the information about a pair of duplicate files found.
The first file listed is the one just processed, and the second
file is the previously processed file that has the same content hash.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;diskname1&gt;
</em></td><td width="90%">
The configured name of the disk containing the
newly processed duplicate file.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path1&gt;
</em></td><td width="90%">
The path of the newly processed duplicate file
relative to its disk's mount point (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;diskname2&gt;
</em></td><td width="90%">
The configured name of the disk containing the
previously processed file that is the duplicate
of `&lt;file_path1&gt;`.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path2&gt;
</em></td><td width="90%">
The path of the previously processed duplicate file
relative to its disk's mount point (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size&gt;
</em></td><td width="90%">
The size of the duplicate file in bytes (uint64). This
size corresponds to the file `&lt;file_path2&gt;`.
</td></tr>
</table>
<h4>
Summary Tags
</h4>
<p>These tags provide a final summary of the duplicate finding process.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:dup_count:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total number of duplicate files found. A file is counted
as a duplicate if its hash matches a hash already seen.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total count of duplicate files (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:dup_size:&lt;size&gt;
</strong></td></tr><tr><td>
Logs the total size of all duplicate files found. This size is
the sum of the sizes of all files considered duplicates.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size&gt;
</em></td><td width="90%">
The total size of duplicate files in gigabytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:unique
</strong></td></tr><tr><td>
Logs the final exit status indicating that no duplicate files were
found. This tag is logged if `&lt;count&gt;` is zero.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:dup
</strong></td></tr><tr><td>
Logs the final exit status indicating that at least one duplicate
file was found. This tag is logged if `&lt;count&gt;` is greater than
zero.
</td></tr>
</table>
<h2><a name="12">12</a>
Command Pool Tags
</h2>
<p>This section describes the tags output with the `pool` command.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:link_count:&lt;count&gt;
</strong></td></tr><tr><td>
Logs the total number of links created (symlinks, junctions).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;count&gt;
</em></td><td width="90%">
The total number of links (uint).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:ok
</strong></td></tr><tr><td>
Indicates a successful completion of the pool operation.
Note that if a fatal error happens, the program will abort,
and you won't get this tag.
</td></tr>
</table>
<h2><a name="13">13</a>
Command Rehash Tags
</h2>
<p>This section describes the tags output with the `rehash` command.
</p><h4>
Summary Tags
</h4>
<p>These tags provide a final summary of the rehash scheduling process.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:scheduled
</strong></td></tr><tr><td>
Logs the final exit status indicating that a rehash operation has
been successfully scheduled. The rehash will be performed
incrementally in future `sync` or `scrub` commands.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:already_in_progress
</strong></td></tr><tr><td>
Logs the final exit status indicating that a rehash is already
in progress and cannot be scheduled again. This causes the
program to exit with a fatal error.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:exit:not_required
</strong></td></tr><tr><td>
Logs the final exit status indicating that the current hash
algorithm is already the `best hash` for the platform, and thus
a rehash is not required. This causes the program to exit with
a fatal error.
</td></tr>
</table>
<h2><a name="14">14</a>
Command Smart Tags
</h2>
<p>This section describes the tags output with the `smart` command.
</p><p>Note that a `&lt;disk_name&gt;` may be associated with more `&lt;device_file&gt;`,
in case the logical disk uses more physical disks. In such a case,
you'll see multiple tags for the same `&lt;disk_name&gt;` but with different
`&lt;device_file&gt;`.
</p><h4>
SMART Attributes
</h4>
<p>Tags logging specific disk identification and raw SMART attribute
values.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
smart:&lt;device_file&gt;:&lt;disk_name&gt;
</strong></td></tr><tr><td>
Logs the start of the SMART report for a device.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;device_file&gt;
</em></td><td width="90%">
The file path of the device (e.g., /dev/sdb).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:serial:&lt;serial_number&gt;
</strong></td></tr><tr><td>
Logs the disk's serial number.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;serial_number&gt;
</em></td><td width="90%">
The disk's serial number (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:vendor:&lt;vendor&gt;
</strong></td></tr><tr><td>
Logs the disk's vendor string.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;vendor&gt;
</em></td><td width="90%">
The disk's vendor identifier (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:model:&lt;model&gt;
</strong></td></tr><tr><td>
Logs the disk's model string.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;model&gt;
</em></td><td width="90%">
The disk's model identifier (escaped).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:afr:&lt;afr_value&gt;:&lt;afr_prob&gt;
</strong></td></tr><tr><td>
Logs the estimated Annual Failure Rate (AFR) and the
probability of one failure in the next year based on SMART
attributes. The AFR is calculated using the maximum rate
reported by specific SMART attributes (5, 187, 188, 197, 198).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;afr_value&gt;
</em></td><td width="90%">
The computed Annual Failure Rate (double).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;afr_prob&gt;
</em></td><td width="90%">
The probability of one or more failures in the
next year (double).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:size:&lt;size_bytes&gt;
</strong></td></tr><tr><td>
Logs the size of the disk.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;size_bytes&gt;
</em></td><td width="90%">
The disk size in bytes (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:error:&lt;error_count&gt;
</strong></td></tr><tr><td>
Logs the raw value of the total error count (e.g., from SMART
attribute 199, if used for the report).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;error_count&gt;
</em></td><td width="90%">
The total error count (uint64).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:rotationrate:&lt;rate&gt;
</strong></td></tr><tr><td>
Logs the disk's rotation rate. A value of 0 indicates an SSD.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;rate&gt;
</em></td><td width="90%">
The rotation rate (uint64, RPM).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:flags:&lt;flags_decimal&gt;:&lt;flags_hex&gt;
</strong></td></tr><tr><td>
Logs the SMART status flags from the utility (e.g., smartctl).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;flags_decimal&gt;
</em></td><td width="90%">
The raw flags value (uint64, decimal).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;flags_hex&gt;
</em></td><td width="90%">
The raw flags value (uint64, hexadecimal).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
attr:&lt;device_file&gt;:&lt;disk_name&gt;:&lt;id&gt;:&lt;value_decimal&gt;:&lt;value_hex&gt;
</strong></td></tr><tr><td>
Logs the raw value of any assigned SMART attribute.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;id&gt;
</em></td><td width="90%">
The SMART attribute ID (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;value_decimal&gt;
</em></td><td width="90%">
The raw attribute value (uint64, decimal).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;value_hex&gt;
</em></td><td width="90%">
The raw attribute value (uint64, hexadecimal).
</td></tr>
</table>
<h4>
Summary
</h4>
<p>Tags logging the overall failure probabilities for the array.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
summary:array_failure:&lt;array_afr&gt;:&lt;array_prob&gt;
</strong></td></tr><tr><td>
Logs the total estimated failure rate for the entire array
(sum of individual disk AFRs) and the probability of at least
one disk failure in the next year.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;array_afr&gt;
</em></td><td width="90%">
The sum of AFRs of all disks in the array (double).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;array_prob&gt;
</em></td><td width="90%">
The probability of at least one disk failure in
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2"><tr><td width="5%"></td><td width="95%">
<p>the next year (double).
</p></td></tr></table>
<h2><a name="15">15</a>
Command Probe Tags
</h2>
<p>This section describes the tags output with the `probe` command.
</p><p>Note that a `&lt;disk_name&gt;` may be associated with more `&lt;device_file&gt;`,
in case the logical disk uses more physical disks. In such a case,
you'll see multiple tags for the same `&lt;disk_name&gt;` but with different
`&lt;device_file&gt;`.
</p><h4>
Device Power State
</h4>
<p>Tags used to report the power state of each device.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
probe:&lt;device_file&gt;:&lt;disk_name&gt;:&lt;power_state&gt;
</strong></td></tr><tr><td>
Logs the detected power state of a device.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;device_file&gt;
</em></td><td width="90%">
The file path of the device (e.g., /dev/sdb).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The configured name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;power_state&gt;
</em></td><td width="90%">
The numerical power state: 0: Unknown,
1: StandBy, 2: Active.
</td></tr>
</table>
<h2><a name="16">16</a>
Error Tags
</h2>
<p>These tags report specific errors that occur on data disks during the
commands that access files and parities.
</p><table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
error:&lt;block&gt;:&lt;disk_name&gt;:&lt;file&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs file access errors (open, read, file changed) during the
data disk read operation for parity calculation or verification.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;block&gt;
</em></td><td width="90%">
The zero-based index of the block where the error occurred (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the data disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file&gt;
</em></td><td width="90%">
The path (relative to the disk mount point) of the
file containing the block (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the
error (e.g., `Open/Read/Write EIO error`, `Open/Read/Write error`,
`Data error at position &lt;pos&gt;, diff bits &lt;diff&gt;/&lt;bits&gt;`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
parity_error:&lt;block&gt;:&lt;level&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Logs errors during parity disk read or write operations.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;block&gt;
</em></td><td width="90%">
The zero-based index of the block where the error occurred (uint).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;level&gt;
</em></td><td width="90%">
The configuration name of the parity level (e.g.,
`parity`, `2-parity`).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the
error (e.g., `Read/Write EIO error`, `Read/Write error`,
`Data error, diff bits &lt;diff&gt;/&lt;bits&gt;`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
hardlink_error:&lt;disk_name&gt;:&lt;link_path&gt;:&lt;target_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Indicates an error when attempting to access a hard link.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;link_path&gt;
</em></td><td width="90%">
The hard link path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;target_path&gt;
</em></td><td width="90%">
The target path of the hard link (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the
error (e.g., `Hardlink stat error`,
`Hardlink error for not regular file`, `Hardlink to stat error`,
`Hardlink-to error for not regular file`,
`Hardlink mismatch for different inode`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
symlink_error:&lt;disk_name&gt;:&lt;link_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Indicates an error when attempting to access a symbolic link.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;link_path&gt;
</em></td><td width="90%">
The symlink path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the
error (e.g., `Symlink read error`,
`Symlink data error '&lt;actual&gt;' instead of '&lt;expected&gt;'`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
dir_error:&lt;disk_name&gt;:&lt;dir_path&gt;:&lt;msg&gt;
</strong></td></tr><tr><td>
Indicates an error when attempting to access a directory.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;dir_path&gt;
</em></td><td width="90%">
The directory path relative to disk root (escaped).
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;msg&gt;
</em></td><td width="90%">
A descriptive message indicating the nature of the
error (e.g., `Dir stat error`, `Dir error for not directory`).
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td><strong>
outofparity:&lt;disk_name&gt;:&lt;file_path&gt;
</strong></td></tr><tr><td>
Logs that a file's blocks extend beyond the available parity
space, indicating that the parity files are too small to
protect all data. This occurs when data requires more parity
than is available on the parity disk(s) and is a critical
warning.
</td></tr>
</table>
<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;disk_name&gt;
</em></td><td width="90%">
The name of the disk containing the file.
</td></tr>
<tr valign="top" align="left"><td width="5%"></td><td width="5%"><em>
&lt;file_path&gt;
</em></td><td width="90%">
The file path relative to the disk root (escaped).
</td></tr>
</table>
<p>
</p>
</div>
<div id="footer">
<div class="column">
<span class="bold">Donate with</span>
<br>
<!--
<a href="http://sourceforge.net/p/snapraid/donate/"><img src="paypal.png" width="160" height="60" alt="PayPal"></a>
-->
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=amadvance%40gmail%2ecom&lc=US&item_name=SnapRAID&no_note=0&currency_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest"><img src="paypal.png" width="160" height="60" alt="PayPal"></a>
<!--
<a href="https://coinkite.com/u/amadvance/"><img src="bitcoin.png" width="160" height="60" alt="BitCoin"></a>
-->
</div>
<div class="column">
<span class="bold">Find other resources at</span>
<br>
<a href="https://github.com/amadvance/snapraid/"><img src="github.png" width="160" height="60" alt="GitHub"></a>
<a href="http://sourceforge.net/projects/snapraid/"><img src="sourceforge.png" width="115" height="60" alt="SourceForge"></a>
</div>
</div>
</body>
</html>