Điểm kiểm tra ghi và ghi nhật ký lười biếng. Hệ thống tệp được ghi nhật ký là gì

Hiện tại và tương lai của nghề viết nhật ký

Có nhiều định nghĩa về hệ thống tệp ghi nhật ký, nhưng hãy diễn đạt theo cách mà mọi người đều có thể hiểu: ghi nhật ký là hệ thống dành cho những người đã chán công cụ kiểm tra thời gian khởi động fsck. Đây cũng là một hệ thống dành cho những người gần gũi với ý tưởng về hệ thống có khả năng chịu lỗi. Nếu bạn tắt nguồn không đúng cách hệ thống bình thường, khi không có ghi nhật ký, HĐH sẽ phát hiện thực tế này và chạy tiện ích kiểm tra tính toàn vẹn của đĩa fsck ở lần khởi động tiếp theo. Tiện ích này quét hệ thống tệp và cố gắng khắc phục sự cố mà không làm tổn hại đến dữ liệu. Quá trình xác minh có thể mất khá nhiều thời gian. Đôi khi hệ thống tệp bị hỏng đến mức HĐH chỉ khởi động ở chế độ một người dùng và nhắc người dùng thực hiện khôi phục thêm.

nói fsck

Điều tệ hơn nữa là quá trình fsck có thể đang chạy hệ điều hành tự động khi gắn hệ thống tệp để đảm bảo siêu dữ liệu là chính xác (ngay cả khi không có lỗi). Vì vậy, việc loại bỏ các kiểm tra tính toàn vẹn của hệ thống tập tin không cần thiết là một lĩnh vực cần cải thiện.

Vì vậy, bây giờ bạn biết ai cần hệ thống tệp ghi nhật ký, tại sao các hệ thống như vậy không cần kiểm tra fsck? Nói tóm lại - bởi vì họ tiến hành tạp chí đặc biệt. Nhật ký là một tệp là bộ đệm vòng trong đó tất cả các hành động liên quan đến thay đổi đối với hệ thống tệp đều được ghi lại. Định kỳ, những thay đổi này được áp dụng cho hệ thống tập tin. Trong trường hợp xảy ra lỗi, nhật ký có thể được sử dụng làm điểm bắt đầu để khôi phục dữ liệu chưa được lưu và ngăn ngừa hỏng siêu dữ liệu.

Tóm lại, hệ thống tệp được ghi nhật ký là một hệ thống tệp có khả năng chịu sự cố trong đó các lệnh sửa đổi được ghi lại trước khi thực thi, do đó tránh được siêu dữ liệu bị hỏng. (Xem Hình 1). Như thường lệ với Linux, có rất nhiều biến thể của các hệ thống như vậy. Chúng ta hãy làm Đánh giá ngắn lịch sử của các hệ thống tập tin, sau đó xem xét những hệ thống hiện có hệ thống tập tin và sự khác biệt của họ.

Siêu dữ liệu là gì?

metadatađược gọi là cơ cấu dịch vụ dữ liệu cần thiết để lưu trữ dữ liệu cơ bản. Các thao tác như tạo và xóa tệp và thư mục, tăng tệp, cắt bớt tệp, v.v. đều ảnh hưởng đến siêu dữ liệu.

Hình 1. Một hệ thống tập tin được ghi nhật ký điển hình.

Lịch sử của hệ thống tệp nhật ký Linux

IBM® là công ty đầu tiên phát triển hệ thống tệp nhật ký có tên JFS (Hệ thống tệp nhật ký). Phiên bản đầu tiên của JFS được giới thiệu vào năm 1990 và phiên bản hiện đạiđược hỗ trợ trên Linux dưới dạng JFS2, được phát triển sau này. Năm 1994, Silicon Graphics giới thiệu hệ thống tệp XFS hiệu suất cao cho HĐH IRIX. Năm 2001, XFS được chuyển sang Linux. Năm 1998, một hệ thống dựa trên tệp đã được phát triển cho hệ thống Amiga. Hệ thống thông minh Hệ thống tệp (SFS), sau đó được phát hành theo Giấy phép GNU Giấy phép Công cộng Ít hơn (LGPL) và nhận được hỗ trợ trong Linux 2005. Hệ thống tập tin được sử dụng rộng rãi nhất là ext3fs (từ tiếng Anh. mở rộng thứ ba hệ thống tập tin ), là phần mở rộng của hệ thống ext2 với việc bổ sung tính năng ghi nhật ký. Hỗ trợ ext3fs xuất hiện trong Linux vào năm 2001. Cuối cùng, hệ thống tệp nhật ký ReiserFS được sử dụng rộng rãi đã mở ra nhiều con đường và cơ hội phát triển mới. Tuy nhiên, sự phát triển của hệ thống này đã bị chậm lại do các vấn đề pháp lý của tác giả.

Các loại ghi nhật ký

Tất cả các hệ thống tệp được ghi nhật ký đều duy trì một nhật ký để đệm các thay đổi của hệ thống tệp (điều này cũng cần thiết cho khắc phục thảm họa), nhưng có các chiến lược khác nhau về nội dung cần ghi và thời điểm ghi. Ba chiến lược phổ biến nhất là chế độ ghi lại, chế độ đặt hàng và chế độ dữ liệu.

TRONG chế độ ghi lại Chỉ siêu dữ liệu được ghi nhật ký và các khối dữ liệu được ghi trực tiếp vào đĩa. Điều này góp phần tạo nên tính bất khả xâm phạm của cấu trúc hệ thống tệp và bảo vệ khỏi bị hư hại, nhưng bản thân dữ liệu vẫn có thể bị hư hại (ví dụ: nếu sự cố hệ thống xảy ra sau khi ghi siêu dữ liệu vào nhật ký nhưng trước khi ghi một khối dữ liệu). Quyết định vấn đề được chỉ định cho phép chế độ đặt hàng. Ở chế độ này, chỉ siêu dữ liệu được ghi lại nhưng bản thân dữ liệu được ghi trước khi siêu dữ liệu được ghi lại. Điều này đảm bảo tính nhất quán của dữ liệu hệ thống tệp sau khi khôi phục. Cuối cùng cũng có thể đăng nhập chế độ dữ liệu, trong đó cả siêu dữ liệu và chính dữ liệu đó đều được ghi lại. Chế độ này có cấp độ cao nhất khả năng chống hư hỏng và mất dữ liệu, nhưng có nhược điểm là hiệu suất thấp, vì tất cả dữ liệu được ghi hai lần (đầu tiên vào nhật ký, sau đó vào đĩa).

Các quy tắc áp dụng các thay đổi được ghi trong nhật ký cũng có thể khác nhau ở phương pháp tiếp cận khác nhau. Ví dụ: khi nào nên áp dụng thay đổi? Khi nào tạp chí đầy? Hoặc khi hết thời gian chờ nhất định?

Hệ thống tập tin được ghi nhật ký ngày nay

Ngày nay, một số hệ thống tệp nhật ký được sử dụng tích cực, mỗi hệ thống đều có ưu điểm và nhược điểm riêng. Dưới đây là bốn hệ thống tập tin nhật ký phổ biến nhất.

JFS2

JFS2 (còn được gọi là hệ thống tập tin nhật ký được cải thiện) là hệ thống tập tin được ghi nhật ký đầu tiên và trong một khoảng thời gian dàiđã được sử dụng trên hệ điều hành IBM AIX® trước khi được chuyển sang Linux. JFS2 là một hệ thống tệp 64-bit, lấy nguồn gốc từ JFS gốc, đã được cải thiện đáng kể về khả năng mở rộng và hỗ trợ cho kiến ​​trúc đa bộ xử lý.

JFS2 hỗ trợ ghi nhật ký theo thứ tự, hiệu suất cao và thời gian phục hồi dưới giây. Để cải thiện hiệu suất, nó sử dụng phương pháp sắp xếp tệp dựa trên phạm vi. Vị trí dựa trên phạm vi có nghĩa là đặt tệp thành nhiều phần liên tục, thay vì nhiều khối giống hệt nhau. Do tính liên tục, những khu vực này cung cấp nhiều đọc nhanh và ghi âm. Lợi ích bổ sung phạm vi - chi phí thấp hơn khi làm việc với siêu dữ liệu. Khi đặt tệp vào các khối, siêu dữ liệu của từng khối sẽ được ghi lại. Nếu phạm vi được sử dụng, siêu dữ liệu cho phạm vi, thường bao gồm nhiều khối, sẽ thay đổi.

JFS2 cũng sử dụng cây B+ cho cả hai tìm kiếm hiệu quả thư mục và quản lý các bộ mô tả phạm vi. JFS2 không có chính sách riêng để đẩy các thay đổi vào đĩa - thay vào đó, nó dựa trên thời gian chờ của daemon kupdate.

XFS

XFS là một hệ thống tệp nhật ký ban đầu khác, được Silicon Graphics phát triển ban đầu vào năm 1995 cho HĐH IRIX. Vào năm 2001, XFS được triển khai trên Linux, vốn đã là một hệ thống tệp đáng tin cậy và được cân nhắc kỹ lưỡng vào thời điểm đó.

XFS sử dụng địa chỉ 64-bit đầy đủ và cung cấp rất hiệu suất cao thông qua việc sử dụng cây B+ để chứa các thư mục và tập tin. XFS lưu trữ dữ liệu dưới dạng phạm vi, hỗ trợ các kích thước phạm vi thay đổi (từ 512 byte đến 64 kilobyte). Cùng với phạm vi, XFS sử dụng phân bổ lười biếng, làm trì hoãn việc phân bổ các khối cho đến khi ghi chúng vào đĩa. Tính năng này làm tăng khả năng lấp đầy nhiều khối đĩa liên tiếp vì số lượng của chúng sẽ được biết tại thời điểm ghi.

Các thuộc tính thú vị khác của XFS là tốc độ I/O được đảm bảo khi người dùng hệ thống tệp được phân bổ một khoản dự trữ. băng thông cho các hoạt động I/O và I/O trực tiếp, sao chép dữ liệu trực tiếp giữa đĩa và bộ đệm ứng dụng (thay vì đi qua nhiều bộ đệm). Việc ghi nhật ký trong XFS được thực hiện bằng phương pháp ghi lại.

Hệ thống tệp mở rộng thứ ba (ext3fs)

Hệ thống tệp mở rộng thứ ba (ext3fs) là hệ thống tệp nhật ký phổ biến nhất, phát sinh như một sự phát triển của hệ thống tệp ext2 nổi tiếng. Trên thực tế, nó tương thích với ext2, vì nó hoạt động trên các cấu trúc giống hệt nhau, nhưng có thêm nhật ký. Hơn nữa, có thể gắn phân vùng ext3 dưới dạng ext2 hoặc chuyển đổi ext2 thành ext3 bằng tiện ích tune2fs.

ext3fs hỗ trợ cả ba chiến lược ghi nhật ký ( viết lại, chế độ sắp xếp và dữ liệu), nhưng chế độ sắp xếp mặc định được sử dụng. Chính sách truyền dữ liệu nhật ký vào đĩa có thể được cấu hình, nhưng ban đầu, việc truyền dữ liệu sẽ diễn ra khi 1/4 nhật ký đầy hoặc khi một trong các bộ đếm thời gian truyền hết hạn.

Một trong những nhược điểm chính của ext3fs xuất phát từ thực tế là ban đầu nó không được dự định trở thành một hệ thống tệp ghi nhật ký. Bởi vì nó dựa trên ext2fs nên nó thiếu nhiều tính năng nâng cao có trong các hệ thống tệp khác (chẳng hạn như phạm vi). Nó cũng thường hoạt động kém so với ReiserFs, JFS và XFS, nhưng ít tốn CPU và bộ nhớ hơn nhiều hệ thống tệp khác.

ReiserFS

Nén chất thải là gì?

Nó thường xảy ra rằng tập tin có kích thước kích thước nhỏ hơn khối logic. Thay vì phân bổ toàn bộ khối cho mỗi tệp như vậy, hãy để trống một phần của khối (phần này được gọi là đuôi), họ cố gắng ghép nhiều tệp vào một khối. Phương pháp này mang lại lợi nhuận 5% không gian trông so với các hệ thống tập tin khác, nhưng có tác động tiêu cực đến hiệu suất.

Hệ thống tệp ReiserFS ngay từ đầu đã được thiết kế để ghi nhật ký. Năm 2001, nó được thêm vào nhánh chính của kernel 2.4 và trở thành hệ thống tệp ghi nhật ký đầu tiên xuất hiện trong Linux. Phương pháp chính của nhật ký là tổ chức. Hỗ trợ mở rộng kích thước hệ thống tệp nhanh chóng. ReiserFS cũng hỗ trợ nén chất thảiđể giảm phân mảnh một cách linh hoạt, cho phép nó hoạt động tốt hơn ext3fs khi làm việc với các tệp nhỏ.

ReiserFS (còn gọi là ReiserFS v3) sử dụng nhiều cách tiếp cận hiện đại, ví dụ B+-cây. Định dạng hệ thống tệp dựa trên một cây B+ duy nhất, giúp cho các hoạt động tìm kiếm trở nên đặc biệt nhanh chóng và có thể mở rộng. Chính sách di chuyển nhật ký vào đĩa phụ thuộc vào kích thước nhật ký và dựa trên số khối cần di chuyển.

Danh tiếng của ReiserFS đã bị tổn hại nhiều lần: gần đây nhất là do vấn đề của tác giả hệ thống với luật pháp ( thông tin chi tiết xem phần).

Tương lai của hệ thống tệp được ghi nhật ký

Sau khi đã xem các hệ thống tệp được ghi nhật ký của hiện tại và quá khứ, chúng ta hãy xem tương lai sẽ ra sao (và điều gì không).

Reiser4

Sau khi đưa thành công ReiserFS vào kernel và được sử dụng ở nhiều Bản phân phối Linux Namesys (công ty đứng sau ReiserFS) đã bắt đầu làm việc trên một hệ thống tệp nhật ký mới, Reiser4, được xây dựng hoàn toàn từ đầu và bao gồm nhiều tính năng nâng cao.

Việc ghi nhật ký trong Reiser4 được cải thiện bằng cách sử dụng tính năng ghi lang thang và trì hoãn phân bổ khối cho đến khi dữ liệu nhật ký được di chuyển (như đã được thực hiện trong XFS). Kiến trúc Reiser4 bao gồm hỗ trợ plugin linh hoạt (ví dụ: để thêm chức năng nén hoặc mã hóa), nhưng ý tưởng này đã bị cộng đồng Linux từ chối vì họ tin rằng các tính năng nâng cao này thuộc về hệ thống con hệ thống tệp ảo (VFS).

Sau bản cáo trạng của chủ sở hữu Namesys và đồng thời là tác giả của ReiserFS, mọi hoạt động thương mại xung quanh Reiser4 đều bị đình chỉ.

Hệ thống tập tin mở rộng thứ tư

Hệ thống tệp mở rộng thứ tư (ext4fs) là phát triển hơn nữa ext3fs. Ext4fs được dự định thay thế cho ext3fs, tương thích tiến và lùi, nhưng bao gồm nhiều cải tiến (một số trong đó phá vỡ tính tương thích này). Trong thực tế, bạn có thể gắn phân vùng ext4 thành ext3 và ngược lại.

Đầu tiên, ext4fs là một hệ thống tệp 64 bit có hỗ trợ dung lượng lớn (lên tới 1 exabyte). Nó cũng có thể sử dụng phạm vi, nhưng trong trường hợp này nó mất khả năng tương thích với ext3fs. Tương tự như XFS và Reiser4, ext4fs trì hoãn việc đặt khối trên đĩa và xảy ra khi cần thiết (giúp giảm phân mảnh). Nhật ký cũng lưu trữ tổng kiểm tra nội dung để có độ tin cậy cao hơn. Thay vì cây B+- hoặc B*-tree, một loại cây B đặc biệt được gọi là cây B. cây H, cho phép các thư mục con có nhiều hơn nữa kích thước lớn hơn(trong ext3 nó bị giới hạn ở 32Kb).

Mặc dù việc phân bổ lười biếng làm giảm sự phân mảnh nhưng theo thời gian, hệ thống tập tin size lớn vẫn là những mảnh vỡ. Để giải quyết vấn đề này, tiện ích e4defrag đã được phát triển, tiện ích này có thể được sử dụng để chống phân mảnh tập tin riêng biệt hoặc toàn bộ hệ thống tập tin.

Một điểm khác biệt thú vị khác giữa ext4fs và ext3fs là độ chính xác của dấu thời gian của tệp. Trong ext3, kích thước dấu thời gian là một giây. Ext4fs hướng tới tương lai: với sự tăng trưởng liên tục về tốc độ và giao diện bộ xử lý, hơn thế nữa đo lường chính xác. Do đó, một nano giây được lấy làm thứ nguyên thời gian.

Mặc dù ext4fs được bao gồm trong nền tảng Linux trong phiên bản 2.6.19, nó có thể được coi là ổn định. Hệ thống này vẫn đang được phát triển và là điểm khởi đầu cho hệ thống tệp ghi nhật ký trong tương lai trên Linux.

Tiếp tục

Hệ thống tệp được ghi nhật ký cung cấp độ tin cậy và khả năng bảo vệ chống hỏng dữ liệu trong trường hợp hệ thống gặp sự cố hoặc mất điện. Ngoài ra, thời gian khôi phục trong các hệ thống như vậy nhanh hơn nhiều so với các hệ thống tệp truyền thống (ví dụ: các hệ thống sử dụng fsck). Việc phát triển các phương pháp ghi nhật ký mới dựa trên cả kinh nghiệm trước đây đến từ JFS và XFS, cũng như việc tìm kiếm các thuật toán và cấu trúc mới. Không hoàn toàn rõ ràng hệ thống tệp được ghi nhật ký sẽ phát triển như thế nào trong tương lai, nhưng tính hữu dụng của chúng là rõ ràng và chúng đã trở thành tiêu chuẩn mới cho hệ thống tệp.

NTFS là một hệ thống có khả năng chịu lỗi, có thể dễ dàng tự khôi phục về trạng thái chính xác trong hầu hết mọi trường hợp xảy ra lỗi thực sự. Bất kỳ hệ thống tập tin hiện đại nào cũng dựa trên khái niệm về giao dịch- một hành động được thực hiện hoàn toàn và chính xác hoặc không hề được thực hiện. NTFS đơn giản là không có trạng thái trung gian (sai hoặc không chính xác) - lượng thay đổi dữ liệu không thể được chia thành trước và sau lỗi, dẫn đến sự phá hủy và nhầm lẫn - nó bị cam kết hoặc bị hủy bỏ.

Ví dụ 1: dữ liệu được ghi vào đĩa. Đột nhiên, hóa ra không thể ghi vào nơi mà chúng tôi vừa quyết định ghi phần dữ liệu tiếp theo - thiệt hại vật lý trên bề mặt. Hành vi của NTFS trong trường hợp này khá logic: giao dịch ghi được khôi phục hoàn toàn - hệ thống nhận ra rằng việc ghi không được thực hiện. Vị trí được đánh dấu là không thành công và dữ liệu được ghi vào vị trí khác - một giao dịch mới bắt đầu.

Ví dụ 2: Một trường hợp phức tạp hơn là khi dữ liệu được ghi vào đĩa. Đột nhiên, nguồn bị tắt và hệ thống khởi động lại. Việc ghi dừng ở giai đoạn nào, ở đâu có dữ liệu và ở đâu không? Một cơ chế hệ thống khác được giải cứu - nhật ký giao dịch. Thực tế là hệ thống, nhận ra mong muốn ghi vào đĩa, đã đánh dấu trạng thái này trong siêu tệp $LogFile. Khi khởi động lại, tệp này sẽ được kiểm tra để tìm sự hiện diện của các giao dịch chưa hoàn thành bị gián đoạn do tai nạn và kết quả của nó là không thể đoán trước - tất cả các giao dịch này đều bị hủy: nơi thực hiện ghi được đánh dấu lại là các phần tử miễn phí, chỉ mục và MFT được đưa trở lại trạng thái trước khi thất bại và toàn bộ hệ thống vẫn ổn định. Chà, điều gì sẽ xảy ra nếu xảy ra lỗi khi ghi vào nhật ký? Cũng không sao: giao dịch chưa bắt đầu (chỉ có nỗ lực ghi lại ý định thực hiện) hoặc nó đã kết thúc - nghĩa là có nỗ lực ghi lại rằng giao dịch thực sự đã được thực hiện hoàn thành. Trong trường hợp sau, ở lần khởi động tiếp theo, bản thân hệ thống sẽ hoàn toàn hiểu rằng trên thực tế, mọi thứ đều được viết chính xác và sẽ không chú ý đến giao dịch “chưa hoàn thành”.

Tuy nhiên, hãy nhớ rằng ghi nhật ký không phải là thuốc chữa bách bệnh tuyệt đối mà chỉ là phương tiện để giảm đáng kể số lượng lỗi và lỗi hệ thống.

Kinh nghiệm cho thấy rằng NTFS được khôi phục về trạng thái hoàn toàn chính xác ngay cả trong trường hợp xảy ra lỗi trong những thời điểm rất bận rộn với hoạt động của đĩa. Bạn thậm chí có thể tối ưu hóa ổ đĩa và nhấn đặt lại ở giữa quá trình này - khả năng mất dữ liệu ngay cả trong trường hợp này sẽ rất thấp. Tuy nhiên, điều quan trọng là phải hiểu rằng hệ thống Phục hồi NTFSđảm bảo tính đúng đắn hệ thống tập tin, không phải dữ liệu của bạn. Nếu bạn đang ghi vào đĩa và gặp sự cố, dữ liệu của bạn có thể không được ghi nhưng luôn có bản sao của nó.

Nén

Các tệp NTFS có một thuộc tính khá hữu ích - "nén". Thực tế là NTFS có tích hợp sẵn tính năng hỗ trợ nén đĩa - thứ mà trước đây bạn phải sử dụng Stacker hoặc DoubleSpace. Bất kỳ tệp hoặc thư mục nào cũng có thể được lưu trữ riêng lẻ trên đĩa ở dạng nén - quá trình này hoàn toàn minh bạch đối với các ứng dụng. Nén tệp có tốc độ rất cao và chỉ có một thuộc tính tiêu cực lớn - sự phân mảnh ảo rất lớn của các tệp nén, tuy nhiên, điều này không thực sự làm phiền bất kỳ ai. Quá trình nén được thực hiện theo khối gồm 16 cụm và sử dụng cái gọi là “cụm ảo” - một lần nữa, cực kỳ giải pháp linh hoạt, cho phép đạt được hiệu ứng thú vị- ví dụ: một nửa tệp có thể được nén nhưng một nửa thì không. Điều này đạt được là do việc lưu trữ thông tin về việc nén các đoạn nhất định rất giống với việc phân mảnh tệp thông thường: ví dụ: một bản ghi điển hình về bố cục vật lý cho một tệp thực, không nén:

cụm tệp từ 1 đến 43 được lưu trữ trong cụm đĩa bắt đầu từ 400

cụm tệp từ 44 đến 52 được lưu trữ trong cụm đĩa bắt đầu từ 8530...

Bố cục vật lý của một tệp nén điển hình:

cụm tệp từ 1 đến 9 được lưu trữ trong cụm đĩa bắt đầu từ 400

cụm tệp 10 đến 16 không được lưu trữ ở bất cứ đâu

cụm tệp từ 17 đến 18 được lưu trữ trong cụm đĩa bắt đầu từ 409

cụm tệp từ 19 đến 36 không được lưu trữ ở bất cứ đâu

Rõ ràng là tập tin nén có các cụm "ảo", thông tin thật trong đó không có. Ngay khi hệ thống nhìn thấy các cụm ảo như vậy, nó sẽ hiểu ngay rằng dữ liệu từ khối trước đó, bội số của 16, phải được giải nén và dữ liệu kết quả sẽ chỉ lấp đầy các cụm ảo - trên thực tế, đó là toàn bộ thuật toán .

Tại công việc thường xuyên hệ thống tệp, tất cả các thay đổi thường được thực hiện ngay lập tức đối với đĩa (hay đúng hơn là đối với bộ nhớ đệm trên đĩa trong hệ điều hành, nhưng điều này không quan trọng trong bối cảnh này).


Nhiều thao tác yêu cầu thay đổi đồng thời một số cấu trúc hệ thống tệp ( metadata. Một ví dụ đơn giản: khi tạo một liên kết cứng, bạn cần đồng thời tăng số lượng liên kết đến inode và thay đổi nội dung của thư mục chứa liên kết đó, bạn không thể chỉ thực hiện một trong các thao tác này - nội dung của hệ thống tập tin sẽ không chính xác.


Trong quá trình vận hành hệ thống tệp thông thường, một thao tác phức tạp như vậy luôn được thực hiện toàn bộ trừ khi mã triển khai hệ thống tệp chứa lỗi nghiêm trọng. Tuy nhiên, nếu có hiện tượng khởi động lại bất thường hoặc lỗi phần cứng tình huống này là rất thực tế.


Vì sau khi khởi động lại, chúng tôi không biết thao tác nào đã được thực hiện, thao tác nào chưa hoàn thành mà chúng tôi chỉ biết rằng đĩa không được ngắt kết nối chính xác (trong trường hợp này cái gọi là cờ bẩn được đặt lại), chúng tôi cần phân tích hệ thống tệp trên toàn bộ đĩa và do đó, xác định tất cả các lỗi trong hệ thống tệp và sửa chúng. Đương nhiên, không phải lúc nào cũng có thể thực hiện việc này một cách tự động (than ôi, trí thông minh phi tự nhiên, chưa ai có thể dạy khả năng thấu thị), do đó, fsck.ext2 tương tự sau khi khởi động lại bất thường có thể yêu cầu can thiệp thủ công.


Những người đã chạy fsck trên phân vùng 100-200 G (ngày nay không còn phổ biến nữa) hiểu rất rõ rằng có rất ít niềm vui trong việc này. Quản trị viên của mảng nhiều terabyte, để có thêm một phút rảnh rỗi, họ có thể “vô tình” bị đứt đầu trước từ fsck, chộp lấy cây nữ lang hoặc yêu cầu không chửi thề bằng những từ như vậy trước mặt họ.


Để giải quyết vấn đề này, một ý tưởng tuyệt vời đã được phát minh ra từ lâu (nếu ai biết khi nào và bởi ai, vui lòng cho tôi biết) - lúc đầu ghi một số mô tả về hoạt động đã lên kế hoạch vào đĩa và chỉ sau đó mới thực hiện nó. Sau đó, bạn có thể không kiểm tra tính chính xác của toàn bộ đĩa mà chỉ hạn chế xem nội dung của nhật ký và nếu thao tác chưa hoàn thành thì hãy khôi phục lại. Để thực hiện việc này, bạn không cần phải chạy fsck - việc này được thực hiện bởi chính trình điều khiển hệ thống tệp.


Tóm lại, điều duy nhất mà hệ thống tệp được ghi nhật ký có thể và nên làm là tiết kiệm thời gian trên fsck. Theo đó, tính nhất quán của siêu dữ liệu hệ thống tập tin được đảm bảo, không hơn, không kém.


Cái giá của niềm vui này: chúng ta có một vùng đĩa nhỏ (thường được tính bằng hàng chục megabyte), chiếm tải tối đa, đó là hiệu suất tối đa, được đo bằng số thao tác vào/ra mỗi giây, đang giảm. Vâng, tất nhiên, một ít được chi tiêu không gian đĩa, đó là trong thời đại giá đĩa< 1$/гигабайт никого не волнует.

Đăng nhập vào dữ liệu

Như bạn đã nhận thấy, các thao tác với siêu dữ liệu thường được ghi vào nhật ký. Tuy nhiên, bạn có thể làm tương tự với dữ liệu.


Theo tôi biết, chỉ ext3 với tham số data=journal mới có thể thực hiện ghi dữ liệu trên Linux.


Tất nhiên, việc ghi dữ liệu trong nhiều trường hợp làm giảm hiệu suất phần nào (nhưng không phải tất cả; trên trang web IBM có kết quả kiểm tra theo đó việc sử dụng ghi dữ liệu cho các hệ thống tệp chứa cơ sở dữ liệu thậm chí có thể tăng hiệu suất).


Tuy nhiên, công cụ này cũng không đảm bảo an toàn dữ liệu theo kinh nghiệm của tôi kinh nghiệm cá nhân sử dụng ext3 với data=journal là hệ thống tệp đáng tin cậy nhất.

Hiệu suất

Một người đọc chú ý có thể sẽ nhận thấy rằng việc sử dụng nhật ký sẽ tạo ra tải không đồng đều trên đĩa - một phần nhỏ (so với kích thước tổng thể hệ thống tập tin) chiếm số lượng hoạt động không cân xứng.


Có hai giải pháp rất thú vị:
Đầu tiên, bạn có thể mang tạp chí đến đĩa riêng(hầu hết các hệ thống tệp đều cho phép điều này), kết quả là chúng tôi tăng gấp đôi hiệu suất một cách hiệu quả bằng cách chỉ thêm một đĩa. Nó trông đặc biệt tuyệt vời khi hiệu suất của một mảng RAID khổng lồ được tăng lên theo cách đơn giản và rẻ tiền như vậy.


Thứ hai, bạn có thể sử dụng thẻ đặc biệt bộ nhớ không bay hơi(ví dụ: UMEM, than ôi, tôi chưa thấy bán ở Nga), cũng nhanh hơn đáng kể so với các đĩa thông thường (nhưng có kích thước bộ nhớ nhỏ).


Ngoài ra còn có một giải pháp hoàn toàn xa hoa mà tôi chưa thử - viết nhật ký trên một thiết bị khối nằm trong bộ nhớ. Tất nhiên, sau khi khởi động lại, hệ thống tệp như vậy sẽ cần phải được tạo lại, nhưng đối với dữ liệu tạm thời, điều này có thể mang lại hiệu suất tăng lên đáng chú ý và đáng chú ý. Đặc biệt là khi ghi dữ liệu, không chỉ siêu dữ liệu.

Thủ thuật

Như bạn đã thấy, băng đạn cũng có thể giúp tăng tốc độ. Có một vài thủ thuật khéo léo hơn mà hệ thống tệp nhật ký có thể sử dụng để tiếp tục độ phóng đại cao hơn hiệu suất:

  • việc tạo tệp bị trì hoãn (tại thời điểm tạo tệp, không tạo ngay một mục nhập trong thư mục mà chỉ giữ nó trong nhật ký một thời gian; có thể tệp này chỉ là tạm thời và sẽ bị xóa ngay lập tức);
  • việc phân bổ tệp bị trì hoãn (không phân bổ không gian vật lý ngay cả cho khối đầu tiên của tệp cho đến khi bạn cần ghi ít nhất một khối), rất có thể người dùng sẽ thay đổi kích thước tệp trước và chỉ sau đó mới bắt đầu ghi dữ liệu. Kết quả là sự phân mảnh giảm đi (nếu chương trình sử dụng thủ thuật này);

Đây là những cách đơn giản nhất, còn có nhiều thủ thuật nhỏ khác cho phép hệ thống tệp được ghi nhật ký hoạt động nhanh hơn hệ thống tệp thông thường mà vẫn đáng tin cậy hơn.

sai sót

Như tôi đã nói, nhật ký không phải là thuốc chữa bách bệnh và dữ liệu hoàn toàn không lưu được. Tuy nhiên, nhiều người có cảm giác an toàn sai lầm khi sử dụng hệ thống tệp được ghi nhật ký - tất nhiên, bạn có thể khởi động lại máy bằng cách đặt lại máy và thậm chí máy sẽ không chửi thề khi tải!


Vâng, anh ấy sẽ không chửi thề. Và nó sẽ hoàn toàn chính xác theo quan điểm của một số hệ thống tệp fsck. Chỉ dữ liệu có thể vẫn chỉ còn lại các mẩu tin lưu niệm.


Hãy nói reiserfs trong tình huống tương tự Nó cũng có thể để lại rác trong các tệp đã sửa đổi (dữ liệu tùy ý nằm trong khối được phân bổ cho tệp). Về bản chất, điều này có nghĩa là rất có thể xảy ra rò rỉ thông tin do vô tình.


XFS hoạt động chính xác hơn - nó ghi các khối như vậy dưới dạng số không. Điều này thường gây sốc cho người dùng. Đặc biệt là những người hâm mộ reiserfs, những người sẽ không viết số không.


Kết quả là, reiserfs có nhiều khả năng sẽ cứu sửa đổi và XFS sẽ cố gắng hết sức để tránh rác trong tệp và rò rỉ dữ liệu - chỉ là các chiến lược hơi khác nhau. Kết quả là như nhau - dữ liệu có thể bị mất và thậm chí bạn không biết về điều đó. Cho đến khi bạn bắt gặp một tập tin mà không ai chạm vào trong một năm (nó nằm trong kho lưu trữ) và đột nhiên nó chứa đầy rác hoặc số không.


ext3 khi bật tính năng ghi dữ liệu sẽ không gặp phải các tính năng như vậy. Tuy nhiên, nó giảm đáng kể về hiệu suất.


Theo một cách tốt, tất cả những vấn đề này có thể (và nên) tránh được chỉ bằng cách mua UPS và tốt hơn là sử dụng tính năng ghi nhật ký như một mức độ tin cậy bổ sung và một phương tiện để tăng năng suất.

Điểm mấu chốt

Một hệ thống tập tin được ghi nhật ký giúp việc quản lý dễ dàng hơn một chút, nhưng không phải vậy. phương thuốc kỳ diệu khỏi mất dữ liệu do khởi động lại bất thường. Vì vậy, nếu bạn không sử dụng UPS và không thực hiện Backup thì sớm muộn gì dữ liệu của bạn cũng sẽ bị bao phủ bởi một chiếc chậu đồng, điều mà tôi thực lòng KHÔNG mong muốn cho bạn. Và nếu muốn, bạn có thể sử dụng hệ thống tệp được ghi nhật ký như một phương tiện để tăng năng suất.


Ai đã mua UPS Và sao lưu khiến dữ liệu đó luôn nguyên vẹn


(C) Denis Smirnov 5 tháng 11 năm 2004
Đặt tài liệu này trên các tài nguyên Internet khác, cũng như trong ấn phẩm in không cho phép.

Hệ thống tập tin được ghi nhật ký là một lớp các hệ thống tập tin đặc trưng trong đó - duy trì một nhật ký lưu trữ danh sách các thay đổi, ở mức độ này hay mức độ khác, giúp duy trì tính toàn vẹn của hệ thống tệp.

Việc chạy kiểm tra hệ thống (chẳng hạn như fsck) trên các hệ thống tệp lớn có thể mất nhiều thời gian, điều này rất tệ đối với các hệ thống tốc độ cao ngày nay. Lý do thiếu tính toàn vẹn trong hệ thống tệp có thể là do việc ngắt kết nối không chính xác, chẳng hạn như nếu đĩa được ghi vào thời điểm chấm dứt. Ứng dụng có thể cập nhật dữ liệu chứa trong tệp và hệ thống có thể cập nhật siêu dữ liệu hệ thống tệp, đó là "dữ liệu về dữ liệu hệ thống tệp", nói cách khác, thông tin về khối nào được liên kết với tệp nào, tệp nào nằm trong thư mục nào, và những thứ tương tự. Lỗi (thiếu tính toàn vẹn) trong tệp dữ liệu là xấu, nhưng tệ hơn nhiều là lỗi trong siêu dữ liệu hệ thống tệp, có thể dẫn đến mất tệp và các sự cố nghiêm trọng khác.

Để giảm thiểu các vấn đề về tính toàn vẹn và giảm thiểu thời gian khởi động lại hệ thống, hệ thống tệp được ghi nhật ký sẽ duy trì một danh sách các thay đổi mà nó sẽ thực hiện đối với hệ thống tệp trước khi thực sự ghi các thay đổi. Những bản ghi này được lưu trữ trong một phần riêng biệt của hệ thống tệp được gọi là “nhật ký” hoặc “nhật ký”. Khi các thay đổi của hệ thống tệp được ghi nhật ký một cách an toàn, hệ thống tệp được ghi nhật ký sẽ áp dụng những thay đổi đó cho tệp hoặc siêu dữ liệu, sau đó xóa các mục nhập đó khỏi nhật ký. Các mục nhật ký được sắp xếp thành các tập hợp các thay đổi hệ thống tệp có liên quan, giống như cách các thay đổi được thêm vào cơ sở dữ liệu được sắp xếp thành các giao dịch.

Việc có nhật ký sẽ tăng khả năng duy trì tính toàn vẹn của hệ thống tệp vì các mục nhập tệp nhật ký được thực hiện trước khi thực hiện các thay đổi thực tế và các mục nhập này được giữ lại cho đến khi chúng được áp dụng đầy đủ và an toàn. Khi máy tính được khởi động lại, chương trình gắn kết có thể đảm bảo tính toàn vẹn của hệ thống tệp được ghi nhật ký bằng cách chỉ cần kiểm tra tệp nhật ký để tìm những thay đổi được mong đợi nhưng không được thực hiện, sau đó ghi chúng vào hệ thống tệp. Cái đó. Với nhật ký, trong hầu hết các trường hợp, hệ thống không cần kiểm tra tính toàn vẹn của hệ thống tệp, điều đó có nghĩa là máy tính sẽ sẵn sàng hoạt động gần như ngay lập tức sau khi khởi động lại. Theo đó, khả năng mất dữ liệu do sự cố trong hệ thống tệp sẽ giảm đáng kể.

Có một số hệ thống tệp nhật ký có sẵn trên Linux. Nổi tiếng nhất trong số họ:

    XFS, một hệ thống tệp nhật ký được phát triển bởi Silicon Graphics nhưng hiện đã được phát hành mã nguồn mở(mã nguồn mở);

    ReiserFS, một hệ thống tệp ghi nhật ký được thiết kế dành riêng cho Linux;

    JFS, một hệ thống tệp nhật ký ban đầu được IBM phát triển nhưng hiện được phát hành dưới dạng nguồn mở;

    xt3 là phần mở rộng được ghi nhật ký của hệ thống tệp ext2 được sử dụng trên hầu hết các phiên bản GNU/Linux. Tính năng độc đáo hệ thống ext3 - khả năng chuyển sang hệ thống ext2 mà không cần định dạng lại đĩa. Được phát triển bởi Tiến sĩ Stephan Tweedie.

    Trong họ hệ điều hành Microsoft WindowsĐã ghi nhật ký bao gồm tập tin hệ thống NTFS. Trong Mac OS X - HFS+.