Skip to content
Snippets Groups Projects
Commit 311358a0 authored by ballen4705's avatar ballen4705
Browse files

Quiet option (-q) no longer prints all error log entries, just the number of

entries and the times at which they occured.


git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@98 4ea69e1a-61f1-4043-bf83-b5c94c648137
parent 22b19095
No related branches found
No related tags found
No related merge requests found
11
12
......@@ -28,7 +28,7 @@
#include "smartctl.h"
#include "extern.h"
const char *CVSid4="$Id: ataprint.c,v 1.31 2002/10/24 07:50:45 ballen4705 Exp $"
const char *CVSid4="$Id: ataprint.c,v 1.32 2002/10/24 08:46:03 ballen4705 Exp $"
CVSID2 CVSID3 CVSID6;
// Function for printing ASCII byte-swapped strings, skipping white
......@@ -514,7 +514,7 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
QUIETON;
// if log pointer out of range, return
if ( data.error_log_pointer>5 ){
pout("Invalid Error log index = %02x (T13/1321D rev 1c"
pout("Invalid Error Log index = %02x (T13/1321D rev 1c"
"Section 8.41.6.8.2.2 gives valid range from 1 to 5)\n\n",
data.error_log_pointer);
return;
......@@ -522,11 +522,11 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
// starting printing error log info
if (data.ata_error_count<=5)
pout ( "ATA Error Count:y %u\n", data.ata_error_count);
pout ( "ATA Error Count: %u\n", data.ata_error_count);
else
pout ( "ATA Error Count: %u (only the most recent five errors are shown below)\n",
pout ( "ATA Error Count: %u (device log contains only the most recent five errors)\n",
data.ata_error_count);
QUIETOFF;
pout("\tDCR = Device Control Register\n");
pout("\tFR = Features Register\n");
pout("\tSC = Sector Count Register\n");
......@@ -557,10 +557,11 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
case 0x04: msgstate="doing SMART off-line or self test"; break;
default: msgstate="in a vendor specific or reserved state";
}
pout("Error Log Structure %i:\n",5-k);
// See table 42 of ATA5 spec
pout("Error occurred at disk power-on lifetime: %u hours\n",
data.errorlog_struct[i].error_struct.timestamp);
QUIETON;
pout("Error %i occurred at disk power-on lifetime: %u hours\n",
5-k,data.errorlog_struct[i].error_struct.timestamp);
QUIETOFF;
pout("When the command that caused the error occurred, the device was %s.\n",msgstate);
pout("After command completion occurred, registers were:\n");
pout("ER:%02x SC:%02x SN:%02x CL:%02x CH:%02x D/H:%02x ST:%02x\n",
......@@ -593,6 +594,9 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
pout("\n");
}
}
QUIETON;
if (quietmode)
pout("\n");
QUIETOFF;
return;
}
......@@ -666,6 +670,8 @@ int ataPrintSmartSelfTestlog (struct ata_smart_selftestlog data,int allentries){
percent,log->timestamp,firstlba);
}
}
if (!allentries && retval)
pout("\n");
return retval;
}
......@@ -952,12 +958,11 @@ int ataPrintMain (int fd){
"Drive failure expected in less than 24 hours. SAVE ALL DATA.\n");
QUIETOFF;
if (ataCheckSmart(smartval, smartthres,1)){
QUIETON;
returnval|=FAILATTR;
if (smartvendorattrib)
pout("See vendor-specific Attribute list for failed Attributes.\n\n");
else
{
else {
QUIETON;
pout("Failed Attributes:\n");
PrintSmartAttribWithThres(smartval, smartthres,1);
}
......@@ -970,10 +975,10 @@ int ataPrintMain (int fd){
else {
pout("SMART overall-health self-assessment test result: PASSED\n");
if (ataCheckSmart(smartval, smartthres,0)){
QUIETON;
if (smartvendorattrib)
pout("See vendor-specific Attribute list for marginal Attributes.\n\n");
else {
QUIETON;
pout("Please note the following marginal attributes:\n");
PrintSmartAttribWithThres(smartval, smartthres,2);
}
......
......@@ -28,7 +28,7 @@
#include "smartctl.h"
#include "extern.h"
const char *CVSid4="$Id: ataprint.cpp,v 1.31 2002/10/24 07:50:45 ballen4705 Exp $"
const char *CVSid4="$Id: ataprint.cpp,v 1.32 2002/10/24 08:46:03 ballen4705 Exp $"
CVSID2 CVSID3 CVSID6;
// Function for printing ASCII byte-swapped strings, skipping white
......@@ -514,7 +514,7 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
QUIETON;
// if log pointer out of range, return
if ( data.error_log_pointer>5 ){
pout("Invalid Error log index = %02x (T13/1321D rev 1c"
pout("Invalid Error Log index = %02x (T13/1321D rev 1c"
"Section 8.41.6.8.2.2 gives valid range from 1 to 5)\n\n",
data.error_log_pointer);
return;
......@@ -522,11 +522,11 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
// starting printing error log info
if (data.ata_error_count<=5)
pout ( "ATA Error Count:y %u\n", data.ata_error_count);
pout ( "ATA Error Count: %u\n", data.ata_error_count);
else
pout ( "ATA Error Count: %u (only the most recent five errors are shown below)\n",
pout ( "ATA Error Count: %u (device log contains only the most recent five errors)\n",
data.ata_error_count);
QUIETOFF;
pout("\tDCR = Device Control Register\n");
pout("\tFR = Features Register\n");
pout("\tSC = Sector Count Register\n");
......@@ -557,10 +557,11 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
case 0x04: msgstate="doing SMART off-line or self test"; break;
default: msgstate="in a vendor specific or reserved state";
}
pout("Error Log Structure %i:\n",5-k);
// See table 42 of ATA5 spec
pout("Error occurred at disk power-on lifetime: %u hours\n",
data.errorlog_struct[i].error_struct.timestamp);
QUIETON;
pout("Error %i occurred at disk power-on lifetime: %u hours\n",
5-k,data.errorlog_struct[i].error_struct.timestamp);
QUIETOFF;
pout("When the command that caused the error occurred, the device was %s.\n",msgstate);
pout("After command completion occurred, registers were:\n");
pout("ER:%02x SC:%02x SN:%02x CL:%02x CH:%02x D/H:%02x ST:%02x\n",
......@@ -593,6 +594,9 @@ void ataPrintSmartErrorlog (struct ata_smart_errorlog data){
pout("\n");
}
}
QUIETON;
if (quietmode)
pout("\n");
QUIETOFF;
return;
}
......@@ -666,6 +670,8 @@ int ataPrintSmartSelfTestlog (struct ata_smart_selftestlog data,int allentries){
percent,log->timestamp,firstlba);
}
}
if (!allentries && retval)
pout("\n");
return retval;
}
......@@ -952,12 +958,11 @@ int ataPrintMain (int fd){
"Drive failure expected in less than 24 hours. SAVE ALL DATA.\n");
QUIETOFF;
if (ataCheckSmart(smartval, smartthres,1)){
QUIETON;
returnval|=FAILATTR;
if (smartvendorattrib)
pout("See vendor-specific Attribute list for failed Attributes.\n\n");
else
{
else {
QUIETON;
pout("Failed Attributes:\n");
PrintSmartAttribWithThres(smartval, smartthres,1);
}
......@@ -970,10 +975,10 @@ int ataPrintMain (int fd){
else {
pout("SMART overall-health self-assessment test result: PASSED\n");
if (ataCheckSmart(smartval, smartthres,0)){
QUIETON;
if (smartvendorattrib)
pout("See vendor-specific Attribute list for marginal Attributes.\n\n");
else {
QUIETON;
pout("Please note the following marginal attributes:\n");
PrintSmartAttribWithThres(smartval, smartthres,2);
}
......
\# Copyright (C) 2002 Bruce Allen <smartmontools-support@lists.sourceforge.net>
\#
\# $Id: smartctl.8,v 1.17 2002/10/24 07:50:45 ballen4705 Exp $
\# $Id: smartctl.8,v 1.18 2002/10/24 08:46:03 ballen4705 Exp $
\#
\# This program is free software; you can redistribute it and/or modify it
\# under the terms of the GNU General Public License as published by the Free
......@@ -15,9 +15,9 @@
\# at the Concurrent Systems Laboratory (now part of the Storage Systems
\# Research Center), Jack Baskin School of Engineering, University of
\# California, Santa Cruz. http://ssrc.soe.ucsc.edu/
.TH SMARTCTL 8 "$Date: 2002/10/24 07:50:45 $" "smartmontools-5.0"
.TH SMARTCTL 8 "$Date: 2002/10/24 08:46:03 $" "smartmontools-5.0"
.SH NAME
smartctl \- S.M.A.R.T. control utility
smartctl \- S.M.A.R.T. control and monitor utility
.SH SYNOPSIS
.B smartctl \-[ViqQaedtTfFcgvlLm[O|S|s|X|x|A]] device
......@@ -86,12 +86,14 @@ Says if the device supports S.M.A.R.T., and if so, whether
S.M.A.R.T. support is currently enabled or disabled.
.TP
.B q
Quiet mode: Only print: For the '\-l' option, errors recorded in the
SMART error log; For the '\-L' option, errors recorded in the device
self-test log; For the '\-c' SMART "disk failing" status or device
Quiet mode: Only print: For the '\-l' option, just the number of
errors recorded in the SMART error log and the power-on time when they
occured, if any errors are recorded; For the '\-L' option, errors
recorded in the device self-test log; For the '\-c' SMART "disk
failing" status or device attributes (pre-failure or usage) which
failed either now or in the past; For the '\-v' option device
attributes (pre-failure or usage) which failed either now or in the
past; For the '\-v' option device attributes (pre-failure or usage)
which failed either now or in the past.
past.
.TP
.B Q
Very Quiet mode: Print no ouput. The only way to learn about what was
......@@ -440,4 +442,4 @@ Please let us know if there is an on\-line source for this document.
.SH
CVS ID OF THIS PAGE:
$Id: smartctl.8,v 1.17 2002/10/24 07:50:45 ballen4705 Exp $
$Id: smartctl.8,v 1.18 2002/10/24 08:46:03 ballen4705 Exp $
......@@ -38,7 +38,7 @@
#include "scsiprint.h"
extern const char *CVSid1, *CVSid2, *CVSid4, *CVSid5;
const char* CVSid6="$Id: smartctl.c,v 1.17 2002/10/23 20:36:59 ballen4705 Exp $"
const char* CVSid6="$Id: smartctl.c,v 1.18 2002/10/24 08:46:03 ballen4705 Exp $"
CVSID1 CVSID2 CVSID4 CVSID5 CVSID6;
unsigned char driveinfo = FALSE;
......@@ -211,10 +211,8 @@ void ParseOpts (int argc, char** argv){
switch (optchar){
case QUIETMODE:
quietmode=TRUE;
veryquietmode=TRUE;
break;
case VERYQUIETMODE:
quietmode=FALSE;
veryquietmode=TRUE;
break;
case SMART009MINUTES:
......@@ -299,6 +297,10 @@ void ParseOpts (int argc, char** argv){
exit(FAILCMD);
}
}
// Do this here, so results are independent of argument order
if (quietmode)
veryquietmode=TRUE;
// error message if user has asked for more than one test
if (1<(smartexeoffimmediate+smartshortselftest+smartextendselftest+
smartshortcapselftest+smartextendcapselftest+smartselftestabort)){
......
......@@ -38,7 +38,7 @@
#include "scsiprint.h"
extern const char *CVSid1, *CVSid2, *CVSid4, *CVSid5;
const char* CVSid6="$Id: smartctl.cpp,v 1.17 2002/10/23 20:36:59 ballen4705 Exp $"
const char* CVSid6="$Id: smartctl.cpp,v 1.18 2002/10/24 08:46:03 ballen4705 Exp $"
CVSID1 CVSID2 CVSID4 CVSID5 CVSID6;
unsigned char driveinfo = FALSE;
......@@ -211,10 +211,8 @@ void ParseOpts (int argc, char** argv){
switch (optchar){
case QUIETMODE:
quietmode=TRUE;
veryquietmode=TRUE;
break;
case VERYQUIETMODE:
quietmode=FALSE;
veryquietmode=TRUE;
break;
case SMART009MINUTES:
......@@ -299,6 +297,10 @@ void ParseOpts (int argc, char** argv){
exit(FAILCMD);
}
}
// Do this here, so results are independent of argument order
if (quietmode)
veryquietmode=TRUE;
// error message if user has asked for more than one test
if (1<(smartexeoffimmediate+smartshortselftest+smartextendselftest+
smartshortcapselftest+smartextendcapselftest+smartselftestabort)){
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment