Search code examples
linuxraspberry-pibackupdd

"No space left on device" when using dd to create a disk image


I am trying to trying to create a disk image of my Raspberry Pi Model 3 B+ onto a USB drive using dd. I know there are easier ways to do this on a Raspberry Pi, but I want to try this to test the procedure on a 'sacrificial' system, which I hope to then use on another linux computer running a much larger Ubuntu disk to create a backup. OS is Raspbian Buster 10.

I have been following a procedure I found on an article here: https://www.makeuseof.com/tag/easily-clone-restore-linux-disk-image-dd/

The USB drive has 64GB capacity and has been formatted, initially as exFAT but I also tried NTFS thinking maybe that was the issue. The command ended with the same error, however each time i have tried this the file size transferred has been different, varying from 2-8GB in size before the error occurred.

This is to identify my drives - the SD card is "mmcblk" and my USB drive is "sda", called "NINJA":

pi@raspberrypi:~ $ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1 57.9G  0 disk
└─sda1        8:1    1 57.9G  0 part
mmcblk0     179:0    0 14.9G  0 disk
├─mmcblk0p1 179:1    0  256M  0 part /boot
└─mmcblk0p2 179:2    0 14.6G  0 part /

This my command I tried to use:

pi@raspberrypi:~ $ sudo dd bs=4M if=/dev/mmcblk0 of=/media/pi/NINJA/raspibackup.img

and this is the output:

dd: error writing '/media/pi/NINJA/raspibackup.img': No space left on device
605+0 records in
604+0 records out
2535124992 bytes (2.5 GB, 2.4 GiB) copied, 325.617 s, 7.8 MB/s

Solution

  • Check how much disk space is "Avail" on the target device.

    Example:

    [jack@server1 ~]$ df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 484M     0  484M   0% /dev
    tmpfs                    496M   41M  456M   9% /dev/shm
    tmpfs                    496M  6.9M  489M   2% /run
    tmpfs                    496M     0  496M   0% /sys/fs/cgroup
    /dev/mapper/centos-root  6.2G  6.2G  172K 100% /
    /dev/sda1               1014M  166M  849M  17% /boot
    tmpfs                    100M   24K  100M   1% /run/user/1000
    /dev/sr0                 552M  552M     0 100% /run/media/jack/CentOS 7 x86_64
    

    Terminology:

    • df: DiskFree
    • -h: Human Readable Sizes (Ex: 6.2G instead of 6485900)

    In this example, let's say I want to make a backup of the Boot drive (/dev/sda1) and save it in my Local User Home Folder on my Root Drive (/dev/mapper/centos-root).

    When I so this, I will get an error that looks like:

    [jack@server1 ~]$ sudo dd if=/dev/sda1 of=boot.img
    dd: error writing 'boot.img': No space left on device
    1736905+0 records in
    1736904+0 records out
    889294848 bytes (889 MB) copied, 4.76575 s, 187 MB/s
    

    Terminology:

    • sudo: Super User Do
    • dd: Disk Duplicate
    • if: Input File (source)
    • of: Output File (destination)

    The system is trying to copy ALL of /dev/sda1 (to include freespace) to boot.img, which is impossible at this because /dev/sda1 is 1014M and there is only 172K space left on /dev/mapper/centos-root.

    With that said, the actual size of the /dev/sda is actually 16G total! Which means that there is 8G not allocated.

    My /dev/sda1 should be 1G where my /dev/sda2 (centos-root) should be 15G... in which it is currently 6.2G

    [jack@server1 ~]$ lsblk
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   16G  0 disk 
    ├─sda1            8:1    0    1G  0 part /boot
    └─sda2            8:2    0   15G  0 part 
      ├─centos-root 253:0    0  6.2G  0 lvm  /
      └─centos-swap 253:1    0  820M  0 lvm  [SWAP]
    sr0              11:0    1  552M  0 rom  /run/media/jack/CentOS 7 x86_64
    

    This partition can be extended by doing the following:

    [jack@server1 ~]$ sudo lvextend -L +8G /dev/mapper/centos-root
    [jack@server1 ~]$ sudo xfs_growfs /dev/mapper/centos-root
    

    Now that my partition is extended, I can do another DiskFree command to double check.

    [jack@server1 ~]$ df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 484M     0  484M   0% /dev
    tmpfs                    496M   33M  463M   7% /dev/shm
    tmpfs                    496M  6.9M  489M   2% /run
    tmpfs                    496M     0  496M   0% /sys/fs/cgroup
    /dev/mapper/centos-root   15G  7.0G  7.3G  49% /
    /dev/sda1               1014M  166M  849M  17% /boot
    tmpfs                    100M   24K  100M   1% /run/user/1000
    /dev/sr0                 552M  552M     0 100% /run/media/jack/CentOS 7 x86_64
    

    My root partition is now 15G! Now I can perform my backup of the /dev/sda1 partition!

    [jack@server1 ~]$ sudo dd if=/dev/sda1 of=boot.img
    2097152+0 records in
    2097152+0 records out
    1073741824 bytes (1.1 GB) copied, 5.59741 s, 192 MB/s
    

    Mission Complete!