Backup OS (toàn bộ partition)
Backup toàn bộ OS partition phải cho khả năng phục hồi OS partition. Nghĩa là chạy OS trên một partition khác để phục hồi partition gốc.
Đơn giản nhất là thêm một partition trên ổ đĩa chạy OS và dùng rsync để backup.
/dev/sda1 # OS partition /dev/sda2 # Backup partition /dev/sda3 # Swap partition /dev/sda4 # Data partition ...
- Câu lệnh backup (khởi động vào /dev/sda1)
#!/bin/bash
mount /dev/sda2 /media
rsync -avx / /media
sed -i -r 's|^.+(\s+/\s+)|/dev/sda2\1|' /media/etc/fstab
umount /media
sed -i -r 's|root=[^ ]+ |root=/dev/sda2 |' /boot/cmdline.txt
echo "please reboot..."
- Câu lệnh restore (khởi động vào /dev/sda2)
#!/bin/bash
mount /dev/sda1 /media
rsync -avx / /media
sed -i -r 's|^.+(\s+/\s+)|/dev/sda1\1|' /media/etc/fstab
umount /media
sed -i -r 's|root=[^ ]+ |root=/dev/sda1 |' /boot/cmdline.txt
echo "please reboot..."
- Tổng hợp
#!/bin/bash # Backup /dev/sda1 vào /dev/sda2 và ngược lại # part=$(mount | grep -Po '^.+(?= on / )') [ "$part" = '/dev/sda1' ] && part='/dev/sda2' || part='/dev/sda1' read -n 1 -t 5 -p "Backup vào $part (Y/n)? " ans echo '' if [ -z "$ans" ] || [ "${ans,}" = 'y' ]; then mount "$part" /media rsync -avx --delete --quiet --exclude={"/tmp/*","/var/tmp/*","/var/log/*"} / /media sed -i -r "s|^.+(\s+/\s+)|$part\1|" /media/etc/fstab umount /media fi read -n 1 -t 5 -p "Reboot vào $part (Y/N)? " ans echo '' if [ "${ans,}" = 'y' ]; then sed -i -r "s|root=[^ ]+ |root=$part |" /boot/cmdline.txt boot=$(mount | grep -Po '^.+(?= on /boot )') if [ "$boot" != '/dev/mmcblk0p1' ]; then mount /dev/mmcblk0p1 /media rsync -avx --delete --quiet /boot/ /media fi sudo reboot fi
Backup thư mục
Giả sử thư mục /mnt/minidlna/picture đã sao chép backup lên Google Drive. Sau đó chúng ta không định kỳ backup các thay đổi trên thư mục picture mà cài đặt inotifywait trên thư mục này, mỗi khi có tạo/xoá thư mục/file thì chúng ta đồng bộ với Google Drive với chỉ thư mục/file đó thôi
#!/bin/bash /usr/bin/inotifywait -mrq -e delete -e close_write -e create -e moved_to - e moved_from --format '%e %w%f' /mnt/minidlna/picture | \ while read evt file; do evt=${evt^^} filename=${file#/mnt/minidlna/} case "$evt" in 'DELETE','MOVE_FROM') rclone delete remote:$filename ;; 'CLOSE_WRITE,CLOSE','MOVE_TO') rclone copy "$file" remote:"$(dirname $filename)/" -u ;; 'DELETE,ISDIR') rclone rmdir remote:"$filename" ;; 'CREATE,ISDIR') rclone mkdir remote:"$filename" ;; esac wait $! done
Backup data
Data được backup một lần. Sau đó định kỳ backup các thay đổi trên data theo kiểu version, các data cũ hơn vẫn còn lưu lại.