Blog

Dùng Junction để dời thư mục nặng khỏi ổ C khi hết dung lượng trên Windows

Vì sao cần dời thư mục khỏi ổ C

Ổ C bị đầy dung lượng là tình trạng phổ biến trên máy tính Windows. Một cách tối ưu được nhiều người áp dụng là di chuyển các thư mục nặng sang ổ khác như D: hoặc T:, sau đó tạo link trỏ ngược lại vị trí cũ. Nhờ vậy, Windows và các ứng dụng vẫn hoạt động bình thường như thể dữ liệu chưa từng rời đi.

Windows hỗ trợ hai loại link thư mục để làm việc này: Junction, tạo bằng lệnh mklink /J, và SymbolicLink, tạo bằng lệnh mklink /D. Cả hai đều là NTFS Reparse Point.

Junction và SymbolicLink khác nhau ở đâu

Junction xuất hiện từ Windows 2000, còn SymbolicLink ra đời từ Windows Vista. Cả hai đều có thể trỏ sang ổ đĩa khác. Điểm khác biệt nằm ở khả năng trỏ tới đường dẫn mạng: SymbolicLink làm được, Junction thì không.

Junction yêu cầu thư mục đích phải tồn tại sẵn, trong khi SymbolicLink không bắt buộc điều này. Về quyền hạn, Junction không cần quyền Admin, còn SymbolicLink có thể cần. Xét về độ ổn định khi redirect thư mục local, Junction được đánh giá rất tốt, SymbolicLink ở mức tốt.

Nếu nhìn rộng hơn, lệnh mklink có bốn biến thể. Lệnh không tham số tạo symlink cho file. Tham số /D tạo symlink cho thư mục. Tham số /J tạo Junction cho thư mục. Tham số /H tạo hardlink cho file, nhưng hardlink bắt buộc phải nằm cùng ổ đĩa và không trỏ được sang ổ khác. Trong số này, Junction là lựa chọn phổ biến nhất khi cần redirect thư mục AppData.

Kết luận nhanh: redirect thư mục local nên dùng /J; trỏ tới đường dẫn mạng hoặc file thì dùng /D.

Cách kiểm tra link đang có

Người dùng có thể kiểm tra một thư mục có phải là link hay không bằng PowerShell:

Get-Item C:\Users\LEO\AppData\Local\Temp | Select FullName, LinkType, Attributes

Hoặc liệt kê thư mục cha bằng lệnh dir. Nếu kết quả hiển thị <SYMLINKD> thì đó là SymbolicLink, còn <JUNCTION> là Junction.

Chuyển từ SymbolicLink sang Junction

Lấy thư mục Temp làm ví dụ, quy trình gồm bốn bước.

Bước đầu tiên là đóng toàn bộ ứng dụng đang dùng Temp, gồm trình duyệt, VSCode, các installer và bất kỳ phần mềm nào khác.

Bước thứ hai là xóa link cũ mà không xóa dữ liệu thật:

Remove-Item C:\Users\LEO\AppData\Local\Temp -Force

Điểm cần lưu ý là không dùng tham số -Recurse hay /s ở bước này.

Bước thứ ba là tạo Junction mới:

mklink /J C:\Users\LEO\AppData\Local\Temp T:\Users\LEO\AppData\Local\Temp

Bước cuối là kiểm tra lại bằng Get-Item với thuộc tính LinkType. Kết quả phải hiển thị Junction.

Quy trình chuẩn dọn ổ C bằng Junction

Trước hết cần xác định các thư mục nặng. Những ứng viên thường gặp là AppData\Local, Temp, BraveSoftware và Google. Có thể liệt kê bằng lệnh:

Get-ChildItem C:\Users\LEO -Directory | Sort-Object Length -Descending

Tiếp theo, di chuyển dữ liệu sang ổ khác bằng lệnh move, ví dụ chuyển Temp từ ổ C sang ổ T. Cuối cùng, tạo Junction bằng mklink /J trỏ từ vị trí cũ trên ổ C tới vị trí mới.

Những điều không nên làm

Có bốn lưu ý quan trọng. Không đặt Temp trên USB. Không đặt Temp trên ổ mạng. Không dùng /D nếu không thực sự cần. Không xóa link bằng lệnh rd /s, vì cách này có thể ảnh hưởng tới dữ liệu thật.

Rà soát toàn bộ link trỏ ra ngoài ổ C

Để biết ổ C hiện có những link nào đang trỏ sang ổ khác, người dùng có thể chạy đoạn PowerShell sau:

Get-ChildItem C:\ -Recurse -Force -Attributes ReparsePoint -ErrorAction SilentlyContinue |
Where-Object {
    $_.Target -match '^[A-Z]:\\' -and
    $_.Target.Substring(0,2) -ne 'C:'
} |
Select FullName, LinkType, Target

Lệnh này quét toàn bộ Reparse Point trên ổ C và lọc ra những link có đích nằm trên ổ khác.

Kết luận

Junction (/J) là lựa chọn an toàn nhất khi redirect thư mục local. SymbolicLink (/D) linh hoạt hơn nhưng không cần thiết trong đa số trường hợp. Người dùng cần luôn xóa link đúng cách để tránh mất dữ liệu, và chỉ nên redirect những thư mục lớn, ít nhạy cảm với hệ thống.

Với nhu cầu nâng cao, có thể giới hạn độ sâu khi quét, viết script tự động sao lưu trước khi tạo Junction, hoặc xây dựng lệnh xóa symlink an toàn. Những phần này có thể phát triển thành một bộ công cụ quản lý symlink riêng.

Dùng Junction để dời thư mục nặng khỏi ổ C khi hết dung lượng trên Windows · LeoBranding