1
0
镜像自地址 https://github.com/tuna/tunasync.git 已同步 2025-12-06 06:26:46 +00:00

feat(worker): ZFS support: isolate mirrors in zfs datasets

这个提交包含在:
bigeagle
2016-12-05 00:44:55 +08:00
父节点 96f9db8bb8
当前提交 86153c59e3
共有 4 个文件被更改,包括 69 次插入3 次删除

45
worker/zfs_hook.go 普通文件
查看文件

@@ -0,0 +1,45 @@
package worker
import (
"fmt"
"os"
"strings"
"github.com/codeskyblue/go-sh"
)
type zfsHook struct {
emptyHook
provider mirrorProvider
zpool string
}
func newZfsHook(provider mirrorProvider, zpool string) *zfsHook {
return &zfsHook{
provider: provider,
zpool: zpool,
}
}
// create zfs dataset for a new mirror
func (z *zfsHook) preJob() error {
workingDir := z.provider.WorkingDir()
if _, err := os.Stat(workingDir); os.IsNotExist(err) {
// sudo zfs create $zfsDataset
// sudo zfs set mountpoint=${absPath} ${zfsDataset}
zfsDataset := fmt.Sprintf("%s/%s", z.zpool, z.provider.Name())
// Unknown issue of ZFS:
// dataset name should not contain upper case letters
zfsDataset = strings.ToLower(zfsDataset)
logger.Infof("Creating ZFS dataset %s", zfsDataset)
if err := sh.Command("sudo", "zfs", "create", zfsDataset).Run(); err != nil {
return err
}
logger.Infof("Mount ZFS dataset %s to %s", zfsDataset, workingDir)
if err := sh.Command("sudo", "zfs", "set", "mountpoint="+workingDir, zfsDataset).Run(); err != nil {
return err
}
}
return nil
}