Skip to main content

Migration

phaseMigrationPhaserequired

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]

scanErrorstring

Why the latest scan did not finish. Present only in scan_failed.

sourceSizeinteger<int64>

The size in bytes of the zip the report was made from. Absent when it was made from a flash device.

sourceReceivedAtstring<date-time>

When the zip the report was made from was uploaded, or the flash device was scanned.

sourceDevicestring

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.

  • Array [
  • devicestringrequired

    The disk's device path, which startMigrationDeviceScan takes.

    sizeinteger<int64>required

    Bytes.

    modelstring
    serialstring
  • ]
  • zipOnlybooleanrequired

    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
    generatedAtstring<date-time>required
    unraidVersionstring

    From the first line of the flash's changes.txt. Absent when it states none.

    unverifiedLayoutbooleanrequired

    True when the scan ran only because unverifiedLayout overrode the refusal of the version or flash layout.

    verdictMigrationVerdictrequired

    Possible values: [go, go_with_warnings, no_go]

    rows object[]required
  • Array [
  • checkstringrequired

    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.

    statusMigrationCheckStatusrequired

    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]

    subjectstring

    A slot, pool or device the row is about. Absent for the whole system.

    detailstringrequired
  • ]
  • review object
    disks object[]required
  • Array [
  • slotstring

    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.

    diskNumberinteger

    The Unraid disk number of a data slot.

    unraidIdstring

    The identity Unraid recorded for the slot.

    unraidRoleMigrationUnraidRole

    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]

    proposedRoleMigrationProposedRole

    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]

    unraidBootboolean

    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.

    hostBootboolean

    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.

    devicestring

    This machine's device for the disk. Absent when none matched.

    serialstring
    wwnstring
    byIdstring

    The disk's /dev/disk/by-id name.

    modelstring
    sizeinteger<int64>

    Bytes: this machine's disk, or the size Unraid recorded when none matched.

    filesystemstring

    The filesystem this machine's disk reports.

    weakIdentityboolean

    True when only a weak identity identifies the disk. Absent when no disk of this machine matched.

    problemstring

    Why no disk of this machine matched the slot.

    refusedbooleanrequired

    Whether the scan refused the disk, as its report rows say.

    refusalCodeMigrationRefusalCode

    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]

    refusalstring

    The refusal in words, as the report's row says it.

  • ]
  • shares object[]required

    The shares the import would create.

  • Array [
  • namestringrequired
    allocationMethodstring

    Unraid's allocation method as the share's config gives it (fillup, mostfree, highwater). Absent when it sets none.

    highWaterbooleanrequired

    True for High-water, which has no exact equivalent.

    includestring[]required

    The disks the share is limited to. Empty means any.

    excludestring[]required

    The disks the share is kept off.

    warningCountintegerrequired

    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.

    modeMigrationBootMode

    Possible values: [usb, internal]

    mirroredboolean

    Whether an internal boot pool is a mirrored pair. Only for internal.

    sharedWithCacheboolean

    Whether an internal boot device also holds Unraid's cache, which is re-created, not adopted. Only for internal.

    capture objectrequired
    stateMigrationCaptureStaterequired

    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]

    capturedAtstring<date-time>

    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.

    statusstringrequired

    Possible values: [running, passed, failed]

    errorstring

    Why the verify could not finish. Absent for a mismatch.

    startedAtstring<date-time>required
    finishedAtstring<date-time>
    disks object[]
  • Array [
  • namestringrequired

    The disk's slot (disk1) or the share's name; an empty name is the files directly in the pool's root.

    passedbooleanrequired
    problemstring

    Why the scope could not be compared at all, such as a disk of the baseline that no adopted disk matches.

    expected objectrequired
    filesinteger<int64>required
    symlinksinteger<int64>required
    specialinteger<int64>required

    The special files, meaning FIFOs, sockets and device nodes.

    bytesinteger<int64>required

    The sum of the regular files' sizes.

    found objectrequired
    filesinteger<int64>required
    symlinksinteger<int64>required
    specialinteger<int64>required

    The special files, meaning FIFOs, sockets and device nodes.

    bytesinteger<int64>required

    The sum of the regular files' sizes.

    hashedinteger<int64>required

    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.

    totalinteger<int64>required
    pathsstring[]required
    extra objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
    sizeChanged objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
    checksumChanged objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
    changed objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
  • ]
  • shares object[]
  • Array [
  • namestringrequired

    The disk's slot (disk1) or the share's name; an empty name is the files directly in the pool's root.

    passedbooleanrequired
    problemstring

    Why the scope could not be compared at all, such as a disk of the baseline that no adopted disk matches.

    expected objectrequired
    filesinteger<int64>required
    symlinksinteger<int64>required
    specialinteger<int64>required

    The special files, meaning FIFOs, sockets and device nodes.

    bytesinteger<int64>required

    The sum of the regular files' sizes.

    found objectrequired
    filesinteger<int64>required
    symlinksinteger<int64>required
    specialinteger<int64>required

    The special files, meaning FIFOs, sockets and device nodes.

    bytesinteger<int64>required

    The sum of the regular files' sizes.

    hashedinteger<int64>required

    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.

    totalinteger<int64>required
    pathsstring[]required
    extra objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
    sizeChanged objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
    checksumChanged objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
    changed objectrequired

    A capped list of paths from the root of the disk or pool, with how many there were in all.

    totalinteger<int64>required
    pathsstring[]required
  • ]
  • duplicatesinteger<int64>required

    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.

  • Array [
  • pathstringrequired
    disksstring[]required
  • ]
  • 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.

    finishingbooleanrequired

    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.

    confirmationstring

    The exact string initializeMigrationParity requires. Absent when problem is set.

    erases object[]required

    Every device the point of no return erases; empty when finishing.

  • Array [
  • rolestringrequired

    Possible values: [parity, cache]

    devicestringrequired

    The device node, as it is named in confirmation.

    serialstring
    wwnstring
    sizeinteger<int64>
    partitionbooleanrequired

    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.

  • ]
  • problemstring

    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.

    unprotectedWindowstringrequired

    The unprotected window: the array has no redundancy from the moment Unraid's array stopped until the initial sync completes.

    rollbackstring[]required

    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.

    Migration
    {
    "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"
    ]
    }
    }