大容量のアーカイブやISOイメージをダウンロード中にネットワークが切れてしまい、最初から取り直すはめになった経験は珍しくありません。Linuxには中断したダウンロードを途中から再開する手段が複数あり、ファイルサイズに関係なく短時間で回復できます。
まず結論:コマンド一発で再開できる
HTTP/HTTPSのダウンロードなら wget に -c オプションを付けるだけです。既にダウンロード済みのバイト数をサーバーに伝え、続きから受信します。
# 中断したHTTPS/HTTPダウンロードを再開する
wget -c https://example.com/largefile.tar.gz
同じディレクトリに途中まで保存されたファイルがあれば自動的に検出し、差分だけを取得します。ファイルが存在しない場合は通常のダウンロードとして動作するため、冪等に実行できます。
curlで再開する
curl を普段使いしている場合は -C -(大文字のCとハイフン)で同じことができます。-C - の「-」はオフセットを自動判定する指定です。
# 中断したダウンロードをcurlで再開する
curl -C - -O https://example.com/largefile.tar.gz
-O を付けることでURLのファイル名をそのまま使います。出力先を変えたい場合は -o 出力ファイル名 に替えてください。サーバーがレンジリクエスト(Accept-Ranges: bytes)に対応していない場合は再開できず、最初から取得し直しになります。その際 curl は警告を表示して停止するため、誤って壊れたファイルを作り続けることはありません。
FTP接続で再開する(lftp推奨)
FTPサーバーからの取得が必要な場合、現在の実務では lftp を使うのが定番です。古い ftp コマンドの reget でも再開は可能ですが、lftp のほうが並列取得・自動再接続・パッシブモード切り替えをまとめて扱えます。
# lftpのインストール(未導入の場合)
# Debian/Ubuntu系
sudo apt install lftp
# RHEL/Rocky/AlmaLinux系
sudo dnf install lftp
# lftpで中断したFTPダウンロードを再開する
lftp -e "set ftp:passive-mode on; get -c /pub/linux/kernel/v6.x/linux-6.9.tar.xz -o linux-6.9.tar.xz; bye" ftp://ftp.example.org
get -c が再開オプションです。ローカルにファイルが存在すればそのサイズ分を読み飛ばし、続きを取得します。匿名FTPの場合はユーザー名 anonymous・パスワードはメールアドレスを入力するのが慣例ですが、lftp はデフォルトで自動入力します。
パッシブモードとアクティブモードの使い分け
NAT配下やファイアウォール内のサーバーからFTPを使う際に接続が途切れる場合、パッシブ/アクティブモードの切り替えが解決策になることがあります。
パッシブモード(PASV)はクライアント側が接続を起点にするため、NATやファイアウォールを越えやすく、現代の環境では通常こちらを使います。アクティブモード(PORT)はサーバーがクライアントに接続を返すため、クライアント側のファイアウォールで弾かれることがあります。
# wgetでアクティブモードを強制する(パッシブが通らない場合)
wget --no-passive-ftp -c ftp://ftp.example.org/pub/file.tar.gz
# lftpでアクティブモードに切り替える
lftp -e "set ftp:passive-mode off; get -c /pub/file.tar.gz -o file.tar.gz; bye" ftp://ftp.example.org
ある運用現場では、古い業務システムのFTPサーバーがパッシブモードに非対応で、デフォルト設定のまま接続を試みてタイムアウトを繰り返していたケースがありました。その際は --no-passive-ftp をオプションに追加するだけで即座に解決しています。逆に、NATルーターの内側からパブリックFTPに接続する場合はパッシブモードを有効にしないと繋がらないことが多いです。
ダウンロード完了後のファイル検証
再開ダウンロードでは途中のバイトが欠損しているリスクがゼロではありません。配布元がチェックサムファイルを提供している場合は必ず照合してください。
# SHA256チェックサムの確認(配布元がSHA256SUMSを提供している場合)
sha256sum largefile.tar.gz
# 配布元の .sha256 ファイルと一括照合する場合
sha256sum -c largefile.tar.gz.sha256
照合結果が OK であればファイルは正常です。FAILED の場合はファイルが壊れているため、ローカルファイルを削除してゼロから取り直すしかありません。再開ダウンロードを繰り返しても壊れたバイト列は修復されません。
なお、wget や curl はHTTPの ETag やサーバー側のファイル更新日時を確認しないため、サーバー上のファイルが差し替えられていた場合でもそのまま再開してしまいます。長時間中断後に再開する際は、配布元のファイルが更新されていないかを確認してからコマンドを実行するのが安全です。
「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。
ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。
>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)
※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。
