Tổng quan module — Lưu trữ & Filesystem
Dữ liệu nằm ở đâu khi tắt điện. Lộ trình module: cơ chế ổ đĩa, tuần tự vs ngẫu nhiên, filesystem, page cache, fsync và lưu trữ mạng.
TL;DR: Ba course trước của track đã bóc CPU, bộ nhớ và hệ điều hành — tức toàn bộ phần mất điện là bay. Module này mở phần còn lại: dữ liệu sống sót qua lần tắt máy bằng cách nào. Bạn sẽ đi từ cơ chế vật lý của HDD, SSD và NVMe, qua cách filesystem ánh xạ tên file xuống khối dữ liệu, tới page cache đứng chắn giữa ứng dụng và đĩa, rồi tới fsync — ranh giới thật giữa "đã ghi" và "đã bền". Khép lại bằng lưu trữ mạng, nơi những giả định quen thuộc bắt đầu vỡ.
Vì sao module này tồn tại
Rất nhiều sự cố production không giải thích nổi bằng code. Service báo ghi thành công nhưng mất điện xong dữ liệu biến mất. Máy chủ mới ổ SSD chạy nhanh gấp bội rồi sau một năm bắt đầu khựng từng cơn. Chuyển sang lưu trữ dùng chung thì file cấu hình thỉnh thoảng rỗng, dù code không đổi dòng nào.
Ba tình huống trên đều có nguyên nhân nằm dưới tầng ngôn ngữ bạn viết: ở cơ chế vật lý của thiết bị, ở tầng đệm mà kernel dựng lên, và ở những đảm bảo mà tầng lưu trữ hứa hoặc không hứa. Module này đi thẳng xuống đó.
Sau module này bạn sẽ
- Compare HDD, SSD và NVMe về cơ chế vật lý và hệ quả lên độ trễ, IOPS, tuổi thọ.
- Predict chênh lệch giữa truy cập tuần tự và ngẫu nhiên từ cơ chế thiết bị, và đọc đúng ba chỉ số IOPS, throughput, latency.
- Explain filesystem ánh xạ tên file sang khối dữ liệu qua inode, dentry và block allocation.
- Trace đường một lần
write()từ page cache xuống mặt đĩa để quyết định khi nào bắt buộc gọifsync. - Choose giữa block, file và object storage dựa trên độ trễ và ngữ nghĩa nhất quán của workload.
Lộ trình module

Thứ tự này không tuỳ tiện. Bài 01 đặt nền vật lý, vì mọi con số về sau đều là hệ quả của nó — đầu đọc phải di chuyển, còn NAND thì ghi theo trang mà xoá theo khối. Bài 02 lấy đúng nền đó để giải thích vì sao kiểu truy cập quyết định hiệu năng nhiều hơn cả loại ổ, và cùng lúc gỡ rối ba chỉ số mà người ta hay dùng lẫn nhau.
Bài 03 leo lên một tầng: giữa tên file bạn gõ và khối dữ liệu trên đĩa có một lớp ánh xạ, và hiểu lớp đó rồi thì hardlink, symlink, hay chuyện xoá file đang mở không giải phóng dung lượng đều trở nên hiển nhiên. Bài 04 chèn thêm page cache vào bức tranh — thứ giải thích vì sao lần đọc thứ hai nhanh gấp bội, và cũng là thứ làm mọi benchmark cẩu thả trở nên vô nghĩa.
Bài 05 là bản lề của module: nó chỉ ra write() thành công không đồng nghĩa với dữ liệu đã bền, rồi đưa bạn xuống tận bộ đệm bên trong chính ổ đĩa. Bài 06 đẩy toàn bộ những thứ trên ra sau một sợi cáp mạng và hỏi: giả định nào còn đứng vững? Cuối cùng bài 07 bắt bạn tự đo trên máy mình — bốn phép đo biến mọi lập luận trước đó thành con số kiểm chứng được.
Yêu cầu trước khi bắt đầu
- Đã học xong course Hệ điều hành & Tiến trình — đặc biệt phần system call và interrupt.
- Nắm bộ nhớ ảo ở mức paging và page fault; module này dùng lại khái niệm trang bẩn rất nhiều.
- Có một máy Linux, macOS hoặc WSL để chạy lệnh thật ở bài lab. Không bắt buộc cho sáu bài đầu.
Thời lượng
| Bài | Phút |
|---|---|
| 01 — HDD, SSD, NVMe | 13 |
| 02 — Tuần tự vs ngẫu nhiên | 12 |
| 03 — Filesystem, inode và metadata | 13 |
| 04 — Page cache và buffered I/O | 14 |
| 05 — fsync và độ bền | 14 |
| 06 — Lưu trữ mạng | 13 |
| 07 — Lab đo ổ đĩa | 18 |
| 08 — Tổng kết | 6 |
| Tổng | ~1 giờ 45 phút |
Cách học module này hiệu quả
- Đừng học thuộc con số, hãy học bậc độ lớn. Thông số ổ đĩa thay đổi theo từng đời sản phẩm; cơ chế thì không. Nhớ "chênh khoảng ba bậc" hữu ích lâu hơn nhớ một con số IOPS cụ thể.
- Chạy lab sớm nếu có máy. Sáu bài đầu lập luận, bài 07 kiểm chứng. Nhiều người hiểu page cache thật sự chỉ sau khi tự thấy lần đọc thứ hai nhanh gấp mấy chục lần.
- Mỗi bài đều nối ngược về ba course trước. Chỗ nào thấy khối "Nhớ lại" thì dừng một nhịp — đó là chỗ kiến thức cũ được dùng lại chứ không phải nhắc cho có.
- Bài 05 đáng đọc kỹ nhất. Nó là bài duy nhất trong module mà hiểu sai dẫn thẳng tới mất dữ liệu thật.
Bài tiếp theo: HDD, SSD, NVMe — ba cơ chế, ba thang độ trễ
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên