linux - 使用dd创建磁盘镜像时"No space left on device"

标签 linux raspberry-pi backup dd

我正在尝试使用 dd 在 USB 驱动器上创建我的 Raspberry Pi Model 3 B+ 的磁盘镜像。我知道有更简单的方法可以在 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

最佳答案

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

例子:

[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: super 用户做
  • dd:磁盘重复
  • if:输入文件(来源)
  • 的:输出文件(目的地)

系统正在尝试将/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

任务完成!

关于linux - 使用dd创建磁盘镜像时"No space left on device",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57902343/

相关文章:

linux - Linux 将进程内存从 RAM 交换到交换文件的确切条件是什么?

使用 SPI 与 ADXL355 通信

C 将十进制 scanf 输入转换为二进制数组

java - JPA冗余数据库

mongodb - 我可以从 mongo oplog 恢复数据吗?

c - 多线程:简单程序段错误(核心转储)

C++ 指针使用 Visual Studio 更改地址,而不是使用 OsX 中的 Xcode 或 Linux 中的 gcc

linux - 如何正确地将本地存储库上的远程设置为服务器上的集中存储库?

python - Raspberry Pi 3b +机器人,pyPS4Controller语法错误

python - 关于python脚本的备份