Диск (устройство) в Bash на Ubuntu на Windows 10

Вопрос или проблема

В Windows 10 вы можете включить Bash на Ubuntu в Windows. Я это сделал, но у меня возникают трудности с тем, как получить доступ к дисковым устройствам. Например, в обычном Ubuntu, если я хотел бы сделать поблочное копирование с одной флешки на другую, я мог бы выполнить dd if=/dev/sdb of=/dev/sdc bs=4K, но устройства /dev/sd? похоже не существуют в Bash на Ubuntu в Windows. lsblk также не показывает никаких устройств. Поскольку dd установлен, мне бы хотелось верить, что есть способ получить доступ к дисковым устройствам. Можно ли это сделать? Как?

Bash на Ubuntu в Windows

Подсистема Windows для Linux не устанавливает полнофункциональное ядро Linux, а только заглушку, позволяющую запускать определенные типы приложений, скомпилированных для Linux. Кстати, Bash на Windows или любое другое название с этой формулировкой неверно (ошибка Microsoft назвать команду bash). Я не думаю, что Microsoft когда-либо решится добавить такой низкоуровневый доступ к WSL.

Однако из моего опыта, то, что вы хотите достичь, доступно в виртуальной машине. В моем случае это был установленный в VirtualBox Ubuntu. Тогда вы можете подключить USB-устройства, чтобы они были доступны в гостевой системе. Таким образом, команды dd будут работать на самом низком уровне, точно так же, как в нативно установленной дистрибуции Linux.

Это было добавлено как wsl --mount в это время, см. learn.microsoft.com:

  1. Получите DeviceID диска, который вы хотите подключить
    • GET-CimInstance -query "SELECT * from Win32_DiskDrive" из PowerShell или
    • wmic diskdrive list brief из cmd.exe/PowerShell, если wmic доступен
  2. Убедитесь, что он установлен в оффлайн через diskmgmt.msc, diskpart или devcon
  3. 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. Для этого вам необходимо пройти несколько шагов:

  1. Получите идентификатор устройства (DeviceID) диска:
    Вы можете использовать PowerShell для получения списка всех доступных дисков. Запустите следующую команду в PowerShell:

    Get-CimInstance -query "SELECT * from Win32_DiskDrive"

    Альтернативно, с помощью команды wmic можно получить статус дисков:

    wmic diskdrive list brief
  2. Переведите диск в оффлайн-режим:
    Это можно сделать через diskmgmt.msc, с помощью утилиты diskpart или инструмента devcon. Убедитесь, что выбранный вами диск отключен и не используется операционной системой.

  3. Монтирование диска в WSL:
    Запустите команду от имени администратора в командной строке или PowerShell:

    wsl --mount \\.\PHYSICALDRIVE1 --bare

    Замените PHYSICALDRIVE1 на соответствующий идентификатор вашего устройства, который вы определили на первом шаге.

Ограничения WSL

Следует отметить, что хотя WSL предоставляет возможность монтирования дисков, он не полностью заменяет функционал стандартной Linux-системы. Например, не всегда доступен низкоуровневый доступ к устройствам, что может ограничить использование таких утилит, как dd для работы с физическими дисками.

Альтернативные методы

Если вам необходимо выполнять низкоуровневые операции с дисками, рассмотрите возможность использования виртуальной машины. Например, вы можете установить Ubuntu через VirtualBox. Это позволит вам монтировать USB-устройства и использовать команды dd так, как это возможно в стандартной установке Linux.

  1. Установка виртуальной машины:
    Установите VirtualBox и создайте новую виртуальную машину с Ubuntu.

  2. Подключение USB-дисков:
    В настройках VirtualBox используйте опцию добавления USB-устройств, что обеспечит доступ к этим устройствам из виртуальной машины.

  3. Использование команд в Ubuntu:
    Теперь в терминале Ubuntu вы сможете использовать команды dd и другие инструменты без ограничений.

Заключение

Хотя WSL предоставляет полезные функции для разработчиков, работа с физическими дисками в этом окружении ограничена. Монтирование дисков с помощью команды wsl --mount является шагом вперед, но если вам требуется полноценный доступ к низкоуровневым функциям, виртуальные машины остаются надежным решением. Надеемся, что эта инструкция была полезной и поможет вам успешно работать с дисковыми устройствами в среде Ubuntu на Windows 10.

Оцените материал
Добавить комментарий

Капча загружается...