Patent Description:
The need for data storage capacity is increasing rapidly every year. Today, a company's storage system may be distributed over different locations and comprise multiple server racks in one or multiple data centres where each rack houses multiple storage servers. Some companies outsource their storage needs to external storage providers offering cloud-based storage solutions.

At some point in time, it may be decided to migrate data from a current storage system to a new one. This decision may be driven by several factors, but in any case, a data migration is to be performed, i.e., all data items on the source system needs to be copied to the destination system and, at some point in time, users need to be switched to the new destination system.

For large storage systems serving tens of Terabytes up to several Petabytes of data, a single copy of all data may take in the order of days, weeks or even months. Denying user access to the storage system for such a long time is simply unacceptable and, therefore, the data migration is typically performed in different steps. First, an initial or baseline synchronization is performed between the source to the destination system. Then, one or more incremental or intermediate synchronizations are performed. An incremental synchronization only considers differences between the source and destination system. During the initial and incremental synchronizations, the users may still be allowed access to the source storage system such that there is no interruption of business. Then, at a certain planned point in time, the actual cutover or switchover is performed. During the cutover, the users are denied access from the storage systems or have read-only access and a last or cutover synchronizations is performed. When the final synchronization and all necessary checks are done, the users are switched to the new destination storage system and can again access their migrated data.

To perform a synchronization from source to destination, being initial, incremental or cutover, both source and destination are first scanned thereby obtaining a listing of data items together with some parameters such as size and timestamps. Then, the scan results are compared. From this comparison, a list of commands is generated to synchronize the destination storage system with the source storage system. Such commands may for example comprise a copy of a data item from source to destination, a deletion of a data item at the destination, an update of metadata of a data item at the destination. Several commands may be issued sequentially to synchronize a data item. For example, first a digest of a data item on both source and destination is made, then the digests are compared and, depending on the outcome, a copy of the data item is made.

<CIT> discloses a method for migrating data from a source storage system to a destination storage system comprising the following steps: in a first step, an initial copy is performed; in a second step, one or more incremental copies are performed and then a final cutover incremental copy is performed; the performing the one or more incremental copies further comprise excluding from a respective one of the one or more incremental copies first data portions of the data that are likely to change before this performing a final cutover incremental copy.

It is still beneficial to further reduce the amount of generated commands, because each command takes an amount of time and, thus, increases the time of the synchronization and, hence the total time of the data migration. Further, the final stage or switchover can take still take very long due to final checks between source and destination and due to making digests of all copied data for reporting purpose.

Amongst others, it is an object of embodiments of the invention to alleviate the above-identified problems and provide a solution for performing a data migration that is faster, is more reliable and has a shorter final cutover time.

This object is achieved, according to a first example aspect of the present disclosure, by a computer-implemented method performed while performing a data migration from a source storage system to a destination storage system. The method comprises performing an initial synchronization, at least one intermediate incremental synchronization, and a final cutover synchronization of data items; the initial synchronization comprising:.

and each of the at least one intermediate incremental synchronizations and the final cutover synchronization comprising:.

In other words, the data migration is not a sequence of independent synchronization steps that are each time based on a mere scanning the source and destination. Instead, a state is maintained in between the synchronisation steps. This way, a synchronization is not only based on the current state of a data item on the source and/or destination, but also on its last known state, i.e. the state as obtained by the previous synchronization. In order to maintain the state for the next synchronization, the state of a data item is updated after the execution of a command on that data item.

By such status records, there is more information available for generating the commands. Therefore, situations that would normally trigger a command such as taking a digest, reading or modifying metadata or even taking a full copy of a data item may now be avoided. Moreover, keeping a status record also allows to detect tampering events in the destination in between the synchronizations by comparing the status record with the destination scan. This makes the migration more reliable and traceable. All this results in a shorter synchronization time and a shorter overall migration. The same benefits apply to the final synchronization or switchover which will also be shorter. Further, the status records avoid the need for additional integrity verification during the final switchover.

By the updating of the status records the size of the records is kept constant and the amount of status records is proportional to the amount of data items. This way, the solution scales linearly for larger data migrations.

According to an embodiment, the status record of a data item comprises a source change timestamp indicative of a moment in time on which the data item was last changed on the source storage system; and a destination change timestamp indicative of a moment in time on which the data item was last changed on the destination storage system.

A change timestamp associated with a data item is updated to the current time every time the data item is modified. Therefore, by recording such change timestamp in the status record, a good indicator for a change in a data item is obtained without the need for comparing the data item's content or metadata. Further, even when a data item is modified on the destination outside the data migration, the change timestamp will change and, hence, can still be detected.

This change timestamp may then further be used during the generation of the commands by comparing the change timestamps from the data record with the change timestamps obtained from the source and destination data item list.

According to an embodiment, the status record of a data item comprises at least one of: a message digest of the data item; a size of the data item; a type of the data item; an owner of the data item; access permissions of the data item; retention information of the data item; and a path or key to the data item.

All this information typically becomes available during the performing of a synchronization command. Therefore, storing this information in the status record is not an intensive operation. But, during a next operation, having this information available may save the execution of the same command for obtaining this same information.

The status record of a data item may further comprise a synchronization status selectable from a group comprising: a first status option indicative of a valid synchronization of the respective data item; and a second status option indicative of a synchronization mismatch of the respective data item.

Also the reason for the synchronization mismatch may be described in the status record, for example because the data item is deliberately excluded from the data migration.

After a synchronization, data items may still be unsynchronized for various reasons. By indicating such synchronization mismatch in the status record, further unnecessary attempts for synchronizing such items may be avoided, depending on the specific reason of the mismatch which may also be specified in the status record.

The status records are created during the initial or base synchronization of the data items by:.

According to an embodiment, the destination storage system already comprises data items before the data migration. Performing the initial synchronization then further comprises:.

By the status records, a bootstrapping of a data migration is possible, for example when the destination system already comprises data items that were copied during another migration attempt. By the status records it may be detected that a data item that is already on the destination is not migrated. If it wasn't migrated, then the state of that data item is unknown. Therefore, a command may be generated that will compare the data item on source and destination, and, if there is a difference, recopy it. If the data item is the same, an up-to-date status record may be created. By not copying data items that are already on the destination but only updating the status records considerable time savings can be made.

According to an embodiment, the final cutover synchronization of data items is performed thereby obtaining final status records.

The cutover synchronization or switchover is a final synchronization wherein the state of the source storage system is considered frozen, i.e. data items will no longer be changed. By updating the status records during the switchover, the final status records will automatically reflect the outcome or status of the complete data migration. With these final status records, a verification step of the data migration may be avoided because all information that is normally obtained by such verification is already present in the data records. A considerable time saving is achieved because a comparison between the source and destination storage system is no longer needed.

According to an embodiment the method further comprises:.

Data storage system may support such WORM states for a data item for legal reasons, e.g. when certain data items must be retained for a certain period of time. As the data item becomes unalterable when applying the WORM state, mistakes must be avoided at all cost during a migration. Therefore, the WORM states are only applied near the end of the migration after applying the cutover synchronization. As the final status records already provide all the information needed for verifying WORM data items, the WORM commit is based on these final records. Based on the change timestamps, the integrity of the migrated data items can be assured.

According to a second example aspect, the disclosure relates to a controller comprising at least one processor and at least one memory including computer program code, the at least one memory and computer program code configured to, with the at least one processor, cause the controller to perform the method according the first example aspect.

According to a third example aspect, the disclosure relates to a computer program product comprising computer-executable instructions for causing an apparatus to perform at least the method according to the first example aspect.

According to a fourth example aspect, the disclosure relates to a computer readable storage medium comprising computer-executable instructions for performing the method according to the first example aspect when the program is run on a computer.

The current disclosure relates to data migration between data storage systems and more particular the data migration from a source storage system to a destination storage system. <FIG> illustrates an exemplary embodiment of such a source <NUM> and destination <NUM> storage systems. The source storage system <NUM> comprises a plurality of storage servers <NUM> each housing one or more digital storage means <NUM>. Similarly, the destination system comprises a plurality of storage servers <NUM> each housing one or more digital storage means <NUM>. The storage servers <NUM> and <NUM> may be housed in a same or different data centre inside or outside a company's data network. The storage systems <NUM> and <NUM> can offer data storage and access to users and services. Such access may be done over the network <NUM>, e.g. the Internet or a private network. The data to be migrated from the system <NUM> to the system <NUM> typically comprises a set of data items that are individually accessible by a remote access protocol.

A data item may for example correspond to a file system item such as a file or a directory within a hierarchical or structured file system. Various protocols may be used for accessing such file system items such as for example the Apple Filing Protocol (AFP), the Web Distributed Authoring and Versioning (WebDAV) protocol, the Server Message Block (SMB) protocol, the Common Internet File System (CIFS) protocol, the File Transfer Protocol (FTP), the Network File System (NFS) and the SSH file transfer protocol (SFTP).

A data item may for example correspond to an object of an object addressable storage system. Such an object comprises a key and a value wherein the key serves as a unique identifier of the value which holds the actual data that is stored. Data can be retrieved from an object addressable storage system by providing the unique identifier upon which the associate data, i.e. value, is returned. Because of the key-value storage, an object addressable storage system stores data in an unstructured manner as opposed to for example a file system. The object addressable storage system may be a cloud based object addressable storage system that is interfaceable by a pre-defined application programming interface (API) over a computer network such as the Internet. An example of a cloud based object addressable storage system is Amazon S3 or Amazon Simple Storage Service as offered by Amazon Web Services (AWS) that provides such object addressable storage through a web-based API. Another example is Google Cloud Storage offered by Google providing RESTful object storage on the Google Cloud Platform infrastructure.

<FIG> illustrates steps for performing a data migration <NUM> from a source storage system <NUM> to a destination storage system <NUM> according to an example embodiment. The steps are further illustrated with reference to the plot <NUM> in <FIG> where the transfer size and transfer duration of a synchronization <NUM>-<NUM> from the source storage system <NUM> to the destination storage system <NUM> are illustrated. The transfer size is then the amount of data that is transferred from source to destination while the transfer time is the amount of time it takes to perform the synchronization.

At some point in time, a data migration is started. Before and during the migration data storage may still be provided from the source data storage system to users. During the migration the destination storage system is populated with copies of the data items. At the end of the migration, during the cutover or switchover, all user access is denied to both source and destination storage systems or the users have read-only access to the source storage system and the remaining unsynchronized data items are synchronized to the destination storage system. Then, all users are given access to the destination storage while the source storage system can be decommissioned. By the cutover during which access is denied, data integrity is guaranteed.

In a first step <NUM> an initial synchronization is performed. In <FIG> this initial synchronization is illustrated by the block <NUM> where its width represents the time it takes to perform the initial synchronization and its height represents the data size of the transfer between source and destination. For typical large data migrations, such an initial copy may take several days, weeks or even months. Apart from the size of the data, the transfer time will also be restricted by the available bandwidth for transferring the data between the source <NUM> and destination <NUM>.

The initial synchronization <NUM> may comprise a copy of all data item on the source to the destination. In the first step <NUM> all data items making up the data are thus copied from the source storage system <NUM> to the destination storage system <NUM>. Data items that are likely to change before the cutover may also be excluded from the initial synchronization <NUM>. As the data items are still likely to change, a new copy will anyhow have to be made before or during the cutover. Therefore, by excluding such a data portions from the initial copy, the initial copy will take less time to perform and network bandwidth is saved.

After performing the initial synchronization in step <NUM>, one or more incremental synchronizations <NUM> to <NUM> are made until the start of the actual cutover. During an incremental synchronization differences between the source and destination system <NUM> and <NUM> are identified. These differences are then translated to commands such that the destination is again synchronized with the source. In <FIG>, the first incremental synchronization is illustrated by block <NUM>. If a data item on the source has already a copy on the destination that was copied there during the initial copy <NUM> and was further left untouched, then the data item is not copied during the incremental synchronization. Therefore, the size of the incremental synchronization <NUM> will be smaller than the initial copy <NUM> as it is unlikely that all data items on the source storage system will have changed. Moreover, data items that are likely to change before the cutover may further be excluded from the incremental synchronization <NUM>.

The step <NUM> of performing the incremental synchronizations may be repeated several times until the cutover <NUM>. Step <NUM> may be repeated at least until the transfer size of the incremental synchronizations has reached a steady state <NUM>. In <FIG> the incremental copies <NUM>, <NUM> and <NUM> have reached a steady state with regards to their transfer size.

Then, in step <NUM>, the actual cutover synchronization <NUM> is performed during a certain maintenance window <NUM>, preferably after the steady state <NUM> is reached. During this maintenance window <NUM>, all access to the data is denied or only read-only access is granted and a final cutover synchronization <NUM> is performed.

<FIG> illustrates steps for performing a synchronization <NUM> between a source storage system <NUM> and a destination storage system <NUM> according to an example embodiment, for example for performing initial synchronization <NUM>, an intermediate incremental synchronization <NUM> or a final cutover synchronization <NUM>. A synchronization starts with performing a scan <NUM>, <NUM> of the source and/or destination storage system thereby obtaining lists <NUM>, <NUM> of data items on the source and destination, i.e., a source and destination file system data item list. Such a scan may be obtained by one or more listing commands executed on the source and destination storage system. Such a data item list at least uniquely identifies the data items on the storage system, allowing further handling or manipulation during the synchronization. For a file system item, the item list may comprise the file name, the file type, e.g. 'file', 'directory', and 'symbolic link', the file path, access permissions, the access timestamp, i.e. when the file item was last accessed, the modify timestamp, i.e. when the content was last changed, the change timestamp, i.e. when the file item's metadata was last changed, and the creation timestamp, i.e. when the file item was created. For an object of an object storage system, the item list may comprise the key value of the object, access permissions, the access timestamp, i.e. when the object was last accessed, the modify timestamp, i.e. when the data of the object was last changed, the change timestamp, i.e. when the object's metadata was last changed, and the creation timestamp, i.e. when the object item was created.

The synchronization <NUM> then proceeds to a next step <NUM> wherein the source and destination data item list <NUM>, <NUM> is compared with status records <NUM>. These status records are stored as a list or report <NUM> and comprise information on the synchronization of the data items, i.e. information on the last known synchronization state of the file system items. Based on the data item lists <NUM>, <NUM> and the status records <NUM>, a set of commands <NUM> is generated to perform the synchronization, i.e. commands that are to be executed on the source and/or destination storage system.

A status record in the status report <NUM> may comprise the following fields:.

The above example is applicable for file system items. Similar fields may be defined for data items in object storage systems. In some situations, one or more fields may be undefined. For example, a file system item that has 'directory' as data item type may have no size or content digest. The data item path is the unique identifier of the data item and may for example correspond to the file system path relative to the root of the migration, i.e. relative to the highest directory in the migration. The status field is indicative of the status of the data item as it was known when last synchronized. According to an embodiment, the status field may take any of the values as shown in Table <NUM> below.

A data record may provide further additional information about the item depending on the status in the 'information' field. For data items that are OUT OF SYNC it may give the reason why the item is out of sync, for example the destination storage system does not allow a data item having a specific name, e.g. a very long name, or one using special characters. For data items that are UNKNOWN it may comprise the reason why the item status is unknown, for example because there was a scan error on the source storage system.

The data item type contains a value that defines the type of data item, for example 'FILE' for a file, 'DIRECTORY' for a directory, 'SYMBOLIC_LINK' for a symbolic link, 'PIPE' for named pipes, 'SOCKET' for a named Unix domain socket, 'BLOCK_DEVICE' for a block device file type that provides buffered access to hardware devices, 'CHAR_DEVICE' for a character special file or character device that provides unbuffered, direct access to a hardware device, and 'MOUNT_POINT' for a mount point or location in the storage system for accessing a partition of a storage device. The data item size corresponds to the number of bytes that would be returned when reading the data item from start to end. The data item content digest contains the digest of the content. To obtain a digest value, a hashing algorithm may be used. The hashing algorithm may then also be used to verify migrated content during the last cutover synchronization. Different algorithms may be used such as for example MD5, SHA-<NUM>, SHA-<NUM> and SHA-<NUM> generating respectively <NUM>, <NUM>, <NUM> and <NUM> character long digest values. Table <NUM> below shows an illustrative example of possible combinations of a data item type, data item size and data item content digest.

The change timestamp in both source and destination is useful because the data item is mutable during the migration at both the source and destination. The change timestamp identifies which version of the data item was copied from source to destination and further allows detecting any subsequent changes to the source or destination data item outside the scope of the migration, i.e. apart from the changes done by generated commands <NUM>. In most file systems, the change timestamp is updated by the filesystem itself every time the data of the data item or metadata of the data item is altered. Moreover, this updating is performed automatically and cannot be set by a user or user program. Timestamps may be formatted in a standard, relatively compact and human readable ISO <NUM> format with second, millisecond or nanosecond resolution, depending on the protocol used.

Based on the state records <NUM> and the scan results <NUM>, <NUM> a list of commands <NUM> is generated that are to be executed in a next step <NUM>. A command may be an action that is to be performed on the source or destination storage system, e.g. to delete a data item on the source and/or destination, to copy a date item from source to destination, to update metadata associated with a data item etc. A command may also be an action that does not directly change the status of the source or destination storage system, but that will update the status report <NUM> during a later step <NUM>, i.e. update a status record of a data item.

Table <NUM> below shows different types of commands <NUM> that may be generated by step <NUM> according to an example embodiment.

Then, in a next step <NUM>, the list of generated commands <NUM> are executed. Besides the execution itself, this step also generates a result list <NUM>. The results in the list <NUM> are then used in a next step <NUM> to determine a merge list <NUM>, i.e. a list with updates for the status list <NUM>. In a next merge step <NUM> the status list <NUM> is then updated based on this merge list <NUM>. Table <NUM> below shows possible entries of merge list <NUM> depending on the executed command and the result of the command as both specified in the result list <NUM>.

<FIG> illustrates further steps <NUM>-<NUM> performed for generating the commands of step <NUM> according to an example embodiment. In a first step <NUM> the scan results <NUM> and <NUM> are scanned for errors and a REPORT_ERROR command is generated for a detected error in the scan results. Then, the method proceeds to step <NUM> wherein the differences between the source and destination scan results <NUM>, <NUM> are identified. The following differences may for example be identified in step <NUM>:.

This first classification is only based on the scan results <NUM>, <NUM> and thus based on information that is available by the scanning, e.g. the data item type, timestamps of the data item and the size of the data item.

Then, the method proceeds to the next step <NUM> wherein an initial set of intermediate commands is generated based on the classification step <NUM>, e.g. COPY_NEW, COPY, COPY_METADATA, DELETE, REPLACE, EXCLUDE, VERIFY, COPY_WORM. Also, other parameters needed for the execution of the commands are provided. These commands are then further forwarded to the next step <NUM> wherein the intermediate commands are updated based on the retrieved status records <NUM>. For example, when there is no command generated for a data item, then a REPAIR is generated if there is no status record or if there is a status record that is not IN_SYNC. Also, the COPY_METADATA is converted to a REPAIR command if there is no status record or the status record is not IN_SYNC.

<FIG> illustrates steps performed during step <NUM> when encountering a REPAIR command. As described above, such a command is issued when a status record is to be reconstructed, for example when there is no previous status record available. This will also be done to avoid scenarios where someone tampered with the destination and forged the modification timestamp for example. The reason that such REPAIR item may be necessary is that data items that are in sync after step <NUM> are only based on the timestamps in the scan results, e.g. the 'last modification time' of a file system. It is however possible to create a data item that is in sync based on the information available in step <NUM>, but has still different content. In order to verify this, the content would have to be verified by means of a digest and all metadata associated with the data item would have to be checked. By the REPAIR command, such mismatch can be detected and repaired, i.e. the data item will be synchronized even if step <NUM> identified it as being in sync. In a first step <NUM>, the VERIFY command is ran wherein the data items on both source and destination are compared, both in terms of content as in terms of the metadata. If the result of the VERIFY command is that the data item is completely in sync, with the exception of the destination change time, it will generate a result <NUM> that will update the current status record to the current verified situation during the merge step <NUM>. If there is a mismatch detected, then a COPY <NUM> or COPY_METADATA <NUM> command is issued to bring the data item in sync with the source. The result <NUM> of this command will then be used in step <NUM> to update the status record. By comparing the destination change timestamp with the destination change timestamp in the data record, it can be verified that the data item is still synchronized without doing any further time consuming verification commands.

When performing a first synchronization, i.e. the base of initial synchronization, the destination storage system <NUM> will normally have no data items, and there will be no status list <NUM>. During such an initial synchronization, the steps of <FIG> may be performed without the scanning <NUM> of the destination storage system <NUM> and without having any status records <NUM> during the generation <NUM> of the commands <NUM>. With only this information available, the generated commands will mostly be COPY_NEW commands. As shown in Table <NUM>, this command will trigger the creation of a new status record for the status list <NUM>. As a result, the initial synchronization will result in an initial copy of data items from source to destination and in the generation of the status list with the respective status records. During a next incremental synchronization, a full synchronization will be performed.

Alternatively, when performing a first synchronization, there might already be data items present on the destination storage system <NUM>. These data items may for example be the result of a previously failed data migration attempt. During such an initial synchronization, the steps of <FIG> may be performed with the scanning <NUM>, <NUM> of both the source and destination but without having any status records <NUM> during the generation <NUM> of the commands <NUM>. The difference with the previously described clean initial synchronization is that the command layer <NUM> may report that certain data items are already in sync while there is no status record associated to them. This situation will then be detected by the status layer <NUM> which will add a REPAIR command for this data item as further described with reference to <FIG>. As a result, the initial synchronization will result in an initial copy of data items from source to destination that were not already present but will keep the data items intact that were already present on the destination. Further, a status list with the respective status records is generated. During a next incremental synchronization, a full synchronization will be performed. In other words, the so-performed synchronization results in a bootstrapping of the data migration.

During the final cutover synchronization, the steps of <FIG> may again be performed including the updating of the status list <NUM>. The status list <NUM> then forms a report of the data migration that may be used for verifying any later problems about the migrated content.

During the final cutover synchronization, the data items that need to protected from further changes may have a write once ready many, WORM, state assigned to them. This may be done based on the final status list <NUM> whereby the relevant data items are identified from this list it is verified whether the data item on the destination has not been altered. Then, the WORM state is updated for these data items on the destination storage thereby rendering them immutable.

The steps as described above may be performed a suitable computing system or controller that has access to the source and destination storage system. To this end, the steps may be performed from within storage system <NUM> or <NUM>. The execution of the commands according to step <NUM> may further be performed in parallel by different computing systems to speed up the execution of the commands. <FIG> shows a suitable computing system <NUM> enabling to implement embodiments of the method for improving blocking effect avoidance in a wireless access node according to the invention. Computing system <NUM> may in general be formed as a suitable general-purpose computer and comprise a bus <NUM>, a processor <NUM>, a local memory <NUM>, one or more optional input interfaces <NUM>, one or more optional output interfaces <NUM>, a communication interface <NUM>, a storage element interface <NUM>, and one or more storage elements <NUM>. Bus <NUM> may comprise one or more conductors that permit communication among the components of the computing system <NUM>. Processor <NUM> may include any type of conventional processor or microprocessor that interprets and executes programming instructions. Local memory <NUM> may include a random-access memory (RAM) or another type of dynamic storage device that stores information and instructions for execution by processor <NUM> and/or a read only memory (ROM) or another type of static storage device that stores static information and instructions for use by processor <NUM>. Input interface <NUM> may comprise one or more conventional mechanisms that permit an operator or user to input information to the computing device <NUM>, such as a keyboard <NUM>, a mouse <NUM>, a pen, voice recognition and/or biometric mechanisms, a camera, etc. Output interface <NUM> may comprise one or more conventional mechanisms that output information to the operator or user, such as a display <NUM>, etc. Communication interface <NUM> may comprise any transceiver-like mechanism such as for example one or more Ethernet interfaces that enables computing system <NUM> to communicate with other devices and/or systems, for example with other computing devices <NUM>, <NUM>. The communication interface <NUM> of computing system <NUM> may be connected to such another computing system by means of a local area network (LAN) or a wide area network (WAN) such as for example the internet. Storage element interface <NUM> may comprise a storage interface such as for example a Serial Advanced Technology Attachment (SATA) interface or a Small Computer System Interface (SCSI) for connecting bus <NUM> to one or more storage elements <NUM>, such as one or more local disks, for example SATA disk drives, and control the reading and writing of data to and/or from these storage elements <NUM>. Although the storage element(s) <NUM> above is/are described as a local disk, in general any other suitable computer-readable media such as a removable magnetic disk, optical storage media such as a CD or DVD, -ROM disk, solid state drives, flash memory cards,. could be used.

The present embodiments are therefore to be considered in all respects as illustrative and not restrictive, the scope of the invention being indicated by the appended claims rather than by the foregoing description.

Claim 1:
A computer-implemented method performed while performing a data migration from a source storage system (<NUM>) to a destination storage system (<NUM>); the method comprising performing an initial synchronization (<NUM>, <NUM>), at least one intermediate incremental synchronization (<NUM>, <NUM>), and a final cutover synchronization (<NUM>, <NUM>) of data items; and wherein the initial synchronization (<NUM>, <NUM>) comprises:
- scanning (<NUM>) the source and destination storage system thereby obtaining an initial source and destination data item list (<NUM>);
- generating (<NUM>) commands (<NUM>) for performing the initial synchronization based on the scanning;
- executing (<NUM>) the commands;
- obtaining (<NUM>) results (<NUM>) of the executed commands; and
- creating (<NUM>) and storing status records (<NUM>, <NUM>) of the respective data items indicative for the synchronization state of the respective data items based on the results;
and wherein each of the at least one intermediate incremental synchronizations (<NUM>, <NUM>) and the final cutover synchronization (<NUM>, <NUM>) comprises:
- scanning (<NUM>, <NUM>) the source and destination storage system thereby obtaining the source and destination data item list (<NUM>, <NUM>);
- retrieving the stored status records (<NUM>, <NUM>) of the respective data items indicative for the last known synchronization state of the respective data items;
- generating (<NUM>, <NUM>) commands (<NUM>) for performing the intermediate incremental synchronization based on the source and destination data item list (<NUM>, <NUM>) and the status records (<NUM>);
- executing (<NUM>) the commands (<NUM>);
- obtaining (<NUM>) results (<NUM>) of the executed commands as a result list (<NUM>);
- determining (<NUM>), from the result list, a merge list (<NUM>) comprising updates for the status records (<NUM>); and
- updating (<NUM>) the status records (<NUM>) based on the merge list;
and wherein during the final cutover synchronization (<NUM>, <NUM>) all access to the data is denied or only read-only access is granted.