Unix 如何在WSL上使用dd?

Unix 如何在WSL上使用dd?,unix,dump,windows-subsystem-for-linux,Unix,Dump,Windows Subsystem For Linux,如何使用dd命令在WSL中转储可移动磁盘的内容 当我跑步时 dd if=/mnt/d of=sdDump bs=512 count=1 我得到错误dd:error reading'/mnt/d':是一个目录 我按照以下步骤装载磁盘: sudo mkdir /mnt/d sudo mount -t drvfs D: /mnt/d 这样做允许我通过ls查看磁盘上的文件,但运行dd会产生上述错误。这是使用中的类别错误dd不适用于目录,它适用于文件。这些文件可以是(比如Linux上的/dev/sda

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

当我跑步时

dd if=/mnt/d of=sdDump bs=512 count=1
我得到错误
dd:error reading'/mnt/d':是一个目录

我按照以下步骤装载磁盘:

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

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

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


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

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

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

免责声明:我没有WSL经验,但我已经使用
mount
dd
几十年了。

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

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

相当于/dev/sda的Windows是\.\PHYSICALDRIVE0,您可以使用此命令找到本地计算机设备的正确ID(还返回扇区大小):


对于“if”参数,请使用传递给mount命令的设备,而不是挂载到的目录名。@pcjr Hi,您能详细说明一下吗?“使用设备”是什么意思?使用块设备。由于WSL不支持它们,我建议使用或。请注意,您需要以管理员身份打开终端,然后运行
dd if=/dev/sdb of=sdDump bs=512 count=1 status=progress
。不幸的是,我认为
dd if=D:
不起作用;WSL不支持访问块设备文件。对此有任何更新吗?也许WSL2可以在具有真正linux内核的内部程序上使用?
Get-WmiObject Win32_diskdrive | select Caption,DeviceID,BytesPerSector,InterfaceType,Size