为什么监控 USB 写入状态不可靠?

为什么监控 USB 写入状态不可靠?

我经常将 ISO 文件写入 USB 拇指驱动器,并且我试图找到一种方法来监控写入状态。通过谷歌搜索,我找到了一堆解决方案,包括pvdcfldd以及命令的 USR1 信号dd

在所有情况下,情况似乎都是这样的:

  1. 该文件以每秒约 100 MB 的速度写入拇指驱动器
  2. 传输在 10 秒内完成(或可能在 99.99% 处冻结)
  3. 传输命令仍然没有响应几分钟甚至不响应中断
  4. 转会结束

我预期的行为是写入速度相对较慢,大概在 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

我已经在手册页中搜索了ddpvdcfldd搜索了单词“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

相关内容