【问题标题】:How to use dd on WSL? [closed]如何在 WSL 上使用 dd? [关闭]
【发布时间】:2018-10-30 17:34:48
【问题描述】:

如何使用dd 命令在 WSL 中转储可移动磁盘的内容?

当我跑步时,

dd if=/mnt/d of=sdDump bs=512 count=1

我收到错误dd: error reading '/mnt/d': Is a directory

我跟着steps shown here挂载磁盘:

sudo mkdir /mnt/d
sudo mount -t drvfs D: /mnt/d

这样做可以让我通过ls 查看磁盘上的文件,但运行dd 会产生上述错误。

【问题讨论】:

  • 对于“if”参数,使用您传递给 mount 命令的设备,而不是您将其安装到的目录的名称。
  • @pcjr 嗨,你能详细说明一下吗? “使用设备”是什么意思?
  • 使用块设备。由于 WSL 不支持它们,我推荐cygwincmder。请注意,您需要以管理员身份打开终端,然后运行dd if=/dev/sdb of=sdDump bs=512 count=1 status=progress

标签: unix dump windows-subsystem-for-linux


【解决方案1】:

正如@asad-saeeduddin 所说,WSL 没有块级访问权限,但这并不意味着您不能在 Windows 上使用 dd!

我发现 dd 是随 Git for Windows 一起安装的工具集的一部分。安装后可以在C:\Program Files\Git\usr\bin\dd.exe

找到

与 /dev/sda 等效的 Windows 是 \.\PHYSICALDRIVE0,您可以使用此命令找到本地机器设备的正确 ID(也返回扇区大小):

Get-WmiObject Win32_diskdrive | select Caption,DeviceID,BytesPerSector,InterfaceType,Size

【讨论】:

    【解决方案2】:

    mount命令的典型用法是指定你想挂载什么(一个设备,在*nix上一个设备实际上只是一种特殊类型的文件)以及要安装它的位置(目录)。 dd 命令需要某种类型的文件。在您的示例中,D:设备,因此这是您需要传递给 dd 的参数:

    dd if=D: of=sdDump bs=512 count=1
    

    免责声明:我没有 WSL 经验,但几十年来我一直在使用 mountdd

    【讨论】:

    • 不幸的是,我认为dd if=D: 行不通; WSL 不支持访问块设备文件。
    • 这方面有什么更新吗?也许 WSL2 可以在具有真正 linux 内核的 Insider 程序上使用?
    【解决方案3】:

    这是使用中的类别错误。 dd 不适用于目录,它适用于文件。这些文件可以是device files(如Linux 上的/dev/sda/dev/urandom),也可以是常规文件(如echo foo >> myfile.txt)。您要传递的是已安装文件系统中的目录。

    不幸的是,WSL 似乎不支持访问您的块设备文件(即它没有/dev)。您可以在他们的问题跟踪器上关注this 功能请求,看看他们何时会添加支持。

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 1970-01-01
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多