Saya mencoba membuat salinan dari beberapa file / direktori, tetapi dari beberapa cara yang saya ketahui, semuanya tampak kurang optimal.
Sebagai contoh, btrfs dapat, dengan penggunaan cp --reflink=auto
cepat menghasilkan salinan file.
Apa yang saya coba:
- Symlinks: Tidak bagus. Mengganti nama file, tautan rusak.
- Hardlink: Lebih baik, tetapi masih tidak bagus. Perubahan pada satu file akan mengubah yang lain, dan saya tidak selalu ingin file lainnya diubah.
- Buat snapshot dari dataset, lalu clone snapshot: Ini bisa berfungsi, tetapi tidak baik. Seringkali saya tidak mencari salinan seluruh dataset, atau untuk salinan berfungsi seperti dataset lain. Lalu ada hubungan orang tua / anak antara klon / snapshot / asli, yang seperti yang saya pahami sulit, jika tidak mungkin untuk diputus.
- Menggunakan
zfs send/receive
, dan mengaktifkan dedup, mereplikasi dataset ke dataset baru: Ini menghindari hubungan orang tua / anak menggunakan klon, tetapi masih perlu membuat dataset lain, dan masih menderita dari kelambatan yang terlibat dalam file yang harus dibaca 100% dan blok direferensikan lagi alih-alih ditulis. - Salin file dan biarkan dedup melakukan tugasnya: Ini berfungsi, tetapi lambat karena file tersebut harus 100% dibaca dan kemudian blok direferensikan alih-alih menulis.
Lambatnya zfs mengirim / menerima dan secara fisik menyalin atau rsyncing semakin diperburuk karena sebagian besar hal disimpan terkompresi, dan harus didekompresi selama membaca, kemudian dikompresi sebelum pemotongan tendangan untuk referensi blok duplikat.
Dalam semua penelitian saya, saya belum dapat menemukan apa pun yang menyerupai kesederhanaan --reflink di btrfs.
Jadi, apakah ada cara untuk membuat salinan sapi di ZFS? Atau apakah "secara fisik" menyalin dan membiarkan dedup melakukan tugasnya satu-satunya pilihan nyata?
cp --reflink=auto
.Opsi 5 adalah yang terbaik.
Berkenaan dengan dataset orangtua / anak di opsi 3, Anda dapat mempromosikan klon dan itu tidak akan lagi menjadi anak dari dataset yang dikloning. Masih tidak akan menggunakan blok tambahan.Sunting: Dicatat bahwa ini hanya membalikkan hubungan orang tua / anak, bukan menghancurkannya.Berkenaan dengan hal-hal yang dikompresi / dienkripsi dan memperlambat salinan, itu sepenuhnya salah. Prosesor Anda jauh lebih cepat daripada perangkat blok Anda (bahkan jika menggunakan SSD). Hanya untuk beberapa contoh angka, misalkan dibutuhkan 10 detik untuk membaca blok, tetapi hanya perlu satu detik untuk mendekompresnya dan 2 detik untuk mendekripsi. Blok 1 dibaca dalam 10 detik dan dikirim ke CPU. CPU mulai mendekompresi dan mendekripsi ketika disk mulai membaca blok 2. CPU akan menyelesaikan tugasnya dalam 3 detik dan kemudian menghabiskan 7 detik berikutnya menunggu di disk. Sementara itu disk telah menghabiskan jumlah waktu yang sama persis membaca dua blok (20 detik) terlepas dari apakah blok dikompresi atau tidak.
Demikian juga saat menulis, hanya blok pertama yang ditunda. CPU mengompres / mengenkripsi blok 1 dan mengirimkannya ke disk. Saat disk menulis blok 1, CPU akan mulai mengompresi / mengenkripsi blok berikutnya. CPU akan mengunyah blok jauh lebih cepat daripada disk dapat menulisnya sehingga tidak menjadi masalah. (Ya, ini lebih kompleks dari ini, tapi ini intinya.)
Maaf untuk penjelasan yang terlalu panjang tentang poin kecil dalam pertanyaan Anda, tetapi saya ingin menjernihkan kesalahpahaman itu.
sumber