Bài viết này của bác Andy Pham trong Group Nghiện Tech, có phân tích khá dễ hiểu về cơ chế hoạt động của SSD và những lý do có thể/không thể khôi phục dữ liệu trên ổ cứng SSD.
SSD/TRIM – Khôi phục dữ liệu SSD trên Mac/Win
Mọi người thường gọi SSD là ổ cứng, thực chất nó là chip nhớ, nó làm việc như một chip nhớ (memory/flash). Vì thế, nếu nhìn nhận SSD từ góc độ của một chíp nhớ thì mọi vấn đề loằng ngoằng sẽ được giải thích một cách dễ dàng hơn.
SSD mặc định sẽ xóa triệt để:
Do SSD là một chip nhớ, nên nó phải được xóa trắng trước khi nó có thể ghi vào (khác với đĩa từ HDD). Thường thì lúc hệ thống xóa file, hệ thống chỉ đánh dấu không dùng nữa (mark as unused). Vì thế, lúc nào muốn ghi dữ liệu vào những chỗ đó, SSD bắt buộc phải xóa trước rồi mới ghi được. Việc này khiến quá trình ghi dữ liệu kéo dài gấp đôi.
SSD nhanh thế thì cho dù kéo dài gấp đôi cũng không đáng bao nhiêu, có thể một vài bạn sẽ nghĩ vậy. Trong môi trường thực tế, SSD thực hiện cả ngàn lần ghi/đọc trong một phút thì cái gấp đôi đó được nhân lên ngàn lần, sẽ là một gánh nặng rất lớn, khiến hệ thống giảm hiệu năng một cách kinh ngạc.
TRIM sinh ra để giải quyết vấn đề “hiệu năng” này. Trong lúc Hệ điều hành làm các việc khác, SSD đang rảnh rang, TRIM sẽ ra lệnh cho nó thong thả đi xóa trắng những chỗ đã được đánh dấu không dùng nữa, sẵn sàng cho lệnh ghi tiếp tới, đây là lệnh xóa triệt để được thực hiện bởi chính controller của SSD. Vì thế nếu dữ liệu bị xóa nhầm trên ổ SSD thì không thể khôi phục được cho dù là bởi những trung tâm khôi phục dữ liệu tiên tiến nhất.
SSD có khả năng Chống phân mảnh:
Do là chip nhớ, nên SSD ghi dữ liệu vào theo khối (block). Mình nói nôm na một khối có 5 đơn vị dữ liệu chẳng hạn. Nếu mà File dữ liệu cần ghi có 6 đơn vị dữ liệu, vậy phải dùng 2 khối (khối thứ nhất có 5 đơn vị và khối thứ hai lại chỉ có 1 đơn vị). Vậy là khối thứ 2 còn 4 đơn vị để trống. Đáng buồn là lần ghi dữ liệu tới, SSD lại không tận dụng được 4 đơn vị để trống này mà phải ghi ra một khối mới (vì nó ghi theo khối, đơn giản vậy thôi).
Anh em có thể thấy, nếu là file dữ liệu luôn là 5, 10, 15, 20 đơn vị dữ liệu gì đó, thì mọi thứ sẽ rất đẹp, SSD sẽ ghi nó thành 1,2,3,4 khối dữ liệu, sẽ không có khối dữ liệu nào bị dư thừa vài chỗ trống. Đời không đẹp thế, việc đó vốn hiếm xảy ra trong thực tế. Vì thế, kiểu gì khối cuối cùng cũng bị trống vài đơn vị (lãng phí nho nhỏ). Với tốc độ khủng khiếp của SSD hiện nay, ghi đọc hàng ngàn file trong vài phút, số lượng khối cuối cùng này tăng nhanh một cách chóng mặt, đến đây thì lãng phí không còn nhỏ nữa mà bắt đầu rất lớn rồi
Để giải quyết vấn đề này, hệ thống có một phương án rất hay, trong lần ghi tiếp tới, OS sẽ đọc cái đơn vị dữ liệu lẻ loi ở khối thứ hai bên trên ra một bộ nhớ tạm (cache), ghép nó với 4 đơn vị dữ liệu khác cho thành 1 khối chuẩn rồi ghi ngược lại vào SSD, như thế không lãng phí tý nào, vừa đẹp. Nhưng vấn đề mới lại đặt ra, SSD phải thực hiện cả ngàn vụ như thế trong một phút (đọc dữ liệu ra, ghép khối, ghi ngược lại), nghe thôi đã thấy rầy rà, lãng phí thời gian một cách kinh khủng, mà trong thế giới công nghệ này, thời gian là tốc độ.
TRIM sinh ra để làm việc đó, nó vẫn làm mấy việc bên trên thôi, nhưng nó lặng lẽ làm lúc SSD rảnh rỗi, vì thế, nó không làm ảnh hưởng gì đến tốc độ của SSD.
Mình lấy một ví dụ thực tế như thế này:
trong lớp học cứ 5 người ngồi một bàn, nhưng nếu có 6 người thì bắt buộc phải dùng 2 bàn, ông thứ sáu sẽ ngồi bàn thứ hai, ông ấy ngồi ngay đầu bàn, mỗi lần có người muốn ngồi vào bàn thứ hai này, ông thứ 6 này lại phải đi ra khỏi chỗ để cho người ta vào rồi mới ngồi được (giống quá trình caching bên trên). Lớp học thì chỉ cần khoảng 10 ông ngồi đầu bàn như ông thứ sáu này là chắn hết chỗ ngồi (phân mảnh, lãng phí chỗ ngồi).
Cô giáo chủ nhiệm TRIM sẽ giải quyết vấn đến này, TRIM sẽ gom các ông ngồi đầu bàn này thành một nhóm 5 người rồi nhét vào 1 bàn. Như thế, cô giáo chủ nhiệm TRIM giải quyết được 2 vấn đề: các bàn còn lại đều sẵn sàng để cho người mới vào ngồi, thứ hai là mọi người ngồi tập trung (không bị phân mảnh). Chính vì thế mọi người đều nói SSD không bao giờ bị phân mảnh.