Bab 10. Manajemen data

Daftar Isi

10.1. Berbagi, menyalin, dan mengarsipkan
10.1.1. Alat arsip dan kompresi
10.1.2. Alat salin dan sinkronisasi
10.1.3. Idiom untuk arsip
10.1.4. Idiom untuk menyalin
10.1.5. Idiom untuk pemilihan berkas
10.1.6. Media arsip
10.1.7. Perangkat penyimpanan lepasan
10.1.8. Pilihan sistem berkas untuk berbagi data
10.1.9. Berbagi data melalui jaringan
10.2. Pencadangan dan pemulihan
10.2.1. Kebijakan pencadangan dan pemulihan
10.2.2. Keluarga utilitas pencadangan
10.2.3. Backup tips
10.2.3.1. GUI backup
10.2.3.2. Mount event triggered backup
10.2.3.3. Timer event triggered backup
10.3. Infrastruktur keamanan data
10.3.1. Manajemen kunci untuk GnuPG
10.3.2. Menggunakan GnuPG pada berkas
10.3.3. Menggunakan GnuPG dengan Mutt
10.3.4. Menggunakan GnuPG dengan Vim
10.3.5. Sidikjari MD5
10.3.6. Ring kunci kata sandi
10.4. Alat penggabungan kode sumber
10.4.1. Mengekstrak perbedaan untuk berkas sumber
10.4.2. Menggabungkan pembaruan untuk berkas sumber
10.4.3. Penggabungan interaktif
10.5. Git
10.5.1. Konfigurasi klien Git
10.5.2. Perintah Git dasar
10.5.3. Tips Git
10.5.4. Referensi Git
10.5.5. Sistem kontrol versi lainnya

Alat dan tips untuk mengelola data biner dan teks pada sistem Debian dijelaskan.

[Awas] Awas

Akses tulis yang tidak terkoordinasi ke perangkat dan berkas yang diakses secara aktif dari berbagai proses tidak boleh dilakukan untuk menghindari kondisi race. Mekanisme penguncian berkas menggunakan flock(1) dapat digunakan untuk menghindarinya.

Keamanan data dan berbagi yang terkontrol memiliki beberapa aspek.

  • Pembuatan arsip data

  • Akses penyimpanan jarak jauh

  • Duplikasi

  • Pelacakan riwayat modifikasi

  • Memfasilitasi berbagi data

  • Pencegahan akses berkas tanpa otorisasi

  • Deteksi modifikasi berkas tanpa otorisasi

Ini dapat direalisasikan dengan menggunakan beberapa kombinasi alat.

  • Alat arsip dan kompresi

  • Alat salin dan sinkronisasi

  • Sistem berkas jaringan

  • Media penyimpanan lepasan

  • Secure shell

  • Sistem autentikasi

  • Alat sistem kontrol versi

  • Alat enkripsi hash dan kriptografi

Berikut adalah ringkasan alat kompresi dan arsip yang tersedia pada sistem Debian.

Tabel 10.1. Daftar alat arsip dan kompresi

paket popcon ukuran ekstensi perintah kommen
tar V:902, I:999 3077 .tar tar(1) pengarsip standar (standar de facto)
cpio V:440, I:998 1199 .cpio cpio(1) Pengarsipan gaya Unix System V, gunakan dengan find(1)
binutils V:172, I:629 144 .ar ar(1) pengarsip untuk pembuatan pustaka statis
fastjar V:1, I:13 183 .jar fastjar(1) pengarsip untuk Java (mirip zip)
pax V:8, I:14 170 .pax pax(1) pengarsip standar POSIX baru, kompromi antara tar dan cpio
gzip V:876, I:999 252 .gz gzip(1), zcat(1), … Utilitas kompresi GNU LZ77 (standar de facto)
bzip2 V:166, I:970 112 .bz2 bzip2(1), bzcat(1), … Utilitas kompresi pengurut blok Burrows-Wheeler dengan rasio kompresi yang lebih tinggi daripada gzip(1) (lebih lambat dari gzip dengan sintaks serupa)
lzma V:1, I:16 149 .lzma lzma(1) Utilitas kompresi LZMA dengan rasio kompresi yang lebih tinggi daripada gzip(1) (usang)
xz-utils V:360, I:980 1203 .xz xz(1), xzdec(1), … Utilitas kompresi XZ dengan rasio kompresi yang lebih tinggi daripada bzip2(1) (lebih lambat dari gzip tetapi lebih cepat dari bzip2; pengganti utilitas kompresi LZMA)
zstd V:193, I:481 2158 .zstd zstd(1), zstdcat(1), … Zstandard utilitas kompresi lossless cepat
p7zip V:20, I:463 8 .7z 7zr(1), p7zip(1) Pengarsip berkas 7-Zip dengan rasio kompresi tinggi (kompresi LZMA)
p7zip-full V:110, I:480 12 .7z 7z(1), 7za(1) Pengarsip berkas 7-Zipdengan rasio kompresi tinggi (kompresi LZMA dan lain-lain)
lzop V:15, I:142 164 .lzo lzop(1) Utilitas kompresi LZO dengan kompresi dan kecepatan dekompresi yang lebih tinggi daripada gzip(1) (rasio kompresi yang lebih rendah daripada gzip dengan sintaks serupa)
zip V:48, I:380 616 .zip zip(1) InfoZIP: Alat arsip dan kompresi DOS
unzip V:105, I:771 379 .zip unzip(1) InfoZIP: Alat pembuka arsip dan dekompresi DOS

[Awas] Awas

Jangan mengatur variabel "$TAPE" kecuali Anda tahu apa yang diharapkan. Itu mengubah perilaku tar(1).

Berikut adalah beberapa cara untuk menyalin seluruh konten direktori "./source" menggunakan alat-alat yang berbeda.

  • Salinan lokal: direktori "./source" → direktori "/dest"

  • Salinan jarak jauh: direktori "./source" di host lokal → direktori "/dest" di host "user@host.dom"

rsync(8):

# cd ./source; rsync -aHAXSv . /dest
# cd ./source; rsync -aHAXSv . user@host.dom:/dest

Anda dapat menggunakan sintaks "garis miring di akhir pada direktori sumber".

# rsync -aHAXSv ./source/ /dest
# rsync -aHAXSv ./source/ user@host.dom:/dest

Atau, dengan berikut.

# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . /dest
# cd ./source; find . -print0 | rsync -aHAXSv0 --files-from=- . user@host.dom:/dest

GNU cp(1) dan openSSH scp(1):

# cd ./source; cp -a . /dest
# cd ./source; scp -pr . user@host.dom:/dest

GNU tar(1):

# (cd ./source && tar cf - . ) | (cd /dest && tar xvfp - )
# (cd ./source && tar cf - . ) | ssh user@host.dom '(cd /dest && tar xvfp - )'

cpio(1):

# cd ./source; find . -print0 | cpio -pvdm --null --sparse /dest

Anda dapat mengganti "." dengan "foo" untuk semua contoh yang mengandung "." untuk menyalin berkas dari direktori "./source/foo" ke direktori "/dest/foo".

Anda dapat mengganti "." dengan path absolut "/path/to/source/foo" untuk semua contoh yang mengandung "." untuk membuang " cd./source;". Ini menyalin berkas ke lokasi yang berbeda tergantung pada alat yang digunakan sebagai berikut.

  • "/dest/foo": rsync(8), GNU cp(1), dan scp(1)

  • "/dest/path/to/source/foo": GNU tar(1), dan cpio(1)

[Tip] Tip

rsync(8) dan GNU cp(1) memiliki opsi "-u" untuk melewatkan berkas yang lebih baru pada penerima.

find(1) digunakan untuk memilih berkas untuk perintah arsip dan salin (lihat Bagian 10.1.3, “Idiom untuk arsip” dan Bagian 10.1.4, “Idiom untuk menyalin”) atau untuk xargs(1) (lihat Bagian 9.4.9, “Mengulangi perintah atas berkas”). Ini dapat ditingkatkan dengan memakai argumen-argumen perintahnya.

Sintaks dasar find(1) dapat diringkas sebagai berikut.

  • Argumen bersyaratnya dievaluasi dari kiri ke kanan.

  • Evaluasi ini berhenti setelah hasilnya ditentukan.

  • "OR logis" (ditentukan oleh "-o" antara syarat) memiliki prioritas yang lebih rendah daripada "AND logis" (ditentukan oleh "-a" atau nihil antara syarat).

  • "NOT logis" (ditentukan oleh "!" sebelum syarat) memiliki prioritas yang lebih tinggi daripada "AND logis".

  • "-prune" selalu mengembalikan TRUE logis dan, jika itu adalah direktori, pencarian berkas dihentikan di luar titik ini.

  • "-name" mencocokkan basis nama berkas dengan shell glob (lihat Bagian 1.5.6, “Glob shell”) tetapi juga mencocokkan "." awal dengan karakter-karakter meta seperti "*" dan "?". (Fitur POSIX baru)

  • "-regex" mencocokkan path lengkap dengan BRE gaya emacs (lihat Bagian 1.6.2, “Ekspresi reguler”) secara baku.

  • "-size" cocok dengan berkas berdasarkan ukuran berkas (nilai didahului dengan "+" untuk lebih besar, didahului dengan "-" untuk lebih kecil)

  • "-newer" cocok dengan berkas yang lebih baru dari yang ditentukan dalam argumennya.

  • "-print0" selalu mengembalikan TRUE logis dan mencetak nama berkas lengkap (diakhiri null) pada keluaran standar.

find(1) sering digunakan dengan gaya idiomatik sebagai berikut.

# find /path/to \
    -xdev -regextype posix-extended \
    -type f -regex ".*\.cpio|.*~" -prune -o \
    -type d -regex ".*/\.git" -prune -o \
    -type f -size +99M -prune -o \
    -type f -newer /path/to/timestamp -print0

Ini berarti melakukan tindakan berikut.

  1. Cari semua berkas mulai dari "/path/to"

  2. Secara global membatasi pencariannya dalam sistem berkas awalnya dan menggunakan ERE (lihat Bagian 1.6.2, “Ekspresi reguler”) sebagai gantinya

  3. Kecualikan berkas yang cocok regex dari ".*\.cpio" atau ".*~" dari pencarian dengan berhenti memroses

  4. Kecualikan direktori yang cocok dengan regex ".*/\.git" dari pencarian dengan berhenti memroses

  5. Kecualikan berkas yang lebih dari 99 Megabyte (satuan 1048576 byte) dari pencarian dengan berhenti memroses

  6. Cetak nama berkas yang memenuhi kondisi pencarian di atas dan lebih baru dari "/path/to/timestamp"

Harap dicatat penggunaan idiomatik "-prune -o" untuk mengecualikan berkas dalam contoh di atas.

[Catatan] Catatan

Untuk sistem mirip Unix non-Debian, beberapa opsi mungkin tidak didukung oleh find(1). Dalam kasus seperti itu, silakan pertimbangkan untuk menyesuaikan metode yang cocok dan mengganti "-print0" dengan "-print". Anda mungkin perlu menyesuaikan perintah terkait juga.

Ketika memilih media penyimpanan data komputer untuk arsip data penting, Anda harus berhati-hati tentang keterbatasan mereka. Untuk cadangan data pribadi kecil, saya menggunakan CD-R dan DVD-R oleh perusahaan dengan merek terkenal dan menyimpan di lingkungan yang sejuk, teduh, kering, dan bersih. (Media arsip tape tampaknya populer untuk penggunaan profesional.)

[Catatan] Catatan

Brankas tahan api dimaksudkan untuk dokumen kertas. Sebagian besar media penyimpanan data komputer memiliki toleransi suhu yang lebih rendah daripada kertas. Saya biasanya mengandalkan beberapa salinan terenkripsi aman yang disimpan di beberapa lokasi aman.

Umur penyimpanan optimis dari media arsip yang terlihat di internet (sebagian besar dari info vendor).

  • 100+ tahun : Kertas bebas asam dengan tinta

  • 100 tahun : Penyimpanan optik (CD/DVD, CD/DVD-R)

  • 30 tahun : Penyimpanan magnetik (tape, floppy)

  • 20 tahun : Penyimpanan optik perubahan fase (CD-RW)

Ini tidak memperhitungkan kegagalan mekanis karena penanganan dll.

Siklus tulis optimis dari media arsip yang terlihat di internet (sebagian besar dari informasi vendor).

  • 250.000+ siklus : Harddisk drive

  • 10.000+ siklus : Memori flash

  • 1.000 siklus : CD/DVD-RW

  • 1 siklus : CD/DVD-R, kertas

[Perhatian] Perhatian

Angka masa penyimpanan dan siklus penulisan di sini tidak boleh digunakan untuk keputusan tentang penyimpanan data penting apa pun. Silakan berkonsultasi dengan informasi produk spesifik yang disediakan oleh produsen.

[Tip] Tip

Karena CD/DVD-R dan kertas hanya memiliki 1 siklus penulisan, mereka secara inheren mencegah kehilangan data yang tidak disengaja dengan menimpa. Ini adalah keuntungan!

[Tip] Tip

Jika Anda memerlukan cadangan data dalam jumlah besar dan sering, hard disk pada host jarak jauh yang dihubungkan oleh koneksi jaringan cepat, mungkin satu-satunya pilihan yang realistis.

[Tip] Tip

Jika Anda menggunakan media yang dapat ditulis ulang untuk cadangan Anda, penggunaan sistem berkas seperti btrfs atau zfs yang mendukung snapshot hanya baca mungkin merupakan ide yang baik.

Perangkat penyimpanan lepasan mungkin salah satu dari yang berikut ini.

Mereka dapat dihubungkan melalui salah satu dari yang berikut.

Lingkungan desktop modern seperti GNOME dan KDE dapat mengait perangkat lepasan ini secara otomatis tanpa entri "/etc/fstab" yang cocok.

  • Paket udisks2 menyediakan daemon dan utilitas terkait untuk mengait dan melepas kait perangkat-perangkat ini.

  • D-bus membuat kejadian-kejadian untuk memulai proses otomatis.

  • PolicyKit memberikan hak istimewa yang diperlukan.

[Tip] Tip

Perangkat yang dikait otomatis mungkin memiliki opsi mount "uhelper=" yang digunakan oleh umount(8).

[Tip] Tip

Mengait otomatis di bawah lingkungan desktop modern terjadi hanya ketika perangkat media lepasan tidak terdaftar di "/etc/fstab".

Titik kait di bawah lingkungan desktop modern dipilih sebagai "/media/username/disk_label" yang dapat disesuaikan dengan hal-hal berikut.

  • mlabel(1) untuk sistem berkas FAT

  • genisoimage(1) dengan opsi "-V" untuk sistem berkas ISO9660

  • tune2fs(1) dengan opsi "-L" untuk sistem berkas ext2/ext3/ext4

[Tip] Tip

Pilihan pengodean mungkin perlu disediakan sebagai opsi kait (lihat Bagian 8.1.3, “Pengodean nama berkas”).

[Tip] Tip

Penggunaan menu GUI untuk melepas kait sistem berkas dapat menghapus node perangkat yang dihasilkan secara dinamis seperti "/dev/sdc". Jika Anda ingin menyimpan node perangkatnya, lepas kait dengan perintah umount(8) dari prompt shell.

Saat berbagi data dengan sistem lain melalui perangkat penyimpanan lepasan, Anda harus memformatnya dengan sistem berkas umum yang didukung oleh kedua sistem. Berikut adalah daftar pilihan sistem berkas.


[Tip] Tip

Lihat Bagian 9.9.1, “Enkripsi disk lepasan dengan dm-crypt/LUKS” untuk berbagi data lintas platform menggunakan enkripsi tingkat perangkat.

Sistem berkas FAT didukung oleh hampir semua sistem operasi modern dan cukup berguna untuk tujuan pertukaran data melalui media lepasan seperti hard disk.

Saat memformat perangkat lepasan seperti hard disk untuk berbagi data lintas platform dengan sistem berkas FAT, berikut ini harus menjadi pilihan yang aman.

Saat menggunakan sistem berkas FAT atau ISO9660 untuk berbagi data, berikut ini harus menjadi pertimbangan yang aman.

  • Pengarsipan berkas ke dalam berkas arsip terlebih dahulu menggunakan tar(1), atau cpio(1) untuk mempertahankan nama berkas yang panjang, taut simbolis, izin berkas Unix asli dan informasi pemilik.

  • Memecah berkas arsip menjadi potongan kurang dari 2 GiB dengan perintah split(1) untuk melindunginya dari batasan ukuran berkas.

  • Mengenkripsi berkas arsip untuk mengamankan isinya dari akses yang tidak sah.

[Catatan] Catatan

Untuk sistem berkas FAT dengan desainnya, ukuran berkas maksimum adalah (2^32 - 1) byte = (4GiB - 1 byte). Untuk beberapa aplikasi pada OS 32 bit yang lebih tua, ukuran berkas maksimum bahkan lebih kecil (2^31 - 1) byte = (2GiB - 1 byte). Debian tidak mengalami masalah yang terakhir.

[Catatan] Catatan

Microsoft sendiri tidak merekomendasikan untuk menggunakan FAT bagi drive atau partisi lebih dari 200 MB. Microsoft menyoroti kekurangannya seperti penggunaan ruang disk yang tidak efisien dalam "Overview of FAT, HPFS, and NTFS File Systems" mereka. Tentu saja, kita biasanya harus menggunakan sistem berkas ext4 untuk Linux.

[Tip] Tip

Untuk informasi lebih lanjut tentang sistem berkas dan mengakses sistem berkas, silakan baca Filesystems HOWTO".

Kita semua tahu bahwa komputer gagal suatu saat atau kesalahan manusia menyebabkan kerusakan sistem dan data. Operasi pencadangan dan pemulihan adalah bagian penting dari administrasi sistem yang sukses. Semua mode kegagalan yang mungkin menimpa Anda suatu hari nanti.

[Tip] Tip

Jaga sistem cadangan Anda sederhana dan seringlah mencadangkan sistem Andag. Memiliki data cadangan lebih penting daripada seberapa baik metode cadangan Anda secara teknis.

Ada 3 faktor kunci yang menentukan kebijakan pencadangan dan pemulihan yang sebenarnya.

  1. Mengetahui apa yang harus dicadangkan dan dipulihkan.

  2. Mengetahui cara membuat cadangan dan memulihkan.

    • Penyimpanan data yang aman: perlindungan dari penimpaan dan kegagalan sistem

    • Pencadangan yang sering: cadangan terjadwal

    • Cadangan redundan: mirroring data

    • Proses fool proof: pencadangan dengan perintah tunggal yang mudah

  3. Menilai risiko dan biaya yang terlibat.

    • Risiko data saat hilang

      • Data harus setidaknya pada partisi disk yang berbeda, sebaiknya pada disk dan mesin yang berbeda agar bertahan atas korupsi sistem berkas. Data penting paling baik disimpan pada sistem berkas hanya baca. [4]

    • Risiko data saat bocor

      • Data identitas sensitif seperti "/etc/ssh/ssh_host_*_key", "~/.gnupg/*", "~/.ssh/*", "~/.local/share/keyrings/*", "/etc/passwd", "/etc/shadow", "popularity-contest.conf", "/etc/ppp/pap-secrets", and "/etc/exim4/passwd.client" harus dicadangkan maupun dienkripsi. [5] (Lihat Bagian 9.9, “Tips enkripsi data”.)

      • Jangan pernah menanam kata sandi login sistem atau frasa sandi dekripsi dalam skrip apa pun bahkan pada sistem terpercaya apa pun. (Lihat Bagian 10.3.6, “Ring kunci kata sandi”.)

    • Mode kegagalan dan kemungkinannya

      • Perangkat keras (terutama HDD) akan rusak

      • Sistem berkas mungkin terkorupsi dan data di dalamnya mungkin hilang

      • Sistem penyimpanan jarak jauh tidak dapat dipercaya untuk pelanggaran keamanan

      • Perlindungan kata sandi yang lemah dapat dengan mudah dikompromikan

      • Sistem izin berkas mungkin terkompromi

    • Sumber daya yang diperlukan untuk membuat cadangan: manusia, perangkat keras, perangkat lunak, …

      • Pencadangan terjadwal otomatis dengan pekerjaan cron atau pekerjaan timer systemd

[Tip] Tip

Anda dapat memulihkan data konfigurasi debconf dengan "debconf-set-selections debconf-selections" dan data seleksi dokg dengan "dpkg --set-selection <dpkg-selections.list".

[Catatan] Catatan

Jangan mencadangkan konten sistem berkas pseudo yang ditemukan pada /proc, /sys, /tmp, dan /run (lihat Bagian 1.2.12, “procfs dan sysfs” dan Bagian 1.2.13, “tmpfs”). Kecuali Anda tahu persis apa yang Anda lakukan, mereka adalah data besar yang tidak berguna.

[Catatan] Catatan

Anda mungkin ingin menghentikan beberapa daemon aplikasi seperti MTA (lihat Bagian 6.2.4, “Agen transportasi surat (mail transport agent/MTA)”) saat mencadangkan data.

Berikut adalah daftar keluarga utilitas pencadangan terkemuka yang tersedia di sistem Debian.

Tabel 10.5. Daftar utilitas keluarga pencadangan

paket popcon ukuran deskripsi
bacula-common V:8, I:10 2305 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - berkas dukungan umum
bacula-client V:0, I:2 178 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - meta-paket klien
bacula-console V:0, I:3 112 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - konsol teks
bacula-server I:0 178 Bacula: pencadangan jaringan, pemulihan, dan verifikasi - meta-paket server
amanda-common V:0, I:2 9897 Amanda: Advanced Maryland Automatic Network Disk Archiver (Pustaka)
amanda-client V:0, I:2 1092 Amanda: Advanced Maryland Automatic Network Disk Archiver (Klien)
amanda-server V:0, I:0 1077 Amanda: Advanced Maryland Automatic Network Disk Archiver (Server)
backuppc V:2, I:2 3178 BackupPC adalah sistem kinerja tinggi, tingkat enterprise untuk mencadangkan PC (berbasis disk)
duplicity V:30, I:50 1973 cadangan (jarak jauh) inkremental
deja-dup V:28, I:44 4992 GUI frontend for duplicity
borgbackup V:11, I:20 3301 (remote) deduplicating backup
borgmatic V:2, I:3 509 borgbackup helper
rdiff-backup V:4, I:10 1203 cadangan (jarak jauh) inkremental
restic V:2, I:6 21385 cadangan (jarak jauh) inkremental
backupninja V:2, I:3 360 sistem meta-backup ringan dan dapat diperluas
flexbackup V:0, I:0 243 cadangan (jarak jauh) inkremental
slbackup V:0, I:0 151 cadangan (jarak jauh) inkremental
backup-manager V:0, I:1 566 alat pencadangan baris perintah
backup2l V:0, I:0 115 alat cadangan/pemulihan pemeliharaan rendah untuk media yang dapat dikait (berbasis disk)

Alat cadangan memiliki fokus khusus mereka.

  • Mondo Rescue adalah sistem pencadangan untuk memfasilitasi pemulihan sistem lengkap dengan cepat dari CD/DVD cadangan dll. tanpa melalui proses instalasi sistem normal.

  • Bacula, Amanda, dan BackupPC adalah utilitas keluarga pencadangan berfitur lengkap yang berfokus pada cadangan reguler melalui jaringan.

  • Duplicity, and Borg are simpler backup utilities for typical workstations.

For a personal workstation, full featured backup suite utilities designed for the server environment may not serve well. At the same time, existing backup utilities for workstations may have some shortcomings.

Here are some tips to make backup easier with minimal user efforts. These techniques may be used with any backup utilities.

For demonstration purpose, let's assume the primary user and group name to be penguin and create a backup and snapshot script example "/usr/local/bin/bkss.sh" as:

#!/bin/sh -e
SRC="$1" # source data path
DSTFS="$2" # backup destination filesystem path
DSTSV="$3" # backup destination subvolume name
DSTSS="${DSTFS}/${DSTSV}-snapshot" # snapshot destination path
if [ "$(stat -f -c %T "$DSTFS")" != "btrfs" ]; then
  echo "E: $DESTFS needs to be formatted to btrfs" >&2 ; exit 1
fi
MSGID=$(notify-send -p "bkup.sh $DSTSV" "in progress ...")
if [ ! -d "$DSTFS/$DSTSV" ]; then
  btrfs subvolume create "$DSTFS/$DSTSV"
  mkdir -p "$DSTSS"
fi
rsync -aHxS --delete --mkpath "${SRC}/" "${DSTFS}/${DSTSV}"
btrfs subvolume snapshot -r "${DSTFS}/${DSTSV}" ${DSTSS}/$(date -u --iso=min)
notify-send -r "$MSGID" "bkup.sh $DSTSV" "finished!"

Here, only the basic tool rsync(1) is used to facilitate system backup and the storage space is efficiently used by Btrfs.

[Tip] Tip

FYI: This author uses his own similar shell script "bss: Btrfs Subvolume Snapshot Utility" for his workstation.

Here is an example to setup the single GUI click backup.

For each GUI click, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created.

Here is an example to setup for the automatic backup triggered by the mount event.

  • Prepare a USB storage device to be used for backup as in Bagian 10.2.3.1, “GUI backup”.

  • Create a systemd service unit file "~/.config/systemd/user/back-BKUP.service" as:

    [Unit]
    Description=USB Disk backup
    Requires=media-%u-BKUP.mount
    After=media-%u-BKUP.mount
    
    [Service]
    ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
    StandardOutput=append:%h/.cache/systemd-snap.log
    StandardError=append:%h/.cache/systemd-snap.log
    
    [Install]
    WantedBy=media-%u-BKUP.mount
    
  • Enable this systemd unit configuration with the following:

     $ systemctl --user enable bkup-BKUP.service
    

For each mount event, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created.

Here, names of systemd mount units that systemd currently has in memory can be asked to the service manager of the calling user with "systemctl --user list-units --type=mount".

Here is an example to setup for the automatic backup triggered by the timer event.

  • Prepare a USB storage device to be used for backup as in Bagian 10.2.3.1, “GUI backup”.

  • Create a systemd timer unit file "~/.config/systemd/user/snap-Documents.timer" as:

    [Unit]
    Description=Run btrfs subvolume snapshot on timer
    Documentation=man:btrfs(1)
    
    [Timer]
    OnStartupSec=30
    OnUnitInactiveSec=900
    
    [Install]
    WantedBy=timers.target
    
  • Create a systemd service unit file "~/.config/systemd/user/snap-Documents.service" as:

    [Unit]
    Description=Run btrfs subvolume snapshot
    Documentation=man:btrfs(1)
    
    [Service]
    Type=oneshot
    Nice=15
    ExecStart=/usr/local/bin/bkss.sh %h/Documents /media/%u/BKUP Documents
    IOSchedulingClass=idle
    CPUSchedulingPolicy=idle
    StandardOutput=append:%h/.cache/systemd-snap.log
    StandardError=append:%h/.cache/systemd-snap.log
    
  • Enable this systemd unit configuration with the following:

     $ systemctl --user enable snap-Documents.timer
    

For each timer event, your data is backed up from "~/Documents" to a USB storage device and a read-only snapshot is created.

Here, names of systemd timer user units that systemd currently has in memory can be asked to the service manager of the calling user with "systemctl --user list-units --type=timer".

For the modern desktop system, this systemd approach can offer more fine grained control than the traditional Unix ones using at(1), cron(8), or anacron(8).

Infrastruktur keamanan data disediakan oleh kombinasi alat enkripsi data, alat message digest, dan alat tanda tangan.


Lihat Bagian 9.9, “Tips enkripsi data” pada dm-crypt dan fscrypt yang menerapkan infrastruktur enkripsi data otomatis melalui modul kernel Linux.

Berikut adalah perintah GNU Privacy Guard untuk manajemen kunci dasar.


Berikut adalah arti dari kode kepercayaan.


Yang berikut ini mengunggah kunci saya "1DD8D791" ke keyserver populer "hkp://keys.gnupg.net".

$ gpg --keyserver hkp://keys.gnupg.net --send-keys 1DD8D791

Keyserver baku yang baik diatur dalam "~/.gnupg/gpg.conf" (atau lokasi lama "~/.gnupg/options") berisi hal berikut.

keyserver hkp://keys.gnupg.net

Yang berikut ini mendapatkan kunci yang tidak diketahui dari keyserver.

$ gpg --list-sigs --with-colons | grep '^sig.*\[User ID not found\]' |\
          cut -d ':' -f 5| sort | uniq | xargs gpg --recv-keys

Ada bug di OpenPGP Public Key Server (pra-versi 0.9.6) yang merusak kunci dengan lebih dari 2 sub-kunci. Paket gnupg (>1.2.1-2) yang lebih baru dapat menangani subkunci yang rusak ini. Lihat gpg(1) di bawah opsi "--repair-pks-subkey-bug".

md5sum(1) menyediakan utilitas untuk membuat berkas digest menggunakan metode dalam rfc1321 dan memverifikasi setiap berkas dengan itu.

$ md5sum foo bar >baz.md5
$ cat baz.md5
d3b07384d113edec49eaa6238ad5ff00  foo
c157a79031e1c40f85931829bc5fc552  bar
$ md5sum -c baz.md5
foo: OK
bar: OK
[Catatan] Catatan

Perhitungan untuk jumlah MD5 kurang CPU intensif daripada yang untuk tanda tangan kriptografi oleh GNU Privacy Guard (GnuPG). Biasanya, hanya berkas digest tingkat atas yang ditandatangani secara kriptografis untuk memastikan integritas data.

Ada banyak alat gabungan untuk kode sumber. Perintah berikut menarik perhatian saya.

Tabel 10.10. Daftar alat penggabungan kode sumber

paket popcon ukuran perintah deskripsi
patch V:97, I:700 248 patch(1) menerapkan berkas diff ke yang asli
vim V:95, I:369 3743 vimdiff(1) membandingkan 2 berkas berdampingan di vim
imediff V:0, I:0 200 imediff(1) alat gabungan 2/3 arah layar penuh interaktif
meld V:7, I:30 3536 meld(1) membandingkan dan menggabungkan berkas (GTK)
wiggle V:0, I:0 175 wiggle(1) menerapkan patch yang ditolak
diffutils V:862, I:996 1735 diff(1) membandingkan berkas baris per baris
diffutils V:862, I:996 1735 diff3(1) membandingkan dan menggabungkan tiga berkas baris demi baris
quilt V:2, I:22 871 quilt(1) mengelola serangkaian patch
wdiff V:7, I:51 648 wdiff(1) menampilkan perbedaan kata antara berkas-berkas teks
diffstat V:13, I:121 74 diffstat(1) menghasilkan histogram perubahan oleh diff
patchutils V:16, I:119 232 combinediff(1) membuat patch kumulatif dari dua patch inkremental
patchutils V:16, I:119 232 dehtmldiff(1) mengekstrak diff dari halaman HTML
patchutils V:16, I:119 232 filterdiff(1) mengekstrak atau mengecualikan diff dari berkas diff
patchutils V:16, I:119 232 fixcvsdiff(1) memperbaiki berkas diff yang dibuat oleh CVS yang oleh patch(1) disalahtafsir
patchutils V:16, I:119 232 flipdiff(1) menukar urutan dua patch
patchutils V:16, I:119 232 grepdiff(1) menunjukkan berkas mana yang dimodifikasi oleh patch yang cocok dengan regex
patchutils V:16, I:119 232 interdiff(1) menunjukkan perbedaan antara dua berkas diff unified
patchutils V:16, I:119 232 lsdiff(1) menunjukkan berkas mana yang dimodifikasi oleh patch
patchutils V:16, I:119 232 recountdiff(1) hitung ulang cacah dan ofset dalam diff konteks terpadu
patchutils V:16, I:119 232 rediff(1) memperbaiki ofset dan cacah diff yang disunting dengan tangan
patchutils V:16, I:119 232 splitdiff(1) memisahkan patch inkremental
patchutils V:16, I:119 232 unwrapdiff(1) demangle patch yang telah berganti baris
dirdiff V:0, I:1 167 dirdiff(1) menampilkan perbedaan dan menggabungkan perubahan antara pohon direktori
docdiff V:0, I:0 553 docdiff(1) membandingkan dua berkas kata demi kata / huruf demi huruf
makepatch V:0, I:0 100 makepatch(1) menghasilkan berkas patch yang diperluas
makepatch V:0, I:0 100 applypatch(1) menerapkan berkas patch yang diperluas

Git adalah alat pilihan hari ini untuk sistem kontrol versi (version control system/VCS) karena Git dapat melakukan segalanya untuk manajemen kode sumber lokal dan jarak jauh.

Debian menyediakan layanan Git bebas melalui layanan Debian Salsa. Dokumentasinya dapat ditemukan di https://wiki.debian.org/Salsa.

Berikut adalah beberapa paket terkait Git.


Operasi Git melibatkan beberapa data.

  • The working tree which holds user facing files and to which you make changes.

    • Perubahan yang akan dicatat harus dipilih secara eksplisit dan dipentaskan ke indeks. Ini adalah perintah git add dan git rm.

  • Indeks penyimpan berkas yang di-stage.

    • Berkas yang di-stage akan di-commit ke repositori lokal atas permintaan berikutnya. Ini adalah perintah git commit.

  • Repositori lokal yang menyimpan berkas yang di-commit.

    • Git mencatat riwayat tertaut dari data yang di-commit dan mengaturnya sebagai branch dalam repositori.

    • Repositori lokal dapat mengirim data ke repositori jarak jauh dengan perintah git push.

    • Repositori lokal dapat menerima data dari repositori jarak jauh dengan perintah git fetch dan git pull.

      • Perintah git pull melakukan perintah git merge atau git rebase setelah perintah git fetch.

      • Di sini, git merge menggabungkan dua branch sejarah yang terpisah di akhir hingga satu titik. (Ini adalah baku dari git pull tanpa penyesuaian dan mungkin baik untuk orang hulu yang mempublikasikan cabang kepada banyak orang.)

      • Di sini, git rebase menciptakan satu cabang tunggal sejarah berurutan dari cabang remote yang diikuti oleh cabang lokal. (Ini adalah kasus penyesuaian pull.rebase true dan mungkin baik untuk kita semua.)

  • Repositori jarak jauh yang menyimpan berkas yang di-commit.

    • Komunikasi ke repositori jarak jauh menggunakan protokol komunikasi yang aman seperti SSH atau HTTPS.

Pohon kerja adalah berkas-berkas di luar direktori .git/. Berkas di dalam direktori .git/ menyimpan indeks, data repositori lokal, dan beberapa berkas teks konfigurasi git.

Berikut adalah ikhtisar perintah Git utama.


Berikut adalah tips Git.

Tabel 10.13. Tips Git

Baris perintah Git fungsi
gitk --all melihat sejarah Git lengkap dan beroperasi pada mereka seperti mengatur ulang HEAD ke commit lain, cherry-pick patch, membuat tag dan branch ...
git stash mengambil pohon kerja bersih tanpa kehilangan data
git remote -v memeriksa pengaturan untuk remote
git branch -vv memeriksa pengaturan untuk branch
git status menampilkan status pohon kerja
git config -l daftar pengaturan git
git reset --hard HEAD; git clean -x -d -f mengembalikan semua perubahan pohon kerja dan membersihkannya sepenuhnya
git rm --cached namaberkas memulihkan indeks ter-stage yang diubah oleh git add nama_berkas
git reflog dapatkan log referensi (berguna untuk memulihkan commit dari branch yang dihapus)
git branch nama_branch_baru HEAD@{6} membuat branch baru dari informasi reflog
git remote add remote_baru URL menambahkan repositori jarak jauh new_remote yang diacu oleh URL
git remote rename origin upstream mengganti nama repositori jarak jauh dari origin ke upstream
git branch -u upstream/nama_branch mengatur pelacakan jarak jauh ke repositori jarak jauh di upstream dan nama branch-nya branch_name.
git remote set-url origin https://foo/bar.git mengubah URL origin
git remote set-url --push upstream DISABLED nonaktifkan push ke upstream (Sunting .git/config untuk mengaktifkan kembali)
git remote update upstream fetch updates of all remote branches in the upstream repository
git fetch upstream foo:upstream-foo create a local (possibly orphan) upstream-foo branch as a copy of foo branch in the upstream repository
git checkout -b topic_branch ; git push -u topic_branch origin membuat topic_branch baru dan mem-push ke origin
git branch -m namalama namabaru mengganti nama nama cabang lokal
git push -d origin branch_yang_akan_dihapus menghapus branch remote (metode baru)
git push origin :branch_yang_akan_dihapus menghapus branch remote (metode lama)
git checkout --orphan unconnected membuat branch baru yang tidak terhubung
git rebase -i origin/main reorder/drop/squish commit dari origin/main untuk membersihkan riwayat branch
git reset HEAD^; git commit --amend squash 2 commit terakhir menjadi satu
git checkout topic_branch ; git merge --squash topic_branch squash seluruh topic_branch menjadi satu commit
git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*' mengubah klon shallow menjadi klon penuh dari semua branch
git ime membagi commit terakhir menjadi serangkaian commit berkas demi berkas yang lebih kecil dll. (paket imediff diperlukan)
git repack -a -d; git prune mengemas ulang repositori lokal ke dalam satu pack (ini dapat membatasi kemungkinan pemulihan data yang hilang dari branch yang terhapus, dll.)

[Awas] Awas

Jangan gunakan string tag dengan spasi di dalamnya bahkan jika beberapa alat seperti gitk(1) mengizinkan Anda untuk menggunakannya. Ini mungkin mencekik beberapa perintah git lainnya.

[Perhatian] Perhatian

Jika branch lokal yang telah di-push ke repositori jarak jauh di-rebase atau di-squash, mem-push branch ini memiliki risiko dan membutuhkan opsi --force. Ini biasanya tidak dapat diterima untuk branch main tetapi mungkin dapat diterima untuk branch topik sebelum merge ke branch main.

[Perhatian] Perhatian

Menjalankan suatu sub perintah git langsung sebagai "git-xyz" dari baris perintah telah usang sejak awal 2006.

[Tip] Tip

Jika ada berkas yang dapat dieksekusi git-foo di path yang ditentukan oleh $PATH, memasukkan "git foo" tanpa tanda hubung ke baris perintah memanggil git-fooini. Ini adalah fitur dari perintah git.

Lihat yang berikut.



[4] Media write-once seperti CD/DVD-R dapat mencegah kecelakaan penimpaan. (Lihat Bagian 9.8, “Data biner” tentang cara menulis ke media penyimpanan dari baris perintah shell. Lingkungan GUI desktop GNOME memberi Anda akses mudah melalui menu: "Tempat→Pencipta CD/DVD".)

[5] Sebagian data ini tidak dapat diregenerasi dengan memasukkan string masukan yang sama ke sistem.

[6] Jika Anda menggunakan "~/.vimrc" bukan "~/.vim/vimrc", silakan ganti sesuai dengan itu.