Data storage backup management method

A computer-implemented method to store data may include writing data to at least one of a database or one or more local storage devices. The method may also include generating redundancy information for the data. The method may also include writing the redundancy information to at least one of a remote storage device or a removable storage device.

FIELD

The embodiments discussed herein are related to data storage management methods.

BACKGROUND

Data storage and backup may generally be done in a few different ways. For example, local data storage and backup may be performed by mirroring a physical data storage device onto another physical data storage device. Alternatively, cloud-based data storage and backup may be performed by mirroring a physical data storage device onto a cloud-based data storage device. In addition, performance improvements for data storage devices may be achieved through the use of multiple physical data storage devices in a redundant array of independent disks (RAID) configuration. Different RAID levels may be configured with differing levels of redundancy and performance, from no redundancy in a RAID-0 configuration to mirroring in a RAID-1 configuration.

SUMMARY

In an example embodiment, a computer-implemented method to store data may include writing data to at least one of a database or one or more local storage devices. The method may also include generating redundancy information for the data. The method may also include writing the redundancy information to a remote storage device or a removable storage device.

In another example embodiment, a computer-implemented method to store data may include configuring a first physical storage device and a second physical storage device in a RAID-0 array. The method may also include writing data to the RAID-0 array. The method may also include generating redundancy information for the data written to the RAID-0 array. The method may also include asynchronously writing the redundancy information to a third storage device, the third storage device communicatively coupled with the RAID-0 array by a network.

In another example embodiment, a system to store data may include a local storage device and a controller. The controller may be communicatively coupled to the local storage device. The controller may be configured to write data to at least one of a database or the local data storage device. The controller may also be configured to generate redundancy information for the data. The controller may also be configured to write the redundancy information to at least one of a remote storage device or a removable storage device.

DESCRIPTION OF EMBODIMENTS

Some systems and methods disclosed here are directed to data storage and backup. Within the context of data storage and backup, different methods may be employed. Data may be stored in a local data storage device and mirrored into other local or cloud-based data storage devices. Alternatively, data may be striped across multiple local physical data storage devices. In addition, data may be striped across multiple cloud-based data storage devices. In addition, data may be striped across multiple local physical storage devices and redundancy information may be stored on multiple local physical storage devices to help prevent the loss of data in the event of failure of a physical data storage device. In contrast, one or more techniques described herein may include the striping of data across multiple local physical data storage devices together with the storage of redundancy information for the multiple local physical data storage devices on cloud-based data storage devices.

FIG. 1illustrates an example system100configured to store and backup data, arranged in accordance with at least one embodiment described herein. The system may include a computing system110, a first local data storage device120a, a second local data storage device120b, a third local data storage device120c, a network130, a first remote data storage device140a, and a second remote data storage device140b.

The first, second, and third local data storage devices120a,120b,120cmay be collectively or generically referred to as local data storage devices120or local data storage device120. Although three local data storage devices120are depicted, the system100may include one, two, or any number of local data storage devices120.

The first and second remote data storage devices140a,140bmay be collectively or generically referred to as remote data storage devices140or remote data storage device140. Although two remote data storage devices140are depicted, the system100may include one remote data storage device or multiple remote data storage devices140. Alternatively or additionally, the system100may include one or more removable data storage devices, which may be used in a similar manner as the remote data storage devices140instead of or in addition to one or more of the remote data storage devices140.

In some embodiments, the computing system110may include a processor, a data storage device controller, a network controller, volatile memory, a display, peripheral devices, a RAID controller, and/or other devices. For example, in some embodiments, the computing system110may be a personal desktop computer. Alternatively or additionally, in some embodiments, the computing system110may be a tablet computer, a cellular telephone, a smartphone, or any other electronic device. In some embodiments, the computing system110may include a RAID controller. The computing system110may be configured to direct the storage of data in the local data storage devices120. The computing system110may be communicatively coupled with the remote data storage devices140the network130.

In some embodiments, the computing system110may be configured to operate the local data storage devices120in a RAID array. For example, in a RAID-0 array, data may be striped across two or more of the local data storage devices120. In other embodiments, the local data storages devices120may be arranged in some other RAID level.

In some embodiments, the computing system110may generate redundancy information for the data stored in the local data storage devices120. In these and other embodiments, the computing system110may generate the redundancy information as data is written to the local data storage devices120. For example, the computing system110may generate the redundancy information as data is striped across two or more of the local data storage devices120.

Alternatively or additionally the redundancy information may be generated asynchronously with striping or writing the data to the local data storage devices120. Asynchronous generation of the redundancy information may improve write performance by eliminating redundancy information generation as a bottleneck as may occur with, e.g., RAID-4. In some embodiments, the asynchronous generation of the redundancy information may occur when the computing system110, and more particularly, when a central processing unit (CPU) of the computing system110, is idle.

In some embodiments, the computing system110may generate parity bits, error-correcting codes (ECC), erasure codes, or other redundancy information. For example, in some embodiments, the computing system110may generate odd parity calculations for the data stored in the local data storage devices120. Alternatively or additionally, in some embodiments, the computing system110may generate even parity calculations for the data stored in the local data storage devices120. In some embodiments, the computing system110may generate multiple levels of redundancy information.

In some embodiments, the local data storage devices120may include one or more physical data storage devices. For example, in some embodiments, the local data storage devices120may include a data storage device communicatively coupled with the computing system110. The local data storage devices120may include hard disk drives, fixed solid-state drives, fixed flash drives, or other fixed data storage systems. In some embodiments, the local data storage devices120may be communicatively coupled with the computing system110by a parallel AT attachment (PATA) interface, a serial AT attachment (SATA) interface, a universal serial bus (USB) interface, an Institute of Electrical and Electronics Engineers (IEEE) 1394 interface, or other interfaces.

In some embodiments, the network130may be configured to communicatively couple the computing system110with the remote storage device140a. In some embodiments, the network130may include any network or configuration of networks configured to send and receive communications between systems and devices. In some embodiments, the network130may include a wired network or wireless network, and may have numerous different configurations. In some embodiments, the network130may also be coupled to or may include portions of the Internet. For example, in some embodiments, the network130may be a local area network inside a single home. For example, the network130may include a router with which the computing system110and the remote data storage device140amay be communicatively coupled. Alternatively or additionally, in some embodiments, the network130may include a local area network and a wide area network such as the Internet.

In some embodiments, the remote data storage devices140may include a physical data storage device. For example, the remote data storage devices140may include a data storage device communicatively coupled with the network130as a Network-Attached-Storage (NAS) in a home network. Alternatively or additionally, in some embodiments, the remote data storage devices140may include a data storage device communicatively coupled with the network130by a second computing system. In some embodiments, the remote data storage devices140may include a cloud-based data storage device. For example, in some embodiments, the first remote data storage device140amay include cloud-based data storage operated by a first entity and the second remote data storage device140bmay include cloud-based data storage operated by a second entity different from the first.

In some embodiments, the computing system110may be configured to provide the redundancy information to the first remote data storage device140aand/or the second remote data storage device140b. For example, the computing system110may provide the redundancy information to the first remote data storage device140aand may not provide the redundancy information to the second remote data storage device140b. Alternatively or additionally, in some embodiments, a user of the local data storage devices120may select to store the redundancy information on both the first remote data storage device140aand the second remote data storage device140b. In these and other embodiments, the first remote data storage device140amay be associated with a first cloud storage service and the second remote data storage device140bmay be associated with a second cloud storage service. In these and other embodiments, the first remote data storage device140amay store a first fraction of the redundancy information and the second remote data storage device140bmay store a second fraction of the redundancy information. In some embodiments, the user of the local data storage devices120may select the first fraction and the second fraction. Alternatively, the same redundancy information may be stored on both remote data storage devices140.

In some embodiments, the computing system110may detect a changed condition in the first remote data storage device140aor the second remote data storage device140b. For example, the first remote data storage device140amay have insufficient available storage capacity to store additional redundancy information. In response to detecting that the first remote data storage device140ahas insufficient available storage capacity, the computing system110may provide the redundancy information to the second remote data storage device140band may not provide the redundancy information to the first remote data storage device140a. Alternatively or additionally, in some embodiments, the computing system110may detect that a third remote data storage device, e.g., associated with a third cloud storage service, is available to receive redundancy information. In these and other embodiments, the computing system110may provide a third fraction of the redundancy information to the third cloud storage device.

In some embodiments, the computing system110may be configured to generate two or more levels of redundancy. In these and other embodiments, a first level of redundancy information may include parity bits calculated from an XOR operation of the data written to the local data storage devices120and a second level of redundancy information may include erasure codes. The erasure codes may be calculated using Galois fields together with an XOR of the data written to the local data storage devices120. Alternatively or additionally, the calculation of the two or more levels of redundancy information may be consistent with how RAID-6, which uses two redundancy layers, operates.

In some embodiments, the computing system110may be configured to detect a failure or an unavailability of one of the local data storage devices120or one of the remote data storage devices140. For example, the first local data storage device120amay experience a failure. In response to detecting the failure of the first local data storage device120a, the computing system110may obtain redundancy information from the remote data storage devices140. In some embodiments, the computing system110may repair the failure of the first local data storage device120ausing the redundancy information obtained from the remote data storage devices140. Alternatively or additionally, in some embodiments, the first remote data storage device140amay be unavailable. For example, a company operating the first remote data storage device140amay be experiencing an outage or other problem. In response to detecting the unavailability of the first remote data storage device140a, the computing system110may be configured to regenerate the redundancy information stored in the first remote data storage device140afrom the data stored in the local data storage devices120. The computing system110may provide the regenerated redundancy information to the second remote data storage device140, a third remote data storage device, or elsewhere.

Modifications, additions, or omissions may be made to the system100without departing from the scope of the present disclosure. For example, in some embodiments, the system100may include a single local data storage device120and may include a single remote data storage device140. In these and other embodiments, the computing system110may be configured to generate redundancy information for the data stored on the local data storage device120and may provide the redundancy information to the remote data storage device140.

Alternatively or additionally, in some embodiments, the system100may not include the network130. In these and other embodiments, the system100may include one or more removable data storage devices. The removable data storage devices may be storage devices similar to the local data storage devices120and the remote data storage devices140, except that they may be removable, whereas the local data storage devices120may be fixed, e.g., with respect to the computing system110. In some embodiments, the one or more removable data storage devices may include removable solid-state drives, removable flash drives, removable memory cards such as CompactFlash cards, Secure Digital cards, Memory Stick cards, xD-Picture cards, or other removable data storage devices. In these and other embodiments, the one or more removable data storage devices may be communicatively coupled by a removable connection such as a Universal Serial Bus (USB) connection, a wireless connection, a THUNDERBOLT-compatible connection or other hot swappable or hot-pluggable connections. In these and other embodiments, the computing system110may be configured to detect an availability of the removable data storage devices. The removable data storage devices may be available when the removable data storage devices have sufficient available storage capacity to store redundancy information and when the removable data storage devices are communicatively coupled with the computing system110. The computing system110may provide the redundancy information to the removable data storage devices when the removable data storage devices are available.

FIG. 2illustrates an example computing system200(hereinafter “system200”) that may be used to store data, arranged in accordance with at least one embodiment described in the present disclosure. In these and other embodiments, the system200may execute computer-readable instructions that include and/or relate to the local data storage devices120, the computing system110, the network130, and/or the remote data storage devices140ofFIG. 1.

As illustrated inFIG. 2, the system200may include a processor202, a memory204, a data storage206, a communication unit208, a display210, a user interface unit212, and a peripheral device214, which all may be communicatively coupled. In some embodiments, the system200may be part of any of the systems or devices described in this disclosure. For example, the system200may be part of a data storage system such as the system100ofFIG. 1and/or may be part of the computing system110or the remote data storage devices140. Alternatively or additionally, the system200may include and/or may be coupled to one or more of the devices ofFIG. 1. For instance, the system200may include one or more of the local data storage devices120or the computing system110ofFIG. 1and/or may be communicatively coupled to the local data storage devices120, and/or the remote data storage devices140.

Generally, the processor202may include any suitable special-purpose or general-purpose computer, computing entity, or processing device including various computer hardware or software modules and may be configured to execute instructions stored on any applicable computer-readable storage media. For example, the processor202may include a microprocessor, a microcontroller, a digital signal processor (DSP), an application-specific integrated circuit (ASIC), a Field-Programmable Gate Array (FPGA), or any other digital or analog circuitry configured to interpret and/or to execute program instructions and/or to process data, or any combination thereof. As mentioned elsewhere, each of the computing system110, the local data storage devices120, and the remote data storage devices140may include software and programming, which are examples of instructions that may be executed by the processor202to perform or control performance of one or more of the operations described herein.

Although illustrated as a single processor inFIG. 2, the processor202may more generally include any number of processors distributed across any number of networks or physical locations that are configured to perform individually or collectively any number of operations described herein. In some embodiments, the processor202may interpret and/or execute program instructions and/or process data stored in the memory204, the data storage206, or the memory204and the data storage206. In some embodiments, the processor202may fetch program instructions from the data storage206and load the program instructions into the memory204.

After the program instructions are loaded into the memory204, the processor202may execute the program instructions. For example, the system200may be included in, may be communicatively coupled to, and/or may include one or more of the local data storage devices120, the computing system110, the remote data storage devices140, or the network130ofFIG. 1. In these and other embodiments, the instructions may include the processor202executing an algorithm to store data in the local data storage devices120and to generate redundancy information for data stored in the local data storage devices120.

The memory204and the data storage206may include non-transitory computer-readable storage media for carrying or having computer-executable instructions or data structures stored thereon. Such computer-readable storage media may be any available non-transitory media that may be accessed by a general-purpose or special-purpose computer, such as the processor202. By way of example, and not limitation, such non-transitory computer-readable storage media may include non-transitory computer-readable storage media including Read-Only Memory (ROM), Electrically Erasable Programmable Read-Only Memory (EEPROM), Compact Disc Read-Only Memory (CD-ROM) or other optical disk storage, magnetic disk storage or other magnetic storage devices, flash memory devices (e.g., solid state memory devices), or any other non-transitory storage media which may be used to carry or store desired program code in the form of computer-executable instructions or data structures and which may be accessed by a general-purpose or special-purpose computer. Combinations of the above may also be included within the scope of non-transitory computer-readable storage media. Computer-executable instructions may include, for example, instructions and data configured to cause the processor202to perform or control performance of a certain operation or group of operations, such as one or more blocks of a method300ofFIG. 3described below.

The communication unit208may include any component, device, system, or combination thereof that is configured to transmit or receive information over a network. In some embodiments, the communication unit208may communicate with other devices at other locations, the same location, or even other components within the same system. For example, the communication unit208may include a modem, a network card (wireless or wired), an infrared communication device, a wireless communication device (such as an antenna), and/or chipset (such as a Bluetooth device, an 802.6 device (e.g., Metropolitan Area Network (MAN)), a WiFi device, a WiMax device, cellular communication facilities, etc.), plain old telephone service (POTS), and/or the like. The communication unit208may permit data to be exchanged with a network and/or any other devices or systems described in the present disclosure.

The display210may be configured as one or more displays, like an LCD, LED, or other type display. The display210may be configured to present video, text captions, user interfaces, and other data as directed by the processor202.

The user interface unit212may include any device to allow a user to interface with the system200. For example, the user interface unit212may include a mouse, a track pad, a keyboard, a touchscreen, and/or a piezoelectric transducer, among other devices. The user interface unit212may receive input from a user and provide the input to the processor202.

The peripheral devices214may include one or more devices. For example, the peripheral devices may include a microphone, an imager, and/or a speaker, among potentially other peripheral devices. In these and other embodiments, the microphone may be configured to capture audio. The imager may be configured to capture digital images. The digital images may be captured in a manner to produce video or image data. In some embodiments, the speaker may broadcast audio received by the system200or otherwise generated by the system200.

Modifications, additions, or omissions may be made to the system200without departing from the scope of the present disclosure.

FIG. 3is a flowchart of an example computer-implemented method to store data, arranged in accordance with at least one embodiment described herein. The method300may be performed, in whole or in part, in some embodiments by a system such as the system100and/or the system200ofFIGS. 1 and 2, respectively. In these and other embodiments, the method300may be performed based on the execution of instructions stored on one or more non-transitory computer-readable media. Although illustrated as discrete blocks, various blocks may be divided into additional blocks, combined into fewer blocks, or eliminated, depending on the desired implementation.

The method300may begin at block302, where data may be striped across multiple storage devices. Striping the data across multiple storage devices may include striping the data across multiple physical storage devices or cloud-based storage locations. Alternatively or additionally, striping the data across multiple storage devices may include writing a first fraction of the data on a first storage device at block304and writing a second fraction of the data on a second storage device at block306. Alternatively or additionally, the multiple storage devices may include three or more storage devices in which case different fractions of the data may be written to different ones of the storage devices. Block302may be followed by block308.

In block308, redundancy information for the data may be generated. In some embodiments, the redundancy information may include one or more of parity bits, error-correcting codes, or erasure codes. Block308may be followed by block310.

In block310, the redundancy information may be written on a third storage device. The third storage device may include a remote or removable storage device. In some embodiments, the redundancy information may be written on the third storage device synchronously with striping the data. Alternatively, in some embodiments, the redundancy information may be written on the third storage device asynchronously with striping the data. In some embodiments, the third storage device may be communicatively coupled with the first storage device and the second storage device by a wide area network or by a local area network. In some embodiments, one or more additional layers of redundancy information may be written on one or more additional storage devices.

One skilled in the art will appreciate that, for this and other processes, operations, and methods disclosed herein, the functions and/or operations performed may be implemented in differing order. Furthermore, the outlined functions and operations are only provided as examples, and some of the functions and operations may be optional, combined into fewer functions and operations, or expanded into additional functions and operations without detracting from the essence of the disclosed embodiments.

For example, the method300may further include identifying corrupted data on the first storage device. The method300may further include obtaining at least a portion of the redundancy information from the third storage device for the corrupted data. The method300may further include repairing the corrupted data on the first storage device using the at least the portion of the redundancy information.

In some embodiments, the method300may further include determining an allocation of the redundancy information between the third storage device and a fourth storage device. The fourth storage device may include a remote or removable storage device. The third storage device and the fourth storage device may have different ownership. A first fraction of the redundancy information may be written to the third storage device and a second fraction of the redundancy information may be written to the fourth storage device. The first fraction of the redundancy information and the second fraction of the redundancy information may be based on the allocation of the redundancy information between the third storage device and the fourth storage device. In these and other embodiments, the method300may further include identifying a changed condition of the third storage device after writing the first fraction of redundancy information and the second fraction of redundancy information. The method300may further include changing the allocation of redundancy information between the third storage device and the fourth storage device in response to the changed condition.

Some embodiments described herein may be implemented in a database. The database may be similar or analogous in some respects to one or more of the local data storage devices120ofFIG. 1. In particular, data may be stored in the database similar or analogous to storage of data in one or more of the local data storage devices120ofFIG. 1.

A database transaction may include a unit of work, typically encapsulating a number of operations (e.g., read, write, lock) over the database. When a transaction involves writing data to the database, redundancy information may be generated for the transaction. In some cases, redundancy information may be generated for each transaction in general, or for each transaction that involves writing to the database, or for at least some transactions. The redundancy information may be stored in one or more remote storage devices, such as one or more of the remote data storage devices140ofFIG. 1such that redundancy information is generated for and associated with each of one or more transactions.

The redundancy information may be used at virtually any time to check for corruption of the database. For instance, as or after data is read from the database, redundancy information may be retrieved that was generated when the data was written to the database. The data read from the database may be used to generate new redundancy information. The retrieved redundancy information may be compared to the new redundancy information. If the two match, the match may indicate that the transaction in which the data was written to the database completed without being comprised such that the data is not corrupt. If the two match, the analysis may proceed to a next transaction. If the two do not match, the data in the database may be repaired using the redundancy information and any transactions that were dependent on the data may be rolled back and their transactions may be restarted, e.g., in sequence, using the repaired data.

Various embodiments are disclosed. The various embodiments may be partially or completely combined to produce other embodiments.

Embodiments of the methods disclosed herein may be performed in the operation of such computing devices. The order of the blocks presented in the examples above may be varied—for example, blocks may be re-ordered, combined, and/or broken into sub-blocks. Certain blocks or processes may be performed in parallel.