Compartir a través de


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:

El 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 discos duros virtuales 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 que se indican a continuación sobre Cómo expandir el tamaño del disco duro virtual de WSL 2.

Comprobación del 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 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 para usted, actualice a la versión de Store de WSL mediante el wsl --update comando o pruebe wsl df -h /.

La salida 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 que se usa actualmente en el disco duro virtual
  • Disponibilidad: cantidad de espacio que queda en el disco duro virtual (tamaño asignado menos cantidad usada)
  • Uso de%: porcentaje de espacio en disco restante (tamaño usado o asignado)
  • Montado en: ruta del directorio donde se monta 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 disco duro virtual 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 disco duro virtual 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 expandir el tamaño del disco duro virtual de WSL 2

Para expandir el tamaño del disco duro virtual para una distribución de Linux más allá de la cantidad máxima predeterminada de espacio en disco asignado de 1 TB, puede usar el wsl --manage comando o seguir los pasos manuales que se indican a continuación. (El valor predeterminado máximo de versiones anteriores de WSL puede establecerse en 512 GB o 256 GB).

Expandir el tamaño del VHD mediante wsl --manage

El wsl --manage comando solo está disponible para las versiones 2.5 y posteriores de WSL.

Para cambiar el tamaño del espacio asignado en el disco virtual:

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

  2. Ejecute wsl --manage <distribution name> --resize <memory string>. Las cadenas de memoria admitidas tienen el formato <Memory Value>B/M/MB/G/GB/T/TB. Los valores decimales no se admiten actualmente (por ejemplo, 2.5TB).

La salida debe tener una apariencia similar a la siguiente:

e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
resize2fs 1.46.5 (30-Dec-2021)
The operation completed successfully.

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

Expansión manual

Para expandir el tamaño del VHD para una distribución de Linux mediante los pasos manuales:

  1. Finalice 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 la máquina. Para obtener ayuda, consulte Cómo localizar el archivo vhdx y la ruta de acceso del disco para la distribución de Linux.

  3. Abra la línea de comandos de Windows con privilegios de administrador y, a continuación, abra el intérprete de comandos diskpart escribiendo:

    diskpart
    
  4. Ahora verá una indicación DISKPART>. Escriba el comando siguiente, reemplazando <pathToVHD> por la ruta de acceso del directorio al archivo asociado a la ext4.vhdx 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 al que se ha asignado 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 escriba debe ser mayor que este valor original. 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 desea, 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 de comando DISKPART> de Windows.

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

    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. Haga que WSL tenga en cuenta que puede expandir el tamaño del sistema de archivos para esta distribución ejecutando estos comandos desde la línea de comandos de distribución de WSL. Puede ver este mensaje en respuesta al primer comando mount: "/dev: none ya 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 (con la X que 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 disco duro virtual a 2048000, por lo que el comando sería: sudo resize2fs /dev/sdb 2048000M.

Nota:

Es posible que tenga que instalar resize2fs. Si es así, 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 se ha ampliado satisfactoriamente al nuevo tamaño.

Importante

Se recomienda no modificar, mover ni acceder a los archivos relacionados con WSL ubicados dentro de la AppData carpeta mediante herramientas o editores de Windows. Si lo hace, la distribución de Linux podría dañarse. Si desea acceder a los archivos de Linux desde Windows, es posible a través de la ruta de acceso \\wsl$\<distribution-name>\. Abra la distribución de WSL y escriba explorer.exe . para ver esa carpeta. Para más información, consulte la entrada de blog: Acceso a archivos de Linux desde Windows.

Cómo reparar un error de montaje de un disco duro virtual (VHD)

Si se produce un error relacionado con el "montaje del disco de distribución", esto podría deberse a un apagado repentino o una interrupción del suministro eléctrico y puede dar lugar a que el disco duro virtual 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, está montando la distribución como disco duro virtual (VHD) con su propio sistema de archivos. Linux se refiere a estas unidades de disco duro como "dispositivos de bloque" y puede ver información sobre ellas mediante el comando lsblk.

Para buscar los nombres de los dispositivos de bloque que está usando actualmente 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:

  • NAME: 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 va a usar. sda es siempre 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 pequeños de interfaz de sistema de equipo/SCSI).
  • 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 del 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 respaldo de solo lectura

Si WSL encuentra un "error de montaje" al intentar abrir una distribución de Linux, la distribución se puede establecer como de solo lectura como modo de respaldo. 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. Cierra todas las distribuciones de WSL abriendo PowerShell como administrador (en una ventana de comandos con privilegios de administrador) y escribiendo el comando:

    wsl.exe --shutdown
    
  2. Escriba el comando mount y reemplace por <path-to-ext4.vhdx> la ruta de acceso al archivo .vhdx de la distribución. Para obtener ayuda para localizar este archivo, consulte 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 usado por las distribuciones instaladas con WSL) para ver si hay 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. Además, es posible que tenga que cerrar Docker Desktop en Windows para evitar el error Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION al ejecutar el comando wsl.exe sudo e2fsck -f /dev/sdc.

  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 enumerados 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 el archivo .vhdx y la ruta de acceso del directorio 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 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.