Snapper adalah alat baris perintah Linux untuk membuat dan mengelola snapshot sistem file Anda.
Menggunakan perintah snapper, Anda dapat membuat snapshot read-only. Anda dapat menggunakan snapshot ini untuk memulihkan file tertentu atau semua file selama situasi bencana apa pun.
Anda juga dapat menggunakannya untuk membandingkan beberapa snapshot dan kembali ke snapshot lama tertentu.
Snapper hanya didukung pada btrfs (sistem file B-tree copy-on-write), filesystem ext4 dan thin- volume logis berbasis LVM yang disediakan.
Saat snapshot diambil menggunakan perintah snapper, snapshot akan berada di sistem file yang sama sehingga harus ada cukup ruang kosong yang tersedia dan pembersihan FS reguler mungkin diperlukan.
Jika Anda tertarik untuk menggunakan snapshot berbasis rsync, Anda juga harus memeriksa utilitas rsnapshot yang telah kita bahas sebelumnya.
Instal Utilitas Kakap
Anda dapat mengunduh biner kakap untuk berbagai distribusi dan menginstalnya, atau mengunduh kode sumber dan mengompilasinya sendiri.
Misalnya, Anda dapat mengunduh rpm kakap dari repositori SUSE SLES11 SP2.
# rpm -ivh snapper-0.1.6-2.1.x86_64.rpm
Berikut ini adalah ketergantungan untuk paket kakap. Saat Anda menggunakan yum, atau alat manajemen paket lainnya, semua ketergantungan akan diinstal secara otomatis.
- libsnapper-devel-0.1.6-2.1.x86_64.rpm
- pam_snapper-0.1.6-2.1.x86_64.rpm
- snapper-debuginfo-0.1.6-2.1.x86_64.rpm
- snapper-debugsource-0.1.6-2.1.x86_64.rpm
Buat Sistem File btrfs
Karena btrfs didukung sistem file dari SLES11 SP2, Anda dapat menggunakan btrfs untuk membuat volume logis Anda atau menggunakan perintah btrfs-convert untuk mengonversi sistem file ext3 yang ada ke btrfs.
Jalankan perintah berikut untuk membuat sistem file btrfs baru, Jika Anda belum menginstal program btrfs, gunakan zypper install btrfsprogs untuk menginstalnya.
# lvcreate -L 8G -n snapvol vglocal Logical volume "snapvol" created # mkfs.btrfs /dev/vglocal/snapvol # mount /dev/vglocal/snapvol /snapmount
Buat LVM dengan Provisioning Tipis
Jika Anda ingin membuat LVM dengan ketentuan tipis, gunakan perintah lvcreate untuk melakukan hal berikut.
# lvcreate --thin vglocal/vgthinpool --size 20G Rounding up size to full physical extent 32.00 MiB Logical volume "vgthinpool" create # lvcreate --thin vglocal/vgthinpool --virtualsize 8G --name lvthin_snap Logical volume "lvthin_snap" created # lvs LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert opt vglocal -wi-ao--- 2.73g tmp vglocal -wi-ao--- 2.73g usr_local vglocal -wi-ao--- 2.73g var vglocal -wi-ao--- 2.73g lvthin_snap vglocal Vwi-a-tz- 8.00g vgthinpool 0.00 vgthinpool vglocal twi-a-tz- 20.00g 0.00 # mkfs.ext3 /dev/vglocal/lvthin_snap # mkdir /snapmount # mount /dev/vglocal/lvthin_snap /snapmount
Buat File Konfigurasi Kakap
Untuk membuat file konfigurasi menggunakan perintah snapper, gunakan perintah “snapper -c” seperti gambar di bawah ini.
Sintaks pada btrfs:
snapper –c create-config
Pada btrfs, Anda cukup menentukan nama file konfigurasi, dan mountpoint seperti yang ditunjukkan di bawah ini.
snapper -c snapconfig create-config /snapmount
Sintaks pada LVM dengan ketentuan tipis:
snapper –c create-config --fstype="lvm(xfs)"
Pada LVM yang disediakan tipis, selain menentukan nama file konfigurasi, dan mountpoint, Anda juga harus menentukan jenis sistem file menggunakan –fstype seperti yang ditunjukkan di bawah ini:
snapper -c snapconfig1 create-config --fstype="lvm(xfs)" /snapmount1
Melihat dan Menghapus File Konfigurasi Kakap
Setelah membuat file konfigurasi, Anda akan melihat direktori .snapshots dibuat di bawah direktori /snapmount.
Anda juga akan melihat file konfigurasi dibuat di bawah /etc/snapper/configs/snapconfig. Informasi tentang semua subvolume yang dikonfigurasi untuk snapshot akan disimpan dalam file ini.
File log yang digunakan untuk tujuan pemecahan masalah terletak di bawah /var/log/snapper.log
Untuk melihat semua file konfigurasi, jalankan perintah snapper berikut:
# snapper list-configs Config | Subvolume ------------+------------ snapconfig | /snapmount ? btrfs filesystem snapconfig1 | /snapmount1 ? Thin provisioned filesystem
Untuk menghapus file konfigurasi, gunakan sintaks berikut:
snapper –c delete-config
Misalnya, perintah berikut menghapus file konfigurasi snapconfig di bawah direktori /etc/snapper/configs.
# snapper -c snapconfig delete-config
Buat snapshot menggunakan Snapper
Untuk membuat snapshot dari sistem file, gunakan sintaks perintah snapper berikut:
snapper –config create –description "description of the snapshot"
Misalnya, berikut ini akan mengambil snapshot baru.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0354"
Setelah Anda mengambil snapshot, lihat informasi snapshot seperti yang ditunjukkan di bawah ini:
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 |
Ambil Cuplikan Kedua untuk Perbandingan
Untuk tujuan pengujian, saya membatalkan testfile1 di bawah direktori /snapmount.
# cat /dev/null > testfile1 # ls -ltr -rw-r--r-- 1 root root 11 Feb 24 11:28 testfile2 -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 drwxr-x--- 1 root root 2 Feb 24 15:57 .snapshots -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1
Setelah perubahan di atas, mari kita ambil snapshot lagi.
# snapper --config snapconfig create --description "Snapshot taken on 02-24-0427"
Seperti yang Anda lihat di bawah, sekarang kami memiliki dua snapshot.
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 | single | 2 | | Mon Feb 24 16:27:48 2014 | root | | Snapshot taken on 02-24-0427 |
Bandingkan Snapshot ke-1 dan ke-2
Sekarang, mari kita bandingkan kedua snapshot tersebut.
Perintah di bawah ini membandingkan snapshot#1 dengan snapshot#2.
# snapper -c snapconfig status 1..2 c.... /snapmount/testfile1
Pada keluaran:
- “c” pada output menunjukkan bahwa konten telah dimodifikasi.
- “+” menunjukkan bahwa file baru ditambahkan ke direktori.
- “-” menunjukkan ada file yang telah dihapus.
Ambil Beberapa Foto dan Bandingkan Outputnya
Saya membuat beberapa cuplikan pengujian dengan sedikit file yang ditambahkan, beberapa file yang dihapus, dan sedikit perubahan konten.
# snapper --config snapconfig list Type | # | Pre # | Date | User | Cleanup | Description | Userdata -------+---+-------+--------------------------+------+---------+------------------------------+--------- single | 0 | | | root | | current | single | 1 | | Mon Feb 24 15:57:00 2014 | root | | Snapshot taken on 02-24-0354 | single | 2 | | Mon Feb 24 16:27:48 2014 | root | | Snapshot taken on 02-24-0427 | single | 3 | | Mon Feb 24 16:37:53 2014 | root | | Snapshot taken on 02-24-0437 | single | 4 | | Mon Feb 24 16:38:17 2014 | root | | Snapshot taken on 02-24-0440 |
Output berikut mencantumkan file yang ditambahkan, diubah, dan dihapus.
# snapper -c snapconfig status 4..1 -.... /snapmount/a -.... /snapmount/b -.... /snapmount/c c.... /snapmount/testfile1 +.... /snapmount/testfile2
Lihat Perbedaan Antara Snapshot
Sekarang untuk melihat perbedaan konten tertentu dalam file antara snapshot#1 dan snapshot#4, Anda dapat menggunakan perintah berikut.
# snapper -c snapconfig diff 4..1 /snapmount/testfile1 --- /snapmount/.snapshots/4/snapshot/testfile1 2014-02-24 16:25:44.416490642 -0500 +++ /snapmount/.snapshots/1/snapshot/testfile1 2014-02-24 11:27:35.000000000 -0500 @@ -0,0 +1 @@ +This is a test file
Outputnya dalam format khas dari output perintah diff.
Pulihkan File Tertentu dari Snapshot
Setelah Anda melihat perbedaan antara snapshot, dan Anda tahu file spesifik apa yang ingin Anda pulihkan, Anda dapat memulihkannya seperti yang dijelaskan di sini.
Sebelum pemulihan, kami tidak memiliki testfile2 dalam daftar ini.
# ls -ltr -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1 drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots
Misalnya, untuk mengembalikan satu file dari snapshot, yaitu /snapmount/testfile2 (file yang telah dihapus) dari snapshot#1 gunakan perintah di bawah ini:
# snapper -c snapconfig -v undochange 1..4 /snapmount/testfile2 create:1 modify:0 delete:0 creating /snapmount/testfile2
Setelah pemulihan, kita melihat testfile2 dalam daftar.
# ls -ltr -rw-r--r-- 1 root root 43 Feb 24 11:28 testfile3 -rw-r--r-- 1 root root 0 Feb 24 16:25 testfile1 drwxr-x--- 1 root root 10 Feb 24 16:45 .snapshots -rw-r--r-- 1 root root 11 Feb 24 16:55 testfile2
Pulihkan Semua File dari Snapshot
Untuk memulihkan semua file dari snapshot, lakukan hal berikut:
Sekarang, mari kita kembalikan semua file dari snapshot tertentu. Perhatikan bagaimana ini menghapus beberapa file, membuat file, dan memodifikasi file.
# snapper -c snapconfig -v undochange 1..4 create:1 modify:1 delete:3 deleting /snapmount/c deleting /snapmount/b deleting /snapmount/a modifying /snapmount/testfile1 creating /snapmount/testfile2