Mã hóa ZFS RAID và LUKS trong Linux


24

Tôi dự định thiết lập một bộ ổ đĩa 3x 2TB 7200rpm dưới dạng nhóm Z-RAID được mã hóa LUKS trong Linux (cho giải pháp NAS).

Sự hiểu biết của tôi về vấn đề hiện tại là cách duy nhất để đạt được điều này là luksFormatmọi thiết bị vật lý và sau đó lắp ráp một zpool ra khỏi các thùng chứa LUKS đã mở khóa.

Tôi có những mối quan tâm sau đây:

  • Nó sẽ không cản trở đáng kể hiệu suất viết? Trong thiết lập này, dữ liệu dư thừa được mã hóa nhiều lần vì LUKS không "biết" về Z-RAID. Trong LUKS-on-mdadm, dữ liệu giải pháp được mã hóa một lần và chỉ được ghi vào đĩa nhiều lần. CPU của tôi hỗ trợ Intel AES-NI.

  • ZFS sẽ nhận thức được các lỗi đĩa khi hoạt động trên các thùng chứa LUKS của trình ánh xạ thiết bị trái ngược với các thiết bị vật lý? Làm thế nào về sự trùng lặp và các tính năng ZFS khác?


4
Tôi sẽ không làm điều đó. Âm thanh dễ bị thất bại.
ewwhite

3
@MadHatter Vì đó là ZFS. Bạn không thể làm điều đó.
Michael Hampton

1
Tốt thôi (tôi sẽ tin lời bạn). Tạo một ZFS lớn duy nhất chứa một tệp lớn duy nhất, loopback gắn kết nó và mã hóa .
MadHatter hỗ trợ Monica

1
@eewhite Tôi chỉ đang tìm ra các tùy chọn để sử dụng mã hóa với ZFS trên Linux cho đến khi mô-đun hạt nhân ZFS tự thực hiện mã hóa. Nhưng tôi phải đồng ý - LUKS và ZFS dường như không hòa hợp với nhau.
MasterM

4
Không bao giờ, tạo một tệp lớn và lặp lại nó với ZFS. Bạn đã làm hỏng hồ bơi của mình đến một tốc độ không thể sử dụng được khi CoW hết dung lượng cho các hoạt động của nó.
Vinícius Ferrão

Câu trả lời:


27

Một trong những máy chủ mà tôi quản trị chạy loại cấu hình mà bạn mô tả. Nó có sáu ổ cứng 1TB với nhóm RAIDZ được mã hóa LUKS trên đó. Tôi cũng có hai ổ cứng 3TB trong máy nhân bản ZFS được mã hóa LUKS bị tráo đổi mỗi tuần để được đưa ra khỏi trang web. Máy chủ đã sử dụng cấu hình này trong khoảng ba năm và tôi chưa bao giờ gặp sự cố với nó.

Nếu bạn có nhu cầu về ZFS với mã hóa trên Linux thì tôi khuyên bạn nên thiết lập này. Tôi đang sử dụng ZFS-Fuse, không phải ZFS trên Linux. Tuy nhiên, tôi tin rằng sẽ không ảnh hưởng đến kết quả ngoài ZFS trên Linux có thể sẽ có hiệu suất tốt hơn so với thiết lập mà tôi đang sử dụng.

Trong thiết lập này, dữ liệu dư thừa được mã hóa nhiều lần vì LUKS không "biết" về Z-RAID. Trong LUKS-on-mdadm, dữ liệu giải pháp được mã hóa một lần và chỉ được ghi vào đĩa nhiều lần.

Hãy nhớ rằng LUKS không biết về RAID. Nó chỉ biết rằng nó đang ngồi trên một thiết bị khối. Nếu bạn sử dụng mdadm để tạo một thiết bị RAID và sau luksformatđó, thì đó là mdadm đang sao chép dữ liệu được mã hóa vào các thiết bị lưu trữ bên dưới, chứ không phải LUKS.

Câu hỏi 2.8 trong LUKS FAQ giải quyết việc mã hóa nên được đặt lên trên RAID hay ngược lại . Nó cung cấp sơ đồ sau.

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

Vì ZFS kết hợp chức năng RAID và hệ thống tập tin, giải pháp của bạn sẽ cần giống như sau.

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

Tôi đã liệt kê các phân vùng thô là tùy chọn vì ZFS hy vọng rằng nó sẽ sử dụng lưu trữ khối thô thay vì phân vùng. Mặc dù bạn có thể tạo zpool của mình bằng cách sử dụng các phân vùng, nhưng điều đó không được khuyến khích bởi vì nó sẽ thêm một cấp quản lý vô dụng và nó sẽ cần được tính đến khi tính toán phần bù của bạn sẽ được căn chỉnh cho phân vùng.

Nó sẽ không cản trở đáng kể hiệu suất viết? [...] CPU của tôi hỗ trợ Intel AES-NI.

Không nên có vấn đề về hiệu suất miễn là bạn chọn phương thức mã hóa được trình điều khiển AES-NI hỗ trợ. Nếu bạn có cryptsetup 1.6.0 hoặc mới hơn, bạn có thể chạy cryptsetup benchmarkvà xem thuật toán nào sẽ cung cấp hiệu suất tốt nhất.

Câu hỏi này về các tùy chọn được đề xuất cho LUKS cũng có thể có giá trị.

Cho rằng bạn có hỗ trợ mã hóa phần cứng, bạn có nhiều khả năng phải đối mặt với các vấn đề về hiệu suất do phân vùng sai.

ZFS trên Linux đã thêm thuộc ashifttính vào zfslệnh để cho phép bạn chỉ định kích thước cung cho các ổ đĩa cứng của bạn. Theo Câu hỏi thường gặp được liên kết, ashift=12sẽ cho bạn biết rằng bạn đang sử dụng các ổ đĩa có kích thước khối 4K.

Câu hỏi thường gặp về LUKS nói rằng phân vùng LUKS có căn chỉnh là 1 MB. Câu hỏi 6.12 và 6.13 thảo luận chi tiết về vấn đề này và cũng cung cấp lời khuyên về cách làm cho tiêu đề phân vùng LUKS lớn hơn. Tuy nhiên, tôi không chắc có thể làm cho nó đủ lớn để đảm bảo rằng hệ thống tệp ZFS của bạn sẽ được tạo trên ranh giới 4K. Tôi rất muốn nghe cách giải quyết vấn đề này cho bạn nếu đây là vấn đề bạn cần giải quyết. Vì bạn đang sử dụng ổ đĩa 2TB, bạn có thể không gặp phải vấn đề này.

ZFS sẽ nhận thức được các lỗi đĩa khi hoạt động trên các thùng chứa LUKS của trình ánh xạ thiết bị trái ngược với các thiết bị vật lý?

ZFS sẽ nhận thức được các lỗi đĩa khi nó có thể đọc và ghi cho chúng mà không gặp vấn đề gì. ZFS yêu cầu lưu trữ khối và không quan tâm hoặc biết về các chi tiết cụ thể của lưu trữ đó và nguồn gốc của nó. Nó chỉ theo dõi bất kỳ lỗi đọc, ghi hoặc tổng kiểm tra mà nó gặp phải. Tùy thuộc vào bạn để theo dõi sức khỏe của các thiết bị lưu trữ bên dưới.

Tài liệu ZFS có một phần về khắc phục sự cố đáng đọc. Phần về thay thế hoặc sửa chữa một thiết bị bị hư hỏng mô tả những gì bạn có thể gặp phải trong trường hợp hỏng hóc và cách bạn có thể giải quyết nó. Bạn sẽ làm điều tương tự ở đây với các thiết bị không có ZFS. Kiểm tra nhật ký hệ thống cho các tin nhắn từ trình điều khiển SCSI, bộ điều khiển HBA hoặc HD và / hoặc phần mềm giám sát SMART và sau đó hành động tương ứng.

Làm thế nào về sự trùng lặp và các tính năng ZFS khác?

Tất cả các tính năng ZFS sẽ hoạt động như nhau bất kể bộ lưu trữ khối bên dưới có được mã hóa hay không.

Tóm lược

  1. ZFS trên các thiết bị được mã hóa LUKS hoạt động tốt.
  2. Nếu bạn có mã hóa phần cứng, bạn sẽ không thấy hiệu suất đạt được miễn là bạn sử dụng phương pháp mã hóa được phần cứng của bạn hỗ trợ. Sử dụng cryptsetup benchmarkđể xem những gì sẽ hoạt động tốt nhất trên phần cứng của bạn.
  3. Hãy nghĩ về ZFS như RAID và hệ thống tập tin kết hợp thành một thực thể duy nhất. Xem sơ đồ ASCII ở trên để biết nơi nó phù hợp với ngăn xếp lưu trữ.
  4. Bạn sẽ cần mở khóa từng thiết bị khối được mã hóa LUKS mà hệ thống tệp ZFS sử dụng.
  5. Theo dõi sức khỏe của phần cứng lưu trữ giống như cách bạn làm bây giờ.
  6. Hãy chú ý đến việc căn chỉnh khối của hệ thống tập tin nếu bạn đang sử dụng các ổ đĩa có khối 4K. Bạn có thể cần thử nghiệm với các tùy chọn luksformat hoặc các cài đặt khác để có được sự liên kết bạn cần cho tốc độ chấp nhận được.

3
+1 Để tìm cách làm cho công việc này với các ví dụ.
ewwhite

1
1 MiB đã chia đều cho 4KiB, vì vậy bạn nên được căn chỉnh chính xác cho đến tận ashift = 20 (mà tôi nghĩ sẽ không cần thiết trong sự nghiệp của tôi) với điều kiện bạn đã sử dụng đĩa thô.
Michael Hampton

1
Chỉ một điều nữa: Tôi đang bỏ phiếu cho câu trả lời của bạn bởi vì đó là những gì OP mong đợi và được viết tốt, vì vậy nó tốt hơn câu trả lời của tôi.
Vinícius Ferrão

3
@ ViníciusFerrão: Cũng lưu ý rằng FreeBSD và FreeNAS đang sử dụng một cách tiếp cận giống hệt nhau để mã hóa ZFS. geliđược sử dụng để tạo một thiết bị được mã hóa và dữ liệu văn bản gốc được cung cấp thông qua thiết bị thứ hai mà ZFS sử dụng. Xem điểm đầu dòng thứ hai tại doc.freenas.org/index.php/Volume#Encoding .
Sao biển

2
@CMCDragonkai Vì cả hai thiết bị L2ARC và SLOG đều chứa bit và mẩu dữ liệu từ nhóm của bạn, nếu bạn đang mã hóa bộ nhớ để cung cấp bảo mật (thường là điểm sử dụng lưu trữ được mã hóa ở nơi đầu tiên), bạn gần như chắc chắn muốn cũng chạy mọi thiết bị L2ARC và SLOG được mã hóa tương tự.
một CVn

2

Một cách triển khai khác là tạo một thiết bị khối ZVOL ( http://zfsonlinux.org/example-zvol.html ), sử dụng LUKS để mã hóa ZVOL mới được tạo và sau đó tạo một hệ thống tệp ext4 (hoặc khác) trên đầu khối được mã hóa thiết bị.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.