dd로 복제할 때 디스크 공간이 부족하지만 dd가 계속 복사합니다.

dd로 복제할 때 디스크 공간이 부족하지만 dd가 계속 복사합니다.

저는 이 dd도구를 사용하여 Raspberry Pi SD 카드 이미지를 로컬 컴퓨터에 백업하고 있습니다. 카드 중 하나를 복제할 때 시스템 드라이브에 여유 공간이 부족합니다. 내 컴퓨터에는 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가지 변형의 힘을 사용합니다. dd두 가지 변형이 어떻게 다른지 확인하세요.(128GB, 119GiB).

파일 시스템에는 202G - 79G = ~ 123GiB의 여유 공간이 있으며 그 중 일부는 예약되어 있습니다. root 이는 열에 112G(iB)라고 표시된 이유를 설명하므로 Avail장치의 119GiB를 수용하기에 충분합니다.

성공 하면 프로세스 dd에만 사용할 수 있음에도 불구하고 여전히 202G - 199G = ~ 3GiB의 여유 공간이 있음을 알 수 있습니다 root(따라서 열 0) Avail.

관련 정보