NVME-WDC-VS-INTER(1)

πŸ’– NVME-WDC-VS-INTER(1) πŸ’–

okay so this one lives in the NVMe Manual and it's genuinely iconic β€” it's the girl that reaches into a WDC drive and yoinks the internal firmware log out of it. no cap. πŸŽ€


🌸 NAME 🌸

nvme-wdc-vs-internal-log β€” grab the WDC device's internal firmware log and save it to a file. that's the whole assignment bestie πŸ’…


✨ SYNOPSIS ✨

nvme [<global-options>] wdc vs-internal-log <device>
                        [--output-file=<FILE>, -O <FILE>]
                        [--transfer-size=<SIZE>, -s <SIZE>]
                        [--data-area=<DATA AREA>, -d <DATA_AREA>]
                        [--file-size=<FILE SIZE>, -f <FILE SIZE>]
                        [--offset=<OFFSET>, -e <OFFSET>]
                        [--type=<TYPE>, -t <type>]

πŸ¦‹ DESCRIPTION πŸ¦‹

so for the NVMe device you hand it, it sends the WDC Vendor Specific Internal Log request and saves the result to a file. lowkey magical, highkey useful πŸ’œ

the <device> parameter is mandatory and it has to be an NVMe character device (ex: /dev/nvme0). don't skip it, she's not optional.

⚠️ heads up bestie β€” this only works on WDC devices that actually support this feature. results for any other device are undefined. like, undefined undefined. not "probably fine", not "worth a shot". undefined. 🫢

πŸŽ€ OPTIONS πŸŽ€

  • -O <FILE>, --output-file=<FILE> β€” the output file. if you don't pick one, it defaults to the device serial number followed by the "internal_fw_log<date>_<time>.bin" suffix. auto-naming queen ✨
  • -s <SIZE>, --transfer-size=<SIZE> β€” the transfer size. defaults to 0x10000 (65536 decimal) bytes. chunk it however you like πŸ’…
  • -d <DATA AREA>, --data-area=<DATA AREA> β€” which data area to retrieve. here's the tea: if you're capturing with a --type value that includes telemetry (CONTROLLER or HOST), this specifies the NVMe telemetry data area to capture, containing data from areas 1 to <DATA AREA>. but if you're capturing without such a --type value, this instead specifies the amount of vendor defined debug data to capture β€” and that version is only supported on the SN340, SN350, SN530, SN570, SN730, SN740, SN840, SN850X, SN5000, SN5100S, SN7000S, SN7100, and SN7150 devices. very specific, very demure πŸŽ€
  • -t <TYPE>, --type=<TYPE> β€” specifies the telemetry type: NONE, HOST, or CONTROLLER. this is the one that gets you either the host-initiated or the controller-initiated telemetry log page. if you don't specify it, or if <TYPE> is NONE, the command returns vendor defined debug data instead. pick your fighter πŸ’€
  • -f <FILE SIZE>, --file-size=<FILE SIZE> β€” deprecated πŸ™ˆ specifies the desired size of the data file starting at the passed in offset. it lets you retrieve the data in several smaller files of the passed in size. only supported on the devices mentioned in the docs for the --data-area parameter, and only for capture with --type=NONE or with --type not specified. so basically: know before you go.
  • -e <OFFSET>, --offset=<OFFSET> β€” deprecated πŸ™ˆ specifies the data offset at which to start retrieving the data. use it together with the file size parameter to pull the data in several smaller files. same deal as above: only supported on the devices mentioned in the docs for the --data-area parameter, and only for capture with --type=NONE or with --type not specified.

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

these ones are defined at the top-level nvme command and are available to this subcommand. shared queens, basically 🫢

  • --dry-run β€” prints the command that would be executed but doesn't actually execute it. all the delusion, none of the consequences ✨
  • --no-ioctl-probing β€” disables probing for 64-bit IOCTL support.
  • --no-retries β€” disables retry logic on transient errors. one shot, one opportunity πŸ’€
  • -o <fmt>, --output-format=<fmt> β€” sets the reporting format to normal, tabular, 'json, or binary. only one output format at a time, bestie, we do not multitask here.
  • --output-format-version=<version> β€” selects the output format version. version 1 uses the original field naming, while version 2 (default) provides more consistent and script-friendly field names. other versions are rejected. sorry to those versions 😭
  • --quiet β€” suppresses informational messages. errors are still reported, and --quiet cancels any --verbose for the library log level. she's quiet but she's still watching πŸ‘€
  • --set-options=<key=value>[,<key=value>...] β€” sets libnvme library options for this invocation. supported keys are force-4k, mi-probe-enabled, test-base-dir and test-sysfs-dir.
  • --timeout=<ms> β€” sets the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). patience is a virtue fr fr ⭐
  • -v, --verbose β€” increases the level of detail in the output. may be specified multiple times to further increase verbosity. the more the merrier 🌈

these options can also be set as machine-wide defaults in nvme-cli.conf(5). and a command-line flag always overrides the file β€” she said what she said πŸ’…


πŸ”₯ EXAMPLES πŸ”₯

  • gets the internal firmware log from the device and saves to the default file in the current directory (e.g. STM00019F3F9_internal_fw_log_20171127_095704.bin):
# nvme wdc vs-internal-log /dev/nvme0
  • gets the internal firmware log from the device and saves it to a file you actually named, in the current directory (e.g. test.bin):
# nvme wdc vs-internal-log /dev/nvme0 -O test.bin
  • gets the internal firmware log from the device and saves it to a defined file with a pathname (e.g. /tmp/test):
# nvme wdc vs-internal-log /dev/nvme0 -O /tmp/test
  • gets the internal firmware log from the device, transferring the data in 64k chunks, and saves to the default file in the current directory (e.g. STM00019F3F9_internal_fw_log_20171127_100754.bin):
# nvme wdc vs-internal-log /dev/nvme0 -s 0x10000
  • gets the internal firmware log from the device, transferring the data in 16k chunks, and saves to the default file in the current directory (e.g. STM00019F3F9_internal_fw_log_20171127_100950.bin):
# nvme wdc vs-internal-log /dev/nvme0 -s 16384
  • gets the internal firmware log up to data area 3 from the device, in 3 files of 0x1000000 bytes. three commands, three files, one slay:
# nvme wdc vs-internal-log /dev/nvme0 -d 3 -f 0x1000000 -t 0x0000000 -O /tmp/sn340_dui_data_1.bin
# nvme wdc vs-internal-log /dev/nvme0 -d 3 -f 0x1000000 -t 0x1000000 -O /tmp/sn340_dui_data_2.bin
# nvme wdc vs-internal-log /dev/nvme0 -d 3 -f 0x1000000 -t 0x2000000 -O /tmp/sn340_dui_data_3.bin
  • gets the host telemetry log page to data area 3 from the device and stores it in the file host-telem-log-da3.bin:
# nvme wdc vs-internal-log /dev/nvme1 -t host -O host-telem-log-da3.bin -d 3
  • gets the controller telemetry log page to data area 3 from the device and stores it in the file ctlr-telem-log-da3.bin:
# nvme wdc vs-internal-log /dev/nvme1 -t controller -O ctlr-telem-log-da3.bin -d 3

πŸ’œ NVME πŸ’œ

part of the nvme-user suite. iykyk ✨


🌸 and that's the whole page bestie! this lil beauty comes to you from NVMe, dated 10/30/2026, and it's the NVME-WDC-VS-INTER(1) page β€” go forth and capture those logs, you absolute main character πŸ‘‘πŸ«ΆπŸ’–

πŸ“¦ where this page comes from