Bagaimana me-mount sistem file ZFS eksternal tanpa mengganggu / mengubah filesystem saat ini atau eksternal

11

Saya menggunakan FreeBSD 10.2 menggunakan ZFS on root sebagai sistem file (zroot01) . Saya memiliki hard disk eksternal dengan sistem file ZFS dari sistem FreeBSD 10.2 lain (zroot02) yang ingin saya pasang sementara, baca saja, jadi saya bisa mendapatkan beberapa file darinya, kemudian lepaskan setelah itu. Saya tidak ingin sistem ZFS eksternal untuk clobber atau mengganti sistem file saya saat ini, juga tidak ingin data pada eksternal rusak / diubah juga.

Untuk menunjukkan apa yang ingin saya capai, jika saya menggunakan UFS saya akan melakukan sesuatu seperti ini:

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

... di mana /dev/ada0s2partisi pada drive eksternal saya dan /mnt/my-fun-mountpointberada di /mntdirektori sistem operasi saya yang ada.

Semua pencarian dan pembacaan halaman manual belum memberikan metode yang sangat jelas untuk melakukannya. Apa yang menjawab saya tidak menemukan akhirnya mengambil alih sistem file saya saat ini dan merusak itu bisa diperbaiki - jelas bukan hasil yang saya cari. Saya mencoba ini beberapa waktu yang lalu, jadi saya tidak ingat perintah mana yang saya coba, sayangnya.

Bisakah Anda memberikan beberapa panduan yang jelas tentang bagaimana melakukan ini? Terima kasih sebelumnya atas bantuan Anda.

Will B
sumber

Jawaban:

13

Yah, itu benar-benar tergantung pada seberapa read-only Anda ingin kolam itu. Dan tidak, itu bukan lelucon.

Pertama, sedikit terminologi: di ZFS, Anda mengimpor kumpulan, dan secara opsional memasang sistem file (apa saja) di dalamnya. Anda dapat mengimpor kumpulan tanpa memasang sistem file apa pun dengan meneruskan -Nke zpool importdan kemudian memasang sistem file yang diinginkan menggunakan zfs mount. (Ini adalah skenario yang benar-benar valid jika, misalnya, Anda ingin mengakses hanya satu sistem file dari banyak, atau jika Anda ingin melakukan sesuatu yang menyerupai scrub off-line dari kumpulan.)

ZFS bukan penggemar berat akses hanya-baca. Misalnya, jika ZFS mendeteksi kesalahan yang dapat diperbaiki, saya yakin ZFS akan memperbaiki kesalahan dan menulis data yang diperbaiki ke disk bahkan jika Anda mengimpor kumpulan sebagai hanya baca. Pemahaman saya adalah bahwa, di ZFS parlace, "read-only" hanya berlaku untuk status kumpulan pengguna yang terlihat dan kumpulan datanya. Jika, di sisi lain, Anda membuat salinan biner dari disk ke file (atau kumpulan file), membuat file-file itu benar-benar hanya baca, dan mencoba mengimpor kumpulan dari sana, ZFS tidak akan dapat mengimpor Pool sama sekali tidak peduli seberapa keras Anda mencoba. Jika Anda membuat file dapat ditulis, itu akan berfungsi dengan baik. (Saya benar-benar mencoba ini hanya beberapa minggu yang lalu, meskipun menggunakan zvol, dan ZFS dengan keras menolaknyauntuk mengimpor kolam. Ketika saya mengatur zvol untuk membaca / menulis alih-alih hanya-baca, kolam mengimpor baik-baik saja.) Sistem file lain seperti (di Linux) ext4 dan mungkin yang lain menangani situasi ini dengan anggun, tetapi ZFS menolak.

Jika Anda kurang beruntung, dan tidak memiliki ECC RAM yang terpasang di sistem tempat Anda mengimpor kumpulan, maka ZFS yang mencoba untuk memperbaiki kesalahan yang ditemui mungkin malah memperburuk keadaan , meskipun pendapat berbeda mengenai apakah ini sebenarnya risiko nyata. dalam praktek. Secara pribadi saya berpendapat bahwa data apa pun yang saya pedulikan cukup untuk melindungi dengan ZFS dan snapshot serta cadangan dan cadangan tingkat penyimpanan dan yang lainnya layak mendapatkan perlindungan yang ditawarkan oleh RAM ECC juga, tetapi banyak PC tidak memiliki RAM ECC.

Jadi, Anda dapat mengimpor kumpulan dalam mode read-only, dengan root alternatif khusus untuk mencegahnya menginjak jari kaki orang lain, tetapi Anda harus menyadari bahwa itu tidak harus benar - benar hanya baca-saja dalam arti forensik. (Akan, bagaimanapun, memastikan bahwa Anda tidak secara tidak sengaja mengubah apa pun di kumpulan.) Untuk melakukan impor hanya baca, dengan asumsi bahwa kumpulan tersebut dinamai tankdan bahwa simpul perangkat tersedia /dev, Anda akan gunakan perintah seperti:

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

Ini akan terlihat di /devuntuk apa pun memegang ZFS pool dengan nama tank, impor, sementara pengaturan properti kolam renang readonlyuntuk on(yang berarti bahwa semua menulis diprakarsai pengguna akan ditolak) dan untuk sementara pengaturan yang altrootproperti untuk /mnt/someplace. (Nilai properti ini "sementara" dalam arti bahwa mereka tidak bertahan ke disk sebagai nilai properti saat ini, jadi jika Anda mengekspor dan mengimpor kembali kumpulan tanpa mereka, nilai-nilai akan kembali normal. Mereka mungkin mungkin dituliskan ke histori pool, yang setelah pool diimpor, Anda dapat melihatnyazpool history tank jika Anda cenderung.) Setelah pool diimpor, Anda akan melihat file Anda di bawah / mnt / suatu tempat dan memiliki akses normal, hanya-baca, termasuk snapshot yang sudah dibuat pada dataset di pool.

Diberikan contoh Anda, saya menduga Anda akan menggunakan sesuatu di sepanjang baris:

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

Setelah selesai, jangan lupa untuk mengekspor kolam secara bersih:

# zpool export tank

atau mungkin

# zpool export zroot02

Itu akan meng-unmount semua sistem file dan set data lainnya di dalam pool, menyiram semua buffer (sejauh mana kebutuhan membilas di tempat pertama), menandai pool sebagai tidak diimpor pada semua perangkat konstituen, dan melakukan tugas-tugas rumah tangga lain yang diperlukan untuk memastikan bahwa kolam dapat dengan aman dipindahkan ke sistem yang berbeda dan diimpor ke sana nanti.

sebuah CVn
sumber
1
Jika Anda benar-benar yakin apa yang Anda nyatakan dalam paragraf ketiga Anda benar, itu akan menjadi bug dengan implementasi BSD ZFS. Impor hanya baca kumpulan ZFS dirancang untuk benar-benar hanya baca, yaitu tidak pernah mencoba menulis atau memperbaiki data atau metadata apa pun, termasuk riwayat kumpulan. Lihat arc.stillopensolaris.org/txt/PSARC_2010_306.txt
jlliagre
1
@ jlliagre Saya cukup yakin, tapi mungkin dalam konteks beberapa implementasi ZFS lainnya. Saya tidak benar-benar melihat mengapa mereka berbeda dalam aspek fundamental seperti itu; Saya percaya semua implementasi ZFS open-source berbagi sejumlah besar kode yang melacak garis keturunannya kembali ke Sun. Saya mungkin saja membuat semacam lingkungan pengujian untuk ini dan mencoleknya dengan tongkat kemudian melihat apa yang terjadi, tetapi itu akan memakan waktu sebelum saya dapat mencurahkan waktu untuk benar-benar melakukan itu.
CVn