Saya memiliki sistem FreeNAS lokal dan ingin menggunakan snapshot ZFS untuk cadangan.
FreeNAS memiliki Tugas Replikasi bawaan yang digunakan
zfs send snapshot_name
untuk mengirim snapshot ke sistem jarak jauh. Tetapi ini membutuhkan sistem dengan ZFS di ujung yang lain.
Saya ingin mengirim snapshot ke file dan mengirim file terkompresi dan terenkripsi ini ke mesin jarak jauh.
Ini dimungkinkan dengan
zfs send snapshot_name | gzip | openssl enc -aes-256-cbc -a -salt > file.gz.ssl
Setiap hari saya membuat snapshot dari kumpulan penyimpanan dan menyimpan setiap snapshot selama 30 hari.
Dengan setiap snapshot yang diambil, saya akan mem-pipe snapshot ini ke file.
- snapshot_file 1 memiliki setiap file di dalamnya (katakanlah 2GB)
- snapshot_file 2 hanya memiliki perubahan ke snapshot_file 1 (katakanlah 5MB)
- snapshot_file 3 menyimpan perubahan pada snapshot_file 2; dan seterusnya.
Pada hari 31 snapshot_file 1 semakin dihapus (karena saya hanya ingin perubahan dari 30 hari terakhir)
Karena itu snapshot_file 2 perlu menampung setiap file (2GB dari snapshot_file 1 + 5MB perubahan)
Tetapi dengan pendekatan ini setiap hari (mulai hari ke 31) file 2GB baru harus dibuat dan dikirim ke sistem jarak jauh. Ini terlalu banyak overhead.
Apa yang akan menjadi pendekatan terbaik untuk menggunakan snapshots yang disalurkan ke file sebagai strategi cadangan dengan sejarah X hari?
PS: Saya tahu ada banyak perangkat lunak cadangan di luar sana (misalnya rdiff-backup), yang bisa saya gunakan. Tapi saya ingin tahu bagaimana ini bisa dilakukan.
zfs recv
di ujung yang lain (di kolam denganzfs set compression=gzip-9
misalnya). Menyimpan file snapshot terdengar sangat tidak efisien bagi saya.Jawaban:
Jika Anda menyimpan snapshot dalam file, tidak seperti dalam sistem file (misalnya dengan
zfs receive
), saya khawatir, ini tidak mungkin.ZFS di sisi penerima
Jika Anda menggunakan ZFS pada sisi pengiriman dan sisi penerima, Anda dapat menghindari keharusan mentransfer keseluruhan foto dan hanya mentransfer perbedaan foto tersebut dibandingkan dengan foto sebelumnya:
ZFS tahu tentang snapshot dan menyimpan blok timbal balik hanya sekali. Memiliki sistem file yang memahami snapshot memungkinkan Anda untuk menghapus yang lama tanpa masalah.
Sistem file lain di sisi penerima
Dalam kasus Anda, Anda menyimpan snapshot dalam file individual, dan sistem file Anda tidak mengetahui snapshot tersebut. Seperti yang sudah Anda perhatikan, ini merusak rotasi. Anda juga harus mengirim seluruh snapshot, yang akan menghabiskan bandwidth dan ruang penyimpanan, tetapi memungkinkan Anda untuk menghapus snapshot individual. Mereka tidak saling bergantung. Anda dapat melakukan snapshot tambahan seperti ini:
Untuk mengembalikan snapshot tambahan, Anda juga perlu snapshot sebelumnya. Ini berarti Anda tidak dapat menghapus incrementals lama.
Solusi yang memungkinkan
Anda dapat melakukan incrementals seperti yang ditunjukkan pada contoh terakhir saya dan melakukan non-incremental baru setiap bulan. Inkremental baru bergantung pada non-inkremental ini dan Anda bebas untuk menghapus snapshot lama.
Atau Anda bisa mencari solusi cadangan lainnya. Ada rsnapshot , yang menggunakan
rsync
dan tautan keras. Ini melakukan pekerjaan yang sangat baik pada rotasi dan sangat efisien bandwidth, karena hanya memerlukan cadangan penuh sekali.Lalu ada bareo . Itu incrementals, yang hemat bandwidth dan ruang. Ini memiliki fitur yang sangat bagus; itu dapat menghitung cadangan penuh dari satu set inkremental. Ini memungkinkan Anda untuk menghapus incrementals lama. Tapi ini sistem yang agak rumit dan ditujukan untuk pengaturan yang lebih besar.
Solusi terbaik, bagaimanapun, adalah menggunakan ZFS di sisi penerima. Ini akan menjadi bandwidth yang efisien, penyimpanan yang efisien dan jauh lebih cepat daripada solusi lain. Satu-satunya kelemahan yang dapat saya pikirkan adalah bahwa Anda harus memiliki memori minimum 8 GiB ECC pada kotak itu (Anda mungkin baik-baik saja dengan 4 GiB jika Anda tidak menjalankan layanan apa pun dan hanya menggunakannya untuk
zfs receive
).sumber
rsnapshot
itu. Atau Anda bisa memulai non-incremental baru setelah satu bulan dan kemudian menghapus incrementals sebelumnya.