如何在 WSL 上使用 dd?

How to use dd on WSL?

如何使用 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 查看磁盘上的文件,但是 运行ning dd 会产生上述错误。

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

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

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

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

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

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

上使用 dd

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

中找到它

等同于 /dev/sda 的 Windows 是 \.\PHYSICALDRIVE0 并且您可以使用此命令找到本地机器设备的正确 ID(还有 returns 扇区大小):

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