Migration
imported is an adopted array waiting for its point of no return: the data disks are mounted read-only and parity and cache are untouched (startMigrationImport). The verify phase (startMigrationVerify) moves it to verifying while it runs, to verify_failed when it found a mismatch or did not finish, and to verified when every comparison passed; only verified leads to the point of no return (initializeMigrationParity). initializing is a point of no return that stopped after the former parity and cache disks were formatted and recorded: running it again finishes it and erases nothing.
Possible values: [none, scanning, scan_failed, scanned, imported, verifying, verify_failed, verified, initializing]
Why the latest scan did not finish. Present only in scan_failed.
The size in bytes of the zip the report was made from. Absent when it was made from a flash device.
When the zip the report was made from was uploaded, or the flash device was scanned.
The device the report was read from, when it was made from the Unraid USB stick and not from a zip.
flashDevices object[]required
The disks a scan can read as the Unraid USB stick now.
The disk's device path, which startMigrationDeviceScan takes.
Bytes.
True when the session's capture says Unraid booted from an internal device: the Flash Backup zip is the only source and no stick is offered.
report object
From the first line of the flash's changes.txt. Absent when it states none.
True when the scan ran only because unverifiedLayout overrode the refusal of the version or flash layout.
Possible values: [go, go_with_warnings, no_go]
rows object[]required
Which check the row belongs to, such as unraid_version, capture, boot_device, disk_mapping, disk_identity, parity_config, parity_size, data_disks, disk_integrity, baseline, content_space, smart, parity_history, shares, cache_contents, users, docker_templates, containers, user_scripts, plugins, custom_config, settings, uid_99 or sync_estimate. Later parts of the scan add checks without changing this shape.
refuse blocks the migration; flag and warn need attention before it goes ahead; info and pass do not.
Possible values: [pass, warn, flag, refuse, info]
A slot, pool or device the row is about. Absent for the whole system.
review object
disks object[]required
The capture's slot or pool (disk1, parity, pool cache), or boot for a boot device. Absent for a disk the capture does not name.
The Unraid disk number of a data slot.
The identity Unraid recorded for the slot.
The role the capture records for a disk. unassigned is a disk of this machine the capture does not name, and is given only when the capture's disks.ini could be read.
Possible values: [parity, data, cache, boot, unassigned]
The Hoserva role the import pre-fills. Absent when nothing is proposed: no disk of this machine matched the slot, the disk is refused, or the capture has no disks.ini. A disk that is an Unraid boot device, or a parity or data slot's disk that is one, is only ever ignore, except that the cache pool's row of an internal boot that shares its disk with the cache (unraidBoot) is cache. The disk this machine boots from is never proposed a role as a parity or data slot's disk; as the cache pool's disk (the shared NVMe) it is cache.
Possible values: [parity, data, cache, ignore]
True when this row's disk is also an Unraid boot device, whatever the row's slot: the cache pool of an internal boot that shares its disk with the cache (proposed cache), or a parity or data slot that names a boot device (refused as boot_device and proposed ignore). The disk is this one row, never a second boot row beside it. Absent otherwise.
True when this row's disk is the disk this machine boots from, which is the scan's own boot-disk detection, not a second one: Debian is installed on it. False when a disk of this machine matched the row and is not that disk. Absent when no disk of this machine matched, and in a report made before the field existed; absent means unknown, never false. On the cache pool's row, true is the shared NVMe.
This machine's device for the disk. Absent when none matched.
The disk's /dev/disk/by-id name.
Bytes: this machine's disk, or the size Unraid recorded when none matched.
The filesystem this machine's disk reports.
True when only a weak identity identifies the disk. Absent when no disk of this machine matched.
Why no disk of this machine matched the slot.
Whether the scan refused the disk, as its report rows say.
Why the scan refused a disk, as a code beside the row's prose. boot_device is an Unraid boot device given a data or parity slot; host_boot the disk this machine boots from, given a parity or data slot (the cache pool may share it); failed a disk reported failed; encrypted, zfs, unsupported_filesystem, filesystem_mismatch and no_filesystem the disk's filesystem; no_filesystem_node and duplicate_uuid a disk Hoserva cannot mount by filesystem UUID; multi_device_btrfs a btrfs filesystem spanning several devices; filesystem_unverified a btrfs or ext4 disk whose superblock could not be read; pending_log a log that was never replayed; integrity_check a failed read-only filesystem check; unreadable a disk that passed its checks but could not be read completely; weak_identity_parity a parity disk with only a weak identity.
Possible values: [boot_device, host_boot, failed, encrypted, zfs, unsupported_filesystem, filesystem_mismatch, no_filesystem, no_filesystem_node, duplicate_uuid, multi_device_btrfs, filesystem_unverified, pending_log, integrity_check, unreadable, weak_identity_parity]
The refusal in words, as the report's row says it.
shares object[]required
The shares the import would create.
Unraid's allocation method as the share's config gives it (fillup, mostfree, highwater). Absent when it sets none.
True for High-water, which has no exact equivalent.
The disks the share is limited to. Empty means any.
The disks the share is kept off.
How many things the share's report row flags or warns about.
boot objectrequired
Where Unraid boots from, for the planned layout and rollback wording. Every field is absent when the capture does not say.
Possible values: [usb, internal]
Whether an internal boot pool is a mirrored pair. Only for internal.
Whether an internal boot device also holds Unraid's cache, which is re-created, not adopted. Only for internal.
capture objectrequired
missing when the source has no capture, unreadable when it is there and does not parse, stale when a template on the flash was saved after it was taken, present otherwise.
Possible values: [present, missing, unreadable, stale]
When the capture was taken. Absent when it states no time or one that is not a timestamp; a present capture with no capturedAt was not checked for staleness.
verify object
The result of the latest verify (startMigrationVerify), present while an import is pending its point of no return. running is a verify that has not finished; failed is a mismatch, an error or a cancelled run; only passed means every comparison matched.
Possible values: [running, passed, failed]
Why the verify could not finish. Absent for a mismatch.
disks object[]
The disk's slot (disk1) or the share's name; an empty name is the files directly in the pool's root.
Why the scope could not be compared at all, such as a disk of the baseline that no adopted disk matches.
expected objectrequired
The special files, meaning FIFOs, sockets and device nodes.
The sum of the regular files' sizes.
found objectrequired
The special files, meaning FIFOs, sockets and device nodes.
The sum of the regular files' sizes.
How many of the baseline's sample were hashed again on this disk. 0 for a share: its checksum mismatches are the disks'.
missing objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
extra objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
sizeChanged objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
checksumChanged objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
changed objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
shares object[]
The disk's slot (disk1) or the share's name; an empty name is the files directly in the pool's root.
Why the scope could not be compared at all, such as a disk of the baseline that no adopted disk matches.
expected objectrequired
The special files, meaning FIFOs, sockets and device nodes.
The sum of the regular files' sizes.
found objectrequired
The special files, meaning FIFOs, sockets and device nodes.
The sum of the regular files' sizes.
How many of the baseline's sample were hashed again on this disk. 0 for a share: its checksum mismatches are the disks'.
missing objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
extra objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
sizeChanged objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
checksumChanged objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
changed objectrequired
A capped list of paths from the root of the disk or pool, with how many there were in all.
How many paths exist on more than one disk. The pool shows each once, from the first disk; they are never counted as missing or extra.
duplicateSample object[]
The first of the paths counted in duplicates.
parityInit object
What the point of no return (initializeMigrationParity) would do now, present in the verified phase (only a passing verify offers it) and in initializing. The screen and the command show unprotectedWindow and rollback before asking for confirmation.
True in initializing: the former parity and cache disks are already formatted and recorded, and running initializeMigrationParity with this confirmation finishes the rest and erases nothing.
The exact string initializeMigrationParity requires. Absent when problem is set.
erases object[]required
Every device the point of no return erases; empty when finishing.
Possible values: [parity, cache]
The device node, as it is named in confirmation.
True when only a partition of the device's disk is erased (the cache of an Unraid boot + data device, or a spare partition of the boot disk); the rest of that disk is left alone.
Why it cannot be offered now (a disk missing, swapped or not allowed, or no data disk with the pool's minfreespace free); no confirmation is given.
The unprotected window: the array has no redundancy from the moment Unraid's array stopped until the initial sync completes.
What rollback means once this is confirmed, for this session's boot mode and layout: the general statement first, then the row of the table that applies.
{
"phase": "none",
"scanError": "string",
"sourceSize": 0,
"sourceReceivedAt": "2024-07-29T15:51:28.071Z",
"sourceDevice": "string",
"flashDevices": [
{
"device": "string",
"size": 0,
"model": "string",
"serial": "string"
}
],
"zipOnly": true,
"report": {
"generatedAt": "2024-07-29T15:51:28.071Z",
"unraidVersion": "string",
"unverifiedLayout": true,
"verdict": "go",
"rows": [
{
"check": "string",
"status": "pass",
"subject": "string",
"detail": "string"
}
],
"review": {
"disks": [
{
"slot": "string",
"diskNumber": 0,
"unraidId": "string",
"unraidRole": "parity",
"proposedRole": "parity",
"unraidBoot": true,
"hostBoot": true,
"device": "string",
"serial": "string",
"wwn": "string",
"byId": "string",
"model": "string",
"size": 0,
"filesystem": "string",
"weakIdentity": true,
"problem": "string",
"refused": true,
"refusalCode": "boot_device",
"refusal": "string"
}
],
"shares": [
{
"name": "string",
"allocationMethod": "string",
"highWater": true,
"include": [
"string"
],
"exclude": [
"string"
],
"warningCount": 0
}
],
"boot": {
"mode": "usb",
"mirrored": true,
"sharedWithCache": true
},
"capture": {
"state": "present",
"capturedAt": "2024-07-29T15:51:28.071Z"
}
}
},
"verify": {
"status": "running",
"error": "string",
"startedAt": "2024-07-29T15:51:28.071Z",
"finishedAt": "2024-07-29T15:51:28.071Z",
"disks": [
{
"name": "string",
"passed": true,
"problem": "string",
"expected": {
"files": 0,
"symlinks": 0,
"special": 0,
"bytes": 0
},
"found": {
"files": 0,
"symlinks": 0,
"special": 0,
"bytes": 0
},
"hashed": 0,
"missing": {
"total": 0,
"paths": [
"string"
]
},
"extra": {
"total": 0,
"paths": [
"string"
]
},
"sizeChanged": {
"total": 0,
"paths": [
"string"
]
},
"checksumChanged": {
"total": 0,
"paths": [
"string"
]
},
"changed": {
"total": 0,
"paths": [
"string"
]
}
}
],
"shares": [
{
"name": "string",
"passed": true,
"problem": "string",
"expected": {
"files": 0,
"symlinks": 0,
"special": 0,
"bytes": 0
},
"found": {
"files": 0,
"symlinks": 0,
"special": 0,
"bytes": 0
},
"hashed": 0,
"missing": {
"total": 0,
"paths": [
"string"
]
},
"extra": {
"total": 0,
"paths": [
"string"
]
},
"sizeChanged": {
"total": 0,
"paths": [
"string"
]
},
"checksumChanged": {
"total": 0,
"paths": [
"string"
]
},
"changed": {
"total": 0,
"paths": [
"string"
]
}
}
],
"duplicates": 0,
"duplicateSample": [
{
"path": "string",
"disks": [
"string"
]
}
]
},
"parityInit": {
"finishing": true,
"confirmation": "string",
"erases": [
{
"role": "parity",
"device": "string",
"serial": "string",
"wwn": "string",
"size": 0,
"partition": true
}
],
"problem": "string",
"unprotectedWindow": "string",
"rollback": [
"string"
]
}
}