ddに複製するとディスク容量が不足しますが、ddはコピーを続けます。

ddに複製するとディスク容量が不足しますが、ddはコピーを続けます。

私はこのddツールを使ってRaspberry Pi SDカードイメージをローカルコンピュータにバックアップしています。カードの1つを複製すると、システムドライブに空き容量がなくなります。私のコンピュータには112GBの空き容量があり、SDカードは128GBです。カードをコピーするために私が下したコマンドは次のとおりです。

sudo dd if=/dev/mmcblk0 of=pi_backup.img status=progress

ddシステム領域が不足すると、どのようなエラーや警告も生成されず、イメージ全体が自分のローカルコンピュータにコピーされたことを報告します。ディスクサイズは128GBを少し超えています。システムストレージが完全にいっぱいです。

dd出力:

128126352384 bytes (128 GB, 119 GiB) copied, 1524 s, 84.1 MB/s
250347520+0 records in
250347520+0 records out
128177930240 bytes (128 GB, 119 GiB) copied, 1524.57 s, 84.1 MB/s

df -hコピー前の出力(/dev/loop簡潔にするためにデバイスを切り捨てる):

Filesystem      Size  Used Avail Use% Mounted on
udev            7.7G     0  7.7G   0% /dev
tmpfs           1.6G  3.0M  1.6G   1% /run
/dev/nvme0n1p7  202G   79G  112G  42% /
tmpfs           7.7G   34M  7.7G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/nvme0n1p1  186M   94M   93M  51% /boot/efi
tmpfs           1.6G   20K  1.6G   1% /run/user/125
tmpfs           1.6G  132K  1.6G   1% /run/user/1000
/dev/mmcblk0p1  253M   50M  203M  20% /media/tdarby/boot
/dev/mmcblk0p2  118G   15G   99G  13% /media/tdarby/rootfs

df -hコピー後の出力:

Filesystem      Size  Used Avail Use% Mounted on
udev            7.7G     0  7.7G   0% /dev
tmpfs           1.6G  3.0M  1.6G   1% /run
/dev/nvme0n1p7  202G  199G     0 100% /
tmpfs           7.7G   34M  7.7G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/nvme0n1p1  186M   94M   93M  51% /boot/efi
tmpfs           1.6G   20K  1.6G   1% /run/user/125
tmpfs           1.6G  136K  1.6G   1% /run/user/1000

ls -lh pi_backup.imgコピー後:

-rw-r--r-- 1 root root 120G Jan 12 15:28 pi_backup.img

コピーしたら、ディスクに書き込んでみてください。

~$ echo "hello" >> out.txt
bash: echo: write error: No space left on device

しかし、dd間違いは一度も発生しませんでした。実際、dd後でもう一度実行すると、ディスクがいっぱいになっていないかのように、新しい画像をコピーしていきます!

ログに示すように、元のディスクの空き容量は112Gで、コピー後のファイルサイズは120Gでした。

私が理解したように、dd出力ディスクがいっぱいになるとエラーが発生し、次dd: error writing ‘/dev/sdx’: No space left on deviceの警告は生成されません。

ddディスク内の隣接するファイルやパーティションを上書きするのが心配です。今でもディスクはまだいっぱいです。ddコマンドを再実行でき、ディスクがいっぱいだと文句を言うことなくコピーを続けます。

ここで予想される動作は何ですか?

答え1

ギガバイト(GB)はギガバイト(GiB、G)と同じではありません。

  • 1GiB == 1GiB == 1024 3バイト== 2 30バイト== 1,073,741,824バイト
  • 1GB == 1GB == 1000 3バイト == 10 9バイト == 1,000,000,000バイト

dfサフィックスは2つの変形の力を使用します。dd2つのバリエーションがどのように異なるかを確認してください。(128GB、119GiB)

ファイルシステムには202G - 79G =〜123GiBの空き容量があり、その一部は予約されています。root これは列に112G(iB)とマークされている理由を説明しているため、Availデバイスの119GiBに対応するのに十分です。

成功すると、プロセスddでのみ使用できるにもかかわらず、まだ202G - 199G =〜3GiBの空き容量があることがわかりますroot(したがって熱0Avail

関連情報