Cách gắn hệ thống tệp ZFS bên ngoài mà không bị ghi đè / thay đổi hệ thống tệp hiện tại hoặc bên ngoài


11

Tôi đang sử dụng FreeBSD 10.2 bằng cách sử dụng ZFS trên root làm hệ thống tệp (zroot01) . Tôi có một đĩa cứng ngoài với hệ thống tệp ZFS từ một hệ thống FreeBSD 10.2 khác (zroot02) mà tôi muốn tạm thời gắn kết, chỉ đọc, vì vậy tôi có thể lấy một số tệp khỏi nó, sau đó ngắt kết nối nó. Tôi không muốn hệ thống ZFS bên ngoài bị chặn hoặc thay thế hệ thống tệp hiện tại của mình, tôi cũng không muốn dữ liệu bên ngoài bị hỏng / bị thay đổi.

Để chứng minh những gì tôi đang cố gắng thực hiện, nếu tôi đang sử dụng UFS, tôi sẽ làm một cái gì đó như thế này:

mount -t ufs -o ro /dev/ada0s2 /mnt/my-fun-mountpoint

... đâu /dev/ada0s2là phân vùng trên ổ đĩa ngoài của tôi và /mnt/my-fun-mountpointnằm trong /mntthư mục của hệ điều hành hiện tại của tôi.

Tất cả các trang tìm kiếm và đọc trang người đàn ông đã không cung cấp một phương pháp rõ ràng để làm như vậy. Những câu trả lời tôi đã tìm thấy cuối cùng đã chiếm lấy hệ thống tệp hiện tại của tôi và làm hỏng nó sau khi sửa chữa - rõ ràng không phải là kết quả mà tôi đang tìm kiếm. Tôi đã thử điều này một thời gian trước đây vì vậy tôi không nhớ những lệnh tôi đã thử, thật không may.

Bạn có thể vui lòng cung cấp một số hướng dẫn rõ ràng về cách làm điều này? Cảm ơn rất nhiều về sự trợ giúp của bạn.

Câu trả lời:


13

Chà, nó thực sự phụ thuộc vào cách bạn chỉ đọc hồ bơi. Và không, đó không phải là một trò đùa.

Đầu tiên, một chút thuật ngữ: trong ZFS, bạn nhập một nhóm và tùy ý gắn các hệ thống tệp (bất kỳ) trong đó. Bạn có thể nhập một nhóm mà không cần gắn bất kỳ hệ thống tệp nào bằng cách chuyển -Nđến zpool importvà sau đó gắn kết bất kỳ hệ thống tệp mong muốn nào bằng cách sử dụng zfs mount. .

ZFS không phải là một fan hâm mộ lớn của truy cập chỉ đọc thực sự. Ví dụ: nếu ZFS phát hiện ra lỗi có thể sửa chữa, tôi tin rằng nó sẽ sửa lỗi và ghi dữ liệu đã sửa vào đĩa ngay cả khi bạn nhập nhóm dưới dạng chỉ đọc. Tôi hiểu rằng, trong parFS ZFS, "chỉ đọc" chỉ áp dụng cho trạng thái hiển thị của người dùng của nhóm và bộ dữ liệu của nó. Mặt khác, nếu bạn tạo một bản sao nhị phân của đĩa vào một tệp (hoặc bộ tệp), làm cho các tệp đó thực sự chỉ đọc và cố gắng nhập nhóm từ đó, ZFS sẽ không thể nhập tệp hồ bơi ở tất cả cho dù bạn cố gắng thế nào. Nếu bạn làm cho các tập tin có thể ghi, nó sẽ hoạt động tốt. (Tôi thực sự đã thử điều này chỉ một vài tuần trước, mặc dù sử dụng zvol và ZFS đã từ chối kịch liệtđể nhập hồ bơi. Khi tôi đặt zvol thành đọc / ghi thay vì chỉ đọc, nhóm đã nhập tốt.) Các hệ thống tệp khác như (trên Linux) ext4 và có lẽ các hệ thống khác xử lý tình huống này một cách duyên dáng, nhưng ZFS lại chùn bước.

Nếu bạn không may mắn và không cài đặt RAM ECC trong hệ thống nơi bạn đang nhập nhóm, thì ZFS cố gắng sửa bất kỳ lỗi nào mà nó gặp có thể thực sự làm mọi thứ tồi tệ hơn , mặc dù ý kiến ​​khác nhau về việc đây có thực sự là rủi ro thực sự không trong thực tế. Cá nhân tôi cho rằng bất kỳ dữ liệu nào tôi quan tâm đủ để bảo vệ với ZFS và ảnh chụp nhanh và dự phòng cấp độ lưu trữ và sao lưu và cũng không xứng đáng được bảo vệ bởi RAM ECC, nhưng nhiều PC không có RAM ECC.

Vì vậy, bạn có thể nhập các hồ bơi trong chế độ read-only, với một gốc thay thế cụ thể để giữ cho nó khỏi giẫm lên bất cứ điều gì khác là ngón chân, nhưng bạn cần phải lưu ý rằng nó không nhất thiết phải thực sự chỉ đọc trong một cảm giác pháp y. (Tuy nhiên, nó sẽ đảm bảo rằng bạn không vô tình thay đổi bất cứ điều gì trong nhóm.) Để thực hiện nhập chỉ đọc, giả sử rằng nhóm được đặt tên tankvà (các) nút thiết bị đã có sẵn /dev, bạn sẽ sử dụng một lệnh như:

# zpool import tank -d /dev -o readonly=on -R /mnt/someplace

Điều này sẽ nhìn vào /devbất cứ điều gì cầm một ZFS hồ bơi với tên tank, nhập nó, tạm thời thiết lập thuộc tính hồ bơi readonlyđể on(có nghĩa là tất cả các ghi do người dùng tạo sẽ bị từ chối) và tạm thời thiết lập của nó altrootsở hữu đến /mnt/someplace. (Các giá trị thuộc tính này là "tạm thời" theo nghĩa là chúng không được duy trì trong đĩa như các giá trị thuộc tính hiện tại, vì vậy nếu bạn xuất và nhập lại nhóm mà không có chúng, các giá trị sẽ trở lại bình thường. có thể được ghi vào lịch sử nhóm, mặc dù một khi nhóm được nhập, bạn có thể xem bằngzpool history tank nếu bạn rất có khuynh hướng.) Khi nhóm được nhập, bạn sẽ thấy các tệp của mình ở dưới / mnt / someplace và có quyền truy cập bình thường, chỉ đọc vào chúng, bao gồm mọi ảnh chụp nhanh đã được thực hiện trên bộ dữ liệu trong nhóm.

Cho ví dụ của bạn, tôi nghi ngờ rằng bạn sẽ sử dụng một cái gì đó dọc theo dòng:

# zpool import zroot02 -d /dev -o readonly=on -R /mnt/my-fun-mountpoint

Khi bạn đã hoàn tất, hãy nhớ xuất sạch hồ bơi:

# zpool export tank

hoặc có lẽ

# zpool export zroot02

Điều đó sẽ ngắt kết nối tất cả các hệ thống tệp và các bộ dữ liệu khác trong nhóm, xóa tất cả các bộ đệm (đến mức bất kỳ nhu cầu nào được đặt ở vị trí đầu tiên), đánh dấu nhóm là không được nhập trên tất cả các thiết bị cấu thành và thực hiện bất kỳ nhiệm vụ vệ sinh cần thiết nào khác để đảm bảo rằng hồ bơi có thể được chuyển đến một hệ thống khác một cách an toàn và được nhập vào đó sau đó.


1
Nếu bạn thực sự chắc chắn những gì bạn nêu trong đoạn thứ ba của bạn là chính xác, đó sẽ là một lỗi với việc triển khai BSD ZFS. Nhập chỉ đọc nhóm ZFS được thiết kế để thực sự chỉ đọc, tức là nó không bao giờ cố gắng ghi hoặc sửa bất kỳ dữ liệu hoặc siêu dữ liệu nào, kể cả lịch sử nhóm. Xem arc.stillopensolaris.org/txt/PSARC_2010_306.txt
jlliagre

1
@jlliagre Tôi khá chắc chắn, nhưng nó có thể nằm trong bối cảnh của một số triển khai ZFS khác. Tôi thực sự không thấy lý do tại sao họ sẽ khác nhau ở một khía cạnh cơ bản như vậy; Tôi tin rằng tất cả các triển khai ZFS mã nguồn mở đều chia sẻ một lượng mã đáng kể theo dõi dòng dõi của nó trở lại Sun. Tôi chỉ có thể thiết lập một số loại môi trường thử nghiệm cho điều này và chọc vào nó bằng một cây gậy sau đó xem điều gì sẽ xảy ra, nhưng sẽ mất một thời gian trước khi tôi có thể dành thời gian để thực sự làm điều đó.
một CVn
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.