Administración del espacio en disco de WSL

En esta guía se explica cómo administrar el espacio en disco usado por las distribuciones de Linux instaladas mediante WSL 2, entre las que se incluyen:

Subsistema de Windows para Linux (WSL 2) usa una plataforma de virtualización para instalar distribuciones de Linux junto con el sistema operativo Windows host, creando un disco duro virtual (VHD) para almacenar archivos para cada una de las distribuciones de Linux que instale. Estos VHD usan el tipo de sistema de archivos ext4 y se representan en el disco duro de Windows como un archivo ext4.vhdx .

WSL 2 cambia automáticamente el tamaño de estos archivos VHD para satisfacer las necesidades de almacenamiento. De forma predeterminada, cada archivo VHD usado por WSL 2 se asigna inicialmente una cantidad máxima de 1 TB de espacio en disco (antes de la versión 0.58.0 de WSL , este valor predeterminado se estableció en un máximo de 512 GB y 256 GB máximo antes de eso).

Si el espacio de almacenamiento requerido por los archivos de Linux supera este tamaño máximo, verá errores que indican que se ha quedado sin espacio en disco. Para corregir este error, siga las instrucciones siguientes sobre cómo expandir el tamaño del disco duro virtual de WSL 2.

Cómo comprobar el espacio en disco disponible

Compruebe la cantidad de espacio en disco disponible en el disco duro virtual para una distribución de Linux instalada con WSL 2 mediante el comando de Linux Df .

Para comprobar el espacio en disco disponible, abra una línea de comandos de PowerShell y escriba este comando (reemplazando por <distribution-name> el nombre de distribución real):

wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro

Si este comando no funciona, actualice a la versión de Store de WSL mediante el wsl --update comando o pruebe wsl df -h /.

El resultado incluirá .

  • Sistema de archivos: Identificador del sistema de archivos VHD
  • Tamaño:Tamaño total del disco (la cantidad máxima de espacio asignado al VHD)
  • Usado: Cantidad de espacio usado actualmente en el VHD
  • Disponibilidad: Cantidad de espacio restante en el VHD (tamaño asignado menos cantidad usada)
  • Use%: Porcentaje de espacio restante en disco (Tamaño usado / asignado)
  • Montado en: Ruta del directorio donde está montado el disco

Si ve que está cerca de alcanzar la cantidad disponible de espacio en disco asignado al disco duro virtual o ya ha recibido un error debido a que no queda espacio en disco, consulte la sección siguiente para ver los pasos sobre cómo expandir la cantidad máxima de espacio en disco asignado al VHD asociado a la distribución de Linux. La cantidad de espacio en disco asignado al VHD por WSL siempre mostrará la cantidad máxima predeterminada (1 TB en la versión más reciente de WSL), incluso si la cantidad de espacio en disco en el dispositivo Windows real es menor que esa. WSL monta un VHD que se expandirá a medida que lo use, por lo que la distribución de Linux ve que puede crecer hasta el tamaño máximo asignado de 1 TB. 

Cómo ampliar el tamaño de su disco duro virtual WSL 2

Para ampliar el tamaño del VHD para una distribución de Linux más allá de la cantidad máxima predeterminada de 1 TB de espacio de disco asignado, siga los pasos que se indican a continuación. (Para versiones anteriores de WSL que aún no se han actualizado, este valor predeterminado máximo puede establecerse en 512 GB o 256 GB).

  1. Finaliza todas las instancias de WSL mediante el comando wsl.exe --shutdown.

  2. Copie la ruta de acceso del directorio al archivo ext4.vhdx asociado a la distribución de Linux instalada en el equipo. Para obtener ayuda, vea Cómo localizar el archivo vhdx y la ruta de acceso del disco para la distribución de Linux.

  3. Abra el símbolo del sistema de Windows con privilegios de administrador y, a continuación, abra el intérprete de comandos diskpart escribiendo:

    diskpart
    
  4. Ahora tendrá un DISKPART> aviso. Escriba el siguiente comando, reemplazando <pathToVHD> por la ruta de acceso del directorio al ext4.vhdx archivo asociado a la distribución de Linux (copiada en el paso 2).

    Select vdisk file="<pathToVHD>"
    
  5. Muestra los detalles asociados a este disco virtual, incluido el Tamaño virtual, que representa el tamaño máximo actual al que se asigna el VHD:

    detail vdisk
    
  6. Tendrá que convertir el Tamaño virtual en megabytes. Por ejemplo, si Tamaño virtual: 512 GB, es igual a 512000 MB. El nuevo valor que escribirá debe ser mayor que este valor inicial. Para duplicar el tamaño virtual de 512 GB a 1024 GB, escribiría el valor en MB como: 1024000. Tenga cuidado de no especificar un valor superior al que realmente desee, ya que el proceso de reducción de un tamaño de disco virtual es mucho más complicado.

  7. Escriba el valor del nuevo tamaño máximo que desea asignar a esta distribución de Linux mediante el símbolo del sistema DISKPART> de Windows:

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. Salga del símbolo del DISKPART> sistema:

    exit
    
  9. Inicie esta distribución de Linux. (Asegúrese de que se ejecuta en WSL 2. Puede confirmarlo mediante el comando wsl.exe -l -v. WSL 1 no se admite).

  10. Para indicar a WSL que puede ampliar el tamaño del sistema de archivos de esta distribución, ejecute estos comandos desde la línea de comandos de su distribución WSL. Podría mostrarse este mensaje en respuesta al primer comando mount: "/dev: none ya está montado en /dev". Este mensaje se puede omitir de forma segura.

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. Copie el nombre de esta entrada, que tendrá el siguiente aspecto: /dev/sdX (en que la X representa cualquier otro carácter). En el ejemplo siguiente, el valor de X es b:

   sudo resize2fs /dev/sdb <sizeInMegabytes>M

Con el ejemplo anterior, cambiamos el tamaño del vhd a 2048000, por lo que el comando sería:sudo resize2fs /dev/sdb 2048000M.

Nota:

También puede que necesite instalar resize2fs. En caso afirmativo, puede usar este comando para instalarlo: sudo apt install resize2fs.

La salida tendrá una apariencia parecida a la siguiente:

resize2fs 1.44.1 (24-Mar-2021)
Filesystem at /dev/sdb is mounted on /; on-line resizing required
old_desc_blocks = 32, new_desc_blocks = 38
The filesystem on /dev/sdb is now 78643200 (4k) blocks long.

La unidad virtual (ext4.vhdx) para esta distribución de Linux ahora se ha ampliado correctamente al nuevo tamaño.

Importante

Le recomendamos que no modifique, mueva ni acceda a los archivos relacionados con WSL que se encuentran dentro de suAppData carpeta mediante herramientas o editores de Windows. Al hacerlo, podrías dañar tu distribución de Linux. Si quiere acceder a los archivos de Linux desde Windows, puede usar la ruta de acceso \\wsl$\<distribution-name>\. Abra la distribución de WSL y escriba explorer.exe . para ver esa carpeta. Para obtener más información, consulte la entrada de blog: Acceso a archivos de Linux desde Windows.

Cómo reparar un error de montaje de VHD

Si se produce un error relacionado con el "montaje del disco de distribución", esto podría deberse a un apagado repentino o a una interrupción del suministro eléctrico y puede provocar que el VHD de distribución de Linux se cambie a solo lectura para evitar la pérdida de datos. Puede reparar y restaurar la distribución mediante el e2fsck comando de Linux siguiendo los pasos que se indican a continuación.

Use el comando lsblk para identificar el nombre del dispositivo de bloque.

Cuando WSL 2 instala una distribución de Linux, monta la distribución como un disco duro virtual (VHD) con su propio sistema de archivos. Linux hace referencia a estas unidades de disco duro como "bloquear dispositivos" y puede ver información sobre ellas mediante el lsblk comando .

Para buscar los nombres de los dispositivos de bloque que está usando WSL 2, abra la distribución y escriba el comando: lsblk. (O abra PowerShell y escriba el comando: wsl.exe lsblk.) La salida tendrá un aspecto similar al siguiente:

NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 363.1M  1 disk
sdb    8:16   0     8G  0 disk [SWAP]
sdc    8:32   0   1.5T  0 disk
sdd    8:48   0     1T  0 disk /mnt/wslg/distro

La información sobre el dispositivo de bloqueo incluye:

  • NOMBRE: El nombre asignado al dispositivo será sd[a-z], haciendo referencia al disco SCSI con una designación de letra para cada disco que se usa. sda siempre es la distribución del sistema.
  • MAJ:MIN: Representa los números usados por el kernel de Linux para identificar internamente los dispositivos con el primer número que representa el tipo de dispositivo (8 se usa para discos SCSI o interfaz de sistema de equipos pequeños).
  • RM: Háganos saber si el dispositivo es extraíble (1) o no (0).
  • TAMAÑO: Tamaño total del volumen.
  • RO: Háganos saber si el dispositivo es de solo lectura (1) o no (0).
  • TIPO: Hace referencia al tipo de dispositivo (disco en este caso).
  • MOUNTPOINTS: Hace referencia al directorio actual en el sistema de archivos donde se encuentra el dispositivo de bloque (SWAP es para memoria inactiva preconfigurada, por lo que no hay ningún punto de montaje).

Error de reserva de solo lectura

Si WSL encuentra un "error de montaje" al abrir una distribución de Linux, la distribución se puede establecer como de solo lectura como reserva. Si esto sucede, la distribución puede mostrar el siguiente error durante el inicio:

An error occurred mounting the distribution disk, it was mounted read-only as a fallback.

Cuando se inicia una distribución como de solo lectura, los intentos de escritura en el sistema de archivos producirán un error similar al siguiente:

$ touch file
touch: cannot touch 'file': Read-only file system

Para reparar un error de montaje de disco en WSL y restaurarlo de nuevo a un estado utilizable o grabable, puede usar el wsl.exe --mount comando para volver a montar el disco con los pasos siguientes:

  1. Cierre todas las distribuciones de WSL abriendo PowerShell y escribiendo el comando :

    wsl.exe --shutdown
    
  2. Abra PowerShell como administrador (en un símbolo del sistema con privilegios elevados) y escriba el comando mount, reemplazando <path-to-ext4.vhdx> por la ruta de acceso al archivo .vhdx de la distribución. Para obtener ayuda para localizar este archivo, vea Cómo localizar el archivo VHD y la ruta de acceso del disco para la distribución de Linux.

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. Use el wsl.exe lsblk comando de PowerShell para identificar el nombre del dispositivo de bloque para la distribución (sd[a-z]) y, a continuación, escriba el siguiente comando para reparar el disco (reemplazando <device> por el nombre de dispositivo de bloque correcto, como "sdc"). El e2fsck comando comprueba los sistemas de archivos ext4 (el tipo utilizado por las distribuciones instaladas con WSL) en busca de errores y los repara en consecuencia.

    wsl.exe sudo e2fsck -f /dev/<device>
    

Nota:

Si solo tiene instalada una única distribución de Linux, es posible que encuentre un error "ext file in use" y tendrá que instalar una distribución adicional para ejecutar wsl.exe lsblk. Puede desinstalar la distribución una vez completada la reparación.

  1. Una vez completada la reparación, desmonte el disco en PowerShell escribiendo:

    wsl.exe --unmount
    

Advertencia

Puede usar el comando: sudo mount -o remount,rw / para devolver una distribución de solo lectura a un estado utilizable o grabable, pero todos los cambios estarán en memoria, por lo que se perderán cuando se reinicie la distribución. Se recomienda usar los pasos indicados anteriormente para montar y reparar el disco en su lugar.

Cómo localizar el archivo .vhdx y la ruta de acceso del disco para la distribución de Linux

Para buscar la ruta de acceso del directorio y el archivo .vhdx para una distribución de Linux, abra PowerShell y use el siguiente script, reemplazando <distribution-name> por el nombre de distribución real:

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"

El resultado mostrará una ruta de acceso similar a %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx. Por ejemplo:

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

Esta es la ruta de acceso al ext4.vhdx archivo asociado a la distribución de Linux que ha enumerado.