Backup tar.gz di Linux: checksum, pemulihan, dan verifikasi isi

Kompresi mengurangi ukuran data, sedangkan backup atau cadangan menyimpan salinan yang dapat dipulihkan dari suatu titik waktu. Terbentuknya arsip belum membuktikan backup dapat dipakai: pulihkan ke lokasi terpisah, lalu periksa isi, metadata, dan kemampuan aplikasi menggunakan hasilnya.

Mulailah dengan memulihkan backup manual ke lokasi lain dan membandingkan isi serta izinnya. Setelah prosedurnya terverifikasi, pelajari otomatisasinya pada panduan penjadwalan backup dan pemeriksaan kesehatan independen berbahasa Inggris.

Membedakan arsip, kompresi, sinkronisasi, dan backup

Operasi Tujuan utama Batasan penting
Pengarsipan Mengemas berkas beserta metadatanya Pastikan metadata yang perlu disimpan dan hak akses saat pemulihan
Kompresi Mengurangi ukuran penyimpanan Tidak berarti enkripsi atau tersedianya salinan terpisah
Sinkronisasi Menyamakan keadaan sumber dan tujuan saat ini Penghapusan atau perubahan yang keliru dapat ikut tersebar
Backup Memulihkan keadaan pada titik waktu sebelumnya Memerlukan masa penyimpanan, media terpisah, dan uji pemulihan

Direktori kedua pada disk yang sama dapat membantu setelah berkas tertimpa, tetapi kedua salinan dapat hilang ketika disk rusak. Rencanakan penyimpanan independen, beberapa titik pemulihan, serta salinan yang tidak dapat langsung diubah menggunakan kredensial produksi yang dibobol. Jika backup dienkripsi, lindungi kunci secara terpisah dan pastikan petugas pemulihan yang berwenang dapat mengambilnya.

Menyiapkan pohon sumber kecil yang terpisah

Gunakan akun biasa dan jalankan blok-blok latihan secara berurutan dalam sesi Bash yang sama agar variabel lab tetap tersedia. Siapkan GNU tar, gzip, utilitas GNU Coreutils seperti mktemp dan sha256sum, serta diff. rsync hanya diperlukan untuk pratinjau pada bagian terakhir. Jika sebuah tahap gagal, periksa galat dan hentikan latihan sebelum melanjutkan ke blok berikutnya.

lab=$(mktemp -d "$HOME/linux-backup-lab.XXXXXX") &&
mkdir -p "$lab/source/docs" "$lab/archives" "$lab/restore" &&
printf "version 1\n" > "$lab/source/docs/note.txt" &&
printf "enabled=yes\n" > "$lab/source/settings.conf" &&
chmod 600 "$lab/source/settings.conf" &&
find "$lab/source" -type f -print

Rangkaian && menjalankan tahap berikutnya hanya jika tahap sebelumnya berhasil, termasuk pembuatan direktori sementara. Pastikan dua jalur yang dicetak berada di bawah direktori sementara yang baru dibuat. Arsip tar disimpan di luar pohon sumber agar backup tidak ikut masuk ke dalam dirinya sendiri.

Latihan ini menangani berkas pengguna biasa. Latihan tidak memverifikasi kepemilikan root, daftar kontrol akses (ACL), atribut tambahan, atau konsistensi database. Nilai izin 600 berarti hanya pemilik dapat membaca dan menulis pada sistem berkas Linux yang mendukung izin tersebut. Lapisan kompatibilitas Windows dan sistem berkas lain dapat menampilkan atau menerapkan mode secara berbeda.

Membuat arsip dengan jalur anggota relatif

tar -czf "$lab/archives/source.tar.gz" -C "$lab" source
tar -tzf "$lab/archives/source.tar.gz"
(cd "$lab/archives" && sha256sum source.tar.gz > source.tar.gz.sha256)
(cd "$lab/archives" && sha256sum -c source.tar.gz.sha256)

-c membuat arsip, -z memilih kompresi gzip, dan -f menentukan nama berkas arsip. Opsi -C mengubah direktori dasar sehingga anggota disimpan sebagai source/..., bukan jalur absolut. Periksa bahwa daftar memuat source/docs/note.txt dan source/settings.conf, di samping entri direktorinya.

SHA-256 adalah fungsi hash yang menghasilkan sidik jari data 256 bit. Pemeriksaan sha256sum -c seharusnya menampilkan source.tar.gz: OK dan berakhir dengan status 0. Checksum mendeteksi perubahan terhadap nilai yang dicatat, tetapi tidak membuktikan keaslian jika penyerang dapat mengganti arsip sekaligus berkas checksum. Jangan memulihkan arsip yang pemeriksaan integritasnya gagal sebelum penyebabnya jelas.

Memulihkan ke lokasi lain dan membandingkan hasilnya

tar -xzf "$lab/archives/source.tar.gz" -C "$lab/restore"
diff -r "$lab/source" "$lab/restore/source"
stat -c "%a %n" "$lab/source/settings.conf" "$lab/restore/source/settings.conf"
cat "$lab/restore/source/docs/note.txt"

-x mengekstrak arsip ke direktori tujuan yang ditentukan dengan -C. Perintah diff -r yang tidak mencetak perbedaan dan berakhir dengan status 0 menunjukkan kesamaan isi yang ditelusuri. Status 1 menunjukkan perbedaan, sedangkan status yang lebih tinggi menunjukkan galat pemeriksaan. Bandingkan mode 600 pada kedua berkas konfigurasi melalui stat dan pastikan hasil cat menampilkan version 1. Diff tidak memverifikasi seluruh kepemilikan, ACL, atau atribut tambahan; pemulihan produksi memerlukan pemeriksaan metadata sesuai kebutuhannya.

Ubah hanya note.txt pada direktori sumber menjadi version 2, misalnya dengan printf "version 2\n" > "$lab/source/docs/note.txt", lalu jalankan lagi perbandingan diff. Perbedaan harus terlihat, sementara salinan yang dipulihkan tetap berisi version 1. Arsip mempertahankan keadaan saat backup dibuat; sinkronisasi bertujuan menyesuaikan keadaan sekarang. Biarkan salinan pemulihan tetap terpisah saat memeriksanya. Untuk mengembalikan kondisi perbandingan awal latihan, tulis kembali version 1 pada catatan sumber dan ulangi diff.

Menangani arsip asing dan layanan yang sedang berjalan

Periksa arsip yang tidak dikenal sebelum mengekstraknya ke direktori baru yang kosong dan terisolasi menggunakan akun tanpa hak administrator. Periksa jalur yang tidak diharapkan, tautan simbolis, jumlah berkas, dan ukurannya. Jangan mengekstraknya sebagai root ke pohon direktori sistem. Daftar anggota bukan jaminan keamanan lengkap; gunakan lingkungan yang terpisah dari sistem penting.

Mengarsipkan direktori database yang aktif dapat mencampur keadaan berkas dari waktu yang berbeda. Gunakan prosedur backup logis atau fisik yang didukung database dan penuhi persyaratan konsistensinya, termasuk penghentian penulisan sementara atau snapshot terkoordinasi jika diperlukan. Tentukan kehilangan data yang dapat diterima dan sasaran waktu pemulihan, lalu nilai keduanya melalui pemulihan nyata. Membaca arsip dengan sukses belum membuktikan aplikasi dapat berjalan menggunakan data itu.

Melihat pratinjau sinkronisasi sebelum menerapkannya

rsync -av --dry-run "$lab/source/" "$lab/restore/source/"

Jika rsync sudah terpasang, --dry-run menampilkan rencana tanpa menerapkan perubahan. Garis miring pada akhir sumber berarti menyalin isinya, bukan menambahkan direktori pembungkusnya. Secara bawaan, rsync memilih berkas untuk diperbarui berdasarkan ukuran dan waktu modifikasi; pratinjau bukan pemeriksaan menyeluruh atas kesamaan semua byte.

Contoh tidak memakai --delete, yang dapat menghapus berkas yang hanya ada di tujuan. Pastikan kedua jalur benar dan simpan titik pemulihan independen sebelum menerapkan sinkronisasi. Jangan menghapus --dry-run selama tujuan Anda masih memeriksa rencana. Setelah latihan selesai dan hasil sudah ditinjau, bersihkan hanya direktori latihan baru yang jalurnya telah dipastikan; jangan menjadikan hasil latihan pada disk yang sama sebagai satu-satunya backup.

Dokumentasi resmi