Mac OS X 和 Linux 中 dd 的区别

Mac OS X 和 Linux 中 dd 的区别

使用 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应该真的是公正的openwrite我想 MacOSX 版本添加了一些控制,我认为很容易理解为什么使用他们的设备名称,与 Linux 相比,我在dd使用之前进行了三次检查。

相关内容