使用 Linux (Debian) 时,我经常使用 dd 将磁盘映像复制到 SD 卡。我编写了一个脚本,如果“of”选项中指定的设备文件太大,则会抛出错误。这可以防止我不小心炸毁我的一个硬盘。
SD_SIZE=$(sudo sfdisk -s ${SD_DEV})
if [ $SD_SIZE -gt 33554432 ]; then
echo "might not be and SD card, exiting"
exit 1
fi
但是,如果我插入 SD 卡并忘记将其卸载,结果就很粗略。有时复制成功,有时复制失败。
我可以用这里的答案修改我的脚本: 如何通过脚本检查文件系统是否已挂载
但是,dd 中有具有此功能的选项吗? (在 OS X 上,默认情况下 dd 不会写入已安装的磁盘)
另外有趣的是,为什么在尝试复制到已安装的磁盘时 dd(在 OS X 上)会出错?也许内核或 dd 存在一些差异?如果您尝试添加到 OS X (10.9) 中安装的驱动器,则会出现以下错误:
dd: /dev/diskN: 资源繁忙,确保磁盘未被使用
我可以使用 cp 写入磁盘,因此 dd 进行的系统调用可能不像 OPEN then WRITE 那么简单。
答案1
有时复制成功,有时复制失败。
可能会失败,因为同时某些进程写入已安装的文件系统,猜测这就是为什么umount
之前是一个很好的做法:-)
dd
应该真的是公正的open
,write
我想 MacOSX 版本添加了一些控制,我认为很容易理解为什么使用他们的设备名称,与 Linux 相比,我在dd
使用之前进行了三次检查。