【问题标题】:"No space left on device" when using dd to create a disk image使用 dd 创建磁盘映像时“设备上没有剩余空间”
【发布时间】:2020-01-14 01:45:57
【问题描述】:

我正在尝试使用 dd 将我的 Raspberry Pi Model 3 B+ 的磁盘映像创建到 USB 驱动器上。我知道在 Raspberry Pi 上有更简单的方法可以做到这一点,但我想尝试在“牺牲”系统上测试该过程,然后我希望在另一台运行更大 Ubuntu 磁盘的 linux 计算机上使用它来创建一个备份。操作系统是 Raspbian Buster 10。

我一直在按照我在此处的一篇文章中找到的程序进行操作:https://www.makeuseof.com/tag/easily-clone-restore-linux-disk-image-dd/

USB 驱动器的容量为 64GB,并且已格式化,最初为 exFAT,但我也尝试了 NTFS,认为这可能是问题所在。该命令以相同的错误结束,但是每次我尝试此操作时,传输的文件大小都不同,在错误发生之前大小从 2-8GB 不等。

这是为了识别我的驱动器——SD卡是“mmcblk”,我的USB驱动器是“sda”,叫做“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 /

这是我尝试使用的命令:

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

这是输出:

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

【问题讨论】:

    标签: linux raspberry-pi backup dd


    【解决方案1】:

    检查目标设备上有多少磁盘空间“可用”。

    例子:

    [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
    

    术语:

    • df:无磁盘
    • -h:人类可读大小(例如:6.2G 而不是 6485900)

    在本例中,假设我要备份启动驱动器 (/dev/sda1) 并将其保存在我的根驱动器 (/dev/mapper/centos-root) 上的本地用户主文件夹中。

    当我这样做时,我会得到一个看起来像这样的错误:

    [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
    

    术语:

    • sudo:超级用户做
    • dd:磁盘重复
    • 如果:输入文件(来源)
    • 的:输出文件(目标)

    系统试图将 /dev/sda1 的所有(包括空闲空间)复制到 boot.img,这是不可能的,因为 /dev/sda1 是 1014M,而 /dev/mapper/ 上只剩下 172K 空间centos-root。

    话虽如此,/dev/sda 的实际大小实际上是总共 16G!也就是说没有分配8G。

    我的 /dev/sda1 应该是 1G 而我的 /dev/sda2 (centos-root) 应该是 15G...目前是 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
    

    可以通过以下方式扩展此分区:

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

    现在我的分区已经扩展,我可以执行另一个 DiskFree 命令来仔细检查。

    [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
    

    我的根分区现在是 15G!现在我可以备份 /dev/sda1 分区了!

    [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
    

    任务完成!

    【讨论】:

    • 感谢 Stryker2k2 这对我来说很有意义
    • 我的荣幸!如果您遇到更多 dd 问题,请告诉我 :) 感谢您选择此作为答案,我希望此答案可以帮助其他有相同问题的人。
    【解决方案2】:

    sda1 未挂载到/media/pi/NINJA/,因此您创建的映像存储在mmcblk0p2 分区上。

    由于mmcblk0 的定义比mmcblk0p2 大,逻辑上你的空间已经用完了。

    解决办法:

    您需要先使用sudo mount /dev/sda1 /media/pi/NINJA/ 挂载sda1,然后再次尝试您的dd 命令。

    【讨论】:

    • 请关闭离题问题。
    • @jww 很抱歉,如果我的问题跑题了,你能帮我理解为什么吗?我是一个非常新的用户,想加深对如何在这个论坛上发帖的理解。
    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2011-01-13
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多