openSeaChest_Format.txt                                   Revision: 21-Apr-2020
===============================================================================
 openSeaChest_Format 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.

Storage products which utilize the SAS, SCSI or Fibre Channel interfaces are
able to perform a full low-level media format in the field.  These three
storage interfaces use, in generic terms, the SCSI command set.  Unlike SATA,
which is low-level formatted only at the factory, SCSI command devices are able
to rescan the surface of the media while managing defective sectors (if any)
and even change the drive sector size.  The SCSI Format Unit command offers
many specialty options to accommodate a variety of conditions and to fine tune
the procedure.

Some RAID adapters, for example, use 520 byte sectors rather than the common
512 size.  Because of this ability to change to a new sector size (also called
block size), the resulting number of total sectors (Logical Block Addresses or
LBAs) on a drive can vary and the actual final count is determined at the end
of the format.  In simple terms, if the new sector size is twice a large as the
previous format then the new count of sectors is half of what it was.

The SCSI Format Unit command is a drive background command which means that
once the command is accepted by the drive it then goes offline to manage the
task with no overhead impact to the host system.  The drive will report
formatting progress in 1% increments.

Important note: Once a Format Unit command has begun on a device then it must
be allowed to complete to be usable again.  If the format is interrupted then
it will subsequently report a  corrupted format with Sense Key "03-31".  The
only way to clear a corrupted format error is to start again and allow it to
finish.

        03h - Medium error. The command was terminated with a non-recoverable
        error condition, probably caused by a flaw in the media or an error in
        the recorded data.
        31h - The media format is corrupted.

Please see the section below "About the SCSI Format Unit Command" for
additional information.

This User Guide file contains important information about openSeaChest_Format.
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.

If this is not your drive and the original owner has no claim of ownership to
it or the data stored on it, then you may still be responsible for the data in
your possession.   To protect yourself from potential liability and to protect
the previous owner's privacy, you should remove all data by performing a data
erasure on this drive.

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>.

Be very careful because using openSeaChest_Format will cause data loss. Seagate
is not responsible for lost user data.

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

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

Examples - Linux
================
        sudo openSeaChest_Format --scan
        sudo openSeaChest_Format -d /dev/sg2 -i
        sudo openSeaChest_Format --device /dev/sg1 --showSupportedSectorSizes

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

Examples - Windows
==================
        openSeaChest_Format --scan
        openSeaChest_Format -d PD2 -i
        openSeaChest_Format --device PD1 --showSupportedSectorSizes

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.

        --displayLBA [LBA | maxLBA]
                This option will read and display the contents of the specified
                LBA to the screen. The display format is hexadecimal with an
                ASCII translation on the side (when available).  The predefined
                text string "maxLBA" (without quotes) may be entered to
                indicate the last sector on the drive instead of the specific
                LBA number.

        --poll
                Use this option to cause another operation to poll for progress
                until it has completed.  This argument does not return to the
                command prompt and prints ongoing completion percentages (%)
                and the final test result.  Full drive procedures will take a
                very long time.  Used with --sanitize, --ATASecureErase (SATA),
                --writeSame (SATA), --formatUnit (SAS), --nvmFormat (NVMe).

        --progress format
                Get the periodic ongoing progress for certain types of tests
                which were started quietly (default) and running in the
                background until completion and the tool has already returned
                to the command prompt.  This type of progress checking is used
                when not using the --poll argument which does not return to the
                command prompt.  The progress counts up from 0% to 100%.
                Specify the type of test to check progress.

        --showSupportedFormats
                This option will show the supported formats of a device. These
                can be used to change the sector size or used with a format
                operation. On SAS, this is the supported block lengths and
                protection types VPD page (SBC4 and later). On SATA, this is
                the sector configuration log (ACS4 and later). If the device
                does not report supported sector sizes, please consult your
                product manual.

        SAS Only:
        ========
        --showFormatStatusLog (SAS Only)
                Use this option to view the SCSI format status log. Note: This
                log is only valid after a successful format unit operation.

        --showSupportedProtectionTypes (SAS Only)
                Use this option to view the supported protection types for a
                device. Run -i or --deviceInfo to see current protection type,
                if any.

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. May also be used with the --scan command.

        --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

                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.

        --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.

Note: The time required to erase an entire drive may take several hours. The
erase time length is slightly longer than the time it takes to read the entire
drive. The SeaChest --deviceInfo command output has a line similar to this
example: 'Long Drive Self Test Time:  1 hour 38 minutes'. You can use the
reported time for your drive as being less than the time necessary to erase the
entire drive.

        --confirm this-will-erase-data ... etc

        --setSectorSize [new sector size]        (Seagate Only)
                This option is only available for drives that support sector
                size changes. On SATA Drives, the Set Sector Configuration
                command must be supported. On SAS Drives, Fast Format must be
                supported. A format unit can be used on SAS instead of this
                option to perform a long format and adjust sector size. Use the
                --showSupportedSectorSizes option to see the sector sizes the
                drive reports supporting. If this option doesn't list anything,
                please consult your product manual. This option should be used
                to quickly change between 5xxE and 4xxx sector sizes. Using
                this option to change from 512 to 520 or similar is not
                recommended at this time due to limited drive support.

                This option can be used to quickly change the the logical
                sector size between 5xx emulation and 4xxx native logical block
                sizes. Resulting LBA (sector) count is either /8 or *8 the
                current Read Capacity or Identify, depending on the direction
                of the conversion.  In the case of SAS, this is a fast format
                unit command keeping existing data in the physical sector. The
                media may be readable, but data may be unspecified or may
                return errors on read access according to it's error processing
                algorithms. (See the help topic below: About FastFormat)

        --pattern [repeat:asciinospaces | random | increment:startValue |
             file:filename]
                Use this option with overwrite, sanitize, and format unit
                operations to write a specific pattern to a range of LBAs or
                the whole drive.

                * repeat - without spaces, enter an ASCII text string or a
                hexadecimal string terminated by a lower case "h". This pattern
                will be repeated until it fills the logical size of the LBA.
                i.e. helloword or FFFFFFFFh
                Note: A hexadecimal pattern will be interpreted as a 32bit
                      unsigned integer. 4 hex bytes (8 characters) must be
                      given for a hex value to be used. Ex: 1F037AC8h or
                      0000FFFFh

                * random - the entire logical sector size will be filled with
                random bytes. This pattern will be written to all LBAs in the
                desired range.

                * increment - enter the starting numerical value. Starting with
                this value, each byte will be written with 1 + previous value.

                * file - user supplied file name to use for a pattern. The file
                will be truncated or padded with zeros to the logical sector
                size.
                Note 1: Each file will be interpreted as a binary file.
                Note 2: A path must also be provided if the file is not in the
                        local directory.
                Note 3: Sanitize Overwrite on SATA only supports a 32bit
                        pattern. The file option will get truncated to a 32bit
                        pattern for SATA products.

        SAS Only:
        ========
        --formatUnit [current | new sector size]    (SAS Only) (Seagate Only)
                This option will start a format unit operation on a SAS drive
                Use "current" to perform a format unit operation with the
                Sector size currently being used, otherwise enter a new sector
                size to use upon format completion.

                Valid sector sizes are given by the --showSupportedSectorSizes
                command (see above) or  listed in the device Product Manual.
                This command will erase all data on the drive. The security
                initialize feature is not used and protection information will
                not be set. Combine this option with --poll or --progress to
                check for completion status until the format is complete.

                Warning: Once a Format Unit command is started it must be
                allowed to finish in order to calculate the total number of
                logical blocks (LBAs) at the finish.  If the sector size has
                changed then there will be a corresponding change to the total
                number of LBAs. If a device stops a Format Unit before it
                completes then the device will report a "Corrupted Format"
                sense code, "03-31".  Restart the format and allow it to finish
                to correct this error.

        --fastFormat [fast format mode] (SAS Only) (SBC4 required)
                You must use this option with the --formatUnit option to run a
                fast format. Available fast format modes:
                    0 - This is a standard format unit command. All logical
                        blocks will be overwritten. This command will take a
                        very long time.
                    1 - This is a fast format unit command keeping existing
                        data in the physical sector. This option can be used to
                        quickly change the logical sector size between 5xx
                        emulation and 4xxx native logical block sizes.
                        Resulting LBA (sector) count is either /8 or *8 the
                        current Read Capacity, depending on the direction of
                        the conversion.  The media may be readable, but data
                        may be unspecified or may return errors on read access
                        according to it's error processing algorithms.
                    2 - This is a fast format unit command that can change the
                        logical sector size quickly. Media may or may not be
                        read accessible until a write has been performed to
                        the media.

                Example: --formatUnit 512 --fastFormat 1 --confirm this-will... etc
                Example: --formatUnit 4096 --fastFormat 1 --confirm this-will... etc

                Note: See the help topic below: About FastFormat

        --disableCertification       (SAS Only)
                Use this option to disable the certification operation when
                performing a format unit operation.

        --disablePrimaryList       (SAS Only)
                Use this option to disable using the primary defect list when
                performing a format unit operation.

        --discardGList       (SAS Only)
                Use this option to discard the existing grown defect list when
                performing a format unit operation. Set Complete List bit,
                this is the name of the bit in the format unit command. It
                means that a complete defect list was provided in the parameter
                data.  This tells the drive that whatever g-list it knows needs
                to be discarded and to use the one provided.  Because we are not
                giving a g-list, this means it discards the g-list and will
                rediscover the defects during the format.

        --disableImmediateResponse       (SAS Only)
                Use this option to disable the immediate response bit in a
                format unit operation.  This means that the format is run in
                the foreground and doesn't report any status until it is
                complete and cannot be polled.  Not commonly used.
                Note: This mode may take a long time to complete.

         --formatMaxLBA [ new Max LBA ]       (SAS Only)
                Use this option to specify a new Max LBA for a drive during a
                format unit operation. This can speed up a format unit if
                formatting to test something, or also desiring to reduce a
                drive's capacity while formatting.
                NOTE: Not all devices support reducing capacity during a
                format. Some may ignore this parameter and format the full
                medium anyways. This is not guaranteed to stick or reduce
                formatting time.

        --protectionIntervalExponent [exponent value]       (SAS Only)
                Use this option to specify the protection interval exponent for
                protection types 2 & 3. This option is ignored for all other
                protection types.

        --protectionType [ 0 | 1 | 2 | 3 ]       (SAS Only)
                Use this option to specify the protection type to format the
                medium with.  Use with --formatUnit option.

                Protection type 0 = FMTPINFO=0 AND "Protection Field Usage"=0
                Protection type 1 = FMTPINFO=2 AND "Protection Field Usage"=0
                Protection type 2 = FMTPINFO=3 AND "Protection Field Usage"=0
                Protection type 3 = FMTPINFO=3 AND "Protection Field Usage"=1

                Note: Not all devices support protection types.

        --securityInitialize       (SAS Only)
                Use this option to set the security initialize bit in the
                initialization pattern for a format unit command. SBC
                recommends migrating to sanitize to overwrite previously
                reallocated sectors.
                Note: Not all products support this option.

        --stopOnListError       (SAS Only)
                Use this option to set the stop format bit in a format unit. If
                the device cannot locate or access an existing primary or grown
                defect list, the format will stop and return with an error.

        NVMe Only
        =========
        --nvmFormat [current | format # | sector size]  (NVMe Only)
                This option is used to start an NVM format operation. Use
                "current" to perform a format operation with the Sector size
                currently being used. If a value between 0 and 15 is given,
                then that will issue the NVM format with the specified sector
                size/metadata size for that supported format on the drive.
                Values 512 and higher will be treated as a new sector size to
                switch to and will be matched to an appropriate LBA format
                supported by the drive. This command will erase all data on the
                drive. Combine this option with --poll to poll for progress
                until the format is complete.

                HINT: Use --showSupportedFormats to print supported LBA Formats

        --nvmFmtSecErase [none | user | crypto]         (NVMe Only)
                This option is used to specify the type of erase to perform
                during an NVM format operation. All user data will be
                inaccessible upon completing format, no matter the erase
                requested.

                Options:
                     none   - no secure erase requested (previous data will not
                              be accessible)
                     user   - requests all user data is erased by the device.
                     crypto - requests a cryptographic erase of all user data.
                              Note: this mode is not supported on all devices.

        --nvmFmtMetadataSet [xlba | separate]   (NVMe Only)
                Use this option to specify how metadata is transmitted to
                the host system.
                Options:
                     xlba - metadata is transferred as part of the logical
                            block data
                     separate - metadata is transferred as a separate buffer

                Note: Not all devices support specifying this. If this option
                      is not provided, the NVM format will reuse the current
                      setting.

        --nvmFmtMS [# of bytes for metadata]    (NVMe Only)
                This option is used to specify the length of metadata with a
                requested logical block size. The device must support the
                combination of logical block size and metadata size or the
                format will be rejected by the device.

        --nvmFmtNSID [all | current]    (NVMe Only)
                This option changes the namespace ID (NSID) used when issuing
                the NVM format command. This can be used to control formatting
                device or a specific namespace if the device supports
                specifying specific namespaces for a format command. Not all
                devices support this behaviors no effect on devices that do not
                support targeting and will format the entire device.  If this
                option is not given, the format will be issued to all
                namespaces by default.

        --nvmFmtPI [0 | 1 | 2 | 3]      (NVMe Only)
                Use this option to specify the protection type to format the
                medium with.

                Note: Not all devices support protection types. If this option
                      is not provided, the NVM format will reuse the current
                      setting.

        --nvmFmtPIL [beginning | end]   (NVMe Only)
                Use this option to specify the location protection information
                in an NVM device's metadata.

                Note: Not all devices support specifying this. If this option
                      is not provided, the NVM format will reuse the current
                      setting.

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.

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).

==================================
About the SCSI Format Unit Command
==================================
(from the Seagate SCSI Commands Reference Manual, 100293068 Rev. H July 2014)
http://www.seagate.com/files/staticfiles/support/docs/manual/Interface%20manuals/100293068h.pdf

The FORMAT UNIT command requests that the device server format the medium into
application client accessible logical blocks as specified in the number of
blocks and block length values received in the last mode parameter block
descriptor in a MODE SELECT command. In addition, the device server may certify
the medium and create control structures for the management of the medium and
defects. The degree that the medium is altered by this command is
vendor-specific.

If a device server receives a FORMAT UNIT command before receiving a MODE
SELECT command with a mode parameter block descriptor the device server shall
use the number of blocks and block length at which the logical unit is
currently formatted (i.e., no change is made to the number of blocks and the
block length of the logical unit during the format operation).

The simplest form of the FORMAT UNIT command (i.e., a FORMAT UNIT command with
no parameter data) accomplishes medium formatting with little application
client control over defect management. The device server implementation
determines the degree of defect management that is to be performed. Additional
forms of this command increase the application client's control over defect
management.

The application client may specify:
  a) defect list(s) to be used;
  b) defect locations;
  c) that logical unit certification be enabled; and
  d) exception handling in the event that defect lists are not accessible.

While performing a format operation, the device server shall respond to
commands attempting to enter into the task set except INQUIRY commands, REPORT
LUNS commands, and REQUEST SENSE commands with CHECK CONDITION status with the
sense key set to NOT READY and the additional sense code set to LOGICAL UNIT
NOT READY, FORMAT IN PROGRESS. Handling of commands already in the task set is
vendor-specific. If the device server receives an INQUIRY command, a REPORT
LUNS commands, or a REQUEST SENSE command, then the device server shall process
the command. The device server shall return data for an INQUIRY command based
on the condition of the SCSI target device before beginning the FORMAT UNIT
command (i.e., INQUIRY data shall not change until after successful completion
of a format operation). The processing of commands in the task set when a
FORMAT UNIT command is received is vendor specific.

================
About FastFormat
================
A FastFormat (quickly changing the logical sector size) may take a few minutes
for the process to complete. The disk activity LED may show activity during the
conversion.  The larger the drive, the longer it takes.

NOTE: Operating systems do a device discovery during start up and set various
parameters, like total sectors and sector size, into the storage device
descriptions. The logical sector size times the number or logical sectors
defines the drive capacity.  You should expect to see OS I/O errors if you
change the logical sector size on a drive and then perform read or write
operations before the OS has updated its storage device descriptions.  Some
operating systems will throw an error after accessing a drive that has just run
a FastFormat but during its error recovery routines it may re-discover the
device parameters and update the system logs.  A system restart, however, is
the most reliable way to refresh the storage device descriptions.

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
===============
v0.0.1  23-May-2017  1_14_3 libraries.  SeaChest_FormatUnit initial beta
                     test release.  Branched from SeaChest_Erase v1.4.0.
v0.0.2  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.0.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.0.0  27-Jul-2017  1_16_2 libraries enhances Seagate brand detection.
v1.0.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.0.0  25-Sep-2017  1_17_0 libraries adds improved SATA device discovery on
                     SAS adapters, added NVMe read, write & Flush commands.
v1.1.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. Added --setSectorSize moved from
                     SeaChest_Configure. Name change from SeaChest_FormatUnit
                     to SeaChest_Format.
v1.1.1  12-Oct-2017  1_17_3 libraries improves Fast-Format compatibility on SAS.
v1.2.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. Removed --defaultFormat since that is now the
                     default behavior until other flags are added.
v1.2.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.2.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.2.0  12-Nov-2017  1_17_x libraries.  Launch date of the Seagate openSeaChest
                     open source project for storage devices.
v1.2.1  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.
v1.2.1  18-Oct-2018  1_18_3 libraries Added NVMe generic read command support.
v1.3.0  07-Jan-2019  1_19_0 libraries added per device verbosity, --deviceInfo
                     adds SAS (not SATA) FastFormat for Features Supported
                     section.
v1.4.0  03-May-2019  1_19_18 libraries added per device verbosity, --deviceInfo
                     adds SAS (not SATA) FastFormat for Features Supported
                     section,  --deviceInfo now gives Low Current Spinup
                     status. Adds --showSupportedFormats, removes
                     --showSupportedSectorSizes. Adds several new commands in
                     support of NVMe format: --nvmFormat, --nvmFmtSecErase,
                     --nvmFmtMS, --nvmFmtNSID, --nvmFmtPI, --nvmFmtPIL,
                     --nvmFmtMetadataSet.
v1.4.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.5.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.5.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.
