Вопрос или проблема
В Windows 10 вы можете включить Bash на Ubuntu в Windows. Я это сделал, но у меня возникают трудности с тем, как получить доступ к дисковым устройствам. Например, в обычном Ubuntu, если я хотел бы сделать поблочное копирование с одной флешки на другую, я мог бы выполнить dd if=/dev/sdb of=/dev/sdc bs=4K
, но устройства /dev/sd?
похоже не существуют в Bash на Ubuntu в Windows. lsblk
также не показывает никаких устройств. Поскольку dd
установлен, мне бы хотелось верить, что есть способ получить доступ к дисковым устройствам. Можно ли это сделать? Как?
Подсистема Windows для Linux не устанавливает полнофункциональное ядро Linux, а только заглушку, позволяющую запускать определенные типы приложений, скомпилированных для Linux. Кстати, Bash на Windows или любое другое название с этой формулировкой неверно (ошибка Microsoft назвать команду bash
). Я не думаю, что Microsoft когда-либо решится добавить такой низкоуровневый доступ к WSL.
Однако из моего опыта, то, что вы хотите достичь, доступно в виртуальной машине. В моем случае это был установленный в VirtualBox Ubuntu. Тогда вы можете подключить USB-устройства, чтобы они были доступны в гостевой системе. Таким образом, команды dd
будут работать на самом низком уровне, точно так же, как в нативно установленной дистрибуции Linux.
Это было добавлено как wsl --mount
в это время, см. learn.microsoft.com:
- Получите DeviceID диска, который вы хотите подключить
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
из PowerShell илиwmic diskdrive list brief
из cmd.exe/PowerShell, если wmic доступен
- Убедитесь, что он установлен в оффлайн через diskmgmt.msc, diskpart или devcon
wsl --mount \\.\PHYSICALDRIVE1 --bare
от имени администратора из расширенного cmd.exe/PowerShell
Ответ или решение
Работа с дисковыми устройствами в Bash на Ubuntu для Windows 10
Введение
С выходом Windows 10 и Windows Subsystem for Linux (WSL), пользователи получили возможность запускать приложение оболочки Bash прямо внутри Windows. Однако, несмотря на значительные преимущества, WSL имеет свои ограничения, особенно в отношении низкоуровневого доступа к дисковым устройствам, что вызывает затруднения у пользователей, которые привыкли к стандартной Ubuntu. В этой статье мы рассмотрим, как получить доступ к дисковым устройствам в Bash на Ubuntu для Windows 10 и обсудим альтернативные способы решения этой задачи.
Проблема доступа к дисковым устройствам
Как вы уже заметили, в WSL нет доступа к устройствам, как это происходит в стандартной Linux-системе. Это означает, что такие команды, как dd if=/dev/sdb of=/dev/sdc bs=4K
, не будут работать, поскольку /dev/sd?
устройства не представлены в WSL. Кроме того, команда lsblk
показывает, что устройства не обнаружены, из-за особенностей архитектуры WSL.
Работа с WSL и физическими дисками
Несмотря на ограничения, начиная с версии WSL 2, появилась возможность монтировать физические диски в WSL с помощью команды wsl --mount
. Для этого вам необходимо пройти несколько шагов:
-
Получите идентификатор устройства (DeviceID) диска:
Вы можете использовать PowerShell для получения списка всех доступных дисков. Запустите следующую команду в PowerShell:Get-CimInstance -query "SELECT * from Win32_DiskDrive"
Альтернативно, с помощью команды
wmic
можно получить статус дисков:wmic diskdrive list brief
-
Переведите диск в оффлайн-режим:
Это можно сделать черезdiskmgmt.msc
, с помощью утилитыdiskpart
или инструментаdevcon
. Убедитесь, что выбранный вами диск отключен и не используется операционной системой. -
Монтирование диска в WSL:
Запустите команду от имени администратора в командной строке или PowerShell:wsl --mount \\.\PHYSICALDRIVE1 --bare
Замените
PHYSICALDRIVE1
на соответствующий идентификатор вашего устройства, который вы определили на первом шаге.
Ограничения WSL
Следует отметить, что хотя WSL предоставляет возможность монтирования дисков, он не полностью заменяет функционал стандартной Linux-системы. Например, не всегда доступен низкоуровневый доступ к устройствам, что может ограничить использование таких утилит, как dd
для работы с физическими дисками.
Альтернативные методы
Если вам необходимо выполнять низкоуровневые операции с дисками, рассмотрите возможность использования виртуальной машины. Например, вы можете установить Ubuntu через VirtualBox. Это позволит вам монтировать USB-устройства и использовать команды dd
так, как это возможно в стандартной установке Linux.
-
Установка виртуальной машины:
Установите VirtualBox и создайте новую виртуальную машину с Ubuntu. -
Подключение USB-дисков:
В настройках VirtualBox используйте опцию добавления USB-устройств, что обеспечит доступ к этим устройствам из виртуальной машины. -
Использование команд в Ubuntu:
Теперь в терминале Ubuntu вы сможете использовать командыdd
и другие инструменты без ограничений.
Заключение
Хотя WSL предоставляет полезные функции для разработчиков, работа с физическими дисками в этом окружении ограничена. Монтирование дисков с помощью команды wsl --mount
является шагом вперед, но если вам требуется полноценный доступ к низкоуровневым функциям, виртуальные машины остаются надежным решением. Надеемся, что эта инструкция была полезной и поможет вам успешно работать с дисковыми устройствами в среде Ubuntu на Windows 10.