- Вопрос или проблема
- Резюме
- Первая проблема: поддержка ядром WSL F2FS
- Первый метод решения первой проблемы: xanmod-kernel-WSL2
- Второй метод решения первой проблемы: пересобрать ядро
- Вторая проблема: поддержка подключения SD-карт
- Первый метод решения второй проблемы: используйте считыватель USB SD-карт.
- Второй метод решения второй проблемы: резервное копирование раздела SD на диск.
- Ответ или решение
- Вступление
- Решение проблем
- Проблема 1: Поддержка WSL F2FS и USB-устройств массовой памяти
- Проблема 2: Работа с подключенными SD-картами
Вопрос или проблема
Подобно этому вопросу, я попытался смонтировать свою SD-карту с помощью WSL. Сначала я установил WSL:
wsl --install
Это установило Ubuntu, и после перезагрузки я запустил WSL и выполнил следующее:
sudo apt update
sudo apt upgrade
sudo apt install f2fs-tools
Закрыл WSL и выполнил эту команду в PowerShell с правами администратора:
get-ciminstance -query "select * from win32_diskdrive"
Что дало мне вывод:
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
\\.\PHYSICALDRIVE1 SDXC Card 1 255863784960 SDXC Card
\\.\PHYSICALDRIVE0 SanDisk DA4032 3 31264289280 SanDisk DA4032
Затем я выполнил команду:
wsl --mount \\.\PHYSICALDRIVE1
которая вернула:
The system cannot find the drive specified.
Error code: Wsl/Service/AttachDisk/0x8007000f
Во время этого SD карта исчезла из проводника Windows.
Я использую WSL2
PS C:\Windows\system32> wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
Переключился на Windows 11 (версия 10.0.22621.1413), как предложили harrymc и Daniel B
Я выполнил get-ciminstance -query "select * from win32_diskdrive"
в PowerShell с административными правами.
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows
PS C:\Windows\system32> get-ciminstance -query "select * from win32_diskdrive"
DeviceID Caption Partitions Size Model
-------- ------- ---------- ---- -----
\\.\PHYSICALDRIVE1 SDXC Card 1 255863784960 SDXC Card
\\.\PHYSICALDRIVE0 SanDisk DA4032 3 31264289280 SanDisk DA4032
Сначала установив из командной строки, использую аналогичную процедуру установки. Установлено Ubuntu. Перезагрузился и запустил CMD с правами администратора:
Microsoft Windows [Version 10.0.22621.1413]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\System32>wsl --mount \\.\PHYSICALDRIVE1
The system cannot find the drive specified.
Error code: Wsl/Service/AttachDisk/0x8007000f
C:\Windows\System32>wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
Удалил WSL, установил WSL и Ubuntu из магазина Windows. Перезагрузился, запустил cmd с правами администратора.
Microsoft Windows [Version 10.0.22621.1413]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\System32>wsl --mount \\.\PHYSICALDRIVE1
The system cannot find the drive specified.
Error code: Wsl/Service/AttachDisk/0x8007000f
C:\Windows\System32>wsl -l -v
NAME STATE VERSION
* Ubuntu Stopped 2
Как указано в этом ссылке. В WSL есть баг, и он не монтирует, по крайней мере, в этом случае с SD-картами.
Попытка смонтировать считыватель USB-карт в WSL. У меня Windows 11 с Kali
использующий WSL. У меня есть USB-считыватель SD-карт, который я хотел бы смонтировать, чтобы я
мог просматривать файловую систему Linux на SD-картах. Я использую: get-ciminstance -query
“select * from win32_diskdrive”, чтобы перечислить доступные мне диски. Затем
использую: wsl –mount \.\PHYSICALDRIVE2 –bare, чтобы смонтировать. Я получил эту
ошибку:Система не может найти указанный диск.
Код ошибки: Wsl/Service/AttachDisk/0x8007000f
Когда я вставляю USB-накопитель в ПК, он отображается в проводнике. Когда
я выполняю команду монтирования, он исчезает. Любая помощь в устранении этой проблемы
будет принята с благодарностью.
Это старая ошибка. Известная, но никогда не исправленная.
Они продолжают пытаться оттолкнуть вас от Windows. Единственное решение – это
настоящие решения, такие как VMWare и т.д., или использование нативного Linux
Я сдался и переразметил свою SD карту для совместимости файловых систем Linux и Windows.
Резюме
Необходимо обратить внимание на две проблемы:
-
На данный момент ядро WSL2 не поддерживает USB Mass storage и F2FS;
-
На данный момент функция wsl –mount не поддерживает прямое подключение SD-карт.
Первая проблема: поддержка ядром WSL F2FS
Проверьте поддержку USB Mass Storage:
zcat /proc/config.gz | grep CONFIG_USB_STORAGE
Если вы не получите CONFIG_USB_STORAGE=y
, значит ваше ядро не поддерживает USB Mass Storage.
Проверьте поддержку F2FS:
zcat /proc/config.gz | grep -w -E "CONFIG_F2FS_FS|CONFIG_F2FS_STAT_FS|CONFIG_F2FS_FS_XATTR|CONFIG_F2
FS_FS_POSIX_ACL|CONFIG_F2FS_FS_SECURITY|CONFIG_F2FS_CHECK_FS|CONFIG_F2FS_IO_TRACE|CONFIG_F2FS_FAULT_INJECTION|CONFIG_F2F
S_FS_COMPRESSION|CONFIG_F2FS_FS_LZO|CONFIG_F2FS_FS_LZ4|CONFIG_F2FS_FS_ZSTD|CONFIG_F2FS_FS_LZORLE"
Если вы не получите CONFIG_F2FS_FS=y
, значит ваше ядро не поддерживает F2FS.
Первый метод решения первой проблемы: xanmod-kernel-WSL2
установите xanmod-kernel-WSL2, например, через Scoop (https://scoop.sh/)
scoop bucket add sniffer https://github.com/Locietta/sniffer
scoop install xanmod-WSL2
Второй метод решения первой проблемы: пересобрать ядро
Соберите ядро WSL с поддержкой F2FS и USB Mass Storage:
sudo apt-get update
sudo apt-get upgrade -y
uname -a
VER=`uname -r|sed 's/-.*//'` # Например, 5.15.167.4
sudo apt install -y build-essential flex bison libgtk2.0-dev libelf-dev libncurses-dev autoconf libudev-dev libtool zip unzip v4l-utils libssl-dev python3-pip cmake git iputils-ping net-tools dwarves usbutils
sudo git clone -b linux-msft-wsl-${VER} https://github.com/microsoft/WSL2-Linux-Kernel.git ${VER}-microsoft-standard && cd ${VER}-microsoft-standard
#sudo make clean
sudo cp /proc/config.gz config.gz && sudo gunzip config.gz && sudo mv config .config
sudo make menuconfig
Device Drivers -> USB support -> USB Mass Storage Support
File Systems -> F2FS filesystem support
sudo make -j$(nproc)
sudo make modules_install -j$(nproc)
sudo make install -j$(nproc)
sudo cp -rf vmlinux /mnt/c/users/[USERNAME]
cd /mnt/c/users/[USERNAME]
sudo vi .wslconfig
Добавьте это:
[wsl2]
kernel=C:\\users\\[USERNAME]\\vmlinux
Запустите от имени администратора
wsl --shutdown
Запустите WSL; проверьте поддержку USB и F2FS, как описано ранее.
Вторая проблема: поддержка подключения SD-карт
Первый метод решения второй проблемы: используйте считыватель USB SD-карт.
Установите usbipd, вставьте SD-карту в USB Card Reader и подключите его к ПК. Затем выполните CMD:
usbipd list
Проверьте правильный идентификатор шины считывателя SD-карт (скажем 1-5
в следующем примере), затем выполните CMD от имени администратора:
usbipd bind --busid 1-5
Теперь вы можете подключить его к WSL; запустите сеанс WSL, затем
usbipd attach --wsl --busid 1-5
Теперь, если вы выполните команду lsblk
в WSL, вы должны увидеть диск:
lsblk
sudo mount -t f2fs /dev/sdd1 /mnt
ls -l /mnt
sudo umount /mnt
В конце, для отключения и отвязки:
usbipd detach --busid 1-5
usbipd unbind --busid 1-5
Второй метод решения второй проблемы: резервное копирование раздела SD на диск.
Вставьте SD-карту в ПК; она останется оффлайн (не видна), так как раздел F2FS не распознается Windows. Также она не видна через usbipd
, если SD не подключена через USB адаптер.
Используйте эту команду для вывода всех физически подключенных дисков, даже если они оффлайн:
Get-Disk | Select-Object -Property Number, FriendlyName, OperationalStatus, Size
GET-CimInstance -query "SELECT * from Win32_DiskDrive"
Get-Partition -DiskNumber 2
Выберите диск и раздел, который хотите скопировать, скажем, диск 2, раздел 1.
Используйте следующую программу PowerShell от имени администратора, чтобы скопировать раздел в файл (резервная копия раздела SD на диск):
# Входные параметры:
# 1. Установите переменные для диска и раздела
$disk = 2
$partitionNumber = 1
# 2. Укажите файл назначения для образа раздела
$destination = "C:\copy\to\partition.img"
# Программа копирования
# Получите информацию о разделе
$partition = Get-Partition -DiskNumber $disk | Where-Object { $_.PartitionNumber -eq $partitionNumber }
# Получите путь к устройству для диска
$source = "\\.\PhysicalDrive$disk"
$offset = $partition. Offset
$partitionSize = $partition. Size
$bufferSize = 1MB
$buffer = New-Object byte[]($bufferSize)
$totalBytesRead = 0
$srcStream = [System.IO.File]::OpenRead($source)
$destStream = [System.IO.File]::Create($destination)
# Перейдите к смещению раздела
$srcStream.Seek($offset, [System.IO.SeekOrigin]::Begin)
# Копирование раздела
while ($totalBytesRead -lt $partitionSize) {
$remainingBytes = $partitionSize - $totalBytesRead
$readSize = [Math]::Min([long]$bufferSize, [long]$remainingBytes)
$bytesRead = $srcStream.Read($buffer, 0, $readSize)
if ($bytesRead -eq 0) { break }
$destStream.Write($buffer, 0, $bytesRead)
$totalBytesRead += $bytesRead
}
$srcStream.Close()
$destStream.Close()
Write-Host "Образ раздела создан успешно!"
Через WSL, смонтируйте файловую систему F2FS в режиме только чтения:
sudo mount /mnt/c/Users/.../partition.img /mnt
Следующая программа PowerShell (запускается от имени администратора) копирует всю SD-карту на диск (полная резервная копия SD-карты на диск с разделами):
# Входные параметры:
# 1. Установите переменную для диска (например, 2 в данном случае)
$disk = 2
# 2. Укажите файл назначения для образа диска
$destination = "C:\copy\to\disk.img"
# Программа копирования
# Получите путь к устройству для диска
$source = "\\.\PhysicalDrive$disk"
# Получите размер диска
$diskObject = Get-Disk -Number $disk
$diskSize = $diskObject.Size
$bufferSize = 1MB
$buffer = New-Object byte[]($bufferSize)
$totalBytesRead = 0
# Откройте потоки для чтения и записи
$srcStream = [System.IO.File]::OpenRead($source)
$destStream = [System.IO.File]::Create($destination)
# Копирование всего диска до полного размера
while ($totalBytesRead -lt $diskSize) {
$remainingBytes = $diskSize - $totalBytesRead
$readSize = [Math]::Min([long]$bufferSize, [long]$remainingBytes)
$bytesRead = $srcStream.Read($buffer, 0, $readSize)
if ($bytesRead -eq 0) { break }
$destStream.Write($buffer, 0, $bytesRead)
$totalBytesRead += $bytesRead
}
$srcStream.Close()
$destStream.Close()
Write-Host "Образ диска создан успешно!"
Чтобы смонтировать раздел(ы) через WSL:
sudo losetup -fP --show /mnt/c/Users/.../disk.img
lsblk /dev/loop0
Проверьте, какой раздел монтировать (например, 1):
sudo mount /dev/loop0p1 /mnt
Ответ или решение
Чтобы смонтировать SD-карту с файловой системой F2FS в Windows, необходимо обойти некоторые ограничения, так как стандартные методы через WSL (Windows Subsystem for Linux) могут не функционировать должным образом. Рассмотрим шаги, которые помогут обойти эти ограничения.
Вступление
Если вы пытаетесь смонтировать F2FS-раздел с помощью WSL и сталкиваетесь с ошибкой "The system cannot find the drive specified" (код ошибки: Wsl/Service/AttachDisk/0x8007000f), это вызвано двумя основными проблемами: отсутствие поддержки USB-устройств массовой памяти и F2FS в WSL2, а также невозможность напрямую работать с SD-картами.
Решение проблем
Проблема 1: Поддержка WSL F2FS и USB-устройств массовой памяти
Шаг 1: Установка ядра xanmod-WSL2
- Установите утилиту Scoop из официального сайта.
- Добавьте репозиторий sniffer:
scoop bucket add sniffer https://github.com/Locietta/sniffer
- Установите новое ядро:
scoop install xanmod-WSL2
Шаг 2: Пересборка ядра с поддержкой F2FS и USB
- Обновите имеющиеся пакеты:
sudo apt-get update && sudo apt-get upgrade -y
- Клонируйте и настройте исходники ядра:
sudo git clone -b linux-msft-wsl-<версия> https://github.com/microsoft/WSL2-Linux-Kernel.git cd <директория> sudo make menuconfig
- Включите поддержку USB и F2FS:
- Раздел Device Drivers -> USB support -> отметьте USB Mass Storage Support.
- Раздел File Systems -> отметьте F2FS filesystem support.
- Соберите и установите ядро:
sudo make -j$(nproc) sudo make modules_install -j$(nproc) sudo make install -j$(nproc)
Проблема 2: Работа с подключенными SD-картами
Метод 1: Использование USB адаптера
- Установите usbipd и подключите SD-карту через USB адаптер.
- Отобразите список USB-устройств:
usbipd list
- Привяжите устройство:
usbipd bind --busid <busid>
- В WSL выполните:
usbipd attach --wsl --busid <busid> lsblk sudo mount -t f2fs /dev/<устройство> /mnt
Метод 2: Резервное копирование раздела на диск
-
Используйте PowerShell для резервного копирования:
# Скрипт для копирования раздела на диск $disk = 2 $partitionNumber = 1 $destination = "C:\path\to\partition.img" # (реализовать код копирования из предыдущего примера)
- Смонтируйте образ с помощью WSL:
sudo mount /mnt/c/Users/.../partition.img /mnt
Этот метод позволяет временно обойти текущее ограничение WSL в отношении F2FS и составить полный план действий для эффективного использования SD-карт в Windows через WSL. Если возникнут дополнительные сложности, одним из вариантов остаётся заменять F2FS на файловые системы с более широкой поддержкой в Windows, как временное решение.