Object-level versioning is a significant evolution compared to SAN and NAS versioning approaches. Not only does versioning provide data protection, it also serves as the foundation for powerful features like Object Locking, Immutability, Tiering and Life Cycle management.
With MinIO, objects are independently versioned following Amazon’s S3 structure/implementation. MinIO assigns a unique ID to each version of a given object - applications can specify a version ID at any time to access the point-in-time snapshot of that object.
Versioning allows a user to retain multiple variants of an object in the same bucket and provides a mechanism to preserve, retrieve and restore every version of every object stored in a bucket, eliminating the requirement for snapshots. Versioning ensures that objects remain available across a range of failures, including those caused by applications and human error.
Versioning is enabled at the bucket level. When enabled, MinIO automatically creates a unique version ID for the object. There can be multiple versions of the same object.
One of the main benefits of versioning is to protect against unintentional overwrites or deletions. This is performed using the concept of a delete marker. When a versioned object is deleted it is not removed permanently. Rather a delete marker is created and becomes the current version of the object. When that object is requested, MinIO returns a 404 Not Found message. Objects can be restored by removing the delete marker.
Along the same lines, if a versioned object is overwritten, MinIO creates a new version and that becomes the current version. Again, the older version can be restored as needed.
Please note that once a bucket is enabled for versioning, that action cannot be undone - only suspended. Versioning is a global setting within the bucket - meaning all objects are now versioned.
Users with appropriate permissions can suspend versioning to stop accruing object versions. Similar to enabling versioning, this action is performed at the bucket level.
As with all of MinIO, versioning can be applied using the MinIO Console, Client (mc), SDK, or via the command line.
Versioning is the simplest way to protect data from unintended actions. However, it results in larger bucket sizes as objects are versioned and can lead to a higher number of interdependencies between the objects as well as the risk of hidden object dependencies. These factors can be mitigated with Life Cycle Management.
In addition to its data protection benefits, MinIO's object storage versioning serves as the foundation of other key features including:
Versioning requires Erasure Coding and a minimum of four disks.