MENU

4GBを超えるファイルを外付けディスクにコピーできないときの原因と対処

目次

コピーが途中で失敗するのはファイルシステムの制限が原因

外付けUSBメモリや外付けHDDへのコピー中に処理が止まり、次のようなエラーが表示された場合、ファイルサイズの上限に引っかかっている可能性があります。

cp: error writing '/mnt/usb/backup.tar.gz': File too large

「File too large」というメッセージが出たときは、コピー先のファイルシステムがFAT32である可能性が高いです。FAT32は1ファイルあたりのサイズが4GiB(正確には4,294,967,295バイト=約4GB)を超えると書き込めない仕様になっています。

なお、「No space left on device」と表示されるときはディスクの空き容量不足が原因です。見た目は似ていますが原因が異なるため、エラーメッセージをよく確認してください。また「Input/output error」が出るケースはハードウェアの問題が疑われるため、後述の「よくあるつまずき」も参照してください。

外付けディスクのファイルシステムを確認する

本当にFAT32が原因かどうかは、ファイルシステムを確認してから判断します。次のコマンドで確認できます。

lsblk -f

出力例(抜粋):

NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINTS
sdb
└─sdb1 vfat     MY_DRIVE    1234-ABCD                            /mnt/usb

FSTYPEの欄がvfatと表示されていれば、そのパーティションはFAT32(またはFAT16)です。exfatやntfsであれば、ファイルサイズの制限は実用上ほぼないため、コピーが失敗する原因は別のところにあります。

lsblkが使えない環境では、df -Tでもファイルシステムを確認できます。

df -T /mnt/usb

「Type」列がvfatであれば、やはりFAT32です。

分割か形式変更か、状況で使い分ける

FAT32であることが確認できたら、次の2つの対処法から状況に合わせて選びます。

  • ファイルを分割してコピーする:ディスクの形式を変えずに済むため、既存のデータを消さずに対処できます。WindowsやBDレコーダー・テレビなど、FAT32しか読めない機器との互換性をそのまま保てます。ただしコピー先でファイルを元に戻す手順が1ステップ増えます。
  • 外付けディスクを別の形式に変更する:フォーマットし直す必要があり、ディスク上のデータは消えます。変更後はファイルサイズの制限がほぼなくなるため、以降は分割・結合の手間がかかりません。

次のような状況では分割を選ぶのが無難です。

  • 外付けディスクをWindowsや古い機器でも使っており、FAT32以外では読めない
  • ディスク上に既存のデータがあり、すぐにフォーマットしたくない
  • 一時的な作業のためだけに対処したい

次のような状況では形式変更が長期的な解決になります。

  • LinuxとWindowsの間で大容量ファイルをやり取りすることが多い(exFATが適しています)
  • 外付けディスクをLinux専用で使う(ext4が使えます)
  • 毎回分割・結合するのが手間になってきた

ファイルを分割してコピーする手順

Linuxにはsplitコマンドが標準で用意されています。-bオプションで1つあたりの分割サイズを指定します。次の例ではlargefile.isoを3GBずつに分割して外付けディスクへコピーします。

split -b 3G largefile.iso /mnt/usb/largefile.iso.

コマンド末尾のピリオドは出力ファイル名のプレフィックスです。実行すると/mnt/usb/以下にlargefile.iso.aa、largefile.iso.ab……という名前で分割ファイルが作成されます。

分割ファイルを元に戻すにはcatコマンドを使います。

cat /mnt/usb/largefile.iso.* > restored_largefile.iso

正しく結合できたかどうかは、ハッシュ値を比較すると確認できます。元のファイルと結合後のファイルで同じ値が出れば、内容は一致しています。

sha256sum largefile.iso
sha256sum restored_largefile.iso

形式変更を選ぶ場合に知っておきたいこと

外付けディスクを別のファイルシステムに変更する場合、フォーマット前にディスク上のデータを別の場所へバックアップしてください。フォーマットはディスク上のすべてのデータを消去します。

どのファイルシステムを選ぶかは用途によって異なります。

  • exFAT:LinuxとWindows・macOS間でファイルをやり取りする用途に向いています。現代の主要OSはほぼ標準でexFATをサポートしており、ファイルサイズの制限も実用上問題ありません。クロスプラットフォームで使う外付けディスクには最初の候補になります。
  • NTFS:Windowsとの互換性が非常に高いですが、LinuxからNTFSへの書き込みにはntfs-3gなどのドライバが別途必要になるディストリビューションもあります。
  • ext4:Linux専用で使うならパフォーマンスや安定性の面で優れた選択肢ですが、WindowsやmacOSでは標準では読み書きできません。

フォーマット自体はmkfs系コマンドで行えます。ただしデバイス名(/dev/sdb1など)を誤ると意図しないディスクのデータを消してしまいます。実行前にlsblkやfdisk -lでデバイス名を慎重に確認してください。

よくあるつまずき

分割ファイルの結合順序がずれる

cat largefile.iso.* > restored.isoのようにワイルドカードを使うと、ファイル名の辞書順に結合されます。splitが生成するサフィックス(aa、ab……)はアルファベット昇順になっているため、通常は問題ありません。ただし分割後にファイルを手動でリネームした場合は順序が変わる可能性があるため注意してください。

exFATへの書き込みでエラーになる

古めのLinuxディストリビューションでは、exFATのカーネルモジュールが標準で入っていないことがあります。次のコマンドでモジュールの有無を確認できます。

modinfo exfat

「Module exfat not found」と表示された場合は、ディストリビューションのパッケージをインストールすることで対応できます。Debianや Ubuntuならexfat-fuseまたはexfatprogs、RHELやAlmaLinuxならexfatprogsが対象パッケージです。

「File too large」ではなく「Input/output error」が出る

「Input/output error」はファイルシステムの制限ではなく、ハードウェアの問題(ディスクの故障・USBケーブルの接触不良など)が原因のことがあります。別のUSBポートやケーブルを試してみたり、同じファイルを別の外付けデバイスにコピーして再現するかどうかを確かめると、原因の切り分けに役立ちます。

「コマンドは打てる。次は”現場で通用する型”を最短で身につけたい」——そんなあなたへ。

ネットの断片的なTipsをコピペするだけでは、体系的な運用スキルはなかなか積み上がりません。リナックスマスター.JPの無料メルマガ「リナマガ」では、現場で実際に使うLinuxサーバー運用の考え方を、順を追って実務目線でお届けしています。いま登録された方には、安全なサーバー構築の「型」をまとめた『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼント中です。

>> 図解60P『Linux入門マニュアル』を無料で受け取る
(メルマガ登録は10秒・いつでも解除OK)

※ 「独学の時間がもったいない」「プロから現場の技術を最短で学びたい」という本気の方には、2日で実務レベルが身につく初心者向けハンズオンセミナーもご用意しています。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次