内蔵ディスクからUSB SSDドライブに特定の種類の大容量ファイルを多数転送する必要があります。転送する必要があるファイルのサイズは5〜200 GBの範囲です。すべてのファイル転送の全体的な進行状況を監視し、高速でUSBディスクに転送したいと思います。
私はrsyncで始まり、次に最高の速度結果を提供することがわかりました。
rsync -W --size-only --protocol=29 --block-size=131072 --no-compress --info=progress2 /home/user/rosbags/*.bag /media/upload_disk/
これにより、150〜180MB / sの転送速度を得ることができ、転送する必要があるすべてのファイルの全体的な進行状況を知ることができます。 rsyncのプロトコルをバージョン29以下に変更するのに役立ち、15-20%MB / sを追加します。これが制限要素にならないように、特にチャンクサイズを最大に設定しました。 -W(フルファイル)設定を使用しているため、デルタ圧縮の代わりに通常の転送を使用する必要があります。私の仮定は、これが直接コピーから得られたものと似ているはずです。ただし、設定を誤解している可能性があります。
ddを使用して単一のファイルをコピーする場合:
dd if=/home/user/rosbags/2021-10-25-12-22-33.bag bs=131K status=progress of=/media/upload_disk/2021-10-25-12-22-33.bag
同じ設定で500〜600 MB / sの範囲の転送速度を取得します。この例では、rsyncに似たブロックサイズを使用して、できるだけ類似していることを確認します。
進行状況を監視しながら、ddを使用してすべてのファイルを個別にコピーするスクリプトを作成することもできますが、よりスマートな方法がありますか?
rsync または他の標準の Linux ツールを使用します。
ddを使用してshスクリプトの作成を開始しました。
#!/bin/sh
total_size=$(du -sb /home/agco/ros_bags/| cut -f1)
for i in /home/user/ros_bags/*.bag; do
echo $i
#filename=$(basename $i)
#echo $filename
dd if=$i status=progress bs=64M of=/media/upload_disk/$(basename $i)
done
私の主な課題は、現在送信されているビット数を抽出する必要がある全体の進行状況を計算することです。私はこれを行う賢い方法があると思いますが、これまで解決策が見つかりませんでした。