openSeaChest_Configure.txt                                Revision: 21-Apr-2020
===============================================================================
 openSeaChest_Configure for Linux and Windows - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
 See Version History below.
===============================================================================
Welcome to the openSeaChest open source project!

This collection of storage device utility software is branched (forked) off of
an original utility collection called the Seagate SeaChest Utilities by Seagate
Technology LLC.  The original SeaChest Utilities are still available at
www.seagate.com or https://github.com/Seagate/ToolBin/tree/master/SeaChest.
Binary versions are available for Linux or Windows, with the Windows versions
signed by Seagate Technology LLC.

BINARIES and SOURCE CODE files of the openSeaChest open source project have
been made available to you under the Mozilla Public License 2.0 (MPL).  The
openSeaChest project repository is maintained at
https://github.com/Seagate/openSeaChest.

Many tests and commands are completely data safe, while others will change the
drive (like firmware download or data erasure or setting the maximum capacity,
etc).  Be careful using openSeaChest because some of the features, like the
data erasure options, will cause data loss.   Some commands, like setting the
maximum LBA, may cause existing data on the drive to become inaccessible.  Some
commands, like disabling the read look ahead buffer, may affect the performance
of the drive.  Seagate is not responsible for lost user data.

openSeaChest diagnostics are command line utilities which are available for
expert users.  These command line tools assume the user is knowledgeable about
running software from the operating system command prompt. CLI tools are in the
English language only and use "command line arguments" to define the various
tasks and specific devices.  openSeaChest diagnostics are available for both
Linux and Windows environments.

openSeaChest_Configure is a comprehensive command line tool that can be used to
configure, change or set various properties on Seagate disk drives (this
includes Seagate, Maxtor, Samsung and LaCie).  Some commands may cause existing
data on the drive to become inaccessible.  Some commands may affect the
performance of the drive.

NOTE: openSeaChest_Configure may not be fully functional on non-Seagate drives.

This User Guide file contains important information about
openSeaChest_Configure.  Please read this entire file before using this
software.

If this is your drive, you should always keep a current backup of your
important data.

Be very careful using openSeaChest_Configure. Power failure during a
configuration change may cause data loss. Seagate is not responsible for lost
user data.

Important note: Many tests in this tool directly reference storage device data
sectors, also known as Logical Block Addresses (LBA). Test arguments may
require a starting LBA or an LBA range.  The predefined variable 'maxLBA'
refers to the last sector on the drive.  Many older SATA and SAS storage
controllers (also known as Host Bus Adapters [HBA]) have a maximum addressable
limit of 4294967295 [FFFFh] LBAs hard wired into their design.  This equates to
2.1TB using 512 byte sectors.  This also means accessing an LBA beyond the
2.1TB limitation either will result in an error or simply the last readable LBA
(usually LBA 4294967295 [FFFFh]) depending on the actual hardware.  This
limitation can have important consequences.  For example, if you intended to
erase a 4TB drive, then only the first 2TB will actually get erased (or maybe
even twice!) and the last 2TB will remain untouched.  You should carefully
evaluate your system hardware to understand if your storage controllers provide
support for greater than 2.1TB.

Note: One gigabyte, or GB, equals one billion bytes when referring to hard
drive capacity. This software may use information provided by the operating
system to display capacity and volume size. The Windows file system uses a
binary calculation for gibibyte or GiB (2^30) which causes the abbreviated size
to appear smaller. The total number of bytes on a disk drive divided by the
decimal calculation for gigabyte or GB (10^9) shows the expected abbreviated
size. See this FAQ for more information
<http://knowledge.seagate.com/articles/en_US/FAQ/172191en?language=en_US>.

Usage - Linux (run with sudo)
=============================
        openSeaChest_Configure [-d <sg_device>] {arguments} {options}

Examples - Linux
================
        sudo openSeaChest_Configure --scan
        sudo openSeaChest_Configure -d /dev/sg2 --deviceInfo

Usage - Windows (run as administrator)
======================================
        openSeaChest_Configure [-d <device>] {arguments} {options}

Examples - Windows
==================
        openSeaChest_Configure --scan
        openSeaChest_Configure -d PD0 --deviceInfo

Utility Arguments
=================
        -s, --scan
                Scan the system and list all storage devices with logical
                /dev/sg? assignments. Shows model, serial and firmware
                numbers. If your device is not listed on a scan immediately
                after booting, then wait 10 seconds and run it again.

        -S, --Scan   (note the capital letter S)
                This option is the same as --scan or -s, however it will also
                perform a low level rescan to pick up other devices. This
                low-level rescan may wake devices from low power states and may
                cause the OS to re-enumerate them. Use this diagnostic option
                when a device is plugged in and not discovered in a normal scan.

                NOTE: A low-level rescan may not be available on all interfaces
                or all OSs.  The low-level rescan is not guaranteed to find
                additional devices in the system when the device is unable to
                come to a ready state.

        -F, --scanFlags [option list]
                Use this option with -s to control the output from scan with the
                options listed below. Multiple options can be combined.
                     ata            - show only ATA (SATA) devices
                     usb            - show only USB devices
                     scsi           - show only SCSI (SAS)) devices
                     nvme           - show only NVMe devices
                     interfaceATA   - show devices on an ATA interface
                     interfaceUSB   - show devices on a USB interface
                     interfaceSCSI  - show devices on a SCSI or SAS interface
                     interfaceNVME  - show devices on a NVMe interface
                    Linux:
                     sd             - show /dev/sd? device handles
                     sgtosd         - show the sd and sg device handle mapping
                    Windows:
                     ignoreCSMI     - do not scan for any CSMI devices
                     allowDuplicates - allow drives with both CSMI and PD
                                       handles to show up multiple times in the
                                       list.

                Examples of combining two options:
                     -s --scanFlags usb scsi  - show only USB and SAS devices
                     --scan -F ata interfaceSCSI  - show only SATA nearline
                        drives on a SAS adapter

        -d, --device <device handle>
                Use this option with all commands, except --scan, to specify
                the sg device handle (target drive) on which to perform an
                operation. See the section below 'Tool Usage Hints' for
                information about defining multiple device handles.

                Example Lin: -d /dev/sg5
                Example Win: -d PD0, or -d PD3

        -i, --deviceInfo
                Show information and features for the storage device. USB
                devices will show the product name, serial and firmware numbers
                as communicated by the USB-SATA bridge.  Add --usbChildInfo
                to display details about the drive within the USB enclosure.

        --SATInfo                       (SATA only)
                Displays SATA device information on any interface using both
                SCSI Inquiry/VPD/Log reported data (translated according to
                SAT) and the ATA Identify/Log reported data.

        --testUnitReady
                A simple check to see if the device responds to commands from
                interface.  Ready or Not Ready are the outputs.  Not Ready
                results will also include the full SCSI Sense Code.

        --setMaxLBA [newMaxLBA | maxLBA]
                Set the max accessible address of your drive to any value less
                than the device's default native size. A power cycle is
                required after this command before resetting or setting a new
                max LBA. The final capacity will depend on the logical sector
                size.  If the Logical Block Address (LBA) is set to 1953125 and
                the sector size is 512, then the capacity is 1,000,000,000
                bytes. If the logical sector size is 4096, then the capacity is
                8,000,000,000 bytes.  If the logical sector size is 512 but the
                physical sector size is 4096 (called Advanced Format), then
                normal practice is to pick an LBA value which is divisible by
                8. Use the -i, --deviceInfo to show logical and physical sector
                sizes.  The predefined text string "maxLBA" (without quotes)
                may be entered to indicate the last sector on the drive,
                otherwise see --restoreMaxLBA.

        --restoreMaxLBA
                Restore the max accessible address of your drive to its native
                size. A power cycle is required after this command before
                setting a new max LBA.

        --phySpeed [0 | 1 | 2 | 3 | 4 | 5]
                Use this option to change the PHY speed to a new maximum value.
                This change persists over power cycles and resets. On SAS, this
                option will set all phys to the specified speed unless the
                --sasPhy option is given to select a specific phy.

                0 - allow full negotiation (default drive behavior)
                1 - allow negotiation up to 1.5Gb/s
                2 - allow negotiation up to 3.0Gb/s
                3 - allow negotiation up to 6.0Gb/s
                4 - allow negotiation up to 12.0Gb/s (SAS Only)
                5 - allow negotiation up to 22.5Gb/s (SAS Only)

        --nvCache [info | enable | disable]     (SAS Only)
                Use this option to enable or disable the SCSI Non-Volatile
                cache on a drive. Use the "info" argument to get the current
                status of the Non-Volatile Cache setting.
                WARNING: Changing NV Cache may affect all LUNs/namespaces for
                devices with multiple logical units or namespaces.

       --readLookAhead [info | enable | disable]
                Use this option to enable or disable read look-ahead support on
                a drive.  Use the "info" argument to get the current status of
                the read look ahead feature.  This change is not preserved over
                power cycles.

        --writeCache [info | enable | disable]
                Use this option to enable or disable write cache support on a
                drive.  Use the "info" argument to get the current status of
                the write cache feature.  Changes may not be preserved over
                power cycles.

                Note: Windows, Device Manager, Disk drives, <your model>,
                Policies tab, Write-caching policy may override this
                --writeCache setting if the policy is enabled in Device
                Manager. You can change the Windows policy or you can try
                --sctWriteCache, if necessary, to control the cache regardless
                of the policy.

SATA Only
---------
        --freeFall [info | enable | disable | sensitivity value]  (SATA only)
                Use this option to configure the Free Fall control feature
                found on some SATA drives. This feature allows the drive to
                take action if it detects it is in free fall to protect the
                data from harm due to a drop.

                info - use this to see the current sensitivity value
                enable - this option will set the sensitivity to the vendor's
                        recommended value.
                disable - this will disable the free fall control feature.
                sensitivity value - set a value between 1 and 255 to control
                        how sensitive the detection is. A value of zero will
                        set the vendor's recommended value.

        --lowCurrentSpinup [ low | ultra | disable ]  (SATA Only) (Seagate Only)
                Use this option to set the state of the low current spinup
                feature on Seagate SATA drives.  When this setting is enabled
                for low or ultra low mode, the drive will take longer to spinup
                and become ready.
                Note: This feature is not available on every drive.
                Note: Some products will support low, but not the ultra low
                current spinup mode.

        --puisFeature [enable | disable]  (SATA Only)
                Use this option to enable or disable the Power Up In Standby
                (PUIS) feature on SATA drives.
                Note: If this is configured on the drive with a jumper, this
                      command will fail.
                Note2: Not all products support this feature.

        --sscFeature [info | default | enable | disable] (SATA Only)
                Use this option to change or view the SSC (Spread Spectrum
                Clocking) mode on a Seagate SATA drive. Only change this
                setting if you are experiencing compatibility problems with the
                drive in a system.

                info - show current SSC state
                default - set to drive default mode
                enable - enable SSC
                disable - disable SSC

        --sctReadTimer [info | value] (SATA Only)
                Use this option to set the SMART command transport read command
                timer value for synchronous commands and NCQ commands with
                in-order data delivery enabled. Note: this timer starts at the
                time that the drive processes the command, not the time it is
                received. This timer value is volatile and is cleared at each
                power cycle. Use the "info" argument to get the current status
                of the read timer. A value of 0 means that all possible error
                recovery will be performed before returning status (i.e. the
                Read Command Timer is disabled). Other values should include a
                unit to know the time to use. If no unit is provided, it is
                assumed to be the value * 100 ms. The maximum time that can be
                specified is 1 hour, 49 minutes, 13 seconds. Note: On some SAT
                HBAs/bridges, status will not be able to be determined due to
                HBA/bridge limitations.

                Ex1: --sctReadTimer 7s for a 7 second timer.
                Ex2: --sctReadTimer 7000ms for a 7 second timer expressed in
                     milliseconds
                Ex2: --sctReadTimer 70 for a 7 second timer with no units
                     specified

                Note: this command is part of SMART Command Transport Error
                Recovery Control (SCTERC). These commands may also be known as
                TLER or CCTL.  For additional information see
                https://en.wikipedia.org/wiki/Error_recovery_control .  Consult
                your RAID controller documentation to learn its timeout for
                determining drive failure and subsequent RAID rebuilding of a
                spare drive. These SCTERC commands, if supported by the drive
                firmware, allow setting a drive level timeout which is less
                than the RAID controller rebuild timeout.  For example, 7
                seconds on the drive and 8 seconds on the controller.  This
                time difference may allow the RAID to perform error recovery at
                the file level instead of replacing the device since the
                timeout may be caused by a sector that is just difficult to
                read, not an entire failure of the drive.

        --sctWriteCache [info | enable | disable | default]
                (SATA Only)
                Use this option to enable or disable write cache support on a
                drive using SMART command transport. When using this option,
                the setting is non-volatile. Use this with the --volatile flag
                to make the setting volatile. When using this option, the
                --writeCache will always return success, but no write cache
                changes will occur. This follows ATA spec. Using the "default"
                argument returns the drive to default settings and allowing the
                --writeCache option to work again. Use the "info" argument to
                get the current status of the write cache feature. Note: On
                some SAT HBAs/bridges, status will not be able to be determined
                due to HBA/bridge limitations.

        --sctWriteCacheReordering [info | enable | disable | default]
                (SATA Only)
                Use this option to enable or disable write cache reordering
                support on a drive using SMART command transport. Write cache
                reordering allows the drive to reorder moving data out of cache
                to media for better performance on synchronous commands.
                Asynchronous commands are only affected when in-order data
                delivery is enabled. When using this option, the setting is
                non-volatile. Use this with the --volatile flag to make the
                setting volatile. Use the "info" argument to get the current
                status of the write cache reordering feature. Note: On some SAT
                HBAs/bridges, status will not be able to be determined due to
                HBA/bridge limitations.

        --sctWriteTimer [info | value] (SATA Only)
                Use this option to set the SMART command transport write
                command timer value for synchronous commands and NCQ commands
                with in-order data delivery enabled. Note: this timer starts at
                the time that the drive processes the command, not the time it
                is received. This timer value is volatile and is cleared at
                each power cycle. Use the "info" argument to get the current
                status of the write timer. A value of 0 means that all possible
                error recovery will be performed before returning status (i.e.
                the Write Command Timer is disabled). Other values should
                include a unit to know the time to use. If no unit is provided,
                it is assumed to be the value * 100 ms. The maximum time that
                can be specified is 1 hour, 49 minutes, 13 seconds. Note: On
                some SAT HBAs/bridges, status will not be able to be determined
                due to HBA/bridge limitations.

                Ex1: --sctWriteTimer 7s for a 7 second timer.
                Ex2: --sctWriteTimer 7000ms for a 7 second timer expressed in
                     milliseconds
                Ex2: --sctWriteTimer 70 for a 7 second timer with no units
                     specified

                Note: see additional information above for --sctReadTimer.

SAS Only
--------
        --readyLED [info | on | off | default] (SAS Only)
                Use this option to change the behavior of pin 11, the ready
                LED. See the SPL spec for full details on how this changes LED
                behavior.
                    info - gets the current state of the ready LED.
                    on - sets the ready LED to usually off unless
                         processing a command.
                    off - sets the ready LED to usually on unless
                          processing a command
                    default - sets the ready LED to the drive's default value

        --sasPhy [identifier value]
                Use this option to specify a specific phy to use with another
                option that uses a phy identifier value. Some tool options will
                assume all SAS Phys when this option is not present. Others
                will produce an error when a specific phy is needed for an
                operation. Use the -i option to learn more about the supported
                phys.

        --scsiLPReset [cumulative | threshold | defCumulative | defThreshold | all]   (SAS only)
                Use this option to reset all SCSI Log Pages. If the device is
                compliant with SPC4 or later, the --scsiLPResetPage option may
                be used to specify a specific page to reset. The --volatile
                option may also be passed to prevent saving changes.
                            cumulative - reset the cumulative values
                            threshold  - reset the threshold values
                            defCumulative - reset the cumulative values to
                               default without saving.
                            defThreshold  - reset the threshold values to
                               default without saving.
                            all - sends the log page reset command to all of
                               the above control values

        --scsiLPResetPage [page# | page-subpage#]               (SAS only)
                This option is used to specify a specific page, and/or subpage
                to be used with the --scsiLPReset option.
                NOTE: This option will only work on newer drives compliant with
                the SPC4 specification.

        --scsiMPReset [page# | page-subpage#]           (SAS only)
                This option will reset the specified mode page(s) to their
                default settings. Valid page numbers range from 0 to 3Fh. Valid
                subpage numbers range from 0 to FFh.

                (MP) Mode page 3Fh specifies all mode pages and can be used to
                reset all mode pages. (SP) Subpage FFh specifies all subpages
                of a given page and will reset all those subpages. Using both
                MP 3Fh and SP FFh will reset all pages and subpages on a device.

        --scsiMPRestore [page# | page-subpage#]         (SAS only)
                This option will restore the specified mode page(s) to their
                saved settings. Valid page numbers range from 0 to 3Fh. Valid
                subpage numbers range from 0 to FFh.

                (MP) Mode page 3Fh specifies all mode pages and can be used to
                restore all mode pages. (SP) Subpage FFh specifies all subpages
                of a given page and will restore all those subpages. Using both
                MP 3Fh and SP FFh will restore all pages and subpages on a
                device.

        --scsiMPSave [page# | page-subpage#]            (SAS only)
                This option will save the current specified mode page(s) to the
                saved settings. Valid page numbers range from 0 to 3Fh. Valid
                subpage numbers range from 0 to FFh.

                (MP) Mode page 3Fh specifies all mode pages and can be used to
                save all mode pages. (SP) Subpage FFh specifies all subpages of
                a given page and will save all those subpages. Using both MP
                3Fh and SP FFh will save all pages and subpages on a device.

         --setSCSIMP [ mp[-sp]:byte:highestBit:fieldWidthInBits=value | file=filename.txt ]  (SAS only) (Seagate Only)
                Use this option to set a specific field in a mode page to a
                value. There are two argument formats to this option:
                1. The first format expects a mode page (in hex), optionally a
                   subpage code (in hex), the byte offset that the field starts
                   at (in decimal), the highest bit the field starts at (0-7),
                   the width of the field in as a number of bits (decimal), and
                   the value to set (hex or decimal).  A maximum of 64bits can
                   be set at a time with this option.
                2. The second format is a text file that contains all bytes of
                   the mode page in hex. Each byte must be separated by a
                   space, new line, or underscore. It is recommended that this
                   file is created by copy-pasting the output of the
                   --showSCSIMP option's default classic view, then modifying
                   after that.

                Example use of the arguments:
                1. Setting WCE to zero on Caching MP 8 from command line:
                   command line: 08:2:2:1=0
                2. Setting DLC to one on Control Extension MP from command line:
                   command line: 0A-01:4:3:1=1
                3. Setting WCE to zero on Caching MP 8 from a text file:
                   command line: file=cachingModePage.txt
                   File contents: 88 12 10 00 FF FF 00 00 FF FF FF FF 90 20 00 00 00 00 00 00

        --showSCSIMP [page# | page-subpage#]            (SAS only)
                This option will display the specified mode page on the screen
                as raw hexadecimal data bytes. Use --showSCSIMPControl to
                control the output.  If --showSCSIMPControl is not provided,
                the current values will be shown.

                (MP) Mode page 3Fh specifies all mode pages and can be used to
                show all mode pages. (SP) Subpage FFh specifies all subpages of
                a given page and will show all those subpages. Using both MP
                3Fh and SP FFh will show all pages and subpages on a device.

                Note: page# is a decimal value unless it has the characters A
                through F, then it is hexadecimal. Page 18, for example,  would
                be 12h so be sure to say 18h if that is the page you want.

                Example: --showSCSIMP 3F-FF
                         --showSCSIMP 18h
                         --showSCSIMP 24    (shows page 18h)

        --showSCSIMPControl [current | default | saved | changeable | all]  (SAS only)
                Use this option to control the output of the --showSCSIMP
                option.
                        current - show the current values of the mode page.
                        default - show the default values of the mode page.
                        saved   - show the saved values of the mode page.
                        changeable - show the changeable fields in a mode page.
                        all - show all of the above formats for a given mode
                              page.
                Example: --showSCSIMP 8 --showSCSIMPControl all

        --showMPOutputMode [classic | buffer]   (SAS Only)
                Use this option to control the format of the output when
                displaying a SCSI mode page. Modes:
                   classic - This output is a classic output from old SCSI
                      manuals where the bytes of the page are output in a
                      series of rows across the screen in hexadecimal format.
                   buffer  - This output is a formatted buffer showing offsets
                      on the top and side in hex. This will output each row
                      with up to 16 bytes of data before moving to the next row.

Utility Options
===============
        -h, --help
                Show utility options and example usage (this output you see now)

        -v [0-4], --verbose [0 | 1 | 2 | 3 | 4]
                Show verbose information. Verbosity levels are
                0 - quiet
                1 - default
                2 - command descriptions
                3 - command descriptions and values
                4 - command descriptions, values, and data buffers.

                Example: -v 3 or --verbose 3

        -q, --quiet
                Run openSeaChest in quiet mode. This is the same as -v0
                or --verbose 0

        -V, --version
                Show openSeaChest version and copyright information & exit

        --license
                Display the Seagate End User License Agreement (EULA).

        --echoCommandLine
                Shows the command line above the banner in the standard output.
                Useful when saving output to logs.

        --enableLegacyUSBPassthrough
                Only use this option on old USB or IEEE1394 (Firewire) products
                that do not otherwise work with the tool. This option will
                enable a trial and error method that attempts sending various
                ATA Identify commands through vendor specific means. Because of
                this, certain products may respond in unintended ways since
                they may interpret these commands differently than the bridge
                chip the command was designed for.

        --sat12byte
                This forces the lower layer code to issue SAT spec ATA
                Pass-through 12-byte commands when possible instead of 16-byte
                commands.  By default, 16-byte commands are always used for ATA
                Pass-through.  USB products may need this option as a
                workaround if the default does not perform.

        --onlySeagate
                Use this option to match only Seagate drives for the options
                provided.

        --modelMatch [model Number]
                Use this option to run on all drives matching the provided
                model number. This option will provide a closest match although
                an exact match is preferred. Ex: ST500 will match ST500LM0001.
                The option --childModelMatch may be used to match drives in USB
                enclosures.

                Note: See the section below 'Tool Usage Hints' for information
                about defining multiple device handles.

        --onlyFW [firmware revision]
                Use this option to run on all drives matching the provided
                firmware revision. This option will only do an exact match.
                The option --childOnlyFW may be used to match drives in USB
                enclosures.

        --forceATA
                Using this option will force the current drive to be treated as
                a ATA drive. Only ATA commands will be used to talk to the
                drive.

        --forceATADMA   (SATA Only)
                Using this option will force the tool to issue SAT commands to
                ATA device using the protocol set to DMA whenever possible (on
                DMA commands). This option can be combined with --forceATA.

        --forceATAPIO   (SATA Only)
                Using this option will force the tool to issue PIO commands to
                ATA device when possible. This option can be combined with
                --forceATA.

        --forceATAUDMA  (SATA Only)
                Using this option will force the tool to issue SAT commands to
                ATA device using the protocol set to UDMA whenever possible (on
                DMA commands). This option can be combined with --forceATA.

        --forceSCSI
                Using this option will force the current drive to be treated as
                a SCSI drive. Only SCSI commands will be used to talk to the
                drive.

        Windows only:
        --csmiIgnorePort
                Use this option to force setting the "ignore Port" flag for the
                port identifier in a CSMI passthrough command. This option can
                be combined with --csmiUsePort which will force the passthrough
                to rely on only the SAS address. This flag is intended to help
                troubleshoot or improve CSMI compatibility on systems that are
                otherwise not functional.

        --csmiUsePort
                Use this option to force setting the "Use Port" flag for the
                PHY identifier in a CSMI passthrough command. This option can
                be combined with --csmiIgnorePort which will force the
                passthrough to rely on only the SAS address. This flag is
                intended to help troubleshoot or improve CSMI compatibility on
                systems that are otherwise not functional.

        --csmiVerbose
                Use this option to show some verbose output when running the
                tool on a CSMI handle. The debugging information shown will be
                specific to the CSMI passthrough mechanism and may be useful
                when troubleshooting system/driver compatibility issues.

Data Destructive Commands
========================================
Data destructive commands will require additional command line arguments as
confirmation of your understanding that data will be lost on the drive.
Seagate is not responsible for lost user data.

        --confirm I-understand-this-command-will-erase ... etc

        --provision [newMaxLBA | maxLBA]
                Provision your drive to a new max LBA to any value less than
                the device's current max LBA. The predefined text string
                "maxLBA" (without quotes) may be entered to indicate the last
                sector on the drive instead of the specific LBA number.  A
                power cycle is required after this command before resetting the
                max LBA or changing the provisioning again. This command erases
                all data between the new maxLBA specified and the current
                maxLBA of the device. TRIM (SATA) or UNMAP (SAS) will be used
                when supported by the device, including SSDs.  For most HDDs
                this test will write 0's to the device and possibly take a very
                long time to complete.

Return codes
============
        0       No Error Found
        1       Error in command line options
        2       Invalid Device Handle or Missing Device Handle
        3       Operation Failure
        4       Operation not supported
        5       Operation Aborted
        6       File Path Not Found
        7       Cannot Open File
        8       File Already Exists
        9       Need Elevated Privileges (sudo, run as administrator)
        Anything else = unknown error

================
Tool Usage Hints
================
See Sample Output examples below.

First, run the openSeaChest -s option to determine what /dev/sg? or PD? device
handle assignment lines up to your disk drive. This option will also show you
other details about the drive including the current firmware revision.

Linux:
Vendor     Handle       Model Number       Serial Number     FwRev
ATA        /dev/sg0     ST94813AS          3AA043KP          3.03
SEAGATE    /dev/sg1     ST1000NM0011       ZAA15VAS          SN03

Windows:
Vendor     Handle   Model Number        Serial Number     FwRev
IDE        PD0      ST94813AS           3AA043KP          3.03
SEAGATE    PD1      ST1000NM0011        ZAA15VAS          SN03

You can use SeaChest -s --onlySeagate to limit the display to just Seagate.

All utility arguments will require you to identify the specific drive by
providing the sg or PD device handle (-d, --device).

Lin example, openSeaChest_Basics -d /dev/sg1 --shortDST poll
Win example, openSeaChest_Basics -d PD2 --shortDST poll

You may combine multiple tests with a single command line.  For example,
inLinux, openSeaChest_Basics -d /dev/sg0 -i --smartCheck runs both identify and
SMART.  In Windows, openSeaChest_Basics -d PD0 -i --smartCheck runs both
identify and SMART.

Multiple device handles can be given by adding -d /dev/sg# for each additional
handle.  Devices are processed in sequential order.  For example, in Linux,
openSeaChest_Basics -d /dev/sg0 -d /dev/sg3 -i runs identify on these two
devices.  In Windows, openSeaChest_Basics -d PD0 -d PD3 -i runs identify on
these two devices.

Caution: All device handles may be specified.  However, great care should be
taken to fully anticipate the consequences of running a command on all storage
devices in a system.  For example, a command to erase data on all drives could
be catastrophic or exactly what you want. The shortcut to select all devices is
-d all.  Seagate is not responsible for lost user data.  Along with the
designation for all devices, you can narrow the tasks to specific types of
drives by using the --onlySeagate, --modelMatch and --onlyFW filters.

If the task is an OFFLINE command like format unit or short DST, meaning that
the drive works on the task in the background and the tool quickly returns to
the command prompt (there is little or no I/O to the system), then you can
expect the system to run normally. If the task has high I/O to the system like
a sequential read of all sectors on the drive, then you can expect the system
to slow down with each additional device.

The discussion above is about starting SEQUENTIAL tests, or one after the
other.  When the task does not return to the command prompt for a very long
time, then you have a few options to run tests in PARALLEL, also called
simultaneous, in other words all at the same time.  One way is to start
different drives in different Terminal windows, if available.  There are other
more sophisticated methods using parallel processing, for information about
these methods please see the information at this link:
https://github.com/Seagate/ToolBin/tree/master/SeaChest/parallel_testing

Tests which take a very long time to complete or erase all user data on the
drive will require a longer command line argument than indicated in the --help
output to the screen.  This approach is taken to eliminate the possibility of
accidental data loss or the commitment of long test times. The longer command
arguments are similar to -I-understand-this-command-will-take-a-long-time or
-I-understand-this-command-will-erase-all-data.

Advanced SAS installations may use dual ports.  These are listed as Port 0 and
Port 1 on the device information report. When both ports are active, each one
may have a unique /dev/sg designation.  The scan option may indicate that there
are two drives in the system with the same serial number.  Dual port
installations will also report two different Worldwide Numbers (WWN).

Windows Only Usage
==================
All Windows version tools support finding CSMI devices and talking to them like
you would a normal device.  The scan output will show all drives it detects
ONCE. CSMI device handles have a structure like SCSI0:1.  If a drive has both a
PD? and SCSI?:? handle, then openSeaChest will show the PD handle instead of the
SCSI (CSMI) handle.

When drives are in a RAID, the PD device handle is usually not available and
the CSMI handle may provide an alternate way to talk to the drive.  Just
because a device has a CSMI handle doesn't mean it is part of a RAID.

If you want to see both handles, add --scanFlags allowDuplicates to the command
line.  If you don't want to see any CSMI devices, add --scanFlags ignoreCSMI to
the command line.  SeaChest_Info -d SCSI?:? --csmiInfo is useful when
troubleshooting CSMI device handles questions.

=========================
Linux General Usage Hints
=========================
Remember that Linux file names and command line arguments are cAsE SeNsiTiVe.

Display a file listing with the Linux command: ls -lah

The tool will require root privileges to run using either sudo or su commands.
Also, verify that the tool has executable rights.

A dot slash is a dot followed immediately by a forward slash (./). It is used
in Linux to execute a compiled program in the current directory when it is not
a built-in command or found in your path.

For example, ./openSeaChest -d /dev/sg0 --shortDST poll
or, sudo ./openSeaChest -d /dev/sg0 --shortDST poll

Shut down the files system and remove the power with the command:
poweroff

See previous screen history with the key combination:
Shift+PgUp or Shift+PgDn

Save a log file by redirecting the screen output to a text file by adding space
&>test.log at the end of your command line. Choose your own file name. To
append the screen output to an existing log file use >>test.log.

To save a log and display results at the conclusion of the tests, you can use
the "tee" command. Tee command writes to the STDOUT and to a file.
For example,
openSeaChest --echoCommandLine -d /dev/sg0 -i --smartCheck | tee -a mySeaChestLog.txt

Display a log or text file with the Linux "less" command: less myfile.log
Press the letter q to quit displaying the file.  Similarly, you can easily
read the Seagate License agreement by piping the output to the less
command with openSeaChest --license |less

Display a list of sg (SCSI generic) devices with the command:
cat /sys/class/scsi_generic/sg*/device/model
or
ls /dev/sg*

sg devices include the following interfaces: SATA, USB, SCSI (SCSI, SAS and FC)

Add the command word 'time' on the same command line before the openSeaChest
command to see how much time it takes to run a test.
For example, time ./openSeaChest -d /dev/sg0 --shortDST poll

When drives are not detected by openSeaChest
--------------------------------------------
The problem is that the sg driver isn't loaded on the system on boot.  You can
test if it is loaded by doing "ls /dev/sg*" and see if anything shows up. If
nothing shows up then the SG driver is missing (which is required by
openSeaChest to issue commands).

You need to do "modprobe sg" as root to load the sg module (since it wasn't
compiled into the kernel), then you will get sg devices that we can scan and
find. Once you run the modprobe command and sg is successfully loaded, then you
can re-run "ls /dev/sg*" and see SG device nodes. openSeaChest tools should
then be able to find devices once again.

How to control the amount of runtime kernel messages
----------------------------------------------------
When testing more drives than a system can hold, careful use of host adapters
and hot-plugging batches of drives (but never to direct motherboard
connections!) can help speed the process.  The Linux operating system will
display various system error messages, or none, when storage devices are
powered down and exchanged with the next drives.  The amount of information
contained in the OS error messages can be reviewed using the Linux utility
command "sysctl kernel.printk".  The default setting is defined by the
particular distro.  Tiny Core Linux, for example may set "4 4 1 7".  To hide
hot-plugging messages try "3 4 1 7", to increase the messaging to include
device details like model numbers try "6 4 1 7".  The command to set is 'sudo
sysctl -w kernel.printk="6 4 1 7"'.  See man sysctl - "configure kernel
parameters at runtime" for more.

Tesing storage devices on the USB and Thunderbolt interfaces
------------------------------------------------------------
Sometimes, when testing a storage device, it is more convenient to attach it as
an external drive to the test system. In the case of SATA drives there are very
many SATA-to-USB 'bridge' adapters available.  The quality and range of command
'passthrough' support for these adapters varies greatly.  Our tools will
attempt to work through these adapters.

If your notebook has a Thunderbolt interface connection then you may be able to
test a wide range of devices.  External Thunderbolt expansion systems provide a
PCIe slot in a chassis that can hold a SAS, NVMe, or SATA host adapter. The
host adapters would have cables that go out to your test bench where you would
provide the drive and an external power supply for the drives. Thunderbolt 2
expansion systems work in Linux by default. Thunderbolt 3 expansion systems
need to be enabled in the kernel with boot time options before it will be
recognized by the Linux operating system. See
https://www.kernel.org/doc/html/v4.14/admin-guide/thunderbolt.html for
information about how to activate the interface.

===========================
Windows General Usage Hints
===========================
The tool will require Administrative privileges to run.
Also, verify that the tool has executable rights.

Remember that the command line arguments are cAsE SeNsiTiVe.

Save a log file by redirecting the screen output to a text file by adding space
&>test.log at the end of your command line. Choose your own file name. To
append the screen output to an existing log file use >>test.log.

To save a log and display results at the conclusion of the tests, you can use
the powershell "tee" command. Tee command writes to the STDOUT and to a file.

For example:
powershell ".\openSeaChest --echoCommandLine -d PD1 --smartCheck | tee -append mySeaChestLog.txt"

Manual Launch for Windows
-------------------------
An individual openSeaChest utility for Windows cannot be launched by just
clicking on the file name. If started that way, the openSeaChest utility will
briefly show a black window box and quickly close.  That is what happens when
trying to run it from the Windows File Manager.

This is a command line tool and the requirement is to open a Command Prompt as
Administrator.  There are two easy ways to do this:
  1. Windows Accessories, right-click the Command Prompt icon and select Run as
     Administrator.
  2. Click Windows Start. In the Start Search box, type cmd, and then press
     CTRL+SHIFT+ENTER.

Then change drives or directory to where the openSeaChest utility is located and
run the tool file name from there.

=============
Sample Output
=============

SATA HDD Device Information:

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST4000DX001-1CE168
        Serial Number: ZQ3034X7R
        Firmware Revision: CC44
        World Wide Name: 500Q0C5007A5FCF19
        Drive Capacity (TB/TiB): 4.00/3.64
        Native Drive Capacity (TB/TiB): 4.00/3.64
        Temperature Data:
                Current Temperature (C): 25
                Highest Temperature (C): 40
                Lowest Temperature (C): 18
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  4 days 1 hour
        Power On Hours: 97.00
        MaxLBA: 7814037167
        Native MaxLBA: 7814037167
        Logical Sector Size (B): 512
        Physical Sector Size (B): 4096
        Sector Alignment: 0
        Rotation Rate (RPM): 5900
        Form Factor (inch): 3.5
        Last DST information:
                Time since last DST (hours): 0.00
                DST Status/Result: 0x0
                DST Test run: 0x1
        Interface speed:
                Max Speed (Gb/s): 6.0
                Negotiated Speed (Gb/s): 6.0
        Annualized Workload Rate (TB/yr): 2.51
        Total Bytes Read (GB): 6.65
        Total Bytes Written (GB): 21.27
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Not Supported
        Cache Size (MiB): 64.00
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Supported, Frozen
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate, Segmented
        Specifications Supported:
                ACS-2
                ATA8-ACS
                ATA/ATAPI-7
                ATA/ATAPI-6
                ATA/ATAPI-5
                ATA/ATAPI-4
                SATA 3.1
                SATA 3.0
                SATA 2.6
                SATA 2.5
                SATA II: Extensions
                SATA 1.0a
        Features Supported:
                NCQ
                HPA
                Power Management
                Security
                SMART
                DCO
                48bit Address
                APM
                GPL
                Free-fall Control
                Write-Read-Verify

SATA SSD Device Information:

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST120FP0021
        Serial Number: PQ57011BD
        Firmware Revision: B770
        World Wide Name: 5000C501005A16633
        Drive Capacity (GB/GiB): 120.03/111.79
        Native Drive Capacity (GB/GiB): 120.03/111.79
        Temperature Data:
                Current Temperature (C): 26
                Highest Temperature (C): 0
                Lowest Temperature (C): 17
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  2 days 23 hours
        Power On Hours: 71.00
        MaxLBA: 234441647
        Native MaxLBA: 234441647
        Logical Sector Size (B): 512
        Physical Sector Size (B): 4096
        Sector Alignment: 0
        Rotation Rate (RPM): SSD
        Form Factor (inch): 2.5
        Last DST information:
                Not supported
        Interface speed:
                Max Speed (Gb/s): 6.0
                Negotiated Speed (Gb/s): 3.0
        Annualized Workload Rate (TB/yr): 299.80
        Total Bytes Read (TB): 2.35
        Total Bytes Written (GB): 90.19
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Not Supported
        Cache Size (MiB): Not Reported
        Percentage Used Endurance Indicator (%): 1.00437
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Supported, Frozen
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate, Segmented
        Specifications Supported:
                ATA8-ACS
                ATA/ATAPI-7
                ATA/ATAPI-6
                ATA/ATAPI-5
                ATA/ATAPI-4
                SATA 3.0
        Features Supported:
                Sanitize
                NCQ
                HPA
                Power Management
                Security
                SMART
                48bit Address
                GPL
                TRIM

SAS HDD Device Information:

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST4000NM0043
        Serial Number: Z1QZ04KVG
        Firmware Revision: 0004
        World Wide Name: 500Q0C5005594AEFB
        Copyright: Copyright (c) 2014 Seagate All rights reserved
        Drive Capacity (TB/TiB): 4.00/3.64
        Temperature Data:
                Current Temperature (C): 28
                Highest Temperature (C): Not Reported
                Lowest Temperature (C): Not Reported
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  61 days 11 hours 14 minutes
        Power On Hours: 1475.23
        MaxLBA: 7814037167
        Native MaxLBA: Not Reported
        Logical Sector Size (B): 512
        Physical Sector Size (B): 512
        Sector Alignment: 0
        Rotation Rate (RPM): 7200
        Form Factor (inch): 3.5
        Last DST information:
                Time since last DST (hours): 548.23
                DST Status/Result: 0x0
                DST Test run: 0x1
        Interface speed:
                Port 0 (Current Port)
                        Max Speed (GB/s): 6.0
                        Negotiated Speed (Gb/s): 3.0
                Port 1
                        Max Speed (GB/s): 6.0
                        Negotiated Speed (Gb/s): Not Reported
        Annualized Workload Rate (TB/yr): 0.02
        Total Bytes Read (GB): 2.27
        Total Bytes Written (GB): 2.39
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Self Encrypting
        Cache Size (MiB): Not Reported
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Not Supported
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate
        Specifications Supported:
                SPC-4
        Features Supported:
                EPC
                TCG
                Self Test
                Informational Exceptions
                Format Unit
                Sanitize

SAS SSD: Device Information

Lin: sudo ./openSeaChest_Basics -i -d /dev/sg1
Win: openSeaChest_Basics -i -d PD1
===============================================================================
 openSeaChest - Seagate drive utilities
 Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
===============================================================================
        Model Number: ST400FM0053
        Serial Number: P3QF13026
        Firmware Revision: 0006
        World Wide Name: 5000QC50069010B4B
        Copyright: Copyright (c) 2014 Seagate All rights reserved -
        Drive Capacity (GB/GiB): 400.09/372.61
        Temperature Data:
                Current Temperature (C): 34
                Highest Temperature (C): Not Reported
                Lowest Temperature (C): Not Reported
        Humidity Data:
                Current Humidity (%): Not Reported
                Highest Humidity (%): Not Reported
                Lowest Humidity (%): Not Reported
        Power On Time:  30 days 21 hours 29 minutes
        Power On Hours: 741.48
        MaxLBA: 781422767
        Native MaxLBA: Not Reported
        Logical Sector Size (B): 512
        Physical Sector Size (B): 4096
        Sector Alignment: 0
        Rotation Rate (RPM): SSD
        Form Factor (inch): 2.5
        Last DST information:
                Time since last DST (hours): 434.48
                DST Status/Result: 0x0
                DST Test run: 0x1
        Interface speed:
                Port 0 (Current Port)
                        Max Speed (GB/s): 12.0
                        Negotiated Speed (Gb/s): 3.0
                Port 1
                        Max Speed (GB/s): 12.0
                        Negotiated Speed (Gb/s): Not Reported
        Annualized Workload Rate (TB/yr): 9.48
        Total Bytes Read (GB): 24.62
        Total Bytes Written (GB): 837.41
        Drive Reported Utilization (%): Not Reported
        Encryption Support: Not Supported
        Cache Size (MiB): Not Reported
        Percentage Used Endurance Indicator (%): 1.00000
        Read Look-Ahead: Enabled
        Write Cache: Enabled
        SMART Status: Good
        ATA Security Information: Not Supported
        Zoned Device Type: Not a Zoned Device
        Firmware Download Support: Immediate, Segmented, Deferred
        Specifications Supported:
                SPC-4
        Features Supported:
                EPC
                Power Comsumption
                UNMAP
                Self Test
                Informational Exceptions
                Format Unit
                Sanitize

===============
Version History
===============
v1.0.0  02-May-2016  1_9_1 libraries.  SeaChest_Configure Linux, initial beta
                     test release.  Branched from SeaChest_Basics v2.0.0.
                     Added --lowCurrentSpinup
v1.1.1  19-May-2016  1_9_2 libraries fixed scan information from ATAPI devices.
                     Fixed a bug where we could accidentally clear some stored
                     identify data from the device structure. Fixed continuing
                     on when there was a permission denied error opening a
                     drive. Adjustments to --setSectorSize. Added
                     --sctWriteCache, --sctWriteCacheReordering.
v1.1.2  15-Jun-2016  1_9_3 libraries fixed issues with ATA secure erase
                     commands. Fixed bugs with --modelMatch and --onlyFW
                     filters.  Support SATA non-volatile WCE.
v1.3.0  06-Jul-2016  1_10_0 libraries add --forceATA and --forceSCSI.  Added
                     --puisFeature.
v1.3.1  14-Jul-2016  1_10_1 libraries adds SMART and power management
                     functions, format polling, endianess detection, buffer
                     size fixes, SAS device statistics, Win32 IOCTL
                     pass-through fix on Win8 and higher. Added support for
                     maxLBA keyword.
v1.4.0  01-Sep-2016  1_11_1 libraries add updates to various printed message,
                     minor bug fixes. Fixed --SATInfo command.
v1.4.0  21-Sep-2016  1_11_2 libraries updates adds --forceATADMA, --forceATAPIO
                     and --forceATAUDMA  (SATA Only).
v1.5.0  10-Oct-2016  1_11_4 libraries updates. Support for multiple devices.
v1.5.0  25-Oct-2016  1_11_5 libraries updates improved LaCie  detection, adds
                     SAT Vendor ID, SAT Product ID, and SAT Product Revision to
                     the -i --SATInfo output.
v1.5.1  27-Oct-2016  1_11_6 libraries updates WWN detection.  Added
                     --enableLegacyUSBPassthrough
v1.5.1  03-Nov-2016  1_11_7 libraries fixed issue with SAS EPC power mode
                     settings.
v1.5.1  13-Dec-2016  1_11_10 libraries fixes a problem when using maxLBA without
                     the corresponding command range option, SAS power mode
                     setting, and Sanitize erase patterns.
v1.7.0  23-Feb-2017  1_13_0 libraries adds support for SAS 12.0Gb/s and
                     22.5Gb/s physical bus speeds, support for double buffered
                     passthrough IOCTLs. Add --sasPhy, --sscFeature. New -F,
                     --scanFlags [options: ignoreCSMI allowDuplicates] for
                     Windows tools. Add CSMI support to all Windows version
                     tools.
v1.7.0  06-Mar-2017  1_13_2 libraries adds Enhanced device information output
                     for SAS features.
v1.8.0  14-Jun-2017  1_15_0 libraries adds bug fix malformed command line
                     should exit with code = 1; added detection of parallel ATA
                     and SCSI speeds; temperature data on ATA now uses the
                     values from the SCT status log or device statistics log.
                     Bug fix where the "-d all" was not filtering out csmi
                     drives like it is supposed to causing duplicate drives to
                     show up.  Adds the child drive matching options
                     --childModelMatch, --childOnlyFW, and --childNewFW.
v1.9.0  06-Jul-2017  Added --sctReadTimer, --sctWriteTimer.
v1.10.0 14-Jul-2017  1_16_1 libraries adds support for ATA drives that have the
                     Sense Data Reporting feature enabled, changes to how we
                     interpret the completion status from the drive, new Sense
                     Data ASC, ASCQ definitions from SPC5. Adds --Scan (or -S,
                     note the capital S) aggressive system scan.
v1.10.0 27-Jul-2017  1_16_2 libraries enhances Seagate brand detection.
v1.10.0 19-Sep-2017  1_16_4 libraries fixes SCSI "--progress format", added
                     reading remanufacture time for SAS when the drive reports
                     a time, fixed SAS --abortDST.
v1.10.0 25-Sep-2017  1_17_0 libraries adds improved SATA device discovery on
                     SAS adapters, added NVMe read, write & Flush commands.
v1.11.0 10-Oct-2017  1_17_1 libraries adds Better handling of NVMe as a SCSI
                     device, SAT library strings, and fixes to Read-Buffer
                     error history (ISL). Updated copyright notice, invalid
                     command line options now only display an error instead of
                     long help. Removed --setSectorSize now in SeaChest_Format.
v1.11.0 12-Oct-2017  1_17_3 libraries improves Fast-Format compatibility on SAS.
v1.11.0 26-Oct-2017  1_17_5 libraries fixes SATA drive discovery behind HBAs
                     that don't show as SATA and don't support the SAT VPD
                     page; added Automatic fallback to 12byte CDBs during
                     initial device discovery;  integrated fixes for SAS
                     firmware download and fixes for SAS LongDST time
                     calculation; added detection of TCG Pyrite and Opalite
                     drives.
v1.11.0 31-Oct-2017  1_17_6 libraries adds ATA Security compatibility with SATL
                     on some LSI adapters, corrects firmware download issue
                     under Windows 10 API.
v1.11.0 02-Nov-2017  1_17_7 libraries fixes Long DST time on SCSI/SAS products.

The above history is provided as a courtesy to show the original SeaChest
development activity.

============================
openSeaChest Version History
============================
v1.11.0  12-Nov-2017  1_17_x libraries.  Launch date of the Seagate openSeaChest
open source project for storage devices.
v1.12.0 19-Apr-2018  1_18_0 libraries improves device detection of CD-ROM and
                     USB flash drives, support for early 90's PATA drives that
                     don't support LBA mode, bug fix where the last digit of
                     the SCSI Unit Serial Number was being dropped, additional
                     logic for deferred download completion status. --scan
                     --onlySeagate for just Seagate drives in a large system,
                     Long Drive Self Test Time in the -i output, write protect
                     status has been added for SCSI and NVMe in the -i output,
                     IDD enhancements for SAS, IDD enhancements to allow
                     captive mode on SATA, added USB Hacks to better support
                     some odd-ball USB devices and prevent crashes and improve
                     performance for some operations on them by issuing test
                     unit ready commands when something fails during device
                     discovery, automatic fall back to SAT 10 byte commands
                     during device discovery to help work with some USB
                     devices, some Legacy SCSI support enhancements (partially
                     from USB hacks development), enhanced SD to SG mapping in
                     Linux.
v1.12.2 21-Sep-2018  1_18_2 libraries Added in reading os-release PRETTY_NAME
                     field to get the OS name under linux; NVMe enabled;  fixed
                     a bug in the ATA activate FW command; added in reading ID
                     Data log and Device statistics logs page 0 to check the
                     list of supported pages; fixed a bug in the loop used to
                     read mode pages for -i information on SAS; IDD SAS
                     improvements; fixed a bug in DST & Clean with ATA drives
                     behind SCSI controllers. Fix for --modelMatch that have
                     spaces in the name. Added additional information to the
                     banner and -V data to show support levels. Add general
                     support for NVMe and NVMe specific identify data to "-i"
                     command. Add --freeFall
v1.12.2 18-Oct-2018  1_18_3 libraries Added NVMe generic read command support.
v1.13.0 07-Jan-2019  1_19_0 libraries added per device verbosity, --deviceInfo
                     adds SAS (not SATA) FastFormat for Features Supported
                     section.
v1.14.0 24-Jan-2019  Add Log and Mode Page commands --scsiLPReset,
                     --scsiLPResetPage, --scsiMPReset, --scsiMPRestore,
                     --scsiMPSave, --setSCSIMP, --showMPOutputMode,
                     --showSCSIMP, --showSCSIMPControl
v1.15.0 10-Feb-2019  Device information now shows "Low Current Spinup" status
v1.16.0 28-Feb-2019  Add ultra to --lowCurrentSpinup
v1.17.0 03-May-2019  1_19_18 libraries added per device verbosity, --deviceInfo
                     adds SAS (not SATA) FastFormat for Features Supported
                     section.
v1.17.0 10-Jun-2019  1_19_23 libraries added SNTL (SCSI to NVMe translator),
                     updated software SAT translator to use dataset management
                     XL command, fixes for issuing vendor unique commands under
                     Windows, improved fast format support detection, and
                     refactored verbose output for NVMe commands.
v1.18.1 04-Feb-2020  1_21_30 libraries add in check for Elevated Privileges
                     (sudo, run as administrator) before trying to talk to
                     devices, new exit code 9 if privileges are missing;
                     printing the USB VID/PID in the device info; fix to sg
                     helper to support large systems; many changes in support
                     of dual actuators (example: warning that EPC settings
                     affect multiple LUNs); overhaul to USB device detection
                     and support, incorporating a new USB hacks and workarounds
                     approach which uses a lookup table listing various USB
                     bridge VIDs/PIDs and their specific issues; separate
                     Seagate SAS SN and PCBA SN.
v1.18.2 13-Apr-2020  1_21_30 libraries, fix memory allocation during the scan
                     command.

===========================================
About openSeaChest Command Line Diagnostics
===========================================
Seagate offers both graphical user interface (GUI) and command line interface
(CLI) diagnostic tools for our storage devices.  SeaTools for Windows and
SeaTools Bootable for end users are the two most popular GUI tools.  These
tools support 15 languages.

openSeaChest diagnostics are command line utilities which are available for
expert users.  These command line tools assume the user is knowledgeable about
running software from the operating system command prompt.  CLI tools are in
the English language only and use "command line arguments" to define the
various tasks and specific devices.  openSeaChest diagnostics are available for
both Linux and Windows environments.

Linux versions of openSeaChest tools are available as stand alone 32 or 64-bit
executables you can copy to your own system.  Windows OS versions of
openSeaChest diagnostics are installed through a typical setup wizard and can
be removed via the Control Panel.

In addition, Seagate offers a tool to build a bootable USB openSeaChest flash
drive which boots to a 32-bit Linux command prompt.  This is a Windows
executable file which formats a USB Flash drive you provide.  It copies over
all the files needed to use it as a bootable device for the openSeaChest
diagnostic software. All data on the USB Flash drive will be erased so be sure
to protect any valuable files.

Technical Support for openSeaChest drive utilities is not available.  If you
have the time to send us some feedback about this software, especially if you
notice something we should fix or improve, we would greatly appreciate hearing
from you.  To report your comments and suggestions, please use this email
seaboard@seagate.com.  Please let us know the name and version of the tool you
are using.

openSeaChest drive utilities support SATA, SAS and USB interface devices.

openSeaChest Basics - Contains the most important tests and tools.

Other openSeaChest "break out" utilities are available and listed below which
offer more in-depth functionality in specific areas. These are:

openSeaChest Configure - Tools to control various settings on the drives are
brought together into this one tool.  Typical commands, for example, include
Write Cache and Read Lookahead Cache enable or disable.

openSeaChest Erase - The focus is on data erasure.  There are many different
choices for erasing data from simple boot track erase to full cryptographic
erasure (when supported).  Be sure to back up important data before using this
tool.  Seagate is not responsible for lost user data.  This tool only works on
Seagate drives.

openSeaChest Firmware - Seagate products are run by firmware.  Having the
latest firmware can improve performance and or reliability of your product.
Seagate recommends applying new firmware to enhance the performance and or
reliability of your drive.  Most products may see one or two firmware updates
within the early life of the product.

openSeaChest Format - Storage products which utilize the SAS, SCSI or Fibre
Channel interfaces are able to perform a full low-level media format in the
field.  The SCSI Format Unit command offers many specialty options to
accommodate a variety of conditions and to fine tune the procedure.  This
complex command deserves its own "break out" utility.

openSeaChest GenericTests - Read Tests are the original disk drive diagnostic
which is to just read every sector on the drive, sequentially.  This tool
offers several common read tests which can be defined by either time or range.
In addition, the Long Generic test has the ability to repair problem sectors,
possibly eliminating an unnecessary drive return.

openSeaChest Info - Historical generic activity logs (like total bytes written
and power on hours) and performance logs (like temperature) are available for
analytical review.  Identification and inquiry data stored on the drive is also
provided.  A view of SMART and device statistics is available when supported by
the drive.

openSeaChest PowerControl - Seagate disk drives offer a multitude of options to
manage power.  This tool manipulates the various power modes.

openSeaChest Security - Various settings are available on modern Seagate disk
drives which may be locked and unlocked.  These settings may interact with the
operating systems and systems BIOS.  Options also include cryptographic erase
for Self-Encrypting Drives (SED).

openSeaChest SMART - This tool provides a closer look at the collected SMART
attributes data.  SMART stands for Self-Monitoring, Analysis and Reporting
Technology.  Short Drive Self Test is included as one of the standard SMART
commands. In addition, the DST & Clean test has the ability to repair problem
sectors, possibly eliminating an unnecessary drive return.

=================================
Support and Open Source Statement
=================================
Seagate offers technical support for disk drive installation.  If you have any
questions related to Seagate products and technologies, feel free to submit
your request on our web site. See the web site for a list of world-wide
telephone numbers.

Seagate Support:
http://www.seagate.com/support-home/
Contact Us:
http://www.seagate.com/contacts/

Please report bugs/suggestions to https://github.com/Seagate/openSeaChest.
Include the output of --version information in the email. See the user guide
section 'General Usage Hints' for information about saving output to a log file.

This software uses open source packages obtained with permission from the
relevant parties. For a complete list of open source components, sources and
licenses, please see our Linux USB Boot Maker Utility FAQ for additional
information.

The newest online version of the openSeaChest Utilities documentation, open
source usage and acknowledgement licenses, and our Linux USB Boot Maker FAQ can
be found at: https://github.com/Seagate/openSeaChest.

Copyright (c) 2014-2020 Seagate Technology LLC and/or its Affiliates
======================================================================

BINARIES and SOURCE CODE files of the openSeaChest open source project have
been made available to you under the Mozilla Public License 2.0 (MPL).  Mozilla
is the custodian of the Mozilla Public License ("MPL"), an open source/free
software license.

https://www.mozilla.org/en-US/MPL/

Mozilla Public License Version 2.0
==================================

1. Definitions
--------------

1.1. "Contributor"
    means each individual or legal entity that creates, contributes to
    the creation of, or owns Covered Software.

1.2. "Contributor Version"
    means the combination of the Contributions of others (if any) used
    by a Contributor and that particular Contributor's Contribution.

1.3. "Contribution"
    means Covered Software of a particular Contributor.

1.4. "Covered Software"
    means Source Code Form to which the initial Contributor has attached
    the notice in Exhibit A, the Executable Form of such Source Code
    Form, and Modifications of such Source Code Form, in each case
    including portions thereof.

1.5. "Incompatible With Secondary Licenses"
    means

    (a) that the initial Contributor has attached the notice described
        in Exhibit B to the Covered Software; or

    (b) that the Covered Software was made available under the terms of
        version 1.1 or earlier of the License, but not also under the
        terms of a Secondary License.

1.6. "Executable Form"
    means any form of the work other than Source Code Form.

1.7. "Larger Work"
    means a work that combines Covered Software with other material, in
    a separate file or files, that is not Covered Software.

1.8. "License"
    means this document.

1.9. "Licensable"
    means having the right to grant, to the maximum extent possible,
    whether at the time of the initial grant or subsequently, any and
    all of the rights conveyed by this License.

1.10. "Modifications"
    means any of the following:

    (a) any file in Source Code Form that results from an addition to,
        deletion from, or modification of the contents of Covered
        Software; or

    (b) any new file in Source Code Form that contains any Covered
        Software.

1.11. "Patent Claims" of a Contributor
    means any patent claim(s), including without limitation, method,
    process, and apparatus claims, in any patent Licensable by such
    Contributor that would be infringed, but for the grant of the
    License, by the making, using, selling, offering for sale, having
    made, import, or transfer of either its Contributions or its
    Contributor Version.

1.12. "Secondary License"
    means either the GNU General Public License, Version 2.0, the GNU
    Lesser General Public License, Version 2.1, the GNU Affero General
    Public License, Version 3.0, or any later versions of those
    licenses.

1.13. "Source Code Form"
    means the form of the work preferred for making modifications.

1.14. "You" (or "Your")
    means an individual or a legal entity exercising rights under this
    License. For legal entities, "You" includes any entity that
    controls, is controlled by, or is under common control with You. For
    purposes of this definition, "control" means (a) the power, direct
    or indirect, to cause the direction or management of such entity,
    whether by contract or otherwise, or (b) ownership of more than
    fifty percent (50%) of the outstanding shares or beneficial
    ownership of such entity.

2. License Grants and Conditions
--------------------------------

2.1. Grants

Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:

(a) under intellectual property rights (other than patent or trademark)
    Licensable by such Contributor to use, reproduce, make available,
    modify, display, perform, distribute, and otherwise exploit its
    Contributions, either on an unmodified basis, with Modifications, or
    as part of a Larger Work; and

(b) under Patent Claims of such Contributor to make, use, sell, offer
    for sale, have made, import, and otherwise transfer either its
    Contributions or its Contributor Version.

2.2. Effective Date

The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.

2.3. Limitations on Grant Scope

The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:

(a) for any code that a Contributor has removed from Covered Software;
    or

(b) for infringements caused by: (i) Your and any other third party's
    modifications of Covered Software, or (ii) the combination of its
    Contributions with other software (except as part of its Contributor
    Version); or

(c) under Patent Claims infringed by Covered Software in the absence of
    its Contributions.

This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).

2.4. Subsequent Licenses

No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).

2.5. Representation

Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.

2.6. Fair Use

This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.

2.7. Conditions

Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.

3. Responsibilities
-------------------

3.1. Distribution of Source Form

All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.

3.2. Distribution of Executable Form

If You distribute Covered Software in Executable Form then:

(a) such Covered Software must also be made available in Source Code
    Form, as described in Section 3.1, and You must inform recipients of
    the Executable Form how they can obtain a copy of such Source Code
    Form by reasonable means in a timely manner, at a charge no more
    than the cost of distribution to the recipient; and

(b) You may distribute such Executable Form under the terms of this
    License, or sublicense it under different terms, provided that the
    license for the Executable Form does not attempt to limit or alter
    the recipients' rights in the Source Code Form under this License.

3.3. Distribution of a Larger Work

You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).

3.4. Notices

You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.

3.5. Application of Additional Terms

You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.

4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------

If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.

5. Termination
--------------

5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.

5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.

5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.

************************************************************************
*                                                                      *
*  6. Disclaimer of Warranty                                           *
*  -------------------------                                           *
*                                                                      *
*  Covered Software is provided under this License on an "as is"       *
*  basis, without warranty of any kind, either expressed, implied, or  *
*  statutory, including, without limitation, warranties that the       *
*  Covered Software is free of defects, merchantable, fit for a        *
*  particular purpose or non-infringing. The entire risk as to the     *
*  quality and performance of the Covered Software is with You.        *
*  Should any Covered Software prove defective in any respect, You     *
*  (not any Contributor) assume the cost of any necessary servicing,   *
*  repair, or correction. This disclaimer of warranty constitutes an   *
*  essential part of this License. No use of any Covered Software is   *
*  authorized under this License except under this disclaimer.         *
*                                                                      *
************************************************************************

************************************************************************
*                                                                      *
*  7. Limitation of Liability                                          *
*  --------------------------                                          *
*                                                                      *
*  Under no circumstances and under no legal theory, whether tort      *
*  (including negligence), contract, or otherwise, shall any           *
*  Contributor, or anyone who distributes Covered Software as          *
*  permitted above, be liable to You for any direct, indirect,         *
*  special, incidental, or consequential damages of any character      *
*  including, without limitation, damages for lost profits, loss of    *
*  goodwill, work stoppage, computer failure or malfunction, or any    *
*  and all other commercial damages or losses, even if such party      *
*  shall have been informed of the possibility of such damages. This   *
*  limitation of liability shall not apply to liability for death or   *
*  personal injury resulting from such party's negligence to the       *
*  extent applicable law prohibits such limitation. Some               *
*  jurisdictions do not allow the exclusion or limitation of           *
*  incidental or consequential damages, so this exclusion and          *
*  limitation may not apply to You.                                    *
*                                                                      *
************************************************************************

8. Litigation
-------------

Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.

9. Miscellaneous
----------------

This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.

10. Versions of the License
---------------------------

10.1. New Versions

Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.

10.2. Effect of New Versions

You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.

10.3. Modified Versions

If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).

10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses

If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.

Exhibit A - Source Code Form License Notice
-------------------------------------------

  This Source Code Form is subject to the terms of the Mozilla Public
  License, v. 2.0. If a copy of the MPL was not distributed with this
  file, You can obtain one at http://mozilla.org/MPL/2.0/.

If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.

You may add additional accurate notices of copyright ownership.

Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------

  This Source Code Form is "Incompatible With Secondary Licenses", as
  defined by the Mozilla Public License, v. 2.0.
