mirror of
https://github.com/amadvance/snapraid.git
synced 2026-10-26 19:01:57 -04:00
Rework size and uuid tags
This commit is contained in:
parent
ea53954b41
commit
75b6170b79
5 changed files with 227 additions and 198 deletions
|
|
@ -331,7 +331,7 @@ struct snapraid_disk {
|
|||
char dir[PATH_MAX]; /**< Mount point of the disk. It always terminates with /. */
|
||||
char smartctl[PATH_MAX]; /**< Custom command for smartctl. Empty means auto. */
|
||||
int smartignore[SMART_IGNORE_MAX]; /**< Smart attributes to ignore for this device. */
|
||||
char uuid[UUID_MAX]; /**< UUID of the disk. */
|
||||
char uuid[UUID_MAX]; /**< UUID of the disk. They are probed during the config reading. */
|
||||
|
||||
uint64_t device; /**< Device identifier. */
|
||||
block_off_t total_blocks; /**< Number of total blocks. */
|
||||
|
|
@ -422,7 +422,7 @@ struct snapraid_disk {
|
|||
*/
|
||||
struct snapraid_map {
|
||||
char name[PATH_MAX]; /**< Name of the disk. */
|
||||
char uuid[UUID_MAX]; /**< UUID of the disk. Empty if unknown. */
|
||||
char uuid[UUID_MAX]; /**< UUID of the disk. Empty if unknown. They are read from the content file. */
|
||||
block_off_t total_blocks; /**< Number of total blocks. */
|
||||
block_off_t free_blocks; /**< Number of free blocks at last 'sync'. */
|
||||
unsigned position; /**< Position of the disk in the parity. */
|
||||
|
|
@ -453,7 +453,7 @@ struct snapraid_map {
|
|||
*/
|
||||
struct snapraid_split {
|
||||
char path[PATH_MAX]; /**< Path of the parity file. */
|
||||
char uuid[UUID_MAX]; /**< UUID of the disk. Empty if unknown. */
|
||||
char uuid[UUID_MAX]; /**< UUID of the disk. Empty if unknown. They are probed during the config reading, and later read from the content file. */
|
||||
|
||||
/**
|
||||
* Size of the parity split.
|
||||
|
|
|
|||
|
|
@ -716,6 +716,7 @@ void state_config(struct snapraid_state* state, const char* path, const char* co
|
|||
skip_access = 0;
|
||||
state->parity[level].split_mac = split_mac;
|
||||
for (s = 0; s < split_mac; ++s) {
|
||||
char uuid[UUID_MAX];
|
||||
pathimport(state->parity[level].split_map[s].path, sizeof(state->parity[level].split_map[s].path), split_map[s]);
|
||||
|
||||
if (!state->opt.skip_parity_access) {
|
||||
|
|
@ -731,11 +732,17 @@ void state_config(struct snapraid_state* state, const char* path, const char* co
|
|||
|
||||
if (stat(device, &st) == 0) {
|
||||
dev = st.st_dev;
|
||||
|
||||
/* read the uuid, if unsupported use an empty one */
|
||||
if (devuuid(dev, split_map[s], uuid, sizeof(uuid)) != 0) {
|
||||
*uuid = 0;
|
||||
}
|
||||
} else {
|
||||
/* if the disk can be skipped */
|
||||
if (state->opt.force_device) {
|
||||
/* use a fake device, and mark the disk to be skipped */
|
||||
dev = 0;
|
||||
*uuid = 0;
|
||||
skip_access = 1;
|
||||
log_fatal("DANGER! Skipping inaccessible parity disk '%s'...\n", tag);
|
||||
} else {
|
||||
|
|
@ -753,9 +760,11 @@ void state_config(struct snapraid_state* state, const char* path, const char* co
|
|||
} else {
|
||||
/* use a fake device */
|
||||
dev = 0;
|
||||
*uuid = 0;
|
||||
}
|
||||
|
||||
state->parity[level].split_map[s].device = dev;
|
||||
pathcpy(state->parity[level].split_map[s].uuid, sizeof(state->parity[level].split_map[s].uuid), uuid);
|
||||
}
|
||||
|
||||
/* store the global parity skip_access */
|
||||
|
|
@ -1369,13 +1378,16 @@ void state_config(struct snapraid_state* state, const char* path, const char* co
|
|||
log_tag("blocksize:%u\n", state->block_size);
|
||||
for (i = state->disklist; i != 0; i = i->next) {
|
||||
struct snapraid_disk* disk = i->data;
|
||||
log_tag("data:%s:%s\n", disk->name, disk->dir);
|
||||
log_tag("data:%s:%s:%s\n", disk->name, disk->dir, disk->uuid);
|
||||
}
|
||||
|
||||
log_tag("mode:%s\n", lev_raid_name(state->raid_mode, state->level));
|
||||
for (l = 0; l < state->level; ++l)
|
||||
for (s = 0; s < state->parity[l].split_mac; ++s)
|
||||
log_tag("%s:%u:%s\n", lev_config_name(l), s, state->parity[l].split_map[s].path);
|
||||
for (l = 0; l < state->level; ++l) {
|
||||
log_tag("%s:%s:%s\n", lev_config_name(l), state->parity[l].split_map[0].path, state->parity[l].split_map[0].uuid);
|
||||
for (s = 1; s < state->parity[l].split_mac; ++s) {
|
||||
log_tag("%s/%u:%s:%s\n", lev_config_name(l), s, state->parity[l].split_map[s].path, state->parity[l].split_map[s].uuid);
|
||||
}
|
||||
}
|
||||
if (state->pool[0] != 0)
|
||||
log_tag("pool:%s\n", state->pool);
|
||||
if (state->share[0] != 0)
|
||||
|
|
@ -1601,7 +1613,7 @@ static void state_map(struct snapraid_state* state)
|
|||
if (state->parity[l].split_map[s].uuid[0] != 0) {
|
||||
/* count the number of uuid change */
|
||||
++uuid_mismatch;
|
||||
log_fatal("UUID change for parity '%s[%u]' from '%s' to '%s'\n", lev_config_name(l), s, state->parity[l].split_map[s].uuid, uuid);
|
||||
log_fatal("UUID change for parity '%s/%u' from '%s' to '%s'\n", lev_config_name(l), s, state->parity[l].split_map[s].uuid, uuid);
|
||||
}
|
||||
|
||||
/* update the uuid */
|
||||
|
|
@ -2703,6 +2715,11 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
os_abort();
|
||||
/* LCOV_EXCL_STOP */
|
||||
}
|
||||
|
||||
log_tag("content_allocation:%s:%" PRIi64 ":%" PRIi64 "\n",
|
||||
buffer,
|
||||
v_total_blocks * (uint64_t)state->block_size,
|
||||
v_free_blocks * (uint64_t)state->block_size);
|
||||
} else {
|
||||
v_total_blocks = 0;
|
||||
v_free_blocks = 0;
|
||||
|
|
@ -2718,11 +2735,8 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
}
|
||||
|
||||
/* log the info read from the content file */
|
||||
log_tag("content_disk:%s:%" PRIu64 ":%" PRIu64 ":%u:%s\n",
|
||||
log_tag("content_data:%s:%s\n",
|
||||
buffer,
|
||||
v_total_blocks * (uint64_t)state->block_size,
|
||||
v_free_blocks * (uint64_t)state->block_size,
|
||||
v_pos,
|
||||
uuid);
|
||||
|
||||
/* find the disk */
|
||||
|
|
@ -2805,6 +2819,11 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
/* LCOV_EXCL_STOP */
|
||||
}
|
||||
|
||||
log_tag("content_allocation:%s:%" PRIi64 ":%" PRIi64 "\n",
|
||||
lev_config_name(v_level),
|
||||
v_total_blocks * (uint64_t)state->block_size,
|
||||
v_free_blocks * (uint64_t)state->block_size);
|
||||
|
||||
/* auto configure if configuration is missing */
|
||||
if (state->no_conf) {
|
||||
if (v_level >= state->level)
|
||||
|
|
@ -2822,11 +2841,8 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
state->parity[v_level].free_blocks = v_free_blocks;
|
||||
|
||||
/* log the info read from the content file */
|
||||
log_tag("content_parity:%s:%" PRIu64 ":%" PRIu64 ":%u:%s:%s:%" PRIi64 "\n",
|
||||
log_tag("content_parity:%s:%s:%s:%" PRIi64 "\n",
|
||||
lev_config_name(v_level),
|
||||
v_total_blocks * (uint64_t)state->block_size,
|
||||
v_free_blocks * (uint64_t)state->block_size,
|
||||
0,
|
||||
state->parity[v_level].split_map[0].uuid,
|
||||
state->parity[v_level].split_map[0].path,
|
||||
state->parity[v_level].split_map[0].size);
|
||||
|
|
@ -2894,6 +2910,11 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
state->parity[v_level].free_blocks = v_free_blocks;
|
||||
}
|
||||
|
||||
log_tag("content_allocation:%s:%" PRIi64 ":%" PRIi64 "\n",
|
||||
lev_config_name(v_level),
|
||||
v_total_blocks * (uint64_t)state->block_size,
|
||||
v_free_blocks * (uint64_t)state->block_size);
|
||||
|
||||
for (s = 0; s < v_split_mac; ++s) {
|
||||
char v_path[PATH_MAX];
|
||||
char v_uuid[UUID_MAX];
|
||||
|
|
@ -2940,6 +2961,8 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
/* otherwise we can drop it */
|
||||
log_fatal("WARNING! Dropping from '%s' unused split '%u'\n", lev_config_name(v_level), s);
|
||||
} else {
|
||||
char parity_name[64];
|
||||
|
||||
/* we copy the path only if without configuration file */
|
||||
if (state->no_conf)
|
||||
pathcpy(state->parity[v_level].split_map[s].path, sizeof(state->parity[v_level].split_map[s].path), v_path);
|
||||
|
|
@ -2949,11 +2972,12 @@ static void state_read_content(struct snapraid_state* state, const char* path, S
|
|||
state->parity[v_level].split_map[s].size = v_size;
|
||||
|
||||
/* log the info read from the content file */
|
||||
log_tag("content_parity:%s:%" PRIu64 ":%" PRIu64 ":%u:%s:%s:%" PRIi64 "\n",
|
||||
lev_config_name(v_level),
|
||||
v_total_blocks * (uint64_t)state->block_size,
|
||||
v_free_blocks * (uint64_t)state->block_size,
|
||||
s,
|
||||
if (s == 0)
|
||||
pathcpy(parity_name, sizeof(parity_name), lev_config_name(v_level));
|
||||
else
|
||||
pathprint(parity_name, sizeof(parity_name), "%s/%u", lev_config_name(v_level), s);
|
||||
log_tag("content_parity:%s:%s:%s:%" PRIi64 "\n",
|
||||
parity_name,
|
||||
state->parity[v_level].split_map[s].uuid,
|
||||
state->parity[v_level].split_map[s].path,
|
||||
state->parity[v_level].split_map[s].size);
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ Operating without a configuration file.
|
|||
.B blocksize:<bytes>
|
||||
The configured block size in bytes (uint).
|
||||
.TP
|
||||
.B data:<disk_name>:<dir>
|
||||
.B data:<disk_name>:<dir>:<uuid>
|
||||
The data disks as defined in the configuration file.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -93,6 +93,9 @@ The assigned name of the disk.
|
|||
.HP 4
|
||||
.I <dir>
|
||||
The directory entry point of the disk.
|
||||
.HP 4
|
||||
.I <uuid>
|
||||
The UUID of the filesystem containing the dir.
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
|
|
@ -101,23 +104,23 @@ 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.
|
||||
.TP
|
||||
.B <parity_level>:<split_index>:<path>
|
||||
.B <parity_level>[/<split_index>]:<path>:<uuid>
|
||||
The parity files as defined in the configuration file.
|
||||
.RS 4
|
||||
.PD 0
|
||||
.HP 4
|
||||
.I <parity_level>
|
||||
One of \`parity\`, \`2\-parity\`, ..., \`6\-parity\`.
|
||||
This corresponds to the level of redundancy.
|
||||
.HP 4
|
||||
.I <split_index>
|
||||
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.
|
||||
.I <parity_level>[/<split_index>]
|
||||
One of \`parity\`, \`2\-parity\`,
|
||||
..., \`6\-parity\`. This corresponds to the level of redundancy.
|
||||
In case of split parity, the parity name is followed
|
||||
by \`/N\` to indicate the split index, where N starts
|
||||
from 0. The \`/0\` is always omitted.
|
||||
.HP 4
|
||||
.I <path>
|
||||
The path (escaped).
|
||||
.HP 4
|
||||
.I <uuid>
|
||||
The UUID of the filesystem containing the path.
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
|
|
@ -146,40 +149,31 @@ The absolute path to a content file being used (escaped).
|
|||
Content files store the metadata (like file hashes and timestamps)
|
||||
for the array.
|
||||
.TP
|
||||
.B content_parity:<parity_level>:<size>:<free_size>:<split_index>:<uuid>:<path>:<file_size>
|
||||
.B content_parity:<parity_level>[/<split_index>]:<uuid>:<path>:<size>
|
||||
The parity files as stored in the content file.
|
||||
.RS 4
|
||||
.PD 0
|
||||
.HP 4
|
||||
.I <parity_level>
|
||||
One of \`parity\`, \`2\-parity\`, ..., \`6\-parity\`.
|
||||
.HP 4
|
||||
.I <size>
|
||||
The size of the data in the disk.
|
||||
.HP 4
|
||||
.I <free_size>
|
||||
The free size in the disk at the time of the
|
||||
latest \`sync\`.
|
||||
.HP 4
|
||||
.I <split_index>
|
||||
The split index (uint). If no
|
||||
multiple split parity is configured, there is only the
|
||||
index 0.
|
||||
.I <parity_level>[/<split_index>]
|
||||
One of \`parity\`, \`2\-parity\`,
|
||||
..., \`6\-parity\`. This corresponds to the level of redundancy.
|
||||
In case of split parity, the parity name is followed
|
||||
by \`/N\` to indicate the split index, where N starts
|
||||
from 0. The \`/0\` is always omitted.
|
||||
.HP 4
|
||||
.I <uuid>
|
||||
The UUID of the disk containing the path.
|
||||
The UUID of the disk containing the path as stored
|
||||
in the content file.
|
||||
.HP 4
|
||||
.I <path>
|
||||
The path (escaped).
|
||||
.HP 4
|
||||
.I <file_size>
|
||||
The size of the parity file. Size is \-1 if not yet
|
||||
fixed, meaning it can grow. This happens for the
|
||||
latest split.
|
||||
.I <size>
|
||||
The size of the parity file (uint64).
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B content_disk:<disk_name>:<size>:<free_size>:<parity_index>:<uuid>
|
||||
.B content_data:<disk_name>:<uuid>
|
||||
The data disk as stored in the content file.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -187,18 +181,25 @@ The data disk as stored in the content file.
|
|||
.I <disk_name>
|
||||
Name of the data disk.
|
||||
.HP 4
|
||||
.I <uuid>
|
||||
The UUID of the disk filesystem as stored in the
|
||||
content file.
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B content_allocation:<disk_name>:<size>:<free_size>
|
||||
The size of disk and parity as stored in the content file.
|
||||
.RS 4
|
||||
.PD 0
|
||||
.HP 4
|
||||
.I <disk_name>
|
||||
Name of the data or parity disk.
|
||||
.HP 4
|
||||
.I <size>
|
||||
The size of the data in the disk.
|
||||
The size of the data in the disk or parity (uint64).
|
||||
.HP 4
|
||||
.I <free_size>
|
||||
The free size in the disk at the time of the
|
||||
latest \`sync\`.
|
||||
.HP 4
|
||||
.I <parity_index>
|
||||
The disk position in the parity computation.
|
||||
.HP 4
|
||||
.I <uuid>
|
||||
The UUID of the disk filesystem.
|
||||
The free size in the disk or parity (uint64).
|
||||
.PD
|
||||
.RE
|
||||
.SH DIAGNOSTICS TAGS
|
||||
|
|
@ -504,16 +505,16 @@ The calculated ambient temperature in degrees Celsius.
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B thermal:current:<disk_name>[/<split_number>]:<device>:<temp>
|
||||
.B thermal:current:<disk_name>[/<split_index>]:<device>:<temp>
|
||||
Logs the most recent temperature reading for a specific disk
|
||||
device.
|
||||
.RS 4
|
||||
.PD 0
|
||||
.HP 4
|
||||
.I <disk_name>[/<split_number>]
|
||||
.I <disk_name>[/<split_index>]
|
||||
The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by \`/N\` to indicate the split number, where N starts
|
||||
by \`/N\` to indicate the split index, where N starts
|
||||
from 0. The \`/0\` is always omitted.
|
||||
.HP 4
|
||||
.I <device>
|
||||
|
|
@ -537,7 +538,7 @@ The highest temperature observed in degrees Celsius.
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B thermal:heat:<disk_name>[/<split_number>]:<device>:<count>:<data_points>
|
||||
.B thermal:heat:<disk_name>[/<split_index>]:<device>:<count>:<data_points>
|
||||
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.
|
||||
|
|
@ -563,7 +564,7 @@ monitoring (uint, seconds).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B thermal:params:<disk_name>[/<split_number>]:<device>:<k_heat>:<t_ambient>:<t_steady>:<rmse>:<r_squared>:<max_error>
|
||||
.B thermal:params:<disk_name>[/<split_index>]:<device>:<k_heat>:<t_ambient>:<t_steady>:<rmse>:<r_squared>:<max_error>
|
||||
Logs the estimated parameters for the exponential heating model
|
||||
(fit using least squares) and associated quality metrics for a
|
||||
specific disk.
|
||||
|
|
@ -1442,11 +1443,11 @@ in case the logical disk uses more physical disks. In such a case,
|
|||
you\'ll see multiple tags for the same \`<disk_name>\` but with different
|
||||
\`<device_file>\`.
|
||||
In case of split parity, the parity name is followed by \`/N\` to indicate
|
||||
the split number, where N starts from 0. The \`/0\` is always omitted.
|
||||
the split index, where N starts from 0. The \`/0\` is always omitted.
|
||||
.SS Attributes
|
||||
Tags logging specific disk identification and attribute values.
|
||||
.TP
|
||||
.B smart:<device_file>:<disk_name>[/<split_number>]
|
||||
.B smart:<device_file>:<disk_name>[/<split_index>]
|
||||
Logs the start of the SMART report for a device.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1454,15 +1455,15 @@ Logs the start of the SMART report for a device.
|
|||
.I <device_file>
|
||||
The file path of the device (e.g., /dev/sdb).
|
||||
.HP 4
|
||||
.I <disk_name>[/<split_number>]
|
||||
.I <disk_name>[/<split_index>]
|
||||
The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by \`/N\` to indicate the split number, where N starts
|
||||
by \`/N\` to indicate the split index, where N starts
|
||||
from 0. The \`/0\` is always omitted.
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:serial:<serial_number>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:serial:<serial_number>
|
||||
Logs the disk\'s serial number.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1472,7 +1473,7 @@ The disk\'s serial number (escaped).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:family:<family>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:family:<family>
|
||||
Logs the disk\'s model family string.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1482,7 +1483,7 @@ The disk\'s vendor and model family identifier (escaped).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:model:<model>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:model:<model>
|
||||
Logs the disk\'s model string.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1492,7 +1493,7 @@ The disk\'s model identifier (escaped).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:afr:<afr_value>:<afr_prob>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:afr:<afr_value>:<afr_prob>
|
||||
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
|
||||
|
|
@ -1509,7 +1510,7 @@ next year (double).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:size:<size_bytes>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:size:<size_bytes>
|
||||
Logs the size of the disk.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1519,7 +1520,7 @@ The disk size in bytes (uint64).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:error:<error_count>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:error:<error_count>
|
||||
Logs the total error count.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1529,7 +1530,7 @@ The total error count (uint64).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:rotationrate:<rate>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:rotationrate:<rate>
|
||||
Logs the disk\'s rotation rate.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1543,7 +1544,7 @@ rotational speed in RPM.
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:flags:<flags_decimal>:<flags_hex>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:flags:<flags_decimal>:<flags_hex>
|
||||
Logs the SMART status flags from the \`smartctl\` utility.
|
||||
Per the smartctl manpage, these flags are bit\-mapped
|
||||
to indicate specific issues like \[dq]Command line did not parse\[dq],
|
||||
|
|
@ -1560,7 +1561,7 @@ The raw flags value (uint64, hexadecimal).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:<id>:<value_decimal>:<value_hex>
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:<id>:<value_decimal>:<value_hex>
|
||||
Logs the raw value of any assigned SMART attribute.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1576,19 +1577,19 @@ The raw attribute value (uint64, hexadecimal).
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:power:active
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:power:active
|
||||
Logs that the device was confirmed to be in an active power
|
||||
state after a status probe.
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:power:standby
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:power:standby
|
||||
Logs that the device was confirmed to be in a standby/spun\-down
|
||||
state.
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:power:up
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:power:up
|
||||
Logs a successful spin\-up operation via direct O_DIRECT
|
||||
read.
|
||||
.TP
|
||||
.B attr:<device_file>:<disk_name>[/<split_number>]:power:down
|
||||
.B attr:<device_file>:<disk_name>[/<split_index>]:power:down
|
||||
Logs a successful spin\-down operation initiated via the
|
||||
smartctl command.
|
||||
.SS Summary
|
||||
|
|
@ -1615,7 +1616,7 @@ the next year (double).
|
|||
These tags log the lifecycle of hardware interactions and external
|
||||
command execution with the \`smartctl\` command.
|
||||
.TP
|
||||
.B device:<device_file>:<disk_name>[/<split_number>]:shell
|
||||
.B device:<device_file>:<disk_name>[/<split_index>]:shell
|
||||
Logs a failure in the command shell execution environment.
|
||||
.RS 4
|
||||
.PD 0
|
||||
|
|
@ -1623,15 +1624,15 @@ Logs a failure in the command shell execution environment.
|
|||
.I <device_file>
|
||||
The system path to the device node.
|
||||
.HP 4
|
||||
.I <disk_name>[/<split_number>]
|
||||
.I <disk_name>[/<split_index>]
|
||||
The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by \`/N\` to indicate the split number, where N starts
|
||||
by \`/N\` to indicate the split index, where N starts
|
||||
from 0. The \`/0\` is always omitted.
|
||||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B device:<device_file>:<disk_name>[/<split_number>]:error:<errno>
|
||||
.B device:<device_file>:<disk_name>[/<split_index>]:error:<errno>
|
||||
Logs a low\-level system error during direct file operations.
|
||||
This is triggered when open(), read(), or close()
|
||||
calls fail during a spin\-up attempt.
|
||||
|
|
@ -1644,12 +1645,12 @@ the OS.
|
|||
.PD
|
||||
.RE
|
||||
.TP
|
||||
.B device:<device_file>:<disk_name>[/<split_number>]:error:abort
|
||||
.B device:<device_file>:<disk_name>[/<split_index>]:error:abort
|
||||
Logs that an external process (smartctl) failed to complete
|
||||
normally, such as being terminated by a signal rather than
|
||||
exiting.
|
||||
.TP
|
||||
.B device:<device_file>:<disk_name>[/<split_number>]:exit:<exit_code>
|
||||
.B device:<device_file>:<disk_name>[/<split_index>]:exit:<exit_code>
|
||||
Logs that the external command (smartctl) returned a non\-zero
|
||||
exit code that was not explicitly recognized as a valid state.
|
||||
.RS 4
|
||||
|
|
|
|||
|
|
@ -65,27 +65,28 @@ Configuration Tags
|
|||
=blocksize:<bytes>
|
||||
The configured block size in bytes (uint).
|
||||
|
||||
=data:<disk_name>:<dir>
|
||||
=data:<disk_name>:<dir>:<uuid>
|
||||
The data disks as defined in the configuration file.
|
||||
|
||||
<disk_name> - The assigned name of the disk.
|
||||
<dir> - The directory entry point of the disk.
|
||||
<uuid> - The UUID of the filesystem containing the dir.
|
||||
|
||||
=mode:<raidname>
|
||||
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.
|
||||
|
||||
=<parity_level>:<split_index>:<path>
|
||||
=<parity_level>[/<split_index>]:<path>:<uuid>
|
||||
The parity files as defined in the configuration file.
|
||||
|
||||
<parity_level> - One of `parity`, `2-parity`, ..., `6-parity`.
|
||||
This corresponds to the level of redundancy.
|
||||
<split_index> - 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.
|
||||
<parity_level>[/<split_index>] - One of `parity`, `2-parity`,
|
||||
..., `6-parity`. This corresponds to the level of redundancy.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
<path> - The path (escaped).
|
||||
<uuid> - The UUID of the filesystem containing the path.
|
||||
|
||||
=pool:<dir>
|
||||
The configured dir to the pool mount point (escaped).
|
||||
|
|
@ -112,31 +113,32 @@ Configuration Tags
|
|||
Content files store the metadata (like file hashes and timestamps)
|
||||
for the array.
|
||||
|
||||
=content_parity:<parity_level>:<size>:<free_size>:<split_index>:<uuid>:<path>:<file_size>
|
||||
=content_parity:<parity_level>[/<split_index>]:<uuid>:<path>:<size>
|
||||
The parity files as stored in the content file.
|
||||
|
||||
<parity_level> - One of `parity`, `2-parity`, ..., `6-parity`.
|
||||
<size> - The size of the data in the disk.
|
||||
<free_size> - The free size in the disk at the time of the
|
||||
latest `sync`.
|
||||
<split_index> - The split index (uint). If no
|
||||
multiple split parity is configured, there is only the
|
||||
index 0.
|
||||
<uuid> - The UUID of the disk containing the path.
|
||||
<parity_level>[/<split_index>] - One of `parity`, `2-parity`,
|
||||
..., `6-parity`. This corresponds to the level of redundancy.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
<uuid> - The UUID of the disk containing the path as stored
|
||||
in the content file.
|
||||
<path> - The path (escaped).
|
||||
<file_size> - The size of the parity file. Size is -1 if not yet
|
||||
fixed, meaning it can grow. This happens for the
|
||||
latest split.
|
||||
<size> - The size of the parity file (uint64).
|
||||
|
||||
=content_disk:<disk_name>:<size>:<free_size>:<parity_index>:<uuid>
|
||||
=content_data:<disk_name>:<uuid>
|
||||
The data disk as stored in the content file.
|
||||
|
||||
<disk_name> - Name of the data disk.
|
||||
<size> - The size of the data in the disk.
|
||||
<free_size> - The free size in the disk at the time of the
|
||||
latest `sync`.
|
||||
<parity_index> - The disk position in the parity computation.
|
||||
<uuid> - The UUID of the disk filesystem.
|
||||
<uuid> - The UUID of the disk filesystem as stored in the
|
||||
content file.
|
||||
|
||||
=content_allocation:<disk_name>:<size>:<free_size>
|
||||
The size of disk and parity as stored in the content file.
|
||||
|
||||
<disk_name> - Name of the data or parity disk.
|
||||
<size> - The size of the data in the disk or parity (uint64).
|
||||
<free_size> - The free size in the disk or parity (uint64).
|
||||
|
||||
Diagnostics Tags
|
||||
=version:<version>
|
||||
|
|
@ -340,13 +342,13 @@ Thermal Tags
|
|||
|
||||
<temp> - The calculated ambient temperature in degrees Celsius.
|
||||
|
||||
=thermal:current:<disk_name>[/<split_number>]:<device>:<temp>
|
||||
=thermal:current:<disk_name>[/<split_index>]:<device>:<temp>
|
||||
Logs the most recent temperature reading for a specific disk
|
||||
device.
|
||||
|
||||
<disk_name>[/<split_number>] - The configured name of the disk.
|
||||
<disk_name>[/<split_index>] - The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split number, where N starts
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
<device> - The unique device ID (uint64).
|
||||
<temp> - The current temperature read from the disk in degrees
|
||||
|
|
@ -359,7 +361,7 @@ Thermal Tags
|
|||
|
||||
<temp> - The highest temperature observed in degrees Celsius.
|
||||
|
||||
=thermal:heat:<disk_name>[/<split_number>]:<device>:<count>:<data_points>
|
||||
=thermal:heat:<disk_name>[/<split_index>]:<device>:<count>:<data_points>
|
||||
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.
|
||||
|
|
@ -372,7 +374,7 @@ Thermal Tags
|
|||
<time_offset> - Time offset from the start of the thermal
|
||||
monitoring (uint, seconds).
|
||||
|
||||
=thermal:params:<disk_name>[/<split_number>]:<device>:<k_heat>:<t_ambient>:<t_steady>:<rmse>:<r_squared>:<max_error>
|
||||
=thermal:params:<disk_name>[/<split_index>]:<device>:<k_heat>:<t_ambient>:<t_steady>:<rmse>:<r_squared>:<max_error>
|
||||
Logs the estimated parameters for the exponential heating model
|
||||
(fit using least squares) and associated quality metrics for a
|
||||
specific disk.
|
||||
|
|
@ -923,36 +925,36 @@ Command Smart Tags
|
|||
you'll see multiple tags for the same `<disk_name>` but with different
|
||||
`<device_file>`.
|
||||
In case of split parity, the parity name is followed by `/N` to indicate
|
||||
the split number, where N starts from 0. The `/0` is always omitted.
|
||||
the split index, where N starts from 0. The `/0` is always omitted.
|
||||
|
||||
Attributes
|
||||
Tags logging specific disk identification and attribute values.
|
||||
|
||||
=smart:<device_file>:<disk_name>[/<split_number>]
|
||||
=smart:<device_file>:<disk_name>[/<split_index>]
|
||||
Logs the start of the SMART report for a device.
|
||||
|
||||
<device_file> - The file path of the device (e.g., /dev/sdb).
|
||||
<disk_name>[/<split_number>] - The configured name of the disk.
|
||||
<disk_name>[/<split_index>] - The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split number, where N starts
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:serial:<serial_number>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:serial:<serial_number>
|
||||
Logs the disk's serial number.
|
||||
|
||||
<serial_number> - The disk's serial number (escaped).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:family:<family>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:family:<family>
|
||||
Logs the disk's model family string.
|
||||
|
||||
<family> - The disk's vendor and model family identifier (escaped).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:model:<model>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:model:<model>
|
||||
Logs the disk's model string.
|
||||
|
||||
<model> - The disk's model identifier (escaped).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:afr:<afr_value>:<afr_prob>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:afr:<afr_value>:<afr_prob>
|
||||
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
|
||||
|
|
@ -962,17 +964,17 @@ Command Smart Tags
|
|||
<afr_prob> - The probability of one or more failures in the
|
||||
next year (double).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:size:<size_bytes>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:size:<size_bytes>
|
||||
Logs the size of the disk.
|
||||
|
||||
<size_bytes> - The disk size in bytes (uint64).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:error:<error_count>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:error:<error_count>
|
||||
Logs the total error count.
|
||||
|
||||
<error_count> - The total error count (uint64).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:rotationrate:<rate>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:rotationrate:<rate>
|
||||
Logs the disk's rotation rate.
|
||||
|
||||
<rate> - The rotation rate. A value of 0 indicates a
|
||||
|
|
@ -981,7 +983,7 @@ Command Smart Tags
|
|||
precise speed. Values greater than 1 indicate the
|
||||
rotational speed in RPM.
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:flags:<flags_decimal>:<flags_hex>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:flags:<flags_decimal>:<flags_hex>
|
||||
Logs the SMART status flags from the `smartctl` utility.
|
||||
Per the smartctl manpage, these flags are bit-mapped
|
||||
to indicate specific issues like "Command line did not parse",
|
||||
|
|
@ -991,26 +993,26 @@ Command Smart Tags
|
|||
<flags_decimal> - The raw flags value (uint64, decimal).
|
||||
<flags_hex> - The raw flags value (uint64, hexadecimal).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:<id>:<value_decimal>:<value_hex>
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:<id>:<value_decimal>:<value_hex>
|
||||
Logs the raw value of any assigned SMART attribute.
|
||||
|
||||
<id> - The SMART attribute ID (uint).
|
||||
<value_decimal> - The raw attribute value (uint64, decimal).
|
||||
<value_hex> - The raw attribute value (uint64, hexadecimal).
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:power:active
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:power:active
|
||||
Logs that the device was confirmed to be in an active power
|
||||
state after a status probe.
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:power:standby
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:power:standby
|
||||
Logs that the device was confirmed to be in a standby/spun-down
|
||||
state.
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:power:up
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:power:up
|
||||
Logs a successful spin-up operation via direct O_DIRECT
|
||||
read.
|
||||
|
||||
=attr:<device_file>:<disk_name>[/<split_number>]:power:down
|
||||
=attr:<device_file>:<disk_name>[/<split_index>]:power:down
|
||||
Logs a successful spin-down operation initiated via the
|
||||
smartctl command.
|
||||
|
||||
|
|
@ -1030,16 +1032,16 @@ Device Status Tags
|
|||
These tags log the lifecycle of hardware interactions and external
|
||||
command execution with the `smartctl` command.
|
||||
|
||||
=device:<device_file>:<disk_name>[/<split_number>]:shell
|
||||
=device:<device_file>:<disk_name>[/<split_index>]:shell
|
||||
Logs a failure in the command shell execution environment.
|
||||
|
||||
<device_file> - The system path to the device node.
|
||||
<disk_name>[/<split_number>] - The configured name of the disk.
|
||||
<disk_name>[/<split_index>] - The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split number, where N starts
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
|
||||
=device:<device_file>:<disk_name>[/<split_number>]:error:<errno>
|
||||
=device:<device_file>:<disk_name>[/<split_index>]:error:<errno>
|
||||
Logs a low-level system error during direct file operations.
|
||||
This is triggered when open(), read(), or close()
|
||||
calls fail during a spin-up attempt.
|
||||
|
|
@ -1047,12 +1049,12 @@ Device Status Tags
|
|||
<errno> - The standard integer error number provided by
|
||||
the OS.
|
||||
|
||||
=device:<device_file>:<disk_name>[/<split_number>]:error:abort
|
||||
=device:<device_file>:<disk_name>[/<split_index>]:error:abort
|
||||
Logs that an external process (smartctl) failed to complete
|
||||
normally, such as being terminated by a signal rather than
|
||||
exiting.
|
||||
|
||||
=device:<device_file>:<disk_name>[/<split_number>]:exit:<exit_code>
|
||||
=device:<device_file>:<disk_name>[/<split_index>]:exit:<exit_code>
|
||||
Logs that the external command (smartctl) returned a non-zero
|
||||
exit code that was not explicitly recognized as a valid state.
|
||||
|
||||
|
|
|
|||
|
|
@ -71,27 +71,28 @@ scanning the disk and reading the list of files.
|
|||
blocksize:<bytes>
|
||||
The configured block size in bytes (uint).
|
||||
|
||||
data:<disk_name>:<dir>
|
||||
data:<disk_name>:<dir>:<uuid>
|
||||
The data disks as defined in the configuration file.
|
||||
|
||||
<disk_name> - The assigned name of the disk.
|
||||
<dir> - The directory entry point of the disk.
|
||||
<uuid> - The UUID of the filesystem containing the dir.
|
||||
|
||||
mode:<raidname>
|
||||
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.
|
||||
|
||||
<parity_level>:<split_index>:<path>
|
||||
<parity_level>[/<split_index>]:<path>:<uuid>
|
||||
The parity files as defined in the configuration file.
|
||||
|
||||
<parity_level> - One of `parity`, `2-parity`, ..., `6-parity`.
|
||||
This corresponds to the level of redundancy.
|
||||
<split_index> - 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.
|
||||
<parity_level>[/<split_index>] - One of `parity`, `2-parity`,
|
||||
..., `6-parity`. This corresponds to the level of redundancy.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
<path> - The path (escaped).
|
||||
<uuid> - The UUID of the filesystem containing the path.
|
||||
|
||||
pool:<dir>
|
||||
The configured dir to the pool mount point (escaped).
|
||||
|
|
@ -118,31 +119,32 @@ scanning the disk and reading the list of files.
|
|||
Content files store the metadata (like file hashes and timestamps)
|
||||
for the array.
|
||||
|
||||
content_parity:<parity_level>:<size>:<free_size>:<split_index>:<uuid>:<path>:<file_size>
|
||||
content_parity:<parity_level>[/<split_index>]:<uuid>:<path>:<size>
|
||||
The parity files as stored in the content file.
|
||||
|
||||
<parity_level> - One of `parity`, `2-parity`, ..., `6-parity`.
|
||||
<size> - The size of the data in the disk.
|
||||
<free_size> - The free size in the disk at the time of the
|
||||
latest `sync`.
|
||||
<split_index> - The split index (uint). If no
|
||||
multiple split parity is configured, there is only the
|
||||
index 0.
|
||||
<uuid> - The UUID of the disk containing the path.
|
||||
<parity_level>[/<split_index>] - One of `parity`, `2-parity`,
|
||||
..., `6-parity`. This corresponds to the level of redundancy.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
<uuid> - The UUID of the disk containing the path as stored
|
||||
in the content file.
|
||||
<path> - The path (escaped).
|
||||
<file_size> - The size of the parity file. Size is -1 if not yet
|
||||
fixed, meaning it can grow. This happens for the
|
||||
latest split.
|
||||
<size> - The size of the parity file (uint64).
|
||||
|
||||
content_disk:<disk_name>:<size>:<free_size>:<parity_index>:<uuid>
|
||||
content_data:<disk_name>:<uuid>
|
||||
The data disk as stored in the content file.
|
||||
|
||||
<disk_name> - Name of the data disk.
|
||||
<size> - The size of the data in the disk.
|
||||
<free_size> - The free size in the disk at the time of the
|
||||
latest `sync`.
|
||||
<parity_index> - The disk position in the parity computation.
|
||||
<uuid> - The UUID of the disk filesystem.
|
||||
<uuid> - The UUID of the disk filesystem as stored in the
|
||||
content file.
|
||||
|
||||
content_allocation:<disk_name>:<size>:<free_size>
|
||||
The size of disk and parity as stored in the content file.
|
||||
|
||||
<disk_name> - Name of the data or parity disk.
|
||||
<size> - The size of the data in the disk or parity (uint64).
|
||||
<free_size> - The free size in the disk or parity (uint64).
|
||||
|
||||
|
||||
3 DIAGNOSTICS TAGS
|
||||
|
|
@ -358,13 +360,13 @@ disk access.
|
|||
|
||||
<temp> - The calculated ambient temperature in degrees Celsius.
|
||||
|
||||
thermal:current:<disk_name>[/<split_number>]:<device>:<temp>
|
||||
thermal:current:<disk_name>[/<split_index>]:<device>:<temp>
|
||||
Logs the most recent temperature reading for a specific disk
|
||||
device.
|
||||
|
||||
<disk_name>[/<split_number>] - The configured name of the disk.
|
||||
<disk_name>[/<split_index>] - The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split number, where N starts
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
<device> - The unique device ID (uint64).
|
||||
<temp> - The current temperature read from the disk in degrees
|
||||
|
|
@ -377,7 +379,7 @@ disk access.
|
|||
|
||||
<temp> - The highest temperature observed in degrees Celsius.
|
||||
|
||||
thermal:heat:<disk_name>[/<split_number>]:<device>:<count>:<data_points>
|
||||
thermal:heat:<disk_name>[/<split_index>]:<device>:<count>:<data_points>
|
||||
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.
|
||||
|
|
@ -390,7 +392,7 @@ disk access.
|
|||
<time_offset> - Time offset from the start of the thermal
|
||||
monitoring (uint, seconds).
|
||||
|
||||
thermal:params:<disk_name>[/<split_number>]:<device>:<k_heat>:<t_ambient>:<t_steady>:<rmse>:<r_squared>:<max_error>
|
||||
thermal:params:<disk_name>[/<split_index>]:<device>:<k_heat>:<t_ambient>:<t_steady>:<rmse>:<r_squared>:<max_error>
|
||||
Logs the estimated parameters for the exponential heating model
|
||||
(fit using least squares) and associated quality metrics for a
|
||||
specific disk.
|
||||
|
|
@ -965,36 +967,36 @@ in case the logical disk uses more physical disks. In such a case,
|
|||
you'll see multiple tags for the same `<disk_name>` but with different
|
||||
`<device_file>`.
|
||||
In case of split parity, the parity name is followed by `/N` to indicate
|
||||
the split number, where N starts from 0. The `/0` is always omitted.
|
||||
the split index, where N starts from 0. The `/0` is always omitted.
|
||||
|
||||
---- 14.0.1 Attributes ----
|
||||
Tags logging specific disk identification and attribute values.
|
||||
|
||||
smart:<device_file>:<disk_name>[/<split_number>]
|
||||
smart:<device_file>:<disk_name>[/<split_index>]
|
||||
Logs the start of the SMART report for a device.
|
||||
|
||||
<device_file> - The file path of the device (e.g., /dev/sdb).
|
||||
<disk_name>[/<split_number>] - The configured name of the disk.
|
||||
<disk_name>[/<split_index>] - The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split number, where N starts
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:serial:<serial_number>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:serial:<serial_number>
|
||||
Logs the disk's serial number.
|
||||
|
||||
<serial_number> - The disk's serial number (escaped).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:family:<family>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:family:<family>
|
||||
Logs the disk's model family string.
|
||||
|
||||
<family> - The disk's vendor and model family identifier (escaped).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:model:<model>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:model:<model>
|
||||
Logs the disk's model string.
|
||||
|
||||
<model> - The disk's model identifier (escaped).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:afr:<afr_value>:<afr_prob>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:afr:<afr_value>:<afr_prob>
|
||||
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
|
||||
|
|
@ -1004,17 +1006,17 @@ Tags logging specific disk identification and attribute values.
|
|||
<afr_prob> - The probability of one or more failures in the
|
||||
next year (double).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:size:<size_bytes>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:size:<size_bytes>
|
||||
Logs the size of the disk.
|
||||
|
||||
<size_bytes> - The disk size in bytes (uint64).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:error:<error_count>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:error:<error_count>
|
||||
Logs the total error count.
|
||||
|
||||
<error_count> - The total error count (uint64).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:rotationrate:<rate>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:rotationrate:<rate>
|
||||
Logs the disk's rotation rate.
|
||||
|
||||
<rate> - The rotation rate. A value of 0 indicates a
|
||||
|
|
@ -1023,7 +1025,7 @@ Tags logging specific disk identification and attribute values.
|
|||
precise speed. Values greater than 1 indicate the
|
||||
rotational speed in RPM.
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:flags:<flags_decimal>:<flags_hex>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:flags:<flags_decimal>:<flags_hex>
|
||||
Logs the SMART status flags from the `smartctl` utility.
|
||||
Per the smartctl manpage, these flags are bit-mapped
|
||||
to indicate specific issues like "Command line did not parse",
|
||||
|
|
@ -1033,26 +1035,26 @@ Tags logging specific disk identification and attribute values.
|
|||
<flags_decimal> - The raw flags value (uint64, decimal).
|
||||
<flags_hex> - The raw flags value (uint64, hexadecimal).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:<id>:<value_decimal>:<value_hex>
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:<id>:<value_decimal>:<value_hex>
|
||||
Logs the raw value of any assigned SMART attribute.
|
||||
|
||||
<id> - The SMART attribute ID (uint).
|
||||
<value_decimal> - The raw attribute value (uint64, decimal).
|
||||
<value_hex> - The raw attribute value (uint64, hexadecimal).
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:power:active
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:power:active
|
||||
Logs that the device was confirmed to be in an active power
|
||||
state after a status probe.
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:power:standby
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:power:standby
|
||||
Logs that the device was confirmed to be in a standby/spun-down
|
||||
state.
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:power:up
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:power:up
|
||||
Logs a successful spin-up operation via direct O_DIRECT
|
||||
read.
|
||||
|
||||
attr:<device_file>:<disk_name>[/<split_number>]:power:down
|
||||
attr:<device_file>:<disk_name>[/<split_index>]:power:down
|
||||
Logs a successful spin-down operation initiated via the
|
||||
smartctl command.
|
||||
|
||||
|
|
@ -1075,16 +1077,16 @@ Tags logging the overall failure probabilities for the array.
|
|||
These tags log the lifecycle of hardware interactions and external
|
||||
command execution with the `smartctl` command.
|
||||
|
||||
device:<device_file>:<disk_name>[/<split_number>]:shell
|
||||
device:<device_file>:<disk_name>[/<split_index>]:shell
|
||||
Logs a failure in the command shell execution environment.
|
||||
|
||||
<device_file> - The system path to the device node.
|
||||
<disk_name>[/<split_number>] - The configured name of the disk.
|
||||
<disk_name>[/<split_index>] - The configured name of the disk.
|
||||
In case of split parity, the parity name is followed
|
||||
by `/N` to indicate the split number, where N starts
|
||||
by `/N` to indicate the split index, where N starts
|
||||
from 0. The `/0` is always omitted.
|
||||
|
||||
device:<device_file>:<disk_name>[/<split_number>]:error:<errno>
|
||||
device:<device_file>:<disk_name>[/<split_index>]:error:<errno>
|
||||
Logs a low-level system error during direct file operations.
|
||||
This is triggered when open(), read(), or close()
|
||||
calls fail during a spin-up attempt.
|
||||
|
|
@ -1092,12 +1094,12 @@ command execution with the `smartctl` command.
|
|||
<errno> - The standard integer error number provided by
|
||||
the OS.
|
||||
|
||||
device:<device_file>:<disk_name>[/<split_number>]:error:abort
|
||||
device:<device_file>:<disk_name>[/<split_index>]:error:abort
|
||||
Logs that an external process (smartctl) failed to complete
|
||||
normally, such as being terminated by a signal rather than
|
||||
exiting.
|
||||
|
||||
device:<device_file>:<disk_name>[/<split_number>]:exit:<exit_code>
|
||||
device:<device_file>:<disk_name>[/<split_index>]:exit:<exit_code>
|
||||
Logs that the external command (smartctl) returned a non-zero
|
||||
exit code that was not explicitly recognized as a valid state.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue