NILFS2 - hệ thống tệp chống đạn cho /home

NILFS2 - hệ thống tệp chống đạn cho /home

Như bạn đã biết, nếu rắc rối có thể xảy ra thì chắc chắn nó sẽ xảy ra. Chắc hẳn ai cũng từng gặp trường hợp một tập tin quan trọng gần đây vô tình bị xóa hoặc văn bản vô tình bị chọn và hủy trong trình soạn thảo văn bản.

Nếu bạn là chủ sở hữu máy chủ lưu trữ hoặc trang web thì có thể bạn đã gặp phải trường hợp bị hack tài khoản người dùng hoặc trang web của mình. Trong những trường hợp như vậy, điều quan trọng là phải khôi phục trình tự thời gian, tìm ra phương thức xâm nhập và lỗ hổng mà kẻ tấn công sử dụng.

Hệ thống tệp NILFS2 hoàn hảo để giải quyết những vấn đề như vậy.

Nó đã có mặt trong nhân Linux kể từ phiên bản 2.6.30.

Điểm đặc biệt của hệ thống tệp này là nó tương tự như hệ thống kiểm soát phiên bản: bạn luôn có thể quay lại trạng thái của hệ thống và xem nó như thế nào trước đây.

Để cung cấp chức năng này, bạn không cần định cấu hình tập lệnh Cron, chụp ảnh nhanh, v.v. Hệ thống tệp NILFS2 tự thực hiện tất cả việc này. Nó không bao giờ ghi đè lên dữ liệu cũ và luôn ghi vào các vùng mới của đĩa nếu có đủ dung lượng đĩa trống. Hoàn toàn phù hợp với nguyên tắc Copy-on-Write.

Trên thực tế, bất kỳ thay đổi nào đối với tệp sẽ tự động tạo ảnh chụp nhanh mới của hệ thống tệp, do đó bạn có thể sử dụng FS này làm cỗ máy thời gian và tua lại trạng thái của tệp.

Câu chuyện

NILFS2 - hệ thống tệp chống đạn cho /homeNILFS2 được phát triển ở độ sâu của Tập đoàn Điện thoại và Điện báo Nippon, trên thực tế, là công ty nhà nước (có cổ phần kiểm soát) và là công ty viễn thông lớn nhất Nhật Bản. Cụ thể hơn, tại Phòng thí nghiệm Không gian mạng dưới sự lãnh đạo Ryusuke Konishi.

Vẫn chưa biết chính xác nó được phát triển để làm gì, tuy nhiên, có thể giả định rằng một FS như vậy, với chức năng “cỗ máy thời gian”, rất lý tưởng để lưu trữ dữ liệu mà các cơ quan tình báo có thể muốn khai thác để phát lại toàn bộ bức tranh về SMS, email, v.v....

NILFS2 cũng có khả năng là một công cụ rất có giá trị cho các dịch vụ bảo mật nội bộ, vì nó cho phép bạn khôi phục tất cả các chữ cái đã xóa trong cơ sở dữ liệu thư, tiết lộ những thông tin lộn xộn của những nhân viên mà sau đó có thể cố gắng ngụy trang chúng bằng cách xóa hoặc thay đổi tệp của họ.

Làm thế nào bạn có thể theo dõi toàn bộ lịch sử thư từ của mình?Trên các máy chủ Linux (và đây là nơi nên cài đặt NILFS2 vì mục đích bảo mật nội bộ), phương thức lưu trữ email rất thường được sử dụng để lưu trữ email. Cái gọi là định dạng Thư mục. Đủ để đặt Máy chủ thư chuyển phát nhanh và định cấu hình lưu trữ thư trong Maildir. Định dạng khác mbox là một tệp văn bản lớn có thể dễ dàng phân tích thành các tin nhắn riêng lẻ.

Nếu máy chủ thư sử dụng cơ sở dữ liệu thì NILFS2 sẽ có thể khôi phục thời gian chính xác của các thay đổi cơ sở dữ liệu và khả năng khôi phục cơ sở dữ liệu tại bất kỳ thời điểm nào trong số này. Và sau đó bạn cần sử dụng các công cụ cơ sở dữ liệu để xem có gì trong đó vào thời điểm đó...

Tuy nhiên, đã xảy ra sự cố. Hoặc chính phủ Nhật Bản đã thay đổi ý định về việc giám sát tất cả mọi người (theo nguyên tắc Yarovaya), hoặc hiệu suất của NILFS2 trên các ổ cứng HDD truyền thống hóa ra là dưới mức trung bình và NILFS2 đã được phát hành theo giấy phép GPL và rất nhanh chóng được đưa vào nhân Linux, kể từ đó không có phàn nàn cụ thể nào về mã được viết bằng tiếng Nhật có trình độ cao, các nhà phát triển nhân Linux không có nó.

NILFS2 như thế nào?

Từ quan điểm sử dụng: trên hệ thống kiểm soát phiên bản SVN. Mỗi điểm kiểm tra FS là một cam kết được thực hiện tự động mà người dùng không hề biết bất cứ khi nào có bất kỳ thay đổi nào: có thể là xóa, thay đổi nội dung của tệp hoặc thay đổi quyền truy cập. Mỗi cam kết có một số tăng tuyến tính.

Từ quan điểm của một lập trình viên: một bộ đệm tròn. Hệ thống tệp tích lũy các thay đổi và ghi chúng vào một đoạn có dung lượng xấp xỉ 8 MB (2000 * 4096, trong đó 2000 là số phần tử trong khối và 4096 là kích thước của trang bộ nhớ). Toàn bộ đĩa được chia thành các phần như vậy. Việc ghi âm diễn ra tuần tự. Khi hết dung lượng trống, các ảnh chụp nhanh cũ nhất sẽ bị xóa và các đoạn bị ghi đè.

Các tính năng cơ bản của NILFS2

  • Phiên bản !!!
  • Quy trình khôi phục hệ thống tệp sau khi xảy ra lỗi rất đơn giản: khi tải, đoạn cuối cùng có tổng kiểm tra chính xác sẽ được tìm kiếm và siêu khối được cài đặt trên đó. Đây là một hoạt động gần như ngay lập tức.
  • Do quá trình ghi luôn diễn ra tuyến tính nên:
    • có thể hiển thị kết quả tốt khi chạy trên ổ SSD với tốc độ ghi ngẫu nhiên chậm.
    • NILFS2 tiết kiệm tài nguyên SSD vì hầu như không có hệ số nhân ghi.
      Chính xác hơn là không quá 2.Thực tế là khi ghi lại toàn bộ đĩa theo chu kỳ, NILFS2 sẽ chuyển dữ liệu không thể thay đổi sang các phần (khối) mới.

      Nếu chúng ta có 10% dữ liệu không thay đổi trên đĩa thì chúng ta sẽ tăng 10% khả năng ghi sau 1 lần ghi lại hoàn toàn. Chà, mức tăng 50% khi mức đầy 50% của thiết bị cho 1 lần ghi lại toàn bộ đĩa.

      Mức tăng ghi tối đa là 2. Đây là mức rất thấp vì mọi thứ đều được viết tuần tự. Nhìn chung, hoạt ảnh ghi sẽ ít hơn hoạt ảnh của hệ thống tệp bị phân mảnh thông thường có cung 4096 byte. (Suy nghĩ lấy cảm hứng từ bình luận).

  • Tiềm năng dễ dàng thực hiện sao chép sang NILFS2 FS từ xa

NILFS2 cho /nhà

Trong các hệ điều hành giống Unix, theo quy luật, có một thư mục /home để lưu trữ dữ liệu người dùng. Nhiều chương trình khác nhau lưu cài đặt dành riêng cho người dùng của họ trong thư mục này.

Và ai, nếu không phải là người dùng, thường mắc lỗi nhất? Vì vậy, như người ta nói, chính Chúa đã ra lệnh sử dụng NILFS2 trên /home.

Hơn nữa, với việc sử dụng rộng rãi SSD, giờ đây chúng ta không còn phải lo lắng về tình trạng sập nguồn nghiêm trọng khi sử dụng hệ thống tệp CoW.

Có, chúng tôi có thể tạo ảnh chụp nhanh FS bao nhiêu lần tùy thích trong ZFS và BTRFS, nhưng luôn có nguy cơ xảy ra thay đổi tệp bị mất giữa các ảnh chụp nhanh. Và những bức ảnh vẫn cần được quản lý: những bức ảnh cũ cần phải xóa đi. Trong NILFS2, tất cả điều này diễn ra tự động, cứ sau vài giây.

Tôi đã tạo một khối hợp lý bằng cách sử dụng lvcreate (trong nhóm khối lượng nvme, nhóm mỏng mỏng). Tôi khuyên bạn nên tạo nó trên ổ đĩa lvm vì sau này có thể dễ dàng mở rộng nó. Tôi khuyên bạn nên có 50% dung lượng đĩa trống với NILFS2 để có độ sâu phiên bản phù hợp.

lvcreate -V10G -T nvme/thin -n home

và định dạng nó trong NILFS2:

mkfs.nilfs2 -L nvme_home /dev/nvme/home

mkfs.nilfs2 (nilfs-utils 2.1.5)
Start writing file system initial data to the device
      Blocksize:4096  Device:/dev/nvme/home1  Device Size:10737418240
File system initialization succeeded !!

Sau này, bạn cần sao chép tất cả dữ liệu từ /home.

Tôi đã làm điều này ngay sau khi khởi động máy tính, trước khi đăng nhập vào tài khoản của mình với tư cách là người dùng root. Nếu tôi đăng nhập với tư cách người dùng của mình, một số chương trình sẽ mở ổ cắm và tệp trong thư mục/home/người dùng của người dùng, điều này sẽ gây khó khăn cho việc sao chép sạch. Như bạn đã biết, thư mục chính cho người dùng root thường nằm trên đường dẫn /root, do đó sẽ không có tệp nào mở trên phân vùng /home.

mkdir /mnt/newhome
mount -t nilfs2 /dev/nvme/home /mnt/newhome
cp -a /home/. /mnt/newhome

Đối với dòng cuối cùng, xem Bài viết.

Tiếp theo chúng ta chỉnh sửa /etc/fstab, trong đó hệ thống tập tin cho /home được gắn kết, thành

/dev/disk/by-label/nvme_home /home nilfs2    noatime 0 0

Lựa chọn noatime cần thiết để cải thiện hiệu suất để thời gian không thay đổi sau mỗi lần truy cập tệp. Tiếp theo chúng ta khởi động lại.

Các loại hình ảnh trong NILFS2.

Một ảnh chụp nhanh thông thường không có khả năng xóa được gọi là điểm kiểm tra hoặc điểm khôi phục.
Ảnh chụp nhanh được bảo vệ khỏi tính năng tự động xóa được gọi là ảnh chụp nhanh, sau đó chỉ đơn giản là ảnh chụp nhanh.

Việc xem điểm kiểm tra được thực hiện bằng lệnh lscp

Xem ảnh chụp nhanh lscp -s

Chúng tôi có thể tự tạo ảnh chụp nhanh và điểm kiểm tra bất kỳ lúc nào bằng cách sử dụng:

mkcp [-s] устройство

Chúng tôi khôi phục dữ liệu.

NILFS cho phép chúng tôi gắn bao nhiêu ảnh chụp nhanh cũ tùy thích song song với việc làm việc với nhánh FS chính. Nhưng chỉ ở chế độ đọc.

Mọi thứ đều được sắp xếp như thế này. Các điểm kiểm tra thông thường mà NILFS2 tạo ra có thể tự động bị xóa bất cứ lúc nào (khi hết dung lượng ổ đĩa hoặc theo quy tắc nilfs_cleanerd), vì vậy trước khi cài đặt, chúng ta phải chuyển điểm kiểm tra thành ảnh chụp nhanh hoặc nói tiếng Nga là chụp ảnh chụp nhanh.

chcp ss номер_чекпоинта

Sau đó, chúng ta có thể gắn ảnh chụp nhanh, ví dụ như thế này:

mount -t nilfs2 -r -o cp=номер_чекпоинта /dev/nvme/home /mnt/nilfs/номер_чекпоинта

Sau đó, chúng tôi sao chép các tệp đã khôi phục từ ảnh chụp nhanh vào /home.
Và sau đó, chúng tôi xóa cờ không xóa khỏi ảnh chụp nhanh để trong tương lai, trình thu gom rác tự động có thể xóa dữ liệu lỗi thời:

chcp cp номер_чекпоинта

Tiện ích cho NILFS2

Nhưng đây là vấn đề. Có, tất nhiên, chúng ta có thể tạo một hệ thống tệp, thay đổi kích thước của nó trực tuyến, xem danh sách các điểm thử thách, tạo và xóa chúng. Gói nilfs2-utils cung cấp bộ trang bị tối giản dành cho quý ông.

Vì NTT đã cắt giảm nguồn tài trợ nên không có tiện ích cấp thấp nhanh nào cho phép bạn hiển thị lịch sử thay đổi tệp hoặc tạo sự khác biệt giữa các ảnh chụp nhanh.

Tiện ích n2u của tôi

Để lấp đầy khoảng trống này tôi đã viết tiện ích n2u của bạn, có thể hiển thị lịch sử thay đổi đối với một tệp/thư mục cụ thể:

n2u log filename

Đầu ra là một cái gì đó như thế này:

          CHECKPOINT        DATE     TIME     TYPE          SIZE  MODE
             1787552  2019-11-24 22:08:00    first          7079    cp
             1792659  2019-11-25 23:09:05  changed          7081    cp

Nó hoạt động khá nhanh đối với phương pháp triển khai đã chọn: nó tìm kiếm sự khác biệt giữa các tệp bằng phương pháp chia đôi, nhanh chóng gắn kết và so sánh tệp/thư mục trong các ảnh chụp nhanh khác nhau.

Bạn có thể đặt một loạt các điểm kiểm tra bằng phím -cp CP1:CP2 hoặc -cp {YEAR-MM-DD}:{YEAR-MM-DD}.

Bạn cũng có thể thấy sự khác biệt giữa các điểm kiểm tra cho một tệp hoặc thư mục cụ thể:

n2u diff -r cp1:cp2 filename

Bạn có thể hiển thị toàn bộ trình tự thời gian của các thay đổi: tất cả sự khác biệt giữa các điểm kiểm tra của một tệp/thư mục cụ thể:

n2u blame [-r cp1:cp2] filename

Khoảng thời gian trong lệnh này cũng được hỗ trợ.

Một tiếng kêu cho các nhà phát triển

Có rất nhiều chuyên gia về Habré. Vui lòng hoàn thành NILFS2. Tạo bản sao, khác biệt nhanh ở mức độ thấp giữa các bản sửa đổi, liên kết lại và các tính năng khác!

tài liệu tham khảo

Trang web chính thức của NILFS.

Kho lưu trữ:
NILFS2.
Các tiện ích và mô-đun NILFS2.

Bản tin:
Bản tin email dành cho nhà phát triển NILFS2. ID cho đăng ký linux-nilfs.
kho lưu trữ bản tin.

hướng dẫn thiết lập nilfs_cleanerd.
Đo điểm chuẩn các bài kiểm tra hiệu suất EXT4, Btrfs, XFS & NILFS2.

Cảm ơn:

  • Các nhà phát triển NILFS2: Ryusuke Konishi, Koji Sato, Naruhiko Kamimura, Seiji Kihara, Yoshiji Amagai, Hisashi Hifumi và Satoshi Moriai. Những người đóng góp chính khác là: Andreas Rohner, Dan McGee, David Arendt, David Smid, dexen deVries, Dmitry Smirnov, Eric Sandeen, Jiro SEKIBA, Matteo Frigo, Hitoshi Mitake, Takashi Iwai, Vyacheslav Dubeyko.
  • Cảm ơn Amblin Entertainment và Universal Pictures vì ​​một loạt phim tuyệt vời. "Trở về tương lai". Hình ảnh đầu tiên của bài đăng được lấy từ bộ phim “Trở về tương lai 3”.
  • Các công ty RUVDS để được hỗ trợ và có cơ hội xuất bản trên blog của bạn trên Habré.

PS Vui lòng gửi bất kỳ lỗi nào bạn nhận thấy trong một tin nhắn riêng tư. Tôi tăng nghiệp của mình cho việc này.

Bạn có thể thử nghiệm NILFS2 bằng cách đặt hàng một máy ảo từ RUVDS với phiếu giảm giá dưới đây. Đối với tất cả khách hàng mới, thời gian dùng thử miễn phí là 3 ngày.

NILFS2 - hệ thống tệp chống đạn cho /home

Nguồn: www.habr.com

Thêm một lời nhận xét