Amazon Linux 2023 環境で EBS ボリューム間の並列データ転送を実装~確認してみた
はじめに
テクニカルサポートの 片方 です。
既存の EBS ボリュームを縮小したい場合、AWS では直接的なサイズ縮小に対応していません。
そのため小さな EBS ボリュームを新規作成し、既存ボリュームからデータを移行する必要があります。
一方で、データ移行の一般的な AWS サービスとして AWS DataSync がありますが、現時点で EBS ボリューム間は未対応です。
EBS ボリューム間のデータ移行を実現するためには、(Amazon Linux 2023 インスタンス上では) rsync コマンドを使用したデータ転送の方法が考えられます。
今回は、GNU parallel と rsync を組み合わせた並列データ転送を実装 ~ 確認しました。
ボリュームサイズを増やす必要があります。ボリュームサイズを小さくすることはできません。ただし、より小さなボリュームを作成し、そのボリュームに対して rsync (Linux インスタンス) または robocopy (Windows インスタンス) などのアプリケーションレベルのツールを使用してデータを移行することができます。
DataSync can copy data to and from Network File System (NFS) shares, Server Message Block (SMB) shares, Hadoop Distributed File Systems (HDFS), self-managed object storage, object storage in other clouds such as Google Cloud Storage and Wasabi Cloud Storage (see the full list of support clouds), Azure Files, Azure Blob Storage (including Azure Data Lake Storage Gen2), Amazon S3 compatible storage on Snow, Amazon Simple Storage Service (Amazon S3), Amazon Elastic File System (Amazon EFS) file systems, Amazon FSx for Windows File Server file systems, Amazon FSx for Lustre file systems, Amazon FSx for OpenZFS file systems, and Amazon FSx for NetApp ONTAP file systems.
検証環境
- OS : Amazon Linux 2023
- インスタンスタイプ : EC2 m5.large
- ルート EBS ボリューム (ソース) : 50 GB, gp3, 3,000 IOPS, 125 MB/秒
- 追加 EBS ボリューム (コピー先) : 25 GB, gp3, 3,000 IOPS, 125 MB/秒
- テストファイル : 2,000 個
事前準備
追加 EBS ボリューム (コピー先) をマウントします。
コマンド例
sh-5.2$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme1n1 259:0 0 25G 0 disk
nvme0n1 259:1 0 50G 0 disk
├─nvme0n1p1 259:2 0 50G 0 part /
├─nvme0n1p127 259:3 0 1M 0 part
└─nvme0n1p128 259:4 0 10M 0 part /boot/efi
sh-5.2$ sudo mkfs -t ext4 /dev/nvme1n1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 6553600 4k blocks and 1638400 inodes
Filesystem UUID: 823d8028-7067-48db-9dcf-8f1631a650e4
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
sh-5.2$ sudo mkdir -p /mnt/data
sh-5.2$ sudo mount /dev/nvme1n1 /mnt/data
sh-5.2$ sudo chown ec2-user:ec2-user /mnt/data
sh-5.2$ sudo chmod 777 /mnt/data
sh-5.2$ df -h /mnt/data
Filesystem Size Used Avail Use% Mounted on
/dev/nvme1n1 25G 24K 24G 1% /mnt/data
sh-5.2$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme1n1 259:0 0 25G 0 disk /mnt/data
nvme0n1 259:1 0 50G 0 disk
├─nvme0n1p1 259:2 0 50G 0 part /
├─nvme0n1p127 259:3 0 1M 0 part
└─nvme0n1p128 259:4 0 10M 0 part /boot/efi
sh-5.2$
GNU parallel のインストールします。なお、Amazon Linux 2023 では EPEL リポジトリが利用できないため、ソースからビルドする必要があります。
# 事前準備
sudo yum install -y --allowerasing gcc make perl wget curl
# ダウンロード
sudo wget https://ftp.gnu.org/gnu/parallel/parallel-latest.tar.bz2 -O /tmp/parallel.tar.bz2
# 解凍
cd /tmp
tar xjf parallel.tar.bz2
cd parallel-*
# ビルド
./configure && make
sudo make install
# インストール確認
parallel --version
parallel --version コマンド実行後に、以下のような出力されれば成功です。
sh-5.2$ parallel --version
GNU parallel 20251022
Copyright (C) 2007-2025 Ole Tange, http://ole.tange.dk and Free Software
Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later https://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
GNU parallel comes with no warranty.
Web site: https://www.gnu.org/software/parallel
When using programs that use GNU Parallel to process data for publication
please cite as described in 'parallel --citation'.
EBS ボリューム間の並列データ転送を検証するために、テキストファイルを作成します。
以下では、2,000 個のファイルを EC2 にアタッチしている ルート EBS ボリュームへ生成しています。
# ファイル作成
seq 1 2000 | xargs -I {} -P 32 bash -c 'echo "Test file {}" > /tmp/test_file_{}.txt'
# パーミッション修正
sudo chmod 777 /mnt/data
作成されているか確認
sh-5.2$ ls -1 /tmp/test_file_*.txt | wc -l
2000
sh-5.2$ du -sh /tmp/test_file_*
4.0K /tmp/test_file_1.txt
4.0K /tmp/test_file_10.txt
4.0K /tmp/test_file_100.txt
4.0K /tmp/test_file_1000.txt
4.0K /tmp/test_file_1001.txt
4.0K /tmp/test_file_1002.txt
(略)
4.0K /tmp/test_file_998.txt
4.0K /tmp/test_file_999.txt
sh-5.2$ cat /tmp/test_file_1.txt
Test file 1
sh-5.2$ cat /tmp/test_file_77.txt
Test file 77
sh-5.2$
これで、parallel と rsync を利用するデータ転送の準備は完了です。
お疲れさまでした。
やってみた
EBS ボリュームへの並列データ転送を実行します。
今回は、コマンドオプション "parallel -j 8" を利用して、8 個の並行プロセスで処理します。
※ 並行度 8 で転送
find /tmp/test_file_*.txt -type f | \
parallel -j 8 rsync -avR {} /mnt/data/
※ 実行時間を計測するコマンド (8 個の並行プロセス)
time find /tmp/test_file_*.txt -type f | \
parallel -j 8 rsync -avR {} /mnt/data/
※ 進捗バーを表示 (8 個の並行プロセス)
find /tmp/test_file_*.txt -type f | \
parallel --bar -j 8 rsync -avR {} /mnt/data/
実行結果
(略)
sent 184 bytes received 36 bytes 440.00 bytes/sec
total size is 14 speedup is 0.06
sending incremental file list
/tmp/test_file_993.txt
sent 184 bytes received 36 bytes 440.00 bytes/sec
total size is 14 speedup is 0.06
sending incremental file list
/tmp/test_file_996.txt
sent 184 bytes received 36 bytes 440.00 bytes/sec
total size is 14 speedup is 0.06
sending incremental file list
/tmp/test_file_998.txt
sent 184 bytes received 36 bytes 440.00 bytes/sec
total size is 14 speedup is 0.06
sending incremental file list
/tmp/test_file_997.txt
sent 184 bytes received 36 bytes 440.00 bytes/sec
total size is 14 speedup is 0.06
sending incremental file list
/tmp/test_file_999.txt
sent 184 bytes received 36 bytes 440.00 bytes/sec
total size is 14 speedup is 0.06
sh-5.2$ ls -1 /mnt/data/tmp/test_file_*.txt | wc -l
2000
sh-5.2$ du -sh /mnt/data/
8.0M /mnt/data/
sh-5.2$

上手く出来ていますね。成功です!
補足
コマンド実行時に、以下のパーミッションエラーが発生することがあります。
エラー: mkdir "/mnt/data/tmp" failed: Permission denied (13)
この様な場合は、(/mnt/data) ディレクトリに書き込み権限がないことが原因です。
sudo chmod 777 (/mnt/data) といったパーミッション修正してください。
大規模な転送の場合は、事前にテスト環境で検証することをお勧めします。
まとめ
本ブログが誰かの参考になれば幸いです。
参考資料
- Elastic Volumes オペレーションを使用して Amazon EBS ボリュームを変更する - Amazon EBS
- AWS DataSync FAQs | Amazon Web Services
- Amazon EBS ボリュームを使用できるようにする - Amazon EBS
- NAME — GNU Parallel 20251022 documentation
アノテーション株式会社について
アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。







