SCSI Debug¶
The scsi_debug kernel module creates virtual SCSI devices for testing —
configurable size, sector size, number of devices, and error injection,
without requiring real hardware.
sts.scsi_debug
¶
Virtual SCSI devices via the scsi_debug kernel module for testing.
ScsiDebugDevice
pydantic-model
¶
Bases: StorageDevice
Virtual SCSI device backed by the scsi_debug kernel module.
Example
device = ScsiDebugDevice.create(size=1024 * 1024 * 1024)
Show JSON schema:
{
"additionalProperties": false,
"description": "Virtual SCSI device backed by the scsi_debug kernel module.\n\nExample:\n ```python\n device = ScsiDebugDevice.create(size=1024 * 1024 * 1024)\n ```",
"properties": {
"path": {
"anyOf": [
{
"type": "string"
},
{
"format": "path",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Path"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Size"
},
"model": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": "SCSI Debug",
"title": "Model"
}
},
"title": "ScsiDebugDevice",
"type": "object"
}
Fields:
-
name(str | None) -
path(PathOrStr | None) -
size(int | None) -
model(str | None)
Validators:
-
_derive_fields
Source code in sts_libs/src/sts/scsi_debug.py
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | |
create(*, size=None, options=None)
classmethod
¶
Create a virtual SCSI device by loading the scsi_debug module.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
size
|
int | None
|
Device size in bytes (minimum 1MB, default 8MB) |
None
|
options
|
str | None
|
Additional module options (e.g. 'num_tgts=2 max_luns=4') |
None
|
Source code in sts_libs/src/sts/scsi_debug.py
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | |
get_devices()
classmethod
¶
Get device names from the loaded scsi_debug module, or None if not loaded.
Source code in sts_libs/src/sts/scsi_debug.py
138 139 140 141 142 143 144 145 146 | |
get_scsi_name_by_vendor(vendor)
staticmethod
¶
Get SCSI device names matching a vendor string via lsscsi.
Source code in sts_libs/src/sts/scsi_debug.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
inject_failure(every_nth=0, opts=0)
¶
Inject device failures.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
every_nth
|
int
|
How often to inject failure (0 = disabled) |
0
|
opts
|
int
|
Failure options bitmask: 1 = noisy (log details), 2 = medium error, 4 = ignore nth (always fail), 8 = RECOVERED_ERROR, 16 = ABORTED_COMMAND |
0
|
Example
device.inject_failure(every_nth=1, opts=2) # media errors on every op
Source code in sts_libs/src/sts/scsi_debug.py
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | |
remove()
¶
Flush multipath devices and unload the scsi_debug module.
Source code in sts_libs/src/sts/scsi_debug.py
93 94 95 96 97 98 99 100 101 102 103 104 105 106 | |
set_param(param_name, value)
¶
Set a scsi_debug module parameter via sysfs.
Source code in sts_libs/src/sts/scsi_debug.py
108 109 110 111 112 113 114 115 116 117 | |