CHƯƠNG 4 : HỆ THỐNG FILE
4.8. TIN CẬY CỦA HỆ THỐNG FILE
File là nơi lưu giữ thơng tin mang tính lâu bền. Các thơng tin này có thể rất quan trọng đối với người dùng, thậm chí quan trọng hơn chính bản thân hệ thống tính tốn. Hệ thống file, do vậy, phải có tính bền vững cao, nghĩa là phải đảm bảo lưu trữ thông tin sao cho thông tin được tồn vẹn và khơng bị mất mát.
Thông tin của hệ thống file lưu trên đĩa và các thiết bị nhớ ngồi khác có thể bị sai lệch hoặc mất mát do nhiều nguyên nhân: lỗi phần cứng, lỗi phần mềm, sự cố kỹ thuật (mất điện).v.v. Mặc dù không thể ngăn chặn các sự cố như vậy, hệ thống file cần được được xây dựng sao cho có khả năng phát hiện và khắc phục hậu quả trong khả năng cao nhất có thể. Trong phần này ta sẽ xem xét một số vấn đề liên quan tới độ tin cậy và tính tồn vẹn của hệ thống file.
4.8.1. Phát hiện và loại trừ các khối hỏng
Trong quá trình sản xuất cũng như sử dụng, đĩa có thể chứa các khối hỏng, khơng thể dùng cho ghi, đọc thông tin. Đối với đĩa mềm, các khối hỏng thường xuất hiện trong quá trình sử dụng. Đĩa cứng, ngược lại, thường có các khối hỏng ngay trong q trình sản xuất. Những khối hỏng này được nhà sản xuất phát hiện trong quá trình kiểm tra đĩa và được lưu trong danh sách khối hỏng đi cùng với đĩa.
Để tránh mất thông tin do các khối hỏng gây ra cần phát hiện khối hỏng và tránh ghi thơng tin lên đó. Có hai phương pháp thường được sử dụng cho phép thực hiện việc này. Trong phương pháp thứ nhất, một sector trên đĩa được dành riêng chứa danh sách các khối hỏng. Một số khối không hỏng được dành riêng để dự trữ. Các khối hỏng sẽ được thay thế bằng các khối dự trữ bằng cách thay thế địa chỉ khối dự trữ thành địa chỉ khối hỏng. Mọi truy cập tới khối hỏng do vậy sẽ trở thành truy cập tới khối dự trữ.
Phương pháp thứ hai đơn giản hơn. Hệ điều hành tập trung tất cả các khối hỏng thành một file. Do thuộc về file, các khối này được đánh dấu như đã cấp phát và do vậy không được sử dụng nữa.
Khoản mục
i-node Độ dài Tên file
Bảng i-node .
. .
4.8.2. Sao dự phòng
Sao dự phòng (backup) hay sao lưu là tạo ra một bản sao của đĩa trên một vật mang khác. Trong trường hợp đĩa cần sao là đĩa mềm, nội dung đĩa có thể sao sang một đĩa mềm khác. Với đĩa cứng, đặc biệt các đĩa có dung lượng lớn, vật mang được chọn cho bản sao dự phòng thường là băng từ. Ưu điểm của băng từ là dung lượng lớn, giá thành rẻ. Mặc dù tốc độ truy cập băng từ thấp hơn đĩa và băng từ không hỗ trợ truy cập trực tiếp, xong việc truy cập tới băng từ ít khi xảy ra (chỉ trong trường hợp đĩa gốc bị hư hỏng), do đó nhược điểm này không phải là vấn đề lớn lắm. Băng dùng sao lưu có thể là băng video thơng thường với thiết bị ghi đi kèm.
Có hai phương pháp sao lưu được sử dụng. Phương pháp thứ nhất là sao lưu toàn bộ (full backup). Tất cả thông tin trên đĩa sẽ được sao sang băng từ. Phương pháp này thường khá tốn thời gian nếu dung tích của đĩa lớn.
Phương pháp thứ hai cho phép tiếp kiệm thời gian sao lưu và có tên gọi là sao lưu tăng dần (incremental backup). Sao lưu tăng dần được sử dụng sau khi đã tiến hành sao lưu tồn bộ ít nhất một lần. Thay vì sao lưu tồn đĩa, phương pháp này chỉ sao các file đã bị thay đổi sau lần sao lưu cuối cùng.
Thường thường người ta áp dụng cả 2 phương pháp trên. Sao lưu toàn bộ được tiến hành hàng tuần hoặc hàng tháng, còn sao lưu tăng dần được tiến hành hàng ngày.
Để sử dụng phương pháp sao lưu thứ hai, hệ thống lưu trữ thông tin về các lần lưu trữ file. Nếu sau lần lưu trữ cuối file bị thay đổi thì file sẽ được sao lưu lại. Hệ điều hành quản lý việc sao lưu bằng cáh kiểm tra thời gian sao lưu cuối này. Trong một số hệ thống như MS- DOS, thay vì ghi lại thời gian lần sao lưu cuối cùng, hệ thống sử dụng một bit đặc biệt gắn với mỗi file gọi là archive bit. Sau khi sao dự phòng, các bit này được xoá về 0. Mỗi khi nội dung file thay đổi, bit được đặt lại bằng 1. Trong lần sao lưu tiếp theo, hệ điều hành kiểm tra archive bit của các file. File có bit tương ứng bằng 1 là file đã bị thay đổi và cần phải sao lưu.
4.8.3. Tính tồn vẹn của hệ thống file
Như đã trình bày ở các phần trên, hệ thống file chứa nhiều cấu trúc dữ liệu có các mối liên kết với nhau. Chẳng hạn, phần quản lý không gian chưa sử dụng chứa danh sách các khối trống được liên kết với nhau, thư mục chứa con trỏ tới các i-node, i-node lại chứa liên kết tới các khối.v.v. Nếu thông tin về các liên kết này bị hư hại, tính tồn vẹn của hệ thống cũng bị phá vỡ.
Trong quá trình làm việc, hệ thống file thường phải đọc các khối chứa thông tin về các liên kết vào bộ nhớ, thay đổi các liên kết này, sau đó ghi ngược ra đĩa. Ví dụ, khi xố file, hệ thống file đọc địa chỉ các khối thuộc về file, đánh dấu khối thành khối trống sau đó giải phóng khoản mục chứa file.
Trong nhiều trường hợp, các liên kết này có thể bị phá vỡ và trở nên khơng tồn vẹn đặc biệt trong trường hợp thư mục, i-node hoặc danh sách khối trống bị hư hại. Việc hư hại xảy ra khi vùng đĩa chứa các thông tin này bị hỏng hoặc khi hệ thống bị sự cố khi đang thay đổi các cấu trúc nói trên.
Ta hãy xem xét một số trường hợp phá vỡ tính tồn vẹn. Trường hợp thứ nhất, các khối khơng có mặt trong danh sách các khối trống, đồng thời cũng khơng có mặt trong một file nào. Hệ thống, do đó, mất quyền kiểm sốt với các khối này. Trong trường hợp khác, một khối có thể vừa thuộc về một file nào đó vừa có mặt trong danh sách khối trống và do đó có thể bị hệ điều hành cấp phát lần thứ hai cho một file khác. Nếu một khối đồng thời thuộc về hai file cùng một lúc sẽ dẫn đến mâu thuẫn và gây mất dữ liệu. Đối với file, file có thể bị xố trong khi khoản mục ứng với file trong thư mục vẫn cịn. Có thể xảy ra trường hợp ngược lại, khoản mục ứng với file bị xố cịn file thì chưa.
Để giải quyết các vấn đề nói trên, hệ điều hành thường có các chương trình kiểm tra tính tồn vẹn của hệ thống. Các chương trình này được chạy khi hệ thống khởi động, đặc biệt khởi động lại sau các sự cố. Ví dụ được biết đến rộng rãi của chương trình loại này là chương trình SCANDISK của Windows và DOS.
Ví dụ chương trình kiểm tra tính tồn vẹn trong Unix làm việc như sau:
Kiểm tra tính tồn vẹn của khối. Tạo hai số đếm cho mỗi khối. Số đếm thứ nhất chứa
số lần khối đó xuất hiện trong danh sách khối trống. Số đếm thứ hai chứa số lần khối xuất hiện trong file. Khởi đâu, tất cả số đếm được khởi tạo bằng 0. Chương trình lần lượt duyệt danh sách khối trống và toàn bộ i-node của các file. Nếu một khối xuất hiện trong danh sách khối trống, số đếm tương ứng thứ nhất được tăng một đơn vị. Nếu khối xuất hiện trong i-node của file, số đếm tương ứng thứ hai được tăng một đơn vị. Trên hình ??? là ví dụ số đếm của một số khối sau khi duyệt xong toàn hệ thống. Với mỗi khối cụ thể có thể xẩy ra ba trường hợp sau:
- Tổng số đếm thứ nhất và thứ hai của khối bằng 1 như với các khối 1, 2: kết quả bình thường, cho thấy khối đang trống hoặc đã được cấp phát cho duy nhất 1 file.
- Tổng số đếm thứ nhất và thứ hai của khối bằng 0 như với khối 0: kết quả lỗi, cho thấy khối hiện không thuộc danh sách khối trống, đồng thời cũng không thuộc file nào. Có thể khắc phục lỗi này bằng cách thêm khối vào danh sách khối trống.
- Tổng số đếm thứ nhất và thứ hai của khối lớn hơn 1 như với khối 3, 4, 5: kết quả lỗi, cho thấy file vừa được đánh dấu còn trống, vừa được đánh dấu đã cấp phát cho file, hoặc đã được cấp cho nhiều hơn một file. Trong trường hợp này việc khắc phục có thể gây mất dữ liệu nếu khối thuộc về nhiều file và đã được ghi dữ liệu lên đó.
Hình 4.14: Kết quả kiểm tra tính tồn vẹn của khối
4.8.4. Đảm bảo tính tồn vẹn bằng cách sử dụng giao tác
Số thứ tự khối 0 1 2 3 4 5 0 0 1 1 3 2 Số thứ tự khối 0 1 2 3 4 5 0 1 0 1 0 1
Số lần xuất hiện trong danh sách trống
Số lần xuất hiện trong file
Mặc dù có thể kiểm tra tính tồn vẹn của các liên kết trong hệ thống file như vừa trình bày trong phần trước, nhưng phương pháp này có một số nhược điểm. Thứ nhất, việc kiểm tra toàn bộ hệ thống file, chẳng hạn bằng cách chạy SCANDISK, đòi hỏi khá nhiều thời gian. Thứ hai, việc kiểm tra chỉ cho phép phát hiện lỗi sau khi đã xảy ra và không đảm bảo khôi phục dữ liệu đối với một số lỗi.
Một số hệ thống file hiện nay sử dụng kỹ thuật tiên tiến hơn, cho phép hạn chế những nhược điểm nói trên. Kỹ thuật này dựa trên khái niệm giao tác (transaction), một khái niệm
có nguồn gốc từ lĩnh vực cơ sở dữ liệu. Giao tác là một tập hợp các thao tác cần phải được thực hiện trọn vẹn cùng với nhau. Nếu bất cứ một thao tác nào chưa hồn thành, thì coi như tồn bộ giao tác chưa được thực hiện. Đối với hệ thống file, mỗi giao tác sẽ bao gồm những thao tác thay đổi liên kết cần thực hiện cùng nhau, ví dụ các thao tác cập nhật liên kết liên quan với một khối trên đĩa.
Toàn bộ trạng thái hệ thống file, cụ thể là những thay đổi thực hiện với các liên kết và cấu trúc quản lý file, được hệ thống ghi lại trong một file log (một dạng file nhật ký ghi lại thông tin về hệ thống theo thời gian). Mỗi khi thực hiện giao tác, hệ thống kiểm tra xem giao tác có được thực hiện trọn vẹn không. Nếu giao tác không được thực hiện trọn vẹn do sự cố, hệ điều hành sẽ sử dụng thông tin từ log để khôi phục hệ thống file về trạng thái không lỗi, trước khi bắt đầu thực hiện giao tác. Phương pháp sử dụng giao tác cho phép đưa hệ thống file về một trạng thái không lỗi trong khi khơng phải kiểm tra tồn bộ liên kết của file và thư mục. Hệ thống file NTFS của Windows NT và các phiên bản sau sử dụng kỹ thuật giao tác vừa trình bầy. Tuy nhiên, hệ thống chỉ áp dụng giao tác với thay đổi liên kết, và không sử dụng kỹ thuật này cho thay đổi nội dung file.