web-dev-qa-db-fra.com

Comment utiliser dd sur WSL?

Comment puis-je utiliser la commande dd pour vider le contenu d'un disque amovible dans WSL?

Quand je cours,

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

J'obtiens l'erreur dd: error reading '/mnt/d': Is a directory

J'ai suivi les étapes montrées ici pour monter le disque:

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

Faire cela me permet de voir les fichiers sur le disque via ls, mais l'exécution de dd produit l'erreur ci-dessus.

7
Jet Blue

Il s'agit d'une erreur de catégorie d'utilisation. dd ne fonctionne pas avec les répertoires, il fonctionne avec les fichiers. Les fichiers peuvent être fichiers de périphérique (comme /dev/sda ou /dev/urandom sous Linux) ou des fichiers standard (comme echo foo >> myfile.txt). Ce que vous essayez de passer, c'est un répertoire dans un système de fichiers monté.

Malheureusement, WSL ne semble pas prendre en charge l'accès aux fichiers de votre périphérique de blocage (c'est-à-dire qu'il n'a pas /dev). Vous pouvez suivre la demande de fonctionnalité this sur leur outil de suivi des problèmes pour voir quand ils ajouteront le support.

12
Asad Saeeduddin

Comme l'a dit @ asad-saeeduddin, WSL n'a pas d'accès au niveau bloc, mais cela ne signifie pas que vous ne pouvez pas utiliser dd sous Windows!

J'ai découvert que dd fait partie de l'ensemble d'outils installés avec Git pour Windows. Après l'installation, vous pouvez le trouver dans C:\Program Files\Git\usr\bin\dd.exe

L'équivalent Windows de/dev/sda est \.\PHYSICALDRIVE0 et vous pouvez trouver les ID appropriés pour les périphériques de votre ordinateur local avec cette commande (renvoie également les tailles de secteur):

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

L'usage typique de la commande mount est de spécifier ce que vous voulez monter (a device, on * nix a device est vraiment juste un type spécial de fichier) et où vous voulez le monter (un répertoire). La commande dd veut un certain type de fichier. Dans votre exemple, D: est le périphérique, c'est donc l'argument que vous devez passer à dd:

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

Avertissement: je n'ai pas d'expérience WSL, mais j'utilise mount et et dd depuis des décennies.

0
pcjr