OPENSEACHEST_RAW(1)

πŸ“¦
version 26.03.2 Β· 3 versions
, in nixpkgs unstable, ubuntu stonking

πŸŽ€ NAME πŸŽ€

hey bestie πŸ’– meet openSeaChest_Raw(1) β€” literally the manual page for openSeaChest_Raw, living in the User Commands corner of the manual. She's the raw-command girlie of the openSeaChest crew and she's that girl. πŸ’…


✨ DESCRIPTION ✨

okay so every single time you run her, you get this little banner moment first:

openSeaChest_Raw - openSeaChest drive utilities - NVMe Enabled
Copyright (c) 2014-2026 Seagate Technology LLC and/or its
Affiliates, All Rights Reserved openSeaChest_Raw Version: 26.03.2
X86_64 Build Date: May 18 2026 Today: 20260605T144117 User:
current user

that's the name, the copyright, the version number, the build, today's timestamp and who you are. main character intro energy fr fr. πŸ‘‘

🌸 Usage 🌸

openSeaChest_Raw [-d <sg_device>] {arguments} {options}

πŸ¦‹ Examples πŸ¦‹

openSeaChest_Raw --scan
openSeaChest_Raw -d /dev/sg<#> -i

Identify device:

-d /dev/sg<#> --dataDir in --dataLen 512 --outputFile ID_dev.bin --tfrByteBlock 512 --tfrProtocol pio --tfrSize 28 --command ECh --tfrXferLengthReg sectorCount --sectorCount 1

πŸ’€ Return codes πŸ’€

the generic/common exit codes, aka the vibe check results:

  • 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
  • 10 = Not enough resources
  • 11 = Error Writing File
  • 12 = Device not found when opening handle.
  • 13 = Device not opened. Handle is busy.
  • 14 = Insecure Directory to read or write file
  • Anything else = unknown error

πŸ‘‘ UTILITY OPTIONS πŸ‘‘

  • --csmiIgnorePort (Obsolete) β€” bestie this one is obsolete and will be removed in future versions. βœ‹
  • --csmiUsePort (Obsolete) β€” also obsolete, also getting removed in future versions.
  • --csmiVerbose (Obsolete) β€” yep, obsolete, and will be removed in future versions too.
  • --echoCommandLine β€” echoes the command line you entered into the utility right onto the screen. πŸ—£οΈ
  • --enableLegacyUSBPassthrough β€” ONLY use this on old USB or IEEE1394 (Firewire) products that just won't work with the tool otherwise. It turns on a trial-and-error method that attempts sending various ATA Identify commands through vendor specific means. Because of that, certain products may respond in unintended ways since they may interpret these commands differently than the bridge chip the command was designed for. 😬
  • --forceATA β€” forces the current drive to be treated as an ATA drive. Only ATA commands will be used to talk to the drive.
  • --forceATADMA (SATA Only) β€” forces the tool to issue SAT commands to an ATA device using the protocol set to DMA whenever possible (on DMA commands). Can be combined with --forceATA.
  • --forceATAPIO (SATA Only) β€” forces the tool to issue PIO commands to an ATA device when possible. Can be combined with --forceATA.
  • --forceATAUDMA (SATA Only) β€” forces the tool to issue SAT commands to an ATA device using the protocol set to UDMA whenever possible (on DMA commands). Can be combined with --forceATA.
  • --forceSCSI β€” forces the current drive to be treated as a SCSI drive. Only SCSI commands will be used to talk to the drive.
  • -h, --help β€” shows utility options and example usage (aka literally this output you're reading right now). 🫢 Please report bugs/suggestions to seaboard@seagate.com. Include the output of --version information in the email.
  • --license β€” displays the Seagate End User License Agreement (EULA).
  • --modelMatch [model Number] β€” run on all drives matching the provided model number. It gives you a closest match, though an exact match is preferred. Ex: ST500 will match ST500LM0001. 🎯
  • --noBanner β€” suppresses the text banner that shows up every time openSeaChest is run.
  • --onlyFW [firmware revision] β€” run on all drives matching the provided firmware revision. This one only does an exact match, no fuzzy business.
  • --onlySeagate β€” match only Seagate drives for the options provided.
  • -q, --quiet β€” run openSeaChest_Raw in quiet mode. Same as -v 0 or --verbose 0. 🀫
  • -v [0-4], --verbose [0 | 1 | 2 | 3 | 4] β€” show verbose information. The 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.
  • -V, --version β€” show openSeaChest_Raw version and copyright information & exit.

🌈 UTILITY ARGUMENTS 🌈

  • -d, --device [deviceHandle | all] β€” use this with most commands to pick which device handle to run an operation on. Example: /dev/sg<#>. CSMI device handles can be specified as <error<#><#><#>>. To run across all devices detected in the system, use the "all" argument instead of a device handle. Example: -d all.
NOTE: the "all" argument is handled by running the specified options on each drive detected in the OS sequentially. For parallel operations, please use a script opening a separate instance for each device handle. πŸƒβ€β™€οΈπŸ’¨
  • -F, --scanFlags [option list] β€” controls 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 an NVMe interface
    • sd - show sd device handles
    • sgtosd - show the sd and sg device handle mapping
    • 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
  • -i, --deviceInfo β€” show information and features for the storage device.
  • -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 β€” 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 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. 😭
  • --SATInfo β€” 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 β€” issues a SCSI Test Unit Ready command and displays the status. If the drive is not ready, the sense key, asc, ascq, and fru will be displayed, and a human readable translation from the SPC spec will be displayed if one is available.
  • --fastDiscovery β€” use this option to issue a fast scan on the specified drive. ⚑
  • --dataDir [in | out | none] β€” specify the data direction of the entered raw command.
    • in - transfer data from the device to host
    • out - transfer data from the host to device
    • none - no data is transferred
  • --dataLen [length in bytes] β€” specify the data transfer length for a data-in or data-out transfer. The following post fixes are allowed for specifying a transfer length:
    • BLOCKS - used to specify a transfer length in device logical blocks.
    • B - length in bytes (val * 1) (default if no unit given)
    • KB - length in kilobytes (val * 1000)
    • KiB - length in kibibytes (val * 1024)
    • MB - length in megabytes (val * 1000000)
    • MiB - length in mebibytes (val * 1048576)
You must enter a size that is greater than or equal to any length in the entered raw command data. If a lesser value is entered, then the utility may experience errors or crash. πŸ’€ do not do this to her.
  • --inputFile [path/filename] β€” specify an input file to send to a device. Must be a binary file.
  • --inputOffset [offset in bytes] β€” specify the offset within the raw input file to start sending data from. The following post fixes are allowed for specifying a transfer length:
    • BLOCKS - used to specify an offset length in device logical blocks.
    • B - length in bytes (val * 1) (Default if no unit given)
    • KB - length in kilobytes (val * 1000)
    • KiB - length in kibibytes (val * 1024)
    • MB - length in megabytes (val * 1000000)
    • MiB - length in mebibytes (val * 1048576)
  • --outputFile [path/filename] β€” specify an output file to save data returned from a command, or, in the case of an error, the returned error buffer. This option will always append data to already created files. If an error occurs on a datain raw command, the returned error data will not be saved to a file, to prevent adding unexpected data to the created file.
  • --timeout [time in seconds] β€” specify a timeout in seconds for a raw command being sent to a device. ⏱️

πŸ”₯ SATA Only πŸ”₯

  • --aux1 [hex or decimal] (SATA Only) β€” specify the Aux (7:0) register for sending a raw SATA command. The value should be specified in hex as ??h or 0x?? or as a decimale value.
NOTE: Not all interfaces support setting this register. 32B SAT CDB required. πŸ™ˆ
  • --aux2 [hex or decimal] (SATA Only) β€”

Use this option to set the Aux 15:8 register when you're firing off a raw SATA command. Value goes in as hex, like ??h or 0x??, or as a plain decimal number. Heads up though bestie: not every interface lets you set this register 😭 and you also need a 32B SAT CDB for it.

  • --aux3 [hex or decimal] (SATA Only) β€” this one's for the Aux 23:16 register on your raw SATA command. Hex as ??h or 0x??, or decimal, your call. ⚠️ Not all interfaces support setting this register, and it needs a 32B SAT CDB.
  • --aux4 [hex or decimal] (SATA Only) β€” the Aux 31:24 register for raw SATA commands. Same deal: ??h, 0x??, or decimal. ⚠️ Not all interfaces support setting this register, and 32B SAT CDB required.
  • --auxFull [hex or decimal] (SATA Only) β€” sets the whole Aux 31:0 register set in one go for a raw SATA command. This gets interpreted as a 32bit value. Format it as hex ??h or 0x??, or as a decimal number. ⚠️ Not all interfaces support setting these registers, and yep, 32B SAT CDB required.
  • --command [hex or decimal] (SATA Only) β€” this is how you tell it the command operation code for your raw SATA command. Give it hex as ??h or 0x??, or a decimal value. ✨
  • --command's bestie:
  • --deviceHead [hex or decimal] (SATA Only) β€” sets the Device/Head register for your raw SATA command. If you just... don't pass it, it defaults to A0h, which is there for backwards compatibility with the older ATA command specs. ⚠️ NOTE: this option is supposed to be specified BEFORE the --lbaMode option. And ⚠️ NOTE: on 28bit read/write commands, the high 4 bits of the LBA register need to be placed in the low 4 bits of this register β€” that's the little handshake going on here. Value format: hex ??h or 0x??, or decimal.
  • --feature [hex or decimal] (SATA Only) β€” sets the feature register for your raw SATA command. On 48 bit commands this is the lower 8 bits. Value as hex ??h / 0x??, or decimal.
  • --featureExt [hex or decimal] (SATA Only) β€” sets the feature ext register for a raw SATA command. This is the upper 8 bits on 48 bit commands. Hex ??h or 0x??, or decimal, same as always.
  • --featFull [hex or decimal] (SATA Only) β€” sets both the feature and feature ext registers for a raw SATA command. Interpreted as a 16bit value. Give it ??h, 0x??, or decimal.
  • --icc [hex or decimal] (SATA Only) β€” sets the ICC register for a raw SATA command. Hex as ??h or 0x??, or a decimal value. ⚠️ Not all interfaces support setting this register, and 32B SAT CDB required.
  • --fullLBA [hex or decimal] (SATA Only) β€” this is the big one for LBA registers: it takes your value and interprets it as a 48 bit value, then drops it into the appropriate LBA registers for you. Super handy when you're specifying an LBA for something like a read or a write. Hex ??h / 0x?? / decimal, per usual.
  • --lbaHigh [hex or decimal] (SATA Only) β€” sets the LBA high (Cylinder High) register for your raw SATA command. Value in hex as ??h or 0x??, or as a decimal.
  • --lbaHighExt [hex or decimal] (SATA Only) β€” sets the LBA high ext (Cylinder High) ext register for a raw SATA command. This one's for 48 bit commands. ??h, 0x??, or decimal. πŸ’…
  • --lbaLow [hex or decimal] (SATA Only) β€” sets the LBA low (sector number) register for a raw SATA command. Value as hex ??h or 0x??, or decimal.
  • --lbaLowExt [hex or decimal] (SATA Only) β€” sets the LBA low ext (sector number ext) register for a raw SATA command. 48 bit commands only, bestie. ??h / 0x?? / decimal.
  • --lbaMode (SATA Only) β€” flips on the LBA Mode bit of the Device/Head register for your raw SATA command. This bit is literally required to do read/write commands on modern drives, no cap. ⚠️ NOTE: this bit is NOT set by default, because it only applies to read/write commands and not to all the other commands in the ATA specs.
  • --lbaMid [hex or decimal] (SATA Only) β€” sets the LBA mid (Cylinder Low) register for a raw SATA command. Hex ??h or 0x??, or decimal.
  • --lbaMidExt [hex or decimal] (SATA Only) β€” sets the LBA mid ext (Cylinder Low ext) register for a raw SATA command. 48 bit commands, you know the drill. ??h, 0x??, or decimal.
  • --sectorCount [hex or decimal] (SATA Only) β€” sets the sector count register for a raw SATA command. On 48 bit commands this is the lower 8 bits. Value as hex ??h or 0x??, or decimal.
  • --sectorCountExt [hex or decimal] (SATA Only) β€” sets the sector count ext register for a raw SATA command. That's the upper 8 bits on 48 bit commands. ??h / 0x?? / decimal.
  • --sectFull [hex or decimal] (SATA Only) β€” sets the sector count and sector count ext register in one shot for a raw SATA command. Interpreted as a 16bit value. Hex as ??h or 0x??, or decimal.
  • --tfrByteBlock [512 | logical | bytes | nodata] (SATA Only) πŸ¦‹ β€” tells it the data transfer length being sent or received when you issue a raw SATA command. This option has to match the definition of the command in the ATA/ACS specification, and it must be provided before a command will actually be sent. Arguments:
    • 512 β€” the data transfer is a number of 512B blocks (this is most commands)
    • logical β€” data transfer is a number of logical block sizes transfers (read commands)
    • bytes β€” the data transfer is a specific number of bytes (some legacy commands, or when tpsiu is used)
    • nodata β€” no data transfer. Used on non-data protocol commands

⚠️ NOTE: all read/write commands should use "logical", and every other data transfer should use 512.

  • --tfrProtocol [pio | dma | udma | fpdma | ncq | nodata | reset | dmaque | diag] (SATA Only) 🌈 β€” specifies the protocol for sending a raw SATA command. Like its sibling above, this has to match the definition of the command in the ATA/ACS specification, and it's required before a command gets sent. Arguments:
    • pio β€” send as programmed IO protocol.
    • dma β€” send as direct memory access protocol
    • udma β€” send as ultra direct memory access protocol
    • fpdma/ncq β€” send as first party direct memory access protocol (NCQ)
    • nodata β€” send as non-data protocol
    • reset β€” send as reset protocol (ATAPI only)
    • dmaque β€” send as direct memory access queued protocol (TCQ)
    • diag β€” send as devie diagnostic protocol

⚠️ NOTE: if a command with dma doesn't work, try udma. Some SATLs just like it better. πŸ™ƒ

⚠️ NOTE: most SATLs don't allow sending queued commands as pass-through. Some OSs also will not allow queued pass-through commands.

  • --tfrSetChkCond (SATA Only) β€” sets the check condition bit in the SAT CDB that may get sent to a translator, telling it to generate a check condition and hand back all task file results. ⚠️ NOTE: this option may not work on all SATLs. 😬
  • --tfrSize [28 | 48 | complete] (SATA Only) πŸŽ€ β€” tells it the command type: 28bit or 48bit, when issuing a raw SATA command. Again: must match the definition of the command in the ATA/ACS specification, and it must be provided before a command will be sent. Arguments:
    • 28 β€” the command is a 28 bit command (ex: identify, SMART)
    • 48 β€” the command is a 48 bit command (ex: read DMA ext, read log ext)
    • complete β€” 48 bit command that also sets ICC or AUX registers. use this to force a 32B CDB. If you specify 48 and AUX or ICC are set, a 32B CDB will automatically be generated without needing this option explicitly set.

⚠️ NOTE: complete TFR requires SAT 32B cdb, which many devices or interfaces may not support. These commands may not be available. πŸ’€

  • --tfrXferLengthReg [sectorCount | feature | tpsiu | nodata] (SATA Only) β€” specifies which registers are used to specify the length of data being sent or received when issuing a raw SATA command. Has to match the definition of the command in the ATA/ACS specification, and must be provided before a command will be sent. Arguments:
    • sectorCount β€” the sector count registers specify the number of blocks (most commands)
    • feature β€” the feature registers specify the number of blocks (queued commands)
    • tpsiu β€” a transport specific location will specify the length of the data transfer
    • nodata β€” no data transfer. Used on non-data protocol commands

⚠️ NOTE: tpsiu is generally only seen supported on USB adapters, but not all USB SATL's will recognize this option.

⚠️ NOTE: for commands, such as identify (ECh), that transfer data but do not specify a value of 1 in the sector count, it is recommended that this is added to the sector count register and and "sectorCount" is used for better compatibility with various SATLs. (Yes bestie, that's exactly how it's written, and and and all β€” iconic honestly πŸ’…)


SAS Only: =========

  • --cdb [csv CDB]
  • --cdb β€” bestie, this one lets you hand-pick the exact CDB you wanna yeet at a device 🎯 The value you type has to be in comma separated value (csv) format, no cap. And if you wanna write a value as hex, it's gotta be either pre-pended with 0x or post-pended with h or H. Obsessed with options, honestly. Examples:
1) inquiry: --cdb 12h,0,0,0,60h,0
2) inquiry: --cdb 0x12,0,0,0,0x60,0
3) inquiry: --cdb 18,0,0,0,96,0

All 3 examples send the same command to a drive ✨ three different fits, same slay.

  • --cdbLen [length in bytes] β€” use this to set the length of the CDB you're sending to the device. Max length is 255. Heads up though: some OS's may not support CDBs larger than 16 bytes πŸ™ˆ so don't come crying to me if your 200-byte banger gets ignored.

Not me dropping the whole vibe-check receipt mid-page, but here's the banner the tool shows off:
openSeaChest_Raw - openSeaChest drive utilities - NVMe Enabled
Copyright (c) 2014-2026 Seagate Technology LLC and/or its Affiliates, All Rights Reserved
openSeaChest_Raw Version: 26.03.2
X86_64
Build Date: May 18 2026
Today: 20260605T144117
User: current user

🌈 Version Info for openSeaChest_Raw 🌈

Okay so this is the receipts section, the full lore drop, the ✨identity card✨ of your build:

  • Utility Version: 26.03.2
  • opensea-common Version: 6.1.0
  • opensea-transport Version: 10.3.0
  • opensea-operations Version: 9.4.0
  • Build Date: May 18 2026
  • Compiled Architecture: X86_64
  • Detected Endianness: Little Endian
  • Compiler Used: GCC
  • Compiler Version: 14.2.0
  • Operating System Type: Linux
  • Operating System Version: 6.6.114-1
  • Operating System Name: Ubuntu 24.04.4 LTS

Like… the amount of detail? It's giving thorough. It's giving transparent. We love a utility that knows itself πŸ’…


πŸ¦‹ SEE ALSO πŸ¦‹

The full documentation for openSeaChest_Raw is maintained as a Texinfo manual. So if the info and openSeaChest_Raw programs are properly installed at your site, then this:

info openSeaChest_Raw

should give you access to the complete manual πŸ“–βœ¨ go read it, bestie, it's the director's cut.


And that's the whole page, gorgeous πŸ’– This was openSeaChest_Raw, from the openSeaChest drive utilities, and the footer stamps it as OPENSEACHEST_RAW(1) dated June 2026, signed off by the whole openSeaChest_Raw ==============... squad. Go forth and talk to your drives, main character πŸ«ΆπŸ‘‘

πŸ“¦ where this page comes from