接上篇文章已经部署启动了minio,我们通过管理对象存储的界面创建了一个bucket和上传一个文件,通过界面操作起来还是很简单的。
那么对应服务后端存储的数据又是怎样的呢?
让我们到linux上看一下
由此可见,上传的文件被分片后,存储在了每个后端目录下,看到这里不由的有几个问题:
- 数据是如何分片的?
- part.1各自存了什么数据?
- xl.meta从命名上像是元数据,到底存储了什么,有什么作用?
- 如果后端丢失了某些数据,用户是否可以下载回完整的文件?
当前熟悉minio的都知道minio使用的EC纠删码,这里的part.1存储的就是数据块和数据块计算后的校验快,这里也是minio的核心原理部分,后续需要重点研究。
至于元数据xl.meta如何直观看到底存储的是什么?直接查看这个文件是没法看到解码后的内容,通过查阅minio的文档,源码中是提供了解码的代码,因此我们编译后来看看
cd minio/docs/debugging/xl-meta
go build ./
就能编译出xl-meta的解码工具 然后看看xl.meta文件中有些什么数据
./xl-meta {PATH}/xl.meta
输出:
{
"Versions": [
{
"Header": {
"Flags": 2,
"ModTime": "2025-08-24T16:12:11.279398343+08:00",
"Signature": "43b69409",
"Type": 1,
"VersionID": "00000000000000000000000000000000"
},
"Idx": 0,
"Metadata": {
"Type": 1,
"V2Obj": {
"CSumAlgo": 1,
"DDir": "WIfUAvboQ+GOmGBUzlzRcA==",
"EcAlgo": 1,
"EcBSize": 1048576,
"EcDist": [
4,
1,
2,
3
],
"EcIndex": 4,
"EcM": 2,
"EcN": 2,
"ID": "AAAAAAAAAAAAAAAAAAAAAA==",
"MTime": 1756023131279398343,
"MetaSys": {},
"MetaUsr": {
"content-type": "application/x-gzip",
"etag": "45d72b26bdc2ae9ba3106bfbff8bfc95"
},
"PartASizes": [
86844416
],
"PartETags": null,
"PartNums": [
1
],
"PartSizes": [
86844416
],
"Size": 86844416
},
"v": 0
}
}
]
}
好了,基本上对象上传后的初步体验就是如此了,接下来就要继续深入到代码层级,一探究竟了。