# WSL (Windows Subsystem for Linux): là gì, cách cài và thiết lập Linux trong Windows

URL: https://skillaria.top/vi/guides/linux/wsl-linux-tren-windows

WSL (Windows Subsystem for Linux) là hệ con tích hợp sẵn trong Windows 10 và 11, chạy một bản phân phối Linux thực thụ mà không cần máy ảo riêng hay khởi động kép. Cài đặt bằng một lệnh wsl --install trong PowerShell chạy với quyền quản trị; mặc định cài WSL 2 với Ubuntu, trong đó chạy nhân Linux thật bên trong một máy ảo nhẹ.

Windows Subsystem for Linux (WSL, hệ con Linux trên Windows) là thành phần của Windows 10 và 11 cho phép chạy bản phân phối Linux ngay trong Windows: terminal bash, `apt`, `ssh`, `grep`, Docker và mọi tiện ích dòng lệnh. Không cần cài VirtualBox hay chia ổ đĩa cho hệ thống thứ hai; Ubuntu mở ra như một cửa sổ terminal bình thường chỉ trong vài giây. Dưới đây giải thích sự khác nhau giữa WSL 1 và WSL 2, cách cài đặt, cách làm việc với tệp, VS Code và ứng dụng đồ họa, cùng cách xử lý các lỗi thường gặp.

## WSL là gì trong Linux và Windows

Nói ngắn gọn, WSL là cách có một môi trường Linux đầy đủ để phát triển và học tập mà không rời khỏi Windows. Bạn cài một bản phân phối (Ubuntu, Debian, openSUSE, Kali, AlmaLinux và các bản khác) từ dòng lệnh hoặc Microsoft Store, rồi làm việc trong đó đúng như trên máy chủ: người dùng, quyền truy cập, gói phần mềm và dịch vụ.

Điều quan trọng là hiểu WSL không làm gì. Nó không phải trình giả lập lệnh như Cygwin, cũng không phải bộ tiện ích được port lại; trong WSL 2 chạy một nhân Linux thật do Microsoft biên dịch. Vì thế, các file nhị phân Linux chạy được mà không cần biên dịch lại, và kỹ năng học trong WSL áp dụng trực tiếp cho máy chủ thật.

Các công việc điển hình trong hệ con này:

- học Linux và dòng lệnh mà không cần máy tính riêng;
- phát triển web khi môi trường production chạy trên Linux (Python, Node.js, PHP, Go);
- Docker Desktop — dùng WSL 2 làm động cơ;
- kết nối máy chủ qua SSH, viết script bash và làm việc với git trong môi trường quen thuộc.

## WSL 1 và WSL 2: khác nhau ở đâu

Có hai kiến trúc hệ con. WSL 1 dịch các system call của Linux thành lệnh gọi tới nhân Windows — không có nhân Linux nào ở đó. WSL 2 chạy nhân Linux thật bên trong một máy ảo nhẹ dựa trên Hyper-V, khởi động trong vài giây và tự quản lý bộ nhớ.

| Tiêu chí | WSL 1 | WSL 2 |
| --- | --- | --- |

| Nhân | không có, dịch system call | nhân Linux thật |

| Tương thích system call | một phần | đầy đủ |

| Docker, systemd | không | có |

| Tốc độ với tệp trong Linux (`~/`) | thấp hơn | cao |

| Tốc độ với tệp trong Windows (`/mnt/c`) | cao | thấp hơn đáng kể |

| Cần ảo hóa | không | có |

| Mạng | dùng chung với Windows | mạng ảo riêng (NAT mặc định) |

Với hầu hết các trường hợp, hãy chọn WSL 2 — đây là mặc định. WSL 1 có ý nghĩa khi không thể bật ảo hóa (ví dụ chính Windows đang chạy trong máy ảo mà không có ảo hóa lồng nhau) hoặc khi dự án bắt buộc phải nằm trên ổ đĩa Windows và thường xuyên truy cập từ đó.

## Cách cài WSL trên Windows 10 và 11

Trên Windows 11 và Windows 10 phiên bản 2004 trở lên (build 19041+), việc cài đặt chỉ cần một lệnh. Mở PowerShell hoặc «Terminal» với quyền quản trị và chạy:

```
wsl --install
```

Lệnh này bật các thành phần Windows cần thiết, tải nhân WSL 2 và cài Ubuntu. Sau khi khởi động lại, cửa sổ distro sẽ mở ra: hãy tạo tên người dùng và mật khẩu Linux. Chúng không liên quan đến tài khoản Windows; mật khẩu này dùng cho `sudo`.

```
Enter new UNIX username: alex
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
```

Hãy cập nhật gói ngay, như trên mọi máy chủ mới:

```
sudo apt update && sudo apt upgrade -y
```

### Cách chọn bản phân phối

Ubuntu được cài mặc định, nhưng bạn có thể chọn bản khác. Danh sách có sẵn:

```
wsl --list --online
```

Cài một bản cụ thể theo tên trong danh sách:

```
wsl --install -d Debian
```

Nếu WSL đã có, lệnh này chỉ thêm distro mới. Bạn có thể giữ nhiều hệ thống cùng lúc, ví dụ Ubuntu cho công việc và Kali cho thử nghiệm.

### Kiểm tra phiên bản: wsl -l -v

Xem các distro đã cài, trạng thái và phiên bản WSL:

```
wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2
  Debian    Stopped         2
```

Dấu sao đánh dấu distro mặc định — distro được chạy khi gõ `wsl` không kèm tham số. Đổi mặc định bằng `wsl --set-default Debian`.

### Chuyển WSL 1 sang WSL 2

Phiên bản dùng cho các lần cài mới được đặt bằng lệnh:

```
wsl --set-default-version 2
```

Distro đã cài được chuyển đổi riêng (dữ liệu được giữ nguyên, nhưng quá trình có thể mất vài phút):

```
wsl --set-version Ubuntu 2
```

Chuyển ngược lại: `wsl --set-version Ubuntu 1`.

### Các lệnh quản lý WSL hữu ích

| Lệnh | Chức năng |
| --- | --- |

| `wsl` | mở distro mặc định |

| `wsl -d Debian` | mở một distro cụ thể |

| `wsl --shutdown` | dừng tất cả distro và máy ảo WSL 2 |

| `wsl --terminate Ubuntu` | dừng một distro |

| `wsl --update` | cập nhật WSL và nhân |

| `wsl --status` | phiên bản mặc định và trạng thái chung |

| `wsl --export Ubuntu ubuntu.tar` | sao lưu distro thành file nén |

| `wsl --import Ubuntu2 D:\wsl\u2 ubuntu.tar` | khôi phục hoặc nhân bản distro |

| `wsl --unregister Ubuntu` | xóa distro cùng toàn bộ dữ liệu |

Hãy cẩn thận với `--unregister`: tệp trong distro bị xóa ngay, không qua thùng rác. Trước khi chạy, hãy `--export`.

## Tệp Windows từ Linux và ngược lại

Các ổ đĩa Windows được tự động gắn trong WSL tại thư mục `/mnt`: ổ C: là `/mnt/c`, ổ D: là `/mnt/d`.

```
cd /mnt/c/Users/alex/Downloads
ls -l
cp report.csv ~/projects/
```

Chiều ngược lại, tệp Linux hiển thị trong File Explorer qua đường dẫn mạng `\\wsl$\Ubuntu` (trên Windows 11 còn có `\\wsl.localhost\Ubuntu`) và trong mục «Linux» ở thanh bên. Để mở nhanh thư mục Linux hiện tại trong File Explorer:

```
explorer.exe .
```

Từ WSL có thể chạy chương trình Windows (`notepad.exe`, `code`), còn từ PowerShell có thể chạy lệnh Linux với tiền tố: `wsl ls -la`. Để chuyển đổi đường dẫn giữa hai hệ thống có tiện ích `wslpath`:

```
wslpath 'C:\Users\alex'
/mnt/c/Users/alex
```

Quy tắc hiệu năng quan trọng nhất của WSL 2: hãy để dự án trong hệ thống tệp Linux (`~/projects`), không phải trong `/mnt/c`. Truy cập ổ đĩa Windows đi qua giao thức mạng, và các thao tác như `git status` hay `npm install` trên dự án lớn ở đó chậm hơn nhiều lần.

## VS Code và WSL

Visual Studio Code làm việc với WSL như với một máy từ xa: giao diện vẫn ở Windows, còn terminal, tiện ích mở rộng, trình thông dịch và trình gỡ lỗi chạy trong Linux. Cần cài tiện ích WSL (của Microsoft). Sau đó, trong terminal của distro, chuyển đến thư mục dự án và chạy:

```
cd ~/projects/site
code .
```

Lần đầu chạy, VS Code tự cài thành phần máy chủ vào Linux. Ở góc dưới bên trái sẽ hiện chỉ báo «WSL: Ubuntu» — nghĩa là mọi thứ bạn chạy từ terminal tích hợp đều chạy trong Linux. Các tiện ích như Python hoặc ESLint cần được cài «trong WSL»; VS Code sẽ đề nghị bằng một nút bấm.

## Ứng dụng đồ họa trong WSL (WSLg)

Trên Windows 11 và các bản WSL mới trên Windows 10 có WSLg — hỗ trợ ứng dụng Linux đồ họa sẵn có, không cần cấu hình X server. Cài chương trình như bình thường, cửa sổ của nó sẽ xuất hiện cạnh các cửa sổ Windows, còn shortcut nằm trong menu Start.

```
sudo apt install gedit -y
gedit ~/.bashrc &
```

WSLg hỗ trợ X11 và Wayland, âm thanh và clipboard. Tuy vậy, để làm việc hằng ngày với một màn hình Linux đầy đủ thì nó chưa thay thế được: WSL được thiết kế cho từng ứng dụng riêng lẻ, không phải cho GNOME hay KDE nguyên bản.

## systemd và tài nguyên WSL 2

Các phiên bản WSL 2 mới hỗ trợ systemd: với bản Ubuntu cài mới, systemd đã được bật sẵn. Nếu chưa bật, thêm vào file `/etc/wsl.conf` trong distro:

```
[boot]
systemd=true
```

rồi khởi động lại hệ con từ PowerShell bằng `wsl --shutdown`. Sau đó `systemctl` và các dịch vụ như nginx hay PostgreSQL sẽ hoạt động.

Giới hạn bộ nhớ và số bộ xử lý của máy ảo WSL 2 được đặt trong file `%UserProfile%\.wslconfig` phía Windows:

```
[wsl2]
memory=4GB
processors=2
```

Các thiết lập có hiệu lực sau khi chạy `wsl --shutdown`.

## Lỗi thường gặp khi cài WSL

### Lỗi 0x80370102

Thông báo đầy đủ: «Không thể khởi động máy ảo vì thiếu thành phần cần thiết» (WslRegisterDistribution failed with error: 0x80370102). Nguyên nhân gần như luôn giống nhau: WSL 2 không thể khởi động máy ảo. Hãy kiểm tra theo thứ tự:

1. Ảo hóa phần cứng đã bật trong BIOS/UEFI chưa: Intel VT-x (Intel Virtualization Technology) hoặc AMD-V (SVM Mode). Trạng thái hiển thị trong Task Manager → «Performance» → CPU → «Virtualization: Enabled».
2. Thành phần «Virtual Machine Platform» đã bật chưa.
3. Hypervisor có bị tắt trong bootloader không.

Các thành phần được bật từ PowerShell với quyền quản trị:

```
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
bcdedit /set hypervisorlaunchtype auto
```

Sau đó khởi động lại máy. Nếu bạn đang làm việc trong máy ảo, máy host phải cho phép ảo hóa lồng nhau — hoặc dùng WSL 1.

### Các vấn đề khác hay gặp

- **0x800701bc** — nhân WSL 2 chưa được cập nhật. Chạy `wsl --update`.
- **Lệnh wsl --install chỉ hiển thị trợ giúp** — WSL đã được cài; thêm distro bằng `wsl --install -d Ubuntu`.
- **Không có Internet trong WSL khi bật VPN** — client VPN chiếm các tuyến mạng ảo. Trên Windows 11, chế độ `networkingMode=mirrored` trong mục `[wsl2]` của file `.wslconfig` giúp khắc phục.
- **WSL chiếm nhiều dung lượng** — đĩa ảo `ext4.vhdx` lớn dần nhưng không tự thu nhỏ sau khi xóa tệp. Có thể thu nhỏ thủ công, hoặc chuyển distro bằng `--export`/`--import`.
- **Quên mật khẩu Linux** — đăng nhập root từ PowerShell: `wsl -u root`, rồi `passwd alex`.

## WSL, máy ảo hay dual boot

WSL không phải cách duy nhất để có Linux trên máy Windows. Lựa chọn phụ thuộc vào công việc.

| Lựa chọn | Ưu điểm | Nhược điểm | Khi nào chọn |
| --- | --- | --- | --- |

| WSL 2 | khởi động trong vài giây, dùng chung tệp, VS Code, Docker | không có màn hình desktop đầy đủ, có đặc thù về mạng và ổ đĩa | phát triển, học dòng lệnh, script |

| Máy ảo (VirtualBox, Hyper-V, VMware) | cô lập hoàn toàn, snapshot, mọi distro và desktop, card mạng riêng | nặng hơn, tài nguyên cấp phát trước | phòng thí nghiệm máy chủ, thử nghiệm mạng, khởi động và phân vùng |

| Dual boot | toàn bộ sức mạnh phần cứng, đồ họa và driver gốc | phải khởi động lại để chuyển, rủi ro khi phân vùng | Linux là hệ thống chính, chơi game và tác vụ GPU trên Linux |

Để học Linux từ đầu, WSL thường là đủ: tệp, quyền truy cập, tiến trình, gói phần mềm, script bash và SSH hoạt động như trên máy chủ. Máy ảo cần khi đến những thứ trong WSL hoạt động khác: bootloader, phân vùng ổ đĩa vật lý, giao diện mạng và tường lửa ở tầng host.

## Kết luận

Windows Subsystem for Linux mang đến Linux thực thụ bên trong Windows chỉ với một lệnh `wsl --install`. Hãy chọn WSL 2, kiểm tra phiên bản bằng `wsl -l -v`, giữ dự án trong `~/` thay vì `/mnt/c`, và kết nối VS Code qua tiện ích WSL. Nếu cài đặt báo lỗi 0x80370102, hãy bật ảo hóa trong BIOS và thành phần «Virtual Machine Platform». Thực hành trong khóa học Linux bắt đầu từ việc chuẩn bị môi trường làm việc như vậy.

## FAQ

**WSL có miễn phí không?**

Có. WSL được tích hợp trong Windows 10 và 11 ở mọi phiên bản, kể cả Home, và các bản phân phối Linux cũng được phát hành miễn phí.

**Có thể chạy Docker trong WSL không?**

Có, nhưng chỉ với WSL 2. Bạn có thể cài Docker Desktop dùng động cơ WSL 2, hoặc cài Docker Engine trực tiếp trong distro như trên máy chủ Ubuntu thông thường.

**Các tệp của distro WSL được lưu ở đâu?**

Trong WSL 2, chúng nằm trong đĩa ảo ext4.vhdx trong thư mục profile người dùng Windows. Không cần mở trực tiếp; hãy dùng đường dẫn \\wsl$\ trong File Explorer.

**Làm thế nào để gỡ bỏ hoàn toàn WSL?**

Xóa các distro bằng wsl --unregister , sau đó gỡ ứng dụng «Windows Subsystem for Linux» trong «Installed apps», và nếu cần, tắt các thành phần Windows.

**Có thể chuyển WSL sang ổ đĩa khác không?**

Có: wsl --export Ubuntu ubuntu.tar, rồi wsl --unregister Ubuntu, rồi wsl --import Ubuntu D:\wsl\ubuntu ubuntu.tar. Các phiên bản mới còn có lệnh wsl --manage Ubuntu --move.


---
Source: Skillaria.Top (https://skillaria.top)
