คุณสามารถใช้ rsync
Listing one: make_snapshot.sh
#!/bin/bash
# ----------------------------------------------------------------------
# mikes handy rotating-filesystem-snapshot utility
# ----------------------------------------------------------------------
# this needs to be a lot more general, but the basic idea is it makes
# rotating backup-snapshots of /home whenever called
# ----------------------------------------------------------------------
unset PATH # suggestion from H. Milz: avoid accidental use of $PATH
# ------------- system commands used by this script --------------------
ID=/usr/bin/id;
ECHO=/bin/echo;
MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;
TOUCH=/bin/touch;
RSYNC=/usr/bin/rsync;
# ------------- file locations -----------------------------------------
MOUNT_DEVICE=/dev/hdb1;
SNAPSHOT_RW=/root/snapshot;
EXCLUDES=/usr/local/etc/backup_exclude;
# ------------- the script itself --------------------------------------
# make sure we're running as root
if (( `$ID -u` != 0 )); then { $ECHO "Sorry, must be root. Exiting..."; exit; } fi
# attempt to remount the RW mount point as RW; else abort
$MOUNT -o remount,rw $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
$ECHO "snapshot: could not remount $SNAPSHOT_RW readwrite";
exit;
}
fi;
# rotating snapshots of /home (fixme: this should be more general)
# step 1: delete the oldest snapshot, if it exists:
if [ -d $SNAPSHOT_RW/home/hourly.3 ] ; then \
$RM -rf $SNAPSHOT_RW/home/hourly.3 ; \
fi ;
# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $SNAPSHOT_RW/home/hourly.2 ] ; then \
$MV $SNAPSHOT_RW/home/hourly.2 $SNAPSHOT_RW/home/hourly.3 ; \
fi;
if [ -d $SNAPSHOT_RW/home/hourly.1 ] ; then \
$MV $SNAPSHOT_RW/home/hourly.1 $SNAPSHOT_RW/home/hourly.2 ; \
fi;
# step 3: make a hard-link-only (except for dirs) copy of the latest snapshot,
# if that exists
if [ -d $SNAPSHOT_RW/home/hourly.0 ] ; then \
$CP -al $SNAPSHOT_RW/home/hourly.0 $SNAPSHOT_RW/home/hourly.1 ; \
fi;
# step 4: rsync from the system into the latest snapshot (notice that
# rsync behaves like cp --remove-destination by default, so the destination
# is unlinked first. If it were not so, this would copy over the other
# snapshot(s) too!
$RSYNC \
-va --delete --delete-excluded \
--exclude-from="$EXCLUDES" \
/home/ $SNAPSHOT_RW/home/hourly.0 ;
# step 5: update the mtime of hourly.0 to reflect the snapshot time
$TOUCH $SNAPSHOT_RW/home/hourly.0 ;
# and thats it for home.
# now remount the RW snapshot mountpoint as readonly
$MOUNT -o remount,ro $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
$ECHO "snapshot: could not remount $SNAPSHOT_RW readonly";
exit;
} fi;
และที่สอง:
Listing two: daily_snapshot_rotate.sh
#!/bin/bash
# ----------------------------------------------------------------------
# mikes handy rotating-filesystem-snapshot utility: daily snapshots
# ----------------------------------------------------------------------
# intended to be run daily as a cron job when hourly.3 contains the
# midnight (or whenever you want) snapshot; say, 13:00 for 4-hour snapshots.
# ----------------------------------------------------------------------
unset PATH
# ------------- system commands used by this script --------------------
ID=/usr/bin/id;
ECHO=/bin/echo;
MOUNT=/bin/mount;
RM=/bin/rm;
MV=/bin/mv;
CP=/bin/cp;
# ------------- file locations -----------------------------------------
MOUNT_DEVICE=/dev/hdb1;
SNAPSHOT_RW=/root/snapshot;
# ------------- the script itself --------------------------------------
# make sure we're running as root
if (( `$ID -u` != 0 )); then { $ECHO "Sorry, must be root. Exiting..."; exit; } fi
# attempt to remount the RW mount point as RW; else abort
$MOUNT -o remount,rw $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
$ECHO "snapshot: could not remount $SNAPSHOT_RW readwrite";
exit;
}
fi;
# step 1: delete the oldest snapshot, if it exists:
if [ -d $SNAPSHOT_RW/home/daily.2 ] ; then \
$RM -rf $SNAPSHOT_RW/home/daily.2 ; \
fi ;
# step 2: shift the middle snapshots(s) back by one, if they exist
if [ -d $SNAPSHOT_RW/home/daily.1 ] ; then \
$MV $SNAPSHOT_RW/home/daily.1 $SNAPSHOT_RW/home/daily.2 ; \
fi;
if [ -d $SNAPSHOT_RW/home/daily.0 ] ; then \
$MV $SNAPSHOT_RW/home/daily.0 $SNAPSHOT_RW/home/daily.1; \
fi;
# step 3: make a hard-link-only (except for dirs) copy of
# hourly.3, assuming that exists, into daily.0
if [ -d $SNAPSHOT_RW/home/hourly.3 ] ; then \
$CP -al $SNAPSHOT_RW/home/hourly.3 $SNAPSHOT_RW/home/daily.0 ; \
fi;
# note: do *not* update the mtime of daily.0; it will reflect
# when hourly.3 was made, which should be correct.
# now remount the RW snapshot mountpoint as readonly
$MOUNT -o remount,ro $MOUNT_DEVICE $SNAPSHOT_RW ;
if (( $? )); then
{
$ECHO "snapshot: could not remount $SNAPSHOT_RW readonly";
exit;
} fi;
หลังจากสร้างสคริปต์ตามความต้องการของคุณแล้วให้เพิ่มไปยังงาน cron
crontab -e
เพิ่มต่อไปนี้:
0 * / 4 * * * /usr/local/bin/make_snapshot.sh
0 13 * * * /usr/local/bin/daily_snapshot_rotate.sh
พวกเขาทำให้ make_snapshot.sh ทำงานทุก ๆ สี่ชั่วโมงต่อชั่วโมงและ Daily_snapshot_rotate.sh ให้ทำงานทุกวันเวลา 13:00 น. (นั่นคือ 1:00 PM)
แหล่งที่มา: http://www.mikerubel.org/computers/rsync_snapshots/
* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
ถ้าคุณต้องการให้มันทำงานทุกชั่วโมงคุณจะต้องเพิ่มงาน cron ในแต่ละชั่วโมง
อีกตัวเลือกที่เป็นไปได้คือการใช้ rsnapshot
ติดตั้ง rsnapshot (มีอยู่ในศูนย์ซอฟต์แวร์)
กำหนดค่า rsnapshot และระบุไดเรกทอรีแหล่งสำรองข้อมูล
เปิด /etc/rsnapshot.conf และยกเลิกหมายเหตุบรรทัดต่อไปนี้
# nano /etc/rsnapshot.conf
cmd_cp /bin/cp
cmd_ssh /usr/bin/ssh
cmd_du /usr/bin/du
cmd_rsnapshot_diff /usr/local/bin/rsnapshot-diff
logfile /var/log/rsnapshot
กำหนดไดเรกทอรีสำรองปลายทางของคุณใน /etc/rsnapshot.conf ที่แสดงด้านล่าง ในตัวอย่างนี้
/ home - ไดเรกทอรีต้นทางที่ควรสำรอง localhost / - ไดเรกทอรีปลายทางที่สำรองข้อมูลจะถูกเก็บไว้ โปรดทราบว่าไดเรกทอรีนี้จะถูกสร้างขึ้นภายใต้ไดเรกทอรี /.snapshots/{internal.n}/ ดังที่แสดงในขั้นตอนสุดท้าย
nano /etc/rsnapshot.conf
สำรองข้อมูล / home / localhost /
ทดสอบการกำหนดค่า rsnapshot
ทำการทดสอบการกำหนดค่าเพื่อให้แน่ใจว่า rsnapshot ตั้งค่าไว้อย่างถูกต้องและพร้อมที่จะทำการสำรองข้อมูล linux rsync
# rsnapshot configtest
Syntax OK
- ตรวจสอบการกำหนดค่าการสำรองข้อมูล rsnapshot ทุกชั่วโมง
คุณสามารถสำรองข้อมูลไดเรกทอรีลินุกซ์หรือไฟล์ในช่วงเวลาต่างๆ โดยค่าเริ่มต้นการสำรองข้อมูลรายชั่วโมงและรายวันจะถูกกำหนดค่า
ตรวจสอบการกำหนดค่าการสำรองข้อมูลรายชั่วโมง
# rsnapshot -t hourly
echo 6490 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /.snapshots/
mkdir -m 0755 -p /.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /home \
/.snapshots/hourly.0/localhost/
mkdir -m 0755 -p /.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc \
/.snapshots/hourly.0/localhost/
mkdir -m 0755 -p /.snapshots/hourly.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local /.snapshots/hourly.0/localhost/
touch /.snapshots/hourly.0/
- ตรวจสอบการกำหนดค่าการสำรองข้อมูล rsnapshot รายวัน
ตรวจสอบว่ากระบวนการสำรองข้อมูล rsnapshot cwrsync รายวันได้รับการกำหนดค่าอย่างเหมาะสม
# rsnapshot -t daily
echo 6493 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /.snapshots/
/.snapshots/hourly.5 not present (yet), nothing to copy
- เพิ่มรายการ Crontab สำหรับ rsnapshot
เมื่อคุณตรวจสอบแล้วว่าการกำหนดค่าการสำรองข้อมูลรายชั่วโมงและรายวัน rsync นั้นได้รับการตั้งค่าอย่างถูกต้องในยูทิลิตี้ rsnapshot cwrsync ถึงเวลาที่จะตั้งค่าลูกสุนัขตัวนี้ใน crontab ดังที่แสดงด้านล่าง
# crontab -e
0 */4 * * * /usr/local/bin/rsnapshot hourly
30 23 * * * /usr/local/bin/rsnapshot daily
แหล่งที่มา: http://www.thegeekstuff.com/2009/08/tutorial-backup-linux-using-rsnapshot-rsync-utility/
---- การกู้คืนโลหะเปลือย
ฉันจะใช้ dd และ tar เพื่อทำการกู้คืนข้อมูลที่ไม่มีข้อมูล
สำรองข้อมูลเมตาสำคัญ:
# dd if-/dev/hda of=/backups/mbr bs=512 count=1
สำรองข้อมูลระบบปฏิบัติการ:
# mkdir /backups
# mount nfsserver:/backups/<servername> /backups
# cd /
# tar cfz /backups/system.tar.gz --exclude /mnt --exclude /proc --exclude /backups
โดยส่วนตัวฉันมักจะใช้ระบบออฟไลน์ถ้าฉันต้องการสร้างไฟล์การกู้คืนแบบไม่เจาะจง