Snippets

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

Để lại một bình luận

Your email address will not be published. Required fields are marked *

Post comment