Vladislav V. Prodan wrote:

Можно добавить mbuffer для работы с нерезиновыми каналами?

Да, оказывается я тоже это хотел.

Только наверное вместо добавления кучи опций для разнообразной упаковки/шейпинга стоит всё перевести на входящий/исходящий фильтры?

--
Sphinx of black quartz judge my vow.
Index: daily/synczfs
===================================================================
--- daily/synczfs       (revision 199)
+++ daily/synczfs       (working copy)
@@ -7,9 +7,17 @@
 # daily_synczfs_servers:
 #              space separated list of server names (resolvable)
 #
-# daily_synczfs_<server>_compress:
-#              all data exchange would be compressed with xz
+# daily_synczfs_<server>_input_filter:
+#              all data on remote system would be piped through this command[s]
+#              possible usage:
+#               - compression: '| xz -9e' or '| bzip2 -9';
+#               - rate limiting: '| mbuffer -r 256k' or '| pv -L 256k', notice 
that misc/mbuffer or sysutils/pv should be installed.
 #
+# daily_synczfs_<server>_output_filter:
+#              all data on local system would be piped through this command[s]
+#              possible usage:
+#               - decompression: '| xz -d' or '| bzip2 -d'.
+#
 # daily_synczfs_<server>_fs:
 #              space separated list of remote filesystem aliases
 #
@@ -60,14 +68,9 @@
                        hostname="$server"
                fi
 
-               # check compression status
-               eval compress=\"\${daily_synczfs_${server}_compress="NO"}\"
-               pack=
-               unpack=
-               if checkyesno compress; then
-                       pack='| xz -9e'
-                       unpack='| xz -d'
-               fi
+               # get local/remote filters
+               eval ifilter=\"\${daily_synczfs_${server}_input_filter}\"
+               eval ofilter=\"\${daily_synczfs_${server}_output_filter}\"
 
                # check server access
                if ! ping -oc 5 $hostname >/dev/null 2>&1; then
@@ -104,7 +107,7 @@
                                echo "  Server $server is mentioned in 
\$daily_synczfs_${server}_${alias}_fsname contains banned chars."
                                exit 2
                        elif ! zfs list -Ht filesystem 
$daily_synczfs_root/$fsname >/dev/null 2>&1; then
-                               su "$daily_synczfs_user" -c "zfs create 
"$daily_synczfs_root/$fsname" ; ssh -oBatchMode=yes 
$daily_synczfs_user@$hostname \"zfs send -R $rfsname@`tail -1 $rsnaps` $pack\" 
$unpack | zfs receive -Fu $daily_synczfs_root/$fsname ; zfs inherit mountpoint 
$daily_synczfs_root/$fsname"
+                               su "$daily_synczfs_user" -c "zfs create 
"$daily_synczfs_root/$fsname" ; ssh -oBatchMode=yes 
$daily_synczfs_user@$hostname \"zfs send -R $rfsname@`tail -1 $rsnaps` 
$ifilter\" $ofilter | zfs receive -Fu $daily_synczfs_root/$fsname ; zfs inherit 
mountpoint $daily_synczfs_root/$fsname"
                        else
                                lsnaps=`mktemp -t synczfs`
                                zfs list -Hrt snapshot -d1 
"$daily_synczfs_root/$fsname" | awk 'BEGIN{FS="[ @\t]+"}{print$2}' > $lsnaps
@@ -126,7 +129,7 @@
                                        done
                                fi
                                rm -rf $lsnaps
-                               su "$daily_synczfs_user" -c "ssh 
-oBatchMode=yes $daily_synczfs_user@$hostname \"zfs send -I $rfsname@$common 
$rfsname@`tail -1 $rsnaps` $pack\" $unpack | zfs receive -F 
$daily_synczfs_root/$fsname"
+                               su "$daily_synczfs_user" -c "ssh 
-oBatchMode=yes $daily_synczfs_user@$hostname \"zfs send -I $rfsname@$common 
$rfsname@`tail -1 $rsnaps` $ifilter\" $ofilter | zfs receive -F 
$daily_synczfs_root/$fsname"
                        fi
                        rm -rf $rsnaps
                done

Ответить