storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/docs/zh_CN/bucket/versioning/DESIGN.md (about) 1 # 存储桶版本控制设计指南 [](https://slack.min.io) [](https://hub.docker.com/r/minio/minio/) 2 3 ## `xl.meta` 文件描述 4 5 `xl.meta`是MinIO用于支持AWS S3兼容版本控制的一种新的自描述后端格式文件. 该文件记录了每个静态`version`的真实描述信息。`xl.meta`是一个定义好的数据结构序列化的`msgpack`文件。可以通过以下几部分内容更好的了解`xl.meta`文件。 6 7 `xl.meta`文件的前8个字节是XL文件头,该头信息描述了当前文件的格式和相应的格式版本,从而使解析器能够自动使用正确的数据结构来解析流中的后续内容。 8 9 当前文件头信息 10 ```go 11 var ( 12 // XL header specifies the format 13 // one extra byte left for future use 14 xlHeader = [4]byte{'X', 'L', '2', ' '} 15 16 // XLv2 version 1 specifies the current 17 // version of the XLv2 format, 3 extra bytes 18 // left for future use. 19 xlVersionV1 = [4]byte{'1', ' ', ' ', ' '} 20 ) 21 ``` 22 23 了解文件头后,我们接着看`xl.meta`文件的实际数据结构。`xl.meta`带有三种类型的对象条目,用于指定存储的版本对象的类型。 24 25 - ObjectType (默认) 26 - LegacyObjectType (遗留的现有部署和较旧的xl.json格式) 27 - DeleteMarker (一个versionId,主要是为了实现AWS规范兼容的DELETE序列) 28 29 以下是个msgpack格式的`xl.meta`转为JSON后的样例,你可以通过 [xl-meta-to-json.go](https://github.com/minio/minio/blob/master/docs/zh_CN/bucket/versioning/xl-meta-to-json.go) 这个小程序把`xl.meta`转成JSON,查看里面的内容。 30 ```json 31 { 32 "Versions": [ 33 { 34 "Type": 1, 35 "V2Obj": { 36 "ID": "KWUs8S+8RZq4Vp5TWy6KFg==", 37 "DDir": "X3pDAFu8Rjyft7QD6t7W5g==", 38 "EcAlgo": 1, 39 "EcM": 2, 40 "EcN": 2, 41 "EcBSize": 10485760, 42 "EcIndex": 3, 43 "EcDist": [ 44 3, 45 4, 46 1, 47 2 48 ], 49 "CSumAlgo": 1, 50 "PartNums": [ 51 1 52 ], 53 "PartETags": [ 54 "" 55 ], 56 "PartSizes": [ 57 314 58 ], 59 "PartASizes": [ 60 282 61 ], 62 "Size": 314, 63 "MTime": 1591820730, 64 "MetaSys": { 65 "X-Minio-Internal-Server-Side-Encryption-S3-Kms-Key-Id": "bXktbWluaW8ta2V5", 66 "X-Minio-Internal-Server-Side-Encryption-S3-Kms-Sealed-Key": "ZXlKaFpXRmtJam9pUVVWVExUSTFOaTFIUTAwdFNFMUJReTFUU0VFdE1qVTJJaXdpYVhZaU9pSkJMMVZzZFVnelZYVjZSR2N6UkhGWUwycEViRmRCUFQwaUxDSnViMjVqWlNJNklpdE9lbkJXVWtseFlWSlNVa2t2UVhNaUxDSmllWFJsY3lJNklrNDBabVZsZG5WU1NWVnRLMFoyUWpBMVlYTk9aMU41YVhoU1RrNUpkMDlhTkdKa2RuaGpLMjFuVDNnMFFYbFJhbE15V0hkU1pEZzNRMk54ZUN0SFFuSWlmUT09", 67 "X-Minio-Internal-Server-Side-Encryption-Seal-Algorithm": "REFSRXYyLUhNQUMtU0hBMjU2", 68 "X-Minio-Internal-Server-Side-Encryption-Iv": "bW5YRDhRUGczMVhkc2pJT1V1UVlnbWJBcndIQVhpTUN1dnVBS0QwNUVpaz0=", 69 "X-Minio-Internal-Server-Side-Encryption-S3-Sealed-Key": "SUFBZkFPeUo5ZHVVSEkxYXFLU0NSRkJTTnM0QkVJNk9JWU1QcFVTSXFhK2dHVThXeE9oSHJCZWwwdnRvTldUNE8zS1BtcWluR0cydmlNNFRWa0N0Mmc9PQ==" 70 }, 71 "MetaUsr": { 72 "content-type": "application/octet-stream", 73 "etag": "20000f00f58c508b40720270929bd90e9f07b9bd78fb605e5432a67635fc34722e4fc53b1d5fab9ff8400eb9ded4fba2" 74 } 75 } 76 } 77 ] 78 } 79 ```