feat: add S3-compatible object storage backend
Add a new backend store that enables iSCSI targets backed by S3-compatible object storage (AWS S3, MinIO, Ceph RGW, etc.). The implementation uses a chunked storage strategy where the virtual block device is divided into fixed-size chunks (default 4 MiB), each stored as an independent S3 object. This enables efficient random read/write access on top of object storage. Key features: - Chunked storage with configurable chunk size - Sparse device support (unwritten chunks treated as zeros) - Concurrent multi-chunk I/O via errgroup - Per-chunk locking for safe read-modify-write - AWS SDK v2 with default credential chain - In-process gofakes3 test server (no Docker needed) - 12 unit tests + 2 integration tests Also updates CI workflow to run S3 backend tests and updates README with S3 backend documentation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
31
examples/config-s3.json
Normal file
31
examples/config-s3.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"storages": [
|
||||
{
|
||||
"deviceID": 2000,
|
||||
"path": "s3:gotgt-bucket/iscsi/disk0",
|
||||
"online": true,
|
||||
"backendType": "s3",
|
||||
"blockShift": 9,
|
||||
"deviceSize": 1073741824,
|
||||
"s3ChunkSize": 4194304,
|
||||
"s3Endpoint": "http://localhost:9000",
|
||||
"s3ForcePathStyle": true
|
||||
}
|
||||
],
|
||||
"iscsiportals": [
|
||||
{
|
||||
"id": 0,
|
||||
"portal": "127.0.0.1:3260"
|
||||
}
|
||||
],
|
||||
"iscsitargets": {
|
||||
"iqn.2016-09.com.gotgt.gostor:s3-target": {
|
||||
"tpgts": {
|
||||
"1": [0]
|
||||
},
|
||||
"luns": {
|
||||
"1": 2000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user