我正在将 Raspbian Linux 映像安装到插入 BeagleBone Black 的 SD 卡上。稍后我将在我的 Raspberry Pi 中使用它。
为此,我使用 MacBook Pro 中的 dd 命令(通过 ssh)。
dd if=/Users/user/Downloads/2014-09-09-wheezy-raspbian.img | ssh [email protected] "dd of=/dev/mmcblk0"
最初看起来它正在工作,因为执行命令给了我:
Debian GNU/Linux 7
BeagleBoard.org BeagleBone Debian Image 2014-04-23
Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
同时,我可以通过另一个终端窗口 ssh 到我的 beaglebone,再次以 root 身份登录ssh 192.168.7.2 -l root
。现在如何通过 dd 命令监控 .img 文件复制到 /dev/mmcblk0 的情况?
不幸的是,SD 卡看起来并没有被填满(/dev/mmcblk0p1 在超过 5 分钟后使用了 15K):
root@beaglebone:/dev# df -ah
Filesystem Size Used Avail Use% Mounted on
rootfs 3.4G 1.5G 1.9G 44% /
sysfs 0 0 0 - /sys
proc 0 0 0 - /proc
udev 10M 0 10M 0% /dev
devpts 0 0 0 - /dev/pts
tmpfs 100M 624K 99M 1% /run
/dev/disk/by-uuid/88d655b6-c63d-4922-9b0e-340b5ece0b8c 3.4G 1.5G 1.9G 44% /
tmpfs 249M 0 249M 0% /dev/shm
tmpfs 249M 0 249M 0% /sys/fs/cgroup
cgroup 0 0 0 - /sys/fs/cgroup/systemd
cgroup 0 0 0 - /sys/fs/cgroup/cpu,cpuacct
cgroup 0 0 0 - /sys/fs/cgroup/memory
cgroup 0 0 0 - /sys/fs/cgroup/blkio
systemd-1 0 0 0 - /proc/sys/fs/binfmt_misc
tmpfs 5.0M 0 5.0M 0% /run/lock
debugfs 0 0 0 - /sys/kernel/debug
tmpfs 100M 0 100M 0% /run/user
mqueue 0 0 0 - /dev/mqueue
securityfs 0 0 0 - /sys/kernel/security
fusectl 0 0 0 - /sys/fs/fuse/connections
/dev/mmcblk1p1 96M 74M 23M 77% /boot/uboot
binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc
/dev/mmcblk0p1 15G 32K 15G 1% /media/6461-6136
root@beaglebone:/dev#
答案1
看来你已经找到答案了。但另一个可能更容易记住的是
killall -USR1 dd
(这会向每个 dd 进程发出信号,通常只有一个)
输出显示在原始窗口上,因为您正在向现有的“dd”命令发送信号,并且 dd 有一个功能,当它收到该信号时,它会将进度转储到 stderr。
我还想指出,您似乎正在覆盖当前安装的分区。这是一件非常糟糕的事情,您可能会像这样损坏您的文件系统。在覆盖分区之前务必先卸载该分区。
另外,有时您可以通过给 dd 更大的块大小来加速 dd (并让 ssh 直接从文件中提取)。例如,将命令更改为
ssh [email protected] "dd of=/dev/mmcblk0 bs=1M" < /Users/user/Downloads/2014-09-09-wheezy-raspbian.img
答案2
这个命令最终起作用了,在我的 beaglebone 上以 root 身份执行:
pkill -USR1 -n -x dd
我可以一遍又一遍地运行该命令,它确实会更新(传输缓慢)。
有趣的是,更新将出现在其他终端窗口(即执行 dd 命令的窗口):
Debian GNU/Linux 7
BeagleBoard.org BeagleBone Debian Image 2014-04-23
Support/FAQ: http://elinux.org/Beagleboard:BeagleBoneBlack_Debian
39136+0 records in
39136+0 records out
20037632 bytes (20 MB) copied, 5.6016 s, 3.6 MB/s
89376+0 records in
89376+0 records out
45760512 bytes (46 MB) copied, 12.3178 s, 3.7 MB/s
205152+0 records in
205152+0 records out
105037824 bytes (105 MB) copied, 27.7496 s, 3.8 MB/s
296608+0 records in
296608+0 records out
151863296 bytes (152 MB) copied, 40.7469 s, 3.7 MB/s
361184+0 records in
361184+0 records out
184926208 bytes (185 MB) copied, 49.3917 s, 3.7 MB/s
432672+0 records in
432672+0 records out
221528064 bytes (222 MB) copied, 58.9498 s, 3.8 MB/s
648529+0 records in
648529+0 records out
332046848 bytes (332 MB) copied, 88.3797 s, 3.8 MB/s
702289+0 records in
702289+0 records out
359571968 bytes (360 MB) copied, 103.606 s, 3.5 MB/s
987329+0 records in
987329+0 records out
505512448 bytes (506 MB) copied, 194.866 s, 2.6 MB/s
991001+0 records in
991001+0 records out
507392512 bytes (507 MB) copied, 197.19 s, 2.6 MB/s
答案3
我用来监控正在进行的文件传输的工具(即我曾经在 RetroPie 中跟踪从 sdcard 到 USB 驱动器的 ROM 复制),它正是这样做的,足够恰当的是,progress
.
它是一个“微小、肮脏、仅限 Linux 和 OSX 的 C 命令,用于查找系统上当前运行的coreutils
基本命令(cp
、mv
、dd
、tar
、gzip
/ gunzip
、cat
、rsync
等)并显示复制数据的百分比。”
您可能必须安装它 ( sudo apt install progress
) 然后以sudo
.
我建议添加-m
命令以使其持续监控和更新:
sudo progress -m