SG_SAT_SET_FEATURES(8)
πΈ SG_SAT_SET_FEATURES π
okay bestie, so this is a page from the sg3_utils manual collection β it's sg_sat_set_features(8), and it's genuinely iconic for a very specific type of person (me, it's me) β¨
β¨ NAME β¨
sg_sat_set_features β the way you send an ATA SET FEATURES command through a SCSI to ATA Translation (SAT) layer. no cap, that's the whole gig π«Ά
π SYNOPSIS π
sg_sat_set_features [--count=CO] [--ck_cond] [--extended]
[--feature=FEA] [--help] [--lba=LBA] [--len={16|12}] [--readonly]
[--verbose] [--version] DEVICE
π DESCRIPTION π
So this lil utility sends an ATA SET FEATURES command to DEVICE, periodt. That command is the one that changes settings on ATA non-packet devices (aka disks) and packet devices (like cd/dvd drives π).
But here's the twist, and it's lowkey the whole vibe: it does not send the SET FEATURES command straight at the device. Instead it goes through a SCSI transport, which is assumed to contain a SCSI to ATA Translation (SAT) Layer (SATL). And where does that SATL live? Could be in an operating system driver, in host bus adapter firmware, or in some external enclosure. location unclear but she's there π
The SAT standard (that's SAT ANSI INCITS 431-2007, prior draft: sat-r09.pdf at www.t10.org) defines two SCSI "ATA PASS-THROUGH" commands: one using a 16 byte "cdb" and the other with a 12 byte cdb. This utility defaults to using the 16 byte cdb variant. SAT-2 is also a standard β SAT-2 ANSI INCITS 465-2010 β and the draft before that is sat2r09.pdf. The SAT-3 project has started and the most recent draft is sat3r05b.pdf. she keeps evolving π
Oh and if you wanna read the features back? Use the sg_sat_identify utility, which uses either the ATA IDENTIFY DEVICE command (for non-packet devices) or the IDENTIFY PACKET DEVICE command (for packet devices). matching set, obviously π
β OPTIONS β
heads up bestie β arguments to long options are mandatory for short options as well π
-c,--count=COβ the numberCOgets placed in the "count" field of the ATA SET FEATURES command. Only some subcommands (that's the term for whatever value you put in the "feature" field) actually need the count field set. The default value placed in the "count" field is0.-C,--ck_condβ sets the CK_COND bit in the ATA PASS-THROUGH SCSI cdb. Default setting is clear (i.e.0). When it's set, the SATL should yield a sense buffer containing an ATA Result descriptor no matter whether the ATA command succeeded or failed. When it's clear, the SATL should only yield a sense buffer containing an ATA Result descriptor if the ATA command failed. different energy fr fr-e,--extendedβ allows for extended LBA numbers (i.e. larger than 32 bits). This value is enabled automatically for large LBA numbers, but you can turn it on explicitly even for low LBA numbers with this option β¨-f,--feature=FEAβ the valueFEAgoes in the "feature" field of the ATA SET FEATURES command. The term "subcommand" is sometimes used for this value. The default value placed in the "feature" field is0, which is reserved and hence should not change anything π§ Two common examples are2hto enable the write cache and82hto disable it.-h,--helpβ outputs the usage message summarizing command line options then exits. IgnoresDEVICEif given. rude but fair π-L,--lba=LBAβ the numberLBAgoes in the "lba" field of the ATA SET FEATURES command. Only some sub-commands (again β that's the term for the value placed in the "feature" field) require the lba field to be set. This value is typically not a "logical block address" as the acronym might imply π The default value placed in the "lba" field is0. The maximum value allowed forLBAis0xfffffffe(or0xffffffif--len=12).-l,--len={16|12}β this is the length of the SCSI cdb used for the ATA PASS-THROUGH commands. The argument can either be16or12. The default is16. Some SCSI transports cannot convey SCSI commands longer than 12 bytes π-r,--readonlyβ causesDEVICEto be opened with the read-only flag (O_RDONLYin Unix). The default action is to openDEVICEwith the read-write flag (O_RDWRin Unix). In some cases, sending power management commands to ATA disks are defeated by OS actions on theclose()ifDEVICEwas opened with the read-write flag (e.g. the OS might think it needs to flush something to disk). so like, sometimes read-only is the move π-v,--verboseβ increases the level or verbosity. give me the lore π₯-V,--versionβ print out version string π
π¦ NOTES π¦
In the 2.4 series of Linux kernels, DEVICE must be a SCSI generic (sg) device. In the 2.6 and 3 series, block devices (e.g. disks and ATAPI DVDs) can also be specified. For example "sg_inq /dev/sda" will work in the 2.6 series kernels. From lk 2.6.6, other SCSI "char" device names may be used as well (e.g. "/dev/st0m"). Prior to lk 2.6.29, USB mass storage limited sense data to 18 bytes which made the --ck_cond option yield strange (truncated) results π¬ ancient history but we respect her
π₯ EXIT STATUS π₯
The exit status of sg_sat_set_features is 0 when it is successful. Otherwise, see the sg3_utils(8) man page. that's it, that's the tea π
π AUTHOR π
Written by Douglas Gilbert β the main character of sg3_utils, honestly π«Ά
π REPORTING BUGS π
Report bugs to <dgilbert at interlog dot com>.
bestie if you find a bug, tell Douglas, not me π
πΈ COPYRIGHT πΈ
Copyright Β© 2007-2014 Douglas Gilbert
This software is distributed under a BSD-2-Clause license. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. like none, zero, nil π
π SEE ALSO π
sg_sat_identify(sg3_utils)sg_inq(sg3_utils)sdparm(sdparm)hdparm(hdparm)
and that's the page, bestie! πβ¨ this lil slice of wisdom is from sg3_utils-1.40, dated November 2014 β vintage but she still ate π π¦
π¦ where this page comes from
- arch rolling: sg3_utils 1.49-1 Β· GPL-2.0-or-later AND BSD-2-Clause
- nixpkgs unstable: sg3_utils 1.49
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms