Sửa lỗi 'mount: wrong fs type, bad option, bad superblock' trên Linux

intermediate🐧 Linux2026-04-15| Linux (Ubuntu, Debian, CentOS, RHEL, Arch) — mọi phiên bản kernel, ổ đĩa vật lý hoặc loop device

Error Message

mount: /mnt/data: wrong fs type, bad option, bad superblock on /dev/sdb1, missing codepage or helper program, or other error
#mount#filesystem#disk#fsck#ext4

Tình huống gặp phải

Bạn cắm ổ cứng ngoài, thêm đĩa mới, hoặc cố mount một phân vùng sau khi khởi động lại. Rồi lỗi này xuất hiện:

mount: /mnt/data: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

Đĩa vẫn hiển thị bình thường trong lsblk — nhưng mount lại thất bại. Lỗi này có năm nguyên nhân riêng biệt, và cách sửa phụ thuộc vào nguyên nhân bạn đang gặp phải.

Chẩn đoán nhanh trước tiên

Bắt đầu từ đây trước khi làm bất cứ điều gì khác. Xác định xem filesystem thực sự trên phân vùng là gì:

sudo blkid /dev/sdb1

Kết quả thường thấy:

/dev/sdb1: UUID="a1b2c3d4-..." TYPE="ext4" PARTUUID="..."

blkid không trả về kết quả gì? Phân vùng đó hoặc là chưa được format, bị hỏng, hoặc bạn đang nhắm sai thiết bị. Kiểm tra chéo bằng lệnh:

lsblk -f
sudo fdisk -l /dev/sdb

Nguyên nhân 1: Chỉ định sai loại filesystem

Đây là nguyên nhân phổ biến nhất. Bạn đang yêu cầu kernel đọc ext4 như ntfs, hoặc vfat như ext4 — điều đó sẽ không hoạt động. Có hai cách khắc phục:

# Để kernel tự nhận diện (hoạt động 90% trường hợp)
sudo mount /dev/sdb1 /mnt/data

# Hoặc chỉ định chính xác loại filesystem từ kết quả blkid
sudo mount -t ext4 /dev/sdb1 /mnt/data
sudo mount -t ntfs /dev/sdb1 /mnt/data
sudo mount -t vfat /dev/sdb1 /mnt/data
sudo mount -t exfat /dev/sdb1 /mnt/data

Vẫn gặp lỗi "missing codepage or helper program" với ntfs hoặc exfat? Các công cụ userspace chưa được cài đặt. Đây là cách sửa riêng:

# Ubuntu/Debian
sudo apt install ntfs-3g exfatprogs

# CentOS/RHEL
sudo yum install ntfs-3g exfatprogs

# Arch
sudo pacman -S ntfs-3g exfatprogs

Sau đó thử mount lại.

Nguyên nhân 2: Superblock bị hỏng

Superblock lưu trữ các metadata quan trọng của filesystem — kích thước block, số inode, UUID. Nếu bị hỏng, kernel sẽ không thể đọc filesystem. Chạy kiểm tra chỉ đọc trước để xem tình trạng:

sudo fsck -n /dev/sdb1

Cờ -n rất quan trọng ở đây. Nó chỉ báo cáo lỗi mà không chỉnh sửa gì. Nếu phát hiện lỗi, hãy unmount và thực hiện sửa chữa thật sự:

sudo umount /dev/sdb1
sudo fsck -y /dev/sdb1

Cờ -y tự động xác nhận mọi thao tác sửa chữa. Với phân vùng ext4 500 GB bị hỏng vừa phải, quá trình này mất khoảng 2–5 phút. Sau đó thử mount lại.

Superblock chính bị mất hoàn toàn? ext2/ext3/ext4 luôn ghi các bản sao dự phòng tại các offset cố định. Tìm chúng bằng lệnh:

sudo dumpe2fs /dev/sdb1 | grep -i superblock

Kết quả trông như thế này:

Primary superblock at 0, Group descriptors at 1-6
Backup superblock at 32768, ...
Backup superblock at 98304, ...

Chọn bản sao dự phòng đầu tiên và dùng nó để sửa chữa:

sudo e2fsck -b 32768 /dev/sdb1

Sau đó mount bình thường.

Nguyên nhân 3: Dirty bit được đặt (NTFS)

Tắt máy đột ngột, mất điện, hoặc máy Windows bật Fast Startup — tất cả những trường hợp này đều để lại cờ dirty trên phân vùng NTFS. Linux từ chối mount chúng ở chế độ đọc-ghi cho đến khi cờ này được xóa. Kiểm tra trạng thái trước:

sudo ntfsfix -n /dev/sdb1

Xác nhận có cờ dirty? Xóa nó đi:

sudo ntfsfix /dev/sdb1

Đây chỉ là giải pháp tạm thời. Để xử lý nguyên nhân gốc rễ phía Windows, hãy tắt Fast Startup: Control Panel → Power Options → Choose what the power buttons do → Turn on fast startup → bỏ chọn. Nếu không, cờ này sẽ quay lại mỗi lần Windows tắt máy.

Nguyên nhân 4: Nhắm sai device node

Lỗi thường gặp một cách đáng ngạc nhiên — mount cả đĩa thay vì một phân vùng:

# Sai — /dev/sdb là toàn bộ đĩa, không có filesystem ở đó
sudo mount /dev/sdb /mnt/data

# Đúng — /dev/sdb1 là phân vùng đầu tiên
sudo mount /dev/sdb1 /mnt/data

Liệt kê tất cả phân vùng trên đĩa để xác nhận có gì ở đó:

sudo parted /dev/sdb print

Nguyên nhân 5: Mount point chưa tồn tại

Vấn đề nhỏ, dễ bỏ qua. Nếu /mnt/data chưa tồn tại, lệnh mount sẽ thất bại trước khi thực sự thử:

sudo mkdir -p /mnt/data
sudo mount /dev/sdb1 /mnt/data

Cố định vĩnh viễn qua /etc/fstab

Muốn mount đĩa này mỗi lần khởi động? Thêm vào /etc/fstab. Dùng UUID thay vì tên thiết bị — /dev/sdb1 có thể đổi thành /dev/sdc1 nếu bạn thêm đĩa khác, nhưng UUID thì không bao giờ thay đổi:

# Lấy UUID
sudo blkid /dev/sdb1
# Kết quả: /dev/sdb1: UUID="a1b2c3d4-5678-..." TYPE="ext4"

Thêm dòng này vào /etc/fstab:

UUID=a1b2c3d4-5678-...  /mnt/data  ext4  defaults,nofail  0  2

Tùy chọn nofail đáng để hiểu rõ: nếu không có nó, một đĩa bị thiếu hoặc lỗi sẽ khiến máy treo 90 giây chờ timeout khi khởi động. Với nó, hệ thống khởi động bình thường và chỉ đơn giản bỏ qua lệnh mount đó. Kiểm tra cấu hình mà không cần khởi động lại:

sudo mount -a

Không có lỗi? Vậy là xong.

Xác nhận đã sửa thành công

# Xác nhận đã được mount
mount | grep sdb1
# hoặc
df -h | grep /mnt/data

# Kiểm tra có đọc được file không
ls /mnt/data

# Kiểm tra nhanh việc ghi
touch /mnt/data/testfile && echo "Write OK" && rm /mnt/data/testfile

Khi mọi cách đều thất bại

blkid không trả về gì. fsck không thể sửa chữa. Bảng phân vùng hoặc filesystem bị hỏng nghiêm trọng — có thể do lỗi phần cứng. Lúc này, hãy dừng ngay việc ghi vào đĩa.

  • Khôi phục bảng phân vùng bằng testdisk: sudo apt install testdisk && sudo testdisk /dev/sdb
  • Khôi phục từng file riêng lẻ bằng photorec (đi kèm với testdisk)
  • Nghi ngờ ổ cứng đang hỏng vật lý? Clone nó trước bằng ddrescue, rồi làm việc trên bản clone
# Clone đĩa đang hỏng — làm điều này trước tất cả mọi thứ
sudo apt install gddrescue
sudo ddrescue -d -r3 /dev/sdb /dev/sdc recovery.log

Cờ -r3 yêu cầu ddrescue thử lại các sector lỗi tối đa 3 lần. Nó ghi lại những sector nào bị lỗi, để bạn có thể tiếp tục nếu quá trình bị gián đoạn.

Related Error Notes