Amankan saudaramu, amankan ...
ZFS 0.8 memiliki kemampuan untuk mengirim snapshot inkremental data terenkripsi tanpa mendekripsi. Artinya, memiliki array terenkripsi, Anda dapat mengatur salinan cermin itu pada mesin jarak jauh, tidak mempercayai pemilik tempat jauh. Data kunci dan dekripsi tidak meninggalkan tempat tepercaya.Tidak ada satu pun klien saya (mikrokontroler) yang memiliki lebih dari satu ruang server, jika kebakaran datang ke sana, misalnya bintang. Setelah sepakat dengan kolega Anda dalam bisnis admin yang berbahaya, Anda dapat saling melindungi satu sama lain tanpa takut mereka mungkin menggunakan data tersebut.Setiap layanan dalam bentuk mesin virtual diinstal pada Proxmox, di mana data berada di ZFS, dan Anda akan selalu memiliki kesempatan untuk menyimpan salinan jarak jauh dari mesin virtual tersebut. Ada kemungkinan bahwa suatu hari, alih-alih jatuh dalam kesedihan, Anda akan pergi ke ruang terpencil, mengambil sepotong besi dan menjalankan semua layanan dengan kesehatan yang baik. Saya sudah mentransfer hampir semua layanan saya ke Proxmox sekitar 2 tahun yang lalu dan saya tidak menyesal, semuanya bekerja dengan baik. Di ZFS, saya memiliki server terminal untuk 30 orang, yang terkait dengan klien tipis (yaitu, 30 pekerjaan penuh). Selain salinan saat ini, Anda juga akan memiliki snapshot selama x hari terakhir baik secara lokal maupun jarak jauh.Ya, Anda akan kehilangan produktivitas karena penggunaan zfs dan enkripsi, tetapi untuk diri saya sendiri sampai pada kesimpulan bahwa saya siap membayar harga ini untuk fungsionalitas tersebut.Satu sendok tar
Saat mengatasinya Anda segera terbang dalam salep. Ya, ZFS lebih lambat. Intinya. Tetapi Anda tidak dapat menggunakannya sebagai fs biasa. Ini harus bekerja dalam array disk, di mana peningkatan jumlah disk diterima, disk sebaiknya SAS, controller harus bekerja dalam mode HBA (dan bukan raid0 sebagai disk tunggal), harus ada RAM ECC dan harus banyak, harus ada satu, harus ada satu SSD (PCI-E yang lebih baik) sebagai cache untuk membaca level kedua (kecil, pertunjukan dari 64) dan satu SSD untuk ZIL bisa sangat kecil, tetapi lebih disukai MLC.Mengenai SSD, saya memakai rekomendasi ini dan membeli 2 PCI-E SSD 128 dan masing-masing dibagi menjadi 16 pertunjukan dan sisanya. Saya meluncurkan dua partisi 16 gigabyte di ZIL sebagai mirror dan meluncurkan bagian yang tersisa di bawah cache level kedua sebagai stripe. Pada belas kasihan zfs memberi 16 pertunjukan opera. (Satu slot pada seorang ibu yang dibeli dengan ebay ternyata tidak berfungsi; jika berhasil, itu akan memberi 32)zfskeeper.sh
Dari skrip saya membutuhkan pemberitahuan masalah secara otomatis, memantau jumlah buncis di kedua ujungnya dan kontrol kecepatan. Dari skrip yang jatuh ke tangan saya, tidak ada skrip yang memuaskan saya. Di bawah ini saya akan memberikan beberapa skrip yang saya ulas sebelum melakukan ini. Untuk menerima pemberitahuan melalui email, ganti data saya di fungsi send_error_to_mail () Anda denganbantuan zfskeeper.sh Anda akan menunjukkan kepada Anda contoh penggunaanzfskeeper.sh prep akan memberi tahu Anda prosedur tindakan persiapan (disarankan)bank zfskeeper.sh / terenkripsi / subvol-100-disk-0 10 akan mengambil snapshot saat ini dan meninggalkan 10 snapshotterakhir bank zfskeeper.sh / terenkripsi / subvol-100-disk-0 10 Remotehost 22 10m bank replikator / rtl / subvol-100-disk-0 20Kirim data yang tidak terenkripsi ke remotehost: 22 di bawah replikator pengguna dengan kecepatan hingga 10 MB / s dan meninggalkan 10 gambar pada sumber dan 20 pada host remotezfskeeper.sh bank / terenkripsi / subvol-100-disk-0 10 Remotehost 22 bank 10m replikator / rtl / subvol -100-disk-0 20 -w hal yang sama, tetapi data akan dienkripsi#!/bin/bash
zpool=$1
lsnaps=$2
ip=$3
port=$4
speedl=$5
remoteuser=$6
backpool=$7
rsnaps=$8
sendargs=$9
ZFSLOGDIR=~/zfskeeplogs
if [ ! -d "$ZFSLOGDIR" ]; then
mkdir -p $ZFSLOGDIR
fi
NAMESNAP=`date "+%Y_%m_%d_%T"|sed s/:/_/g`
logfile=$ZFSLOGDIR/$NAMESNAP.log
write_to_log ()
{
echo `date +"%T"`" $1" >> $logfile
}
log_last_command ()
{
if [ $? -ne 0 ]; then
write_to_log "$1 FAILED."
if [ $2 = true ]; then
write_to_log "Script execution stops"
send_error_to_mail "$1" "$?" "$*"
exit 1
fi
else
write_to_log "$1 COMPLETED."
fi
}
send_error_to_mail ()
{
Subject=`hostname`" ZFS backup $zpool missing"
swaks --header "Subject: $Subject" --to admin@mydomain.ru --from "alertbot@mydomain.ru" -a LOGIN -au alertbot@mydomain.ru -ap ailPass --server mail.mydomain.ru -tls --body \
"$Subject
command: zfskeeper.sh $3
$1
$2" \
--attach $logfile
}
case "$#" in
1)
case "$1" in
prepare)
echo "
Sender mashine:
apt install swaks mbuffer
useradd -s /bin/bash replicator
mkdir -p /home/replicator
chown replicator:replicator /home/replicator
zfs allow -u replicator send,snapshot,destroy,mount bank/encrypted
su replicator
ssh-keygen
Receiver machine:
ln -s /usr/sbin/zfs /usr/local/bin/zfs
useradd -s /bin/bash replicator
mkdir -p /home/replicator
chown replicator:replicator /home/replicator
passwd replicator
Sender mashine:
ssh-copy-id -i .ssh/id_rsa.pub Remotehost
zfs allow -u replicator compression,create,receive,destroy,mount bank/companyname
"
;;
*)
echo "
Usage:
To show the prepare instrutions:
zfskeeper.sh prepare
localkeeping:
keep last 10 snapshots of bank/encrypted/subvol-100-disk-0
zfskeeper.sh bank/encrypted/subvol-100-disk-0 10
remotekeeping:
keep last 10 snapshots bank/encrypted/subvol-100-disk-0 and send it by ssh to Remotehost:22 bank/rtl/subvol-100-disk-0
and keep last 20 copies by replicator user and limit transferspeed 10Mb/s
zfskeeper.sh bank/encrypted/subvol-100-disk-0 10 Remotehost 22 10m replicator bank/rtl/subvol-100-disk-0 20
If you need to send encrypted data, then you need add -w to the end of the line
zfskeeper bank/encrypted/subvol-100-disk-0 10 Remotehost 22 10m replicator bank/rtl/subvol-100-disk-0 20 -w
"
;;
esac
exit 0
;;
2)
echo `date +"%T"`" Local keeping of $NAMESNAP being started" > $logfile
;;
8|9)
echo `date +"%T"`" Remote keeping of $NAMESNAP being started" > $logfile
;;
*)
echo "illegal number of parameters" >&2
exit 1
;;
esac
numsnap=`zfs list -H -o name -t snapshot -s creation|grep "${zpool}@"|wc|awk '{ print $1 }'`
let MAXSNAP=numsnap-lsnaps+1 >/dev/null
if [ $MAXSNAP -gt 0 ] ; then
for d in `zfs list -H -o name -t snapshot -s creation| grep "${zpool}@"|/usr/bin/head -n"$MAXSNAP"`; do
zfs destroy ${d}
log_last_command "Remove local snapshot $d"
done
fi
zfs snapshot $zpool@backup_$NAMESNAP
log_last_command "Create local $zpool@backup_$NAMESNAP" true
if [ -z "$backpool" ]; then
write_to_log "Local keeping is complete"
exit 0
fi
if [ -n "$ip" ]; then
if ping -c 1 $ip > null ; then
sship="ssh -c aes128-ctr -p"$port" -l"$remoteuser" "$ip
else
echo "URL $ip is not accesiible, abort"
send_error_to_mail "Try to ping remote host" "URL $ip is not accesiible, abort" "$*"
exit 1
fi
else
exit 0
fi
numsnap=`$sship zfs list -H -o name -t snapshot -s creation|grep "${backpool}@"|wc|awk '{ print $1 }'`
let MAXSNAP=numsnap-rsnaps+1 >/dev/null
if [ $MAXSNAP -gt 0 ] ; then
for d in `$sship zfs list -H -o name -t snapshot -s creation| grep "${backpool}@"|/usr/bin/head -n"$MAXSNAP"`; do
$sship zfs destroy ${d}
log_last_command "Remove local snapshot $d"
done
fi
MOST_SLAVE_SNAP_NAME=`$sship zfs list -H -o name -t snapshot -s creation|grep "$backpool@backup"|tail -n1|awk -F "@" '{print $2}'`
if [ -n "`zfs list -H -o name -t snapshot -s creation|grep -w "$zpool@$MOST_SLAVE_SNAP_NAME"`" ]; then
zfs send $sendargs -i $MOST_SLAVE_SNAP_NAME $zpool@backup_$NAMESNAP | mbuffer -q -v 0 -s 128k -m 1G | pv -L $speedl | $sship "mbuffer -q -v 0 -s 128k -m 1G | zfs receive -vF $backpool@backup_$NAMESNAP" &>> $logfile
log_last_command "Sending incremental backup to the remote machine" true
else
if [ -n "`$sship zfs list -H -o name -s creation|grep -w "$backpool"`" ]; then
$sship zfs destroy -r $backpool 2>> $logfile
log_last_command "Need to destroy remotepool for full sending $backpool" true
fi
zfs send $sendargs $zpool@backup_$NAMESNAP | mbuffer -q -v 0 -s 128k -m 1G | pv -L $speedl | $sship "mbuffer -q -v 0 -s 128k -m 1G | zfs receive -vF $backpool" &>> $logfile
log_last_command "Sending full backup to the remote machine" true
fi
write_to_log "Remote keeping is complete"
exit 0
zfskeepall.sh
Untuk menjaga agar beberapa bagian tetap kencang, Anda memerlukan skrip kontrol. Semua orang sudah bisa membuatnya sesuai selera dan warna, tergantung pada konfigurasi. Tes saya terlihat seperti ini:#!/bin/bash
scriptpath=/home/replicator/zfskeeper.sh
$scriptpath bank/encrypted/subvol-100-disk-0 5 RemoteHost 22 30m replicator bank/rtl/subvol-100-disk-0 5 -w
Solusi yang ada
Saya menemukannya pertama kali, atas dasar itu saya memeriksa keseluruhan operabilitas mekanisme. Terima kasih kepada penulis, tetapi gaya penulisan agak kotor, harus ditulis ulang dengan jelas.zfs-auto-snapshot.sh hanyalah sebuah blok. Ada sesuatu untuk dipinjam, indah, rapi, tapi besar dan fungsionalrendah zfsbackup.sh - jugaPS yang rapi, tapi rendah fungsional. Saya menggigit zfs dari ketiga kalinya, setiap kali saya menggigiti sekitar sebulan. Saya tidak bisa membuatnya bekerja dengan cepat, dan gagal sepenuhnya. Secara umum, situasi berubah setelah menginstal disk SAS (setidaknya 7200, setidaknya NL).Damai untuk semua orang! Terima kasih telah membaca!