ファイルサイズが大きい程、コピーに時間がかかるので、コピーを高速化できないかネットで情報を漁っていたところ、parsyncfp2なるものを発見しました。
早速、Ubuntu24.04へインストールし、scp、rsyncと比較して、どの程度コピーが高速化されるのか検証してみました。
parsyncfp2インストール
parsyncfp2インストール前に、ip aでネットワークインターフェイス名を確認します。
以下の例では、enp1s0がネットワークインターフェイス名であることが確認できます。
$ ip a
--- 省略 ---
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 54:51:00:xx:xx:xx brd ff:ff:ff:ff:ff:ff
inet 192.168.x.xxx/24 brd 192.168.x.255 scope global enp1s0
--- 省略 ---
$ wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/parsyncfp2/2.59+git20240307.8bcd266-2/parsyncfp2_2.59+git20240307.8bcd266.orig.tar.xz
$ tar Jxfv parsyncfp2_2.59+git20240307.8bcd266.orig.tar.xz
$ sudo apt -y install ethtool iproute2 fpart iw libstatistics-descriptive-perl infiniband-diags
$ git clone https://github.com/hjmangalam/parsyncfp2
$ sudo cp parsyncfp2/parsyncfp2 parsyncfp2/parsyncfp2.org
※cat: /sys/class/net//statistics/rx_bytes: そのようなファイルやディレクトリはありません、というメッセージが出るので、parsyncfp2/parsyncfp2を修正します。
parsyncfp2/parsyncfp2の中で一部を、冒頭で確認したネットワークインターフェイス名enp1s0に修正します。
$ nano parsyncfp2/parsyncfp2
$R1 = `cat /sys/class/net/${NETIF}/statistics/rx_bytes`; chomp $R1;
$T1 = `cat /sys/class/net/${NETIF}/statistics/tx_bytes`; chomp $T1;
↓
$R1 = `cat /sys/class/net/enp1s0/statistics/rx_bytes`; chomp $R1;
$T1 = `cat /sys/class/net/enp1s0/statistics/tx_bytes`; chomp $T1;
$R2 = `cat /sys/class/net/$::NETIF/statistics/rx_bytes`; chomp $R2;
$T2 = `cat /sys/class/net/$::NETIF/statistics/tx_bytes`; chomp $T2;
↓
$R2 = `cat /sys/class/net/enp1s0/statistics/rx_bytes`; chomp $R2;
$T2 = `cat /sys/class/net/enp1s0/statistics/tx_bytes`; chomp $T2;
$R1 = `cat /sys/class/net/$::NETIF/statistics/rx_bytes`; chomp $R1;
$T1 = `cat /sys/class/net/$::NETIF/statistics/tx_bytes`; chomp $T1;
↓
$R1 = `cat /sys/class/net/enp1s0/statistics/rx_bytes`; chomp $R1;
$T1 = `cat /sys/class/net/enp1s0/statistics/tx_bytes`; chomp $T1;
$R1 = `cat /sys/class/net/${NETIF}/statistics/rx_bytes`;
$T1 = `cat /sys/class/net/${NETIF}/statistics/tx_bytes`;
↓
$R1 = `cat /sys/class/net/enp1s0/statistics/rx_bytes`;
$T1 = `cat /sys/class/net/enp1s0/statistics/tx_bytes`;
$R2 = `cat /sys/class/net/${NETIF}/statistics/rx_bytes`;
$T2 = `cat /sys/class/net/${NETIF}/statistics/tx_bytes`;
↓
$R2 = `cat /sys/class/net/enp1s0/statistics/rx_bytes`;
$T2 = `cat /sys/class/net/enp1s0/statistics/tx_bytes`;
※parsyncfp2/README.mdに記載されているcd parsyncfp2; cp parsyncfp2 scut stats ~/binではエラーて止まります。
$ cd parsyncfp2; sudo cp parsyncfp2 scut stats /usr/local/bin
以上で、Ubuntu24.04へのparsyncfp2インストールは終了です。
parsyncfp2でコピー
parsyncfp2でコピーしてみます。
※parsyncfp2では、ローカルにあるファイルをリモートへコピーする事が可能なようです。リモートにあるファイルをリモートへのコピー、リモートにあるファイルをローカリへのコピーはできないようです。また,、操作前にssh共有キーを設定する必要があります。
https://github.com/hjmangalam/parsyncfp2
コピーするファイルgitlabce.imgがあるディレクトリへ移動後、parsyncfp2を使用します。
parsyncfp2でローカルにあるファイルgitlabce.imgを、リモートbackup01の~/hdd01へコピーする場合は以下の通りです。
必要であれば、parsyncfp2の後ろにオプションを入れます。
$ parsyncfp2 --checkperiod 6 --NP 4 --chunksize=87682352 --bwlimit=0 gitlabce.img backup01:~/hdd01
ErrorやWARNが出ていますが、結果的にgitlabce.imgは、backup01:~/hdd01へ無事、ファイルサイズがコピー元と同じファイルサイズでコピーされていました。
Press [ENTER] to continue. でエンターキーを投下するとコピーが開始されます。
Unknown option: bwlimit
Error: any valid prefix is expected rather than "backup01".
Command line is not complete. Try option "help"
MYGITLABCE01 WARN: About to remove all the old cached chunk, log,
and PID files from [/home/gitlabuser01/.pfp2/fpcache]
and the previous rsync log files from [/home/gitlabuser01/.pfp2].
Enter ^C to stop this.
Press [ENTER] to continue.
MYGITLABCE01 INFO: [4] files from the previous run have been cleared.
Re-initializing dirs and configuring fpart.. This may take a few secs.
MYGITLABCE01 WARN: fpart has finished and the # of chunk files [1]
is < the # of parallel rsyncs you've requested, usually a mistake.
If so, you may want to kill this run and start another with a smaller chunk size.
MYGITLABCE01 INFO: All my rsyncs issued; waiting for them to finish.
| Elapsed | 1m | [ ] MB/s | Running || Susp'd | Chunks [2025-04-22]
Time | time(m) | Load | TCP / RDMA out | PIDs || PIDs | [UpTo] of [ToDo] Send Host
12.24.33 0.12 0.28 81.44 / 0.00 1 <> 0 [1] of [1] < MYGITLABCE01
12.24.41 0.25 0.42 112.74 / 0.00 1 <> 0 [1] of [1] < MYGITLABCE01
12.24.49 0.38 0.82 113.07 / 0.00 1 <> 0 [1] of [1] < MYGITLABCE01
12.24.57 0.52 1.01 115.75 / 0.00 1 <> 0 [1] of [1] < MYGITLABCE01
--- 省略 ---
scp rsync parsyncfp2 それぞれコピーに要した時間
ローカルにある180GBのgitlabce.imgを、リモートbackup01:~/hdd01へのコピーに要した時間は以下の通りでした。
検証環境は、ローカル、リモート共に(ストレージ構成以外)同じパーツ構成、OSのPC2台、同じルーターに有線で1Gb接続しています。
parsyncfp2 | 30分26秒 |
scp | 45分11秒 |
rsync | 1時間33分59秒 |
参考にさせていただいたサイト等
https://launchpad.net/ubuntu/+source/parsyncfp2
https://github.com/hjmangalam/parsyncfp2
parsyncfp2/README.md