Sửa lỗi 'umount: target is busy' trên Linux

beginner🐧 Linux2026-05-30| Linux (Ubuntu, Debian, CentOS, RHEL, Arch Linux, v.v.)

Error Message

umount: /mnt/data: target is busy.
#linux#umount#fuser#lsof#sysadmin

Vấn đềBạn đã sẵn sàng để rút ổ USB hoặc ngắt kết nối một chia sẻ mạng, nhưng Linux lại có kế hoạch khác. Thay vì ngắt kết nối (unmount) sạch sẽ, bạn lại gặp phải một trở ngại quen thuộc:

umount: /mnt/data: target is busy.

Đây không phải là lỗi; đó là một tính năng an toàn. Nhân (kernel) Linux ngăn bạn ngắt kết nối bất kỳ thiết bị nào vẫn còn các tệp đang mở hoặc các tiến trình đang hoạt động. Nếu hệ thống cho phép bạn unmount trong khi một tệp 2GB đang ghi dở dang, bạn có khả năng sẽ làm hỏng hệ thống tệp. Để khắc phục điều này, bạn cần tìm tiến trình cụ thể đang giữ "khóa" (lock) và yêu cầu nó giải phóng.

Tại sao điều này xảy ra- Một cửa sổ terminal vẫn đang ở trong một thư mục con của điểm gắn kết (mount point).- Một trình phát đa phương tiện đang phát một tệp phim nằm trên ổ đĩa.- Một cơ sở dữ liệu hoặc máy chủ web đang ghi log trực tiếp vào đĩa.- Một container Docker đang sử dụng một volume được ánh xạ tới đường dẫn cụ thể đó.- Một chia sẻ mạng NFS hoặc Samba bị treo do mất kết nối.## Cách khắc phục lỗi### 1. Kiểm tra Terminal của chính bạnTrước khi chạy các lệnh phức tạp, hãy nhìn vào chính shell của bạn. Nếu bạn đã chạy lệnh cd /mnt/data trong terminal đang sử dụng, thì chính cửa sổ đó là thứ đang chặn việc unmount. Bạn không thể ngắt kết nối một căn phòng trong khi vẫn đang đứng bên trong nó.

Di chuyển về thư mục cá nhân và thử lại:

cd ~
sudo umount /mnt/data

2. Xác định tiến trình bằng 'lsof'Khi nguyên nhân không rõ ràng, tiện ích lsof (List Open Files) sẽ đóng vai trò là thám tử. Nó hiển thị cho bạn mọi tiến trình hiện đang tương tác với ổ đĩa.

sudo lsof +D /mnt/data

Tham số +D tìm kiếm trong thư mục một cách đệ quy. Bạn sẽ thấy đầu ra như sau:

COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3 4567  linuxuser cwd    DIR    8,1     4096    2 /mnt/data
gio-mu  8910  linuxuser 4u     REG    8,1   524288   15 /mnt/data/backup.tar.gz

PID (Process ID) là con số bạn cần. Trong trường hợp này, một script Python (PID 4567) và một tiến trình hệ thống (PID 8910) là những kẻ đang canh giữ.

3. Giải pháp thay thế nhanh chóng: 'fuser'Nếu lsof không có sẵn trên hệ thống, fuser là một giải pháp thay thế mạnh mẽ thường được cài đặt sẵn trên hầu hết các bản phân phối. Nó được xây dựng chuyên biệt để tìm các tiến trình đang sử dụng tệp hoặc socket.

sudo fuser -v -m /mnt/data
```- `-v`: Bật chế độ chi tiết (verbose) để dễ đọc hơn.- `-m`: Kiểm tra toàn bộ điểm gắn kết xem có hoạt động nào không.Cột **ACCESS** cho biết điều gì đang xảy ra: `c` nghĩa là một tiến trình đang ở trong một thư mục, trong khi `f` nghĩa là nó đang mở một tệp để đọc hoặc ghi.
### 4. Dừng các tiến trình đang chặnKhi đã có PID, hãy thử tắt ứng dụng một cách bình thường trước. Ví dụ, nếu PID 4567 là vấn đề:

sudo kill 4567


Nếu tiến trình không phản hồi, hãy sử dụng tùy chọn "mạnh tay" để buộc nó dừng ngay lập tức:

sudo kill -9 4567


**Cảnh báo:** `fuser` có thể dừng mọi tiến trình đang sử dụng ổ đĩa chỉ bằng một lệnh `sudo fuser -k /mnt/data`. Chỉ sử dụng lệnh này nếu bạn chắc chắn rằng không có dữ liệu quan trọng nào đang được ghi.
### 5. Ngắt kết nối kiểu 'Lazy' (Trì hoãn)Nếu bạn không thể dừng tiến trình — thường gặp với các tiến trình "ma" (ghost processes) hoặc các điểm gắn kết mạng bị treo — hãy sử dụng lazy unmount. Lệnh này sẽ tách hệ thống tệp khỏi cấu trúc thư mục ngay lập tức, nhưng nhân Linux sẽ đợi các tiến trình hoàn tất công việc trước khi dọn dẹp hoàn toàn tài nguyên.

sudo umount -l /mnt/data


### 6. Buộc ngắt kết nối mạngĐối với các chia sẻ mạng NFS hoặc Samba bị treo và không phản hồi với bất kỳ lệnh nào khác, tham số `-f` sẽ buộc ngắt kết nối.

sudo umount -f /mnt/data


## Xác minh kết quảKiểm tra xem ổ đĩa đã thực sự được ngắt kết nối chưa bằng cách xem danh sách các điểm gắn kết đang hoạt động:

mount | grep /mnt/data


Nếu lệnh không trả về kết quả nào, nghĩa là bạn đã thành công. Bạn cũng có thể chạy lệnh `ls /mnt/data`; thư mục bây giờ sẽ trống rỗng, vì bạn đang thấy điểm gắn kết gốc trên ổ đĩa chính chứ không phải nội dung của đĩa ngoài.
## Mẹo nhỏ: Tệp đã bị xóaĐôi khi, `lsof` sẽ hiển thị một tệp được đánh dấu là `(deleted)`. Điều này xảy ra khi một ứng dụng xóa một tệp nhưng vẫn giữ trình xử lý (handle) đang mở. Dung lượng sẽ không được giải phóng và ổ đĩa sẽ không thể unmount cho đến khi ứng dụng đó được khởi động lại hoặc bị dừng.

Related Error Notes