12f67d47f1
Under any concurrent removeObjects in progress might have removed the parents of the same prefix for which there is an ongoing putObject request. An inconsistent situation may arise as explained below even under sufficient locking. PutObject is almost successful at the last stage when a temporary file is renamed to its actual namespace at `a/b/c/object1`. Concurrently a RemoveObject is also in progress at the same prefix for an `a/b/c/object2`. To create the object1 at location `a/b/c` PutObject has to create all the parents recursively. ``` a/b/c - os.MkdirAll loops through has now created 'a/' and 'b/' about to create 'c/' a/b/c/object2 - at this point 'c/' and 'object2' are deleted about to delete b/ ``` Now for os.MkdirAll loop the expected situation is that top level parent 'a/b/' exists which it created , such that it can create 'c/' - since removeObject and putObject do not compete for lock due to holding locks at different resources. removeObject proceeds to delete parent 'b/' since 'c/' is not yet present, once deleted 'os.MkdirAll' would receive an error as syscall.ENOENT which would fail the putObject request. This PR tries to address this issue by implementing a safer/guarded approach where we would retry an operation such as `os.MkdirAll` and `os.Rename` if both operations observe syscall.ENOENT. Fixes #5254 |
||
---|---|---|
.github | ||
browser | ||
buildscripts | ||
cmd | ||
dockerscripts | ||
docs | ||
pkg | ||
snap | ||
vendor | ||
.gitignore | ||
.jshintrc | ||
.mailmap | ||
.mention-bot | ||
.travis.yml | ||
CONTRIBUTING.md | ||
Dockerfile | ||
Dockerfile.dev | ||
Dockerfile.release | ||
LICENSE | ||
MAINTAINERS.md | ||
Makefile | ||
NOTICE | ||
README.md | ||
README_zh_CN.md | ||
appveyor.yml | ||
hound.yml | ||
main.go | ||
main_test.go | ||
minio.spec |
README.md
Minio Quickstart Guide
Minio is an object storage server released under Apache License v2.0. It is compatible with Amazon S3 cloud storage service. It is best suited for storing unstructured data such as photos, videos, log files, backups and container / VM images. Size of an object can range from a few KBs to a maximum of 5TB.
Minio server is light enough to be bundled with the application stack, similar to NodeJS, Redis and MySQL.
Docker Container
Stable
docker pull minio/minio
docker run -p 9000:9000 minio/minio server /data
Edge
docker pull minio/minio:edge
docker run -p 9000:9000 minio/minio:edge server /data
Please visit Minio Docker quickstart guide for more here
macOS
Homebrew
Install minio packages using Homebrew
brew install minio/stable/minio
minio server /data
NOTE: If you previously installed minio using
brew install minio
then it is recommended that you reinstall minio fromminio/stable/minio
official repo instead.
brew uninstall minio
brew install minio/stable/minio
Binary Download
Platform | Architecture | URL |
---|---|---|
Apple macOS | 64-bit Intel | https://dl.minio.io/server/minio/release/darwin-amd64/minio |
chmod 755 minio
./minio server /data
GNU/Linux
Binary Download
Platform | Architecture | URL |
---|---|---|
GNU/Linux | 64-bit Intel | https://dl.minio.io/server/minio/release/linux-amd64/minio |
chmod +x minio
./minio server /data
Snap
Install minio using Snap
sudo snap install minio --edge
Start minio using snap run
command
sudo snap connect minio:mount-observe
sudo snap run minio server /data
Microsoft Windows
Binary Download
Platform | Architecture | URL |
---|---|---|
Microsoft Windows | 64-bit | https://dl.minio.io/server/minio/release/windows-amd64/minio.exe |
minio.exe server D:\Photos
FreeBSD
Port
Install minio packages using pkg
pkg install minio
sysrc minio_enable=yes
sysrc minio_disks=/home/user/Photos
service minio start
Install from Source
Source installation is only intended for developers and advanced users. If you do not have a working Golang environment, please follow How to install Golang.
go get -u github.com/minio/minio
Test using Minio Browser
Minio Server comes with an embedded web based object browser. Point your web browser to http://127.0.0.1:9000 ensure your server has started successfully.
Test using Minio Client mc
mc
provides a modern alternative to UNIX commands like ls, cat, cp, mirror, diff etc. It supports filesystems and Amazon S3 compatible cloud storage services. Follow the Minio Client Quickstart Guide for further instructions.
Explore Further
- Minio Erasure Code QuickStart Guide
- Use
mc
with Minio Server - Use
aws-cli
with Minio Server - Use
s3cmd
with Minio Server - Use
minio-go
SDK with Minio Server - The Minio documentation website
Contribute to Minio Project
Please follow Minio Contributor's Guide