mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-29 04:21:48 +08:00
95 lines
2.2 KiB
Bash
Executable File
95 lines
2.2 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
# mergerfs -f -o category.create=epmfs,minfreespace=100M,fsname=mergerfs:/mnt/merged /mnt/n2:/mnt/n3:/mnt/n4 /mnt/merged
|
|
|
|
START=98
|
|
|
|
USE_PROCD=1
|
|
|
|
start_service() {
|
|
config_load mergerfs
|
|
config_foreach start_pool pool
|
|
}
|
|
|
|
start_pool() {
|
|
local section="$1"
|
|
local enabled mountpoint paths createpolicy minfreespace options
|
|
|
|
config_get_bool enabled "$section" enabled 0
|
|
[ "$enabled" -eq 1 ] || return 0
|
|
config_get mountpoint "$section" mountpoint
|
|
config_get paths "$section" paths
|
|
config_get createpolicy "$section" createpolicy "epmfs"
|
|
config_get minfreespace "$section" minfreespace "4G"
|
|
config_get options "$section" options
|
|
|
|
# 检查 mountpoint 是否已设置
|
|
[ -z "$mountpoint" ] && {
|
|
logger -t "mergerfs" "mountpoint not set for $section"
|
|
return 1
|
|
}
|
|
|
|
# (
|
|
printf "%s\n" "$paths" | while IFS= read -r p; do
|
|
case "$p" in
|
|
/*)
|
|
if [ ! -d "$p" ]; then
|
|
logger -t "mergerfs" "source path $p does not exist for $mountpoint"
|
|
return 1
|
|
fi
|
|
;;
|
|
esac
|
|
done || return 1
|
|
|
|
# 只保留以 / 开头的路径,拼接为冒号分隔的字符串
|
|
srcs=$(
|
|
# (
|
|
printf "%s\n" "$paths" | while IFS= read -r p; do
|
|
case "$p" in
|
|
/*) printf ':%s' "$p" ;;
|
|
esac
|
|
done
|
|
)
|
|
srcs="${srcs#:}"
|
|
|
|
[ -z "$srcs" ] && {
|
|
logger -t "mergerfs" "no valid source paths for $mountpoint"
|
|
return 1
|
|
}
|
|
|
|
local opts
|
|
opts="category.create=${createpolicy},minfreespace=${minfreespace},fsname=mergerfs:${mountpoint}"
|
|
[ -n "$options" ] && opts="${opts},${options}"
|
|
|
|
mkdir -p "$mountpoint"
|
|
# mountpoint -q "$mountpoint" && umount "$mountpoint"
|
|
|
|
logger -t "mergerfs" "mergerfs -o $opts \"$srcs\" \"$mountpoint\""
|
|
|
|
procd_open_instance "$section"
|
|
procd_set_param command /usr/bin/mergerfs -f -o "$opts" "$srcs" "$mountpoint"
|
|
procd_close_instance
|
|
# close flock fd, or the script will hangs next time it runs
|
|
# ( exec 1000>&- ; mergerfs -o "$opts" "$srcs" "$mountpoint" )
|
|
}
|
|
|
|
stop_service() {
|
|
config_load mergerfs
|
|
config_foreach stop_pool pool
|
|
}
|
|
|
|
stop_pool() {
|
|
local section="$1"
|
|
local mountpoint
|
|
config_get mountpoint "$section" mountpoint
|
|
[ -n "$mountpoint" ] && umount "$mountpoint"
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "mergerfs"
|
|
}
|
|
|
|
reload_service() {
|
|
restart
|
|
}
|