[Ubuntu24.04] parsyncfp2インストール

Ubuntu

ファイルサイズが大きい程、コピーに時間がかかるので、コピーを高速化できないかネットで情報を漁っていたところ、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
--- 省略 ---
parsyncfp2ダウンロード
$ wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/parsyncfp2/2.59+git20240307.8bcd266-2/parsyncfp2_2.59+git20240307.8bcd266.orig.tar.xz
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
$ git clone https://github.com/hjmangalam/parsyncfp2
parsyncfp2/parsyncfp2バックアップ
$ sudo cp parsyncfp2/parsyncfp2 parsyncfp2/parsyncfp2.org
parsyncfp2/parsyncfp2修正
※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 scut statsを/usr/local/binへコピー
※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接続しています。

parsyncfp230分26秒
scp45分11秒
rsync1時間33分59秒

参考にさせていただいたサイト等
https://launchpad.net/ubuntu/+source/parsyncfp2
https://github.com/hjmangalam/parsyncfp2
parsyncfp2/README.md

タイトルとURLをコピーしました