![为什么监控 USB 写入状态不可靠?](https://linux22.com/image/1459614/%E4%B8%BA%E4%BB%80%E4%B9%88%E7%9B%91%E6%8E%A7%20USB%20%E5%86%99%E5%85%A5%E7%8A%B6%E6%80%81%E4%B8%8D%E5%8F%AF%E9%9D%A0%EF%BC%9F.png)
我经常将 ISO 文件写入 USB 拇指驱动器,并且我试图找到一种方法来监控写入状态。通过谷歌搜索,我找到了一堆解决方案,包括pv
,dcfldd
以及命令的 USR1 信号dd
。
在所有情况下,情况似乎都是这样的:
- 该文件以每秒约 100 MB 的速度写入拇指驱动器
- 传输在 10 秒内完成(或可能在 99.99% 处冻结)
- 传输命令仍然没有响应几分钟甚至不响应中断
- 转会结束
我预期的行为是写入速度相对较慢,大概在 5 MB/s 左右,进度条从 0% 均匀地增加到 100%。文件似乎被快速写入某种缓冲区,然后缓慢刷新到磁盘。
以下是我尝试过的一些命令,它们的结果基本相同:
# 函数 vdd { > sudo dd“$@”& > sudo sh -c "while pkill -10 ^dd$; do sleep 5; done" > } #vdd bs=4096 if="/path/to/ubuntu-15.04-desktop-amd64.iso" of=/dev/sdb
dcfldd bs=4096 if="/path/to/ubuntu-15.04-desktop-amd64.iso" of=/dev/sdb
pv“/path/to/ubuntu-15.04-desktop-amd64.iso”|dd bs=4096 of=/dev/sdb
pv -B 4096 “/path/to/ubuntu-15.04-desktop-amd64.iso” > /dev/sdb
我已经在手册页中搜索了dd
,pv
并dcfldd
搜索了单词“flush”,但没有找到任何结果......
答案1
如果你需要它作为命令行工具
USB="/dev/sdb"
ISO_IMAGE="/path/to/ubuntu-15.04-desktop-amd64.iso"
SIZE=$(du -h -B1 "$ISO_IMAGE" | awk '{print $1}')
dd if="$ISO_IMAGE" | pv -s "$SIZE" | dd of="$USB" bs=4M oflag=dsync
这里 dd 将要求完全同步输出到磁盘。
您提到过刷新,您可能希望在某些 UI 中使用它来逐行写出进度pv -n
。
USB="/dev/sdb"
ISO_IMAGE="/path/to/ubuntu-15.04-desktop-amd64.iso"
SIZE=$(du -h -B1 "$ISO_IMAGE" | awk '{print $1}')
(dd if="$ISO_IMAGE" | pv -n -s "$SIZE" | dd of="$USB" bs=4M oflag=dsync) 2>&1 | \
yad --center --borders=6 --title="Image writer" --text="$(echo -e "Writing $(basename "$ISO_IMAGE"):")"\
--width=300 --progress --no-buttons --auto-close --image=system-run --window-icon=drive-removable-media-usb