1. Zone.Identifier là gì?
Zone.Identifier
là một Alternate Data Stream (ADS) trong hệ thống file NTFS của Windows. Khi bạn tải một file từ Internet, Windows sẽ tự động gắn thêm một luồng dữ liệu ẩn tên là Zone.Identifier
vào file đó để đánh dấu “nguồn gốc không đáng tin cậy”.
Thông tin này được dùng bởi SmartScreen, Windows Defender, hoặc trình duyệt như Edge để hiển thị cảnh báo khi bạn mở các file tải về từ Internet.
Nội dung ví dụ trong file Zone.Identifier:
[ZoneTransfer]
ZoneId=3
ZoneId=3
nghĩa là file đến từ Internet.ZoneId=2
là từ Intranet.ZoneId=0
là từ máy nội bộ (Local Machine).
2. Zone.Identifier trên WSL2
Mặc dù WSL2 chạy trên Linux kernel và sử dụng hệ thống file Linux (ext4), nhưng khi bạn gắn volume Windows vào WSL2 (thường là /mnt/c
, /mnt/d
,…), bạn đang thao tác trên hệ thống NTFS. Vì vậy, các file được tải về từ Internet và lưu ở C:
vẫn có thể chứa Zone.Identifier
.
Ví dụ, nếu bạn mở một file .ps1
, .exe
, hoặc .zip
trên WSL2 và bị lỗi như:
PowerShell script cannot be loaded because it is from an untrusted source
hoặc
Operation not permitted (Permission denied)
thì có thể nguyên nhân là do luồng Zone.Identifier.
3. Cách xem Zone.Identifier
Bạn có thể kiểm tra xem một file có luồng Zone.Identifier
không bằng lệnh trong CMD:
more < file.txt:Zone.Identifier
Hoặc dùng PowerShell:
Get-Content -Path .\file.txt -Stream Zone.Identifier
4. Cách xóa Zone.Identifier hàng loạt trên WSL2
Vì WSL2 không hỗ trợ trực tiếp Alternate Data Streams, bạn cần thực hiện việc này thông qua PowerShell bên ngoài WSL (trên Windows host). Dưới đây là các cách xóa hàng loạt.
Cách 1: Dùng PowerShell để xóa Zone.Identifier hàng loạt
Get-ChildItem -Path "D:\MyFolder" -Recurse -Stream Zone.Identifier | ForEach-Object {
Remove-Item -Path $_.Filename -Stream Zone.Identifier -Force
}
💡 Giải thích:
-Stream Zone.Identifier
: chỉ định luồng cần xóa.-Recurse
: tìm trong thư mục con.-Force
: tránh lỗi nếu không có quyền.
Cách 2: Bỏ chặn file thay vì xóa trực tiếp
Nếu bạn chỉ muốn “gỡ chặn” file mà không đụng đến stream:
Get-ChildItem -Path "D:\MyFolder" -Recurse | Unblock-File
Lệnh này tương đương với việc bạn click chuột phải vào file → Properties → và bỏ chọn “Unblock”.
Cách 3: Chạy từ WSL2 bằng cách gọi PowerShell
Nếu bạn đang trong WSL2, bạn có thể gọi lệnh PowerShell từ shell như sau:
powershell.exe -Command "Get-ChildItem -Path 'D:\MyFolder' -Recurse | Unblock-File"
📌 Lưu ý:
- Thư mục
D:\MyFolder
phải dùng path theo Windows.- Đảm bảo bạn có quyền admin nếu xóa trong thư mục hệ thống.
Cách 4: Chạy từ WSL2 xóa hàng loạt
Truy cập vào WSL và chạy câu lệnh
find . -name "*:Zone.Identifier" -type f -delete