The --assume-clean flag is added to graidctl with a confirmation prompt to allow users who desperately want to keep their failed DG serving.
Since this operation may bring a PD online without ensuring data integrity, potentially compromising the consistency of the array, the user must have a thorough understanding of the drive conditions and accept full responsibility for any risks. As a safeguard, the following prompt will appear, and the command will only execute upon successful confirmation.
Warning: This is an unsafe operation!
Using '--assume-clean' may cause data inconsistency or data loss.
Proceed only if you fully understand the risks and have verified your backup.
To confirm, type (Case sensitive): 'Confirm Unsafe Operation'
Confirmation:
You can also use the --confirm-unsafe-operation flag to bypass the prompt and execute the command immediately.
Note
THIS FLAG IS HIDDEN TO USERS
graidctl create dg [raid_type] [ids] --assume-clean
- Skips the initialization step of DG (replaces the original
-f / --force_clean flag). List DG will now display a ! after its state.Describe DG will show Assume Cleaned: true.
graidctl edit dg [ID] marker forced_online
- Brings a failed DG back online (same behavior as before, but now requires confirmation and is no longer hidden).
- Can only be executed on a FAILED DG.
- Can only be executed if the DG has enough healthy PDs.
List DG will now display a ! after its state.Describe DG will show Assume Cleaned: true.
DG with Write Hole (Auto/No Prompt)
- If a DG might contain a write hole, the system will trigger an event and continue serving data.
List DG will now display a ! after its state.Describe DG will show Assume Cleaned: true.
graidctl edit pd [ID] marker [good|online] --assume-clean- Considers the PD healthy and brings it up without requiring a rebuild.
- Can only be executed on a PD that belongs to a DG.
- Can only be executed alongside an INACTIVE DG.
- Can only be executed if the DG cannot use
forced_online (i.e., already has enough healthy PDs). - After unsafely bringing up a PD, the DG will automatically
forced_online if there are enough PDs regarded as healthy. List PD will now display a ! after its state.List DG will now display a ! after its state.Describe PD will show Assume Cleaned: true.Describe DG will show Assume Cleaned: true.
Example for showing ! in list DG:
✔List drive group successfully.
│───────│───────│────────│──────────│─────────│──────│───────────────────────│──────────│
│ DG ID │ MODE │ VD NUM │ CAPACITY │ FREE │ USED │ CONTROLLER │ STATE │
│───────│───────│────────│──────────│─────────│──────│───────────────────────│──────────│
│ 0 │ RAID5 │ 0 │ 4.3 GiB │ 4.2 GiB │ 0 B │ running: 0 prefer: 0 │ OPTIMAL! │
│───────│───────│────────│──────────│─────────│──────│───────────────────────│──────────│
Example for showing Assume Cleaned: in describe DG:
✔Describe drive group successfully.
DG ID: 0
NQN: nqn.2020-05.com.graidtech:GRAID-SR42AFD047BF976713
Model: GRAID-SR
Serial: 42AFD047BF976713
Firmware: 1.7.0-dev
Mode: RAID5
Capacity: 5.7 GiB (6085935104 B)
Free Space: 5.7 GiB (6081740800 B)
Used Space: 0 B
Strip Size: 4096
State: OPTIMAL
PD IDs: [0 1 2 3 4]
Number of VDs: 0
Prefer Controller: 0
Running Controller: 0
Volatile Cache: Disabled
PD Volatile Cache: Enabled
Journal: Degrade Only
Assumed clean: true
Attributes:
init_speed = high
rebuild_speed = high
spdk_bdev = DISABLE
auto_failover = ENABLE
transform_speed = high
copyback_speed = high
resync_speed = high
cc_speed = high
FreeRanges:
1 - 1450
Example for showing ! in list PD:
...│────────────────│──────────│─────────│───────────│─────────│───────────────────│───────────────│
...│ MODEL │ CAPACITY │ SLOT ID │ NUMA NODE │ WEAROUT │ STATE │ SED STATE │
...│────────────────│──────────│─────────│───────────│─────────│───────────────────│───────────────│
...│ QEMU NVMe Ctrl │ 1.9 GiB │ N/A │ 0 │ 0% │ ONLINE! │ Not Supported │
...│ QEMU NVMe Ctrl │ 1.9 GiB │ N/A │ N/A │ 0% │ OFFLINE │ Not Supported │
...│ QEMU NVMe Ctrl │ 1.9 GiB │ N/A │ 0 │ 0% │ ONLINE │ Not Supported │
...│ QEMU NVMe Ctrl │ 1.9 GiB │ N/A │ 0 │ 0% │ ONLINE │ Not Supported │
...│────────────────│──────────│─────────│───────────│─────────│───────────────────│───────────────│
Example for showing Assume Cleaned: in describe PD:
✔Describe physical drive successfully.
PD ID: 0
DG ID: 0
Slot ID: -1
GUID: nqn.2019-08.org.qemu:NVME0008
Mode: QEMU NVMe Ctrl
Capacity: 1.9 GiB
State: ONLINE
Device Path: /dev/gpd3
Numa Node: 0
Volatile Cache: Enabled
Wearout: 0%
Critical Warning:
No warning.
Assumed clean: true
SED State: Not Supported
Attributes:
locating = false
hotspare =
SMART Log:
Critical Warning : 0
Composite Temperature : 50°C (323 Kelvin)
Available Spare : 0%
Available Spare Threshold : 0%
Percentage Used : 0%
Endurance Group Critical Warning Summary : 0
Data Units Read : 1736
Data Units Written : 568
Host Read Commands : 7824
Host Write Commands : 2384
Controller Busy Time : 0
Power Cycles : 0
Power On Hours : 3
Unsafe Shutdown : 0
Media and Data Integrity Errors : 0
Number of Error Information Log Entries : 0
Warning Composite Temperature Time : 0
Critical Composite Temperature Time : 0
Thermal Management T1 Transition Count : 0
Thermal Management T2 Transition Count : 0
Thermal Management T1 Total Time : 0
Thermal Management T1 Total Time : 0