mirror of
https://github.com/criyle/go-sandbox.git
synced 2025-11-04 14:49:53 +08:00
25 lines
540 B
Go
25 lines
540 B
Go
package mount
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
)
|
|
|
|
// Mount calls mount syscall
|
|
func (m *Mount) Mount() error {
|
|
if err := os.MkdirAll(m.Target, 0755); err != nil {
|
|
return err
|
|
}
|
|
if err := syscall.Mount(m.Source, m.Target, m.FsType, m.Flags, m.Data); err != nil {
|
|
return err
|
|
}
|
|
// Read-only bind mount need to be remounted
|
|
const bindRo = syscall.MS_BIND | syscall.MS_RDONLY
|
|
if m.Flags&bindRo == bindRo {
|
|
if err := syscall.Mount("", m.Target, m.FsType, m.Flags|syscall.MS_REMOUNT, m.Data); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|