วิธีการสร้างและกู้คืนสแนปชอตส่วนเพิ่มของฮาร์ดดิสก์


13

ฉันใช้ Virtual Box เป็นจำนวนมากสำหรับการทดสอบ distro / แอปพลิเคชัน

หนึ่งในคุณสมบัติที่ฉันชอบคือสแนปชอตของเครื่องเสมือนช่วยประหยัดสถานะของเครื่องเสมือนและสามารถเรียกคืนสู่ความรุ่งเรืองในอดีตได้หากสิ่งที่คุณทำผิดไปโดยไม่มีปัญหาและไม่ต้องใช้พื้นที่บนฮาร์ดดิสก์ทั้งหมด

ในระบบสดของฉันฉันรู้วิธีการสร้างภาพ 1: 1 ของระบบไฟล์ แต่โซลูชั่นทั้งหมดที่ฉันรู้จักจะสร้างภาพใหม่ของระบบไฟล์ที่สมบูรณ์

มีโปรแกรม / ระบบไฟล์ใดบ้างที่สามารถถ่ายภาพระบบไฟล์ปัจจุบันบันทึกไว้ในตำแหน่งอื่น แต่แทนที่จะสร้างอิมเมจใหม่ที่สมบูรณ์ซึ่งจะสร้างการสำรองข้อมูลส่วนเพิ่ม

เพื่อให้ง่ายต่อการอธิบายสิ่งที่ฉันต้องการมันควรจะเป็นddรูปภาพของระบบไฟล์ แต่แทนที่จะเป็นการสำรองข้อมูลแบบเต็มเท่านั้น


ฉันไม่ได้มองหา clonezilla ฯลฯ มันควรจะทำงานภายในระบบของตัวเองโดยไม่มีการแทรกแซงจากผู้ใช้ (หรือเกือบจะไม่มีเลย) แต่มีข้อมูลทั้งหมดของระบบไฟล์ ฉันยังไม่ได้มองหาการduplicityสำรองข้อมูลทุกระบบของคุณยกเว้นบางโฟลเดอร์สคริปต์ + ddเพื่อบันทึก mbr ของคุณ ฉันสามารถทำได้ด้วยตัวเองโดยมองหาลูกเล่นพิเศษ

ฉันกำลังมองหาสิ่งที่ฉันสามารถทำได้ก่อนที่จะทำการเปลี่ยนแปลงอย่างมากกับระบบและถ้ามีอะไรผิดปกติหรือฉันเผาฮาร์ดดิสก์หลังจากทำกาแฟหกใส่ฉันสามารถบูตจาก liveCD และกู้คืน snapshot ที่ใช้งานได้ไปยังฮาร์ดดิสก์

ไม่จำเป็นต้องเป็นรายวันไม่จำเป็นต้องมีตาราง เพียงรันครั้งเดียวแล้วปล่อยให้เป็นหน้าที่ของมันและโดยเฉพาะอย่างยิ่ง RAW ที่ใช้ไม่ใช่การคัดลอกไฟล์



ดังนั้นคุณกำลังมองหาแอพพลิเคชั่นที่สามารถสร้างภาพที่ติดตั้งได้หรือไม่? ถ้าไม่ใช่ทำไมคุณไม่ชอบ Deja Dup ล่ะ? หากคุณกำลังขอให้แอปพลิเคชันสามารถสร้างภาพที่ติดตั้งได้ฉันต้องการทราบคำตอบนั้นด้วย กำลังเพิ่มรายการโปรด
heartsmagic

เพิ่งโพสต์คำตอบสำหรับคำถามที่มีชื่อว่า ... แต่ฉันเห็นว่าคุณกำลังมองหาวิธีที่มีศักยภาพมากขึ้นในการกู้คืนระบบโลหะเปล่าแทนที่จะเป็นระดับไฟล์
cprofitt

1
ดูเหมือนว่าคุณต้องการระดับบล็อกไม่ใช่ระบบไฟล์ตามการสำรองข้อมูลส่วนเพิ่ม นอกเหนือจากการใช้ระบบไฟล์ที่รองรับสแนปชอตฉันไม่แน่ใจว่าสิ่งที่คุณถามนั้นเป็นไปได้หรือไม่ LVM, BTRFS อาจเป็นไปได้
cprofitt

@cprofitt ขอบคุณสำหรับการแก้ไขชื่อมันถูกต้องมากขึ้น
Bruno Pereira

@Bruno - การสร้างชื่อที่ดีจะช่วยทำให้มีประโยชน์สำหรับผู้ที่มาในภายหลังเพื่อค้นหาคำตอบ
cprofitt

คำตอบ:


14

ที่จะอธิบายคำตอบของ cprofitt (เป็นคำตอบของเขาเป็นที่เพิ่มขึ้นขณะที่ผมจะอธิบาย) ...

ก่อนอื่นคุณต้องรู้เกี่ยวกับฮาร์ดลิงก์

ฮาร์ดลิงก์ชี้ไปที่ข้อมูลที่อยู่บนดิสก์จริง (ตำแหน่งทางกายภาพ) และคุณสามารถเข้าถึงข้อมูลได้โดยใช้ฮาร์ดลิงก์ แต่ละไฟล์และไดเรกทอรีเป็นการเชื่อมโยงอย่างหนักไปยังตำแหน่งของข้อมูลบนฟิสิคัลดิสก์ ดังนั้นถ้ามีสองไฟล์ (เชื่อมโยงอย่างหนัก) ที่ชี้ไปยังตำแหน่งเดิมแล้วข้อมูลจะถูกเก็บไว้เพียงครั้งเดียว


กระบวนการที่กำหนดโดย cprofitt เกี่ยวข้องกับ:

  1. หมุนข้อมูลสำรองเพื่อสร้างตำแหน่งใหม่ ("การสำรองข้อมูลของวันนี้" จากเมื่อวานกลายเป็น "การสำรองข้อมูลของเมื่อวานนี้", "การสำรองข้อมูลของเมื่อวานนี้" จากสองวันที่ผ่านมากลายเป็น "การสำรองข้อมูลของสองวันที่ผ่านมา" เป็นต้น

    • รายการยังคงเติบโตตราบใดที่คุณต้องการอย่างไรก็ตามในสคริปต์จะมีเพียง 4 สแนปชอต (มันทำกระบวนการทั้งหมดอีกครั้งสำหรับระดับถัดไป (เช่นหนึ่งสัปดาห์ - "การสำรองข้อมูลของสัปดาห์นี้") และหมุนสิ่งเหล่านั้นนั่นคือเหตุผลที่มันมีเพียง 4)
    • การเคลื่อนไหวจะทำย้อนกลับเพื่อป้องกันการเขียนทับ
  2. คัดลอกสแน็ปช็อตล่าสุดที่คุณทำ (เช่น "การสำรองข้อมูลเมื่อวาน") ไปยังจุดใหม่ (เช่น "การสำรองข้อมูลวันนี้") สร้างฮาร์ดลิงก์ใหม่ไปยังไฟล์ที่มีอยู่โดยไม่คัดลอกไฟล์ ดังนั้นไฟล์ทั้งหมดในภาพรวมใหม่จะชี้ไปที่ตำแหน่งเดียวกับก่อนหน้านี้หนึ่ง


ตัวอย่างที่แสดง

ในภาพด้านล่างไฟล์ที่มีสีเดียวกันซึ่งมีชื่อไฟล์เหมือนกันคือฮาร์ดลิงก์ไปยังไฟล์เดียวกันบนดิสก์ ที่นี่เราเพิ่งจะจัดการกับสองภาพรวมและไม่กี่ไฟล์ แต่ตัวอย่างที่ปรับขนาด (ยกเว้นความจริงที่ว่าฉันกำลังย้ายสแนปชอตในแบบตรงข้ามกับสคริปต์ในคำตอบของ cproffit)

ป้อนคำอธิบายรูปภาพที่นี่

กระบวนการนี้คือ:

  1. มีสแนปชอตของระบบ

  2. สแน็ปช็อตคือการคัดลอก (การสร้างฮาร์ดลิงก์ไปยังไฟล์ที่มีอยู่)

  3. Rsync ทำงานเพื่ออัพเดทสแนปชอต เมื่อไฟล์มีการเปลี่ยนแปลงมันจะจัดเก็บไฟล์ใหม่เป็นสำเนาใหม่บนฮาร์ดดิสก์ (ดังนั้นภาพรวมที่เก่ากว่าจะไม่เปลี่ยนแปลง) ในตัวอย่างนี้ไฟล์ B มีการเปลี่ยนแปลง หมายเหตุ:ตอนนี้เรามีไฟล์ A และไฟล์ C เพียงหนึ่งสำเนาและไฟล์ B สองไฟล์เก็บไว้ในฮาร์ดดิสก์

  4. หมุนสแน็ปช็อต (ในกรณีนี้สแน็ปช็อต 0 'ตกลง' และถูกลบและฉันเปลี่ยนชื่อสแน็ปช็อต 1 เป็นสแน็ปช็อต 0)

  5. คัดลอกภาพรวม agin (ทำซ้ำขั้นตอนที่ 2)

  6. Rsync อีกครั้ง (ทำซ้ำขั้นตอนที่ 3) ตอนนี้เรามีไฟล์ A และสำเนา B และ File C 2 ไฟล์


เวอร์ชันที่เรียบง่ายของสคริปต์ [แรก] (เพื่อไม่ให้ทำงานเช่นเดียวกับสเต็ปปิ้ง) คือ:

#!/bin/bash

# Delete the snapshot we don't want (has 'fallen off')
rm -rf /root/snapshot/home/hourly.3 ;

# Rotate the snapshots by shuffling them back
mv /root/snapshot/home/hourly.2 /root/snapshot/home/hourly.3 ;
mv /root/snapshot/home/hourly.1 /root/snapshot/home/hourly.2 ;

# Copy the snapshot (creating hard links to the existing files)
cp -al /root/snapshot/home/hourly.0 /root/snapshot/home/hourly.1 ;

# Do the rsync ...
# 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 /home/ /root/snapshot/home/hourly.0 ;

ตอนนี้สคริปต์แบบเต็มมีคำอธิบายแบบเต็มที่นี่ (เหมือนกับ cprofitt ที่เชื่อมโยงกับ) และมันก็ละเอียดกว่า แต่ก็เป็นไปตามข้างต้น สคริปต์อื่นใช้สำหรับการจัดกลุ่มสแน็ปช็อตและส่วนอื่น ๆ ของคำตอบของ cprofitt พูดถึงการทำให้กระบวนการอัตโนมัติ (ใช้ cron) และตรวจสอบว่าการสำรองข้อมูลสำเร็จ

คุณสามารถเปลี่ยนชื่อได้ดังนั้นแทนที่จะเรียกชื่อไดเรกทอรีว่า "hourly ... " พวกเขาจะเรียกชื่ออย่างอื่นและสคริปต์จะทำงานด้วยตนเอง


หากต้องการกู้คืนล็อตทั้งหมดให้คัดลอกสแน็ปช็อตล่าสุด (หรืออันก่อนหน้านี้) กลับไปยังไดเรกทอรีที่คุณทำการสำรองข้อมูล

ในการกู้คืนไฟล์เดียวที่ยังอยู่ในสแน็ปช็อตให้ไปที่สแน็ปช็อตและคัดลอกกลับไปยังที่ที่เป็นของ

สื่อสำรองข้อมูลอาจเป็นฮาร์ดไดรฟ์ภายนอก (ต้องเป็น ext2 / ext3 / ext4) หากคุณกำลังสำรอง/(ส่วนใหญ่/boot, /home, /etc /rootและ/usr) แล้วบอกว่า ...

  1. คุณเชื่อมต่อไดรฟ์ภายนอกทำการสำรองข้อมูลและสร้างสแน็ปช็อตล่าสุด

  2. ถอดเมาท์ไดรฟ์

  3. จำไว้ว่าคุณลบไฟล์ (แม้แต่จากถังขยะ) ที่คุณต้องการ

  4. เชื่อมต่อไดรฟ์ภายนอกและดึงไฟล์

  5. สำรองข้อมูล (เพื่อให้แน่ใจ)

  6. ถอดไดรฟ์และออกเดินทาง ...

  7. ตระหนักดีว่าแล็ปท็อปและลาวาไม่ได้ผสมกัน

  8. เมื่อแล็ปท็อปเครื่องใหม่ของคุณใช้งานซีดีสดจัดรูปแบบไดรฟ์ภายในติดตั้งไดรฟ์ภายนอกแล้วcp -a /media/external/snapshot-0/* /media/internal-drive(สมมติว่า snapshot-0 เป็นสแน็ปช็อตล่าสุด)

  9. ติดตั้งด้วงไปที่ MBR (ใช่ต้องแยกต่างหาก) - หรือใช้ddเพื่อสำรองข้อมูล mbr เช่น cprofitt ได้กล่าวไว้ที่ด้านล่างของคำตอบของเขา

  10. Reboot

สคริปต์ต้องได้รับการปรับปรุง (เพื่อให้ได้สิ่งที่คุณต้องการเท่านั้น) และขั้นตอนดังกล่าวถือว่าคุณไม่มี/homeพาร์ติชัน หากคุณ (หรือมี) สร้างขึ้นใหม่บนดิสก์และติดตั้งในสถานที่ด้วยmount /dev/sdxy /media/external/homeก่อนที่จะคัดลอก


สแน็ปช็อต 100 dd จะ100 x <average size of snapshot> คุ้มค่ากับพื้นที่ดิสก์ 100 <size of snapshot> + <size of changed files>ของเหล่านี้จะเสียค่าใช้จ่าย ฉันใช้สิ่งนี้เพื่อใส่สแนปชอตหลายรายการของ / home (~ 400GB) ลงในดิสก์ 500GB
Portablejim

คุณสามารถเมาท์ดิสก์อิมเมจเสมือนบนระบบไฟล์ของคุณจากนั้นทำการสำรองข้อมูลนั้น ดูsuperuser.com/questions/158908/และลิงค์
Portablejim

อย่างที่ได้กล่าวมานี้สำหรับคอมพิวเตอร์ที่ใช้งานของฉันไม่ใช่กล่องเสมือน vbox เป็นเพียงตัวอย่างเท่านั้น
Bruno Pereira

อัปเดตคำถาม (ท้ายที่สุดแทนที่จะเพิ่มความคิดเห็น)
Portablejim

@Portablejim: คุณกำลังเขียนว่า cp คือ "การรักษาลิงก์ถาวร" ฉันคิดว่าวลีนี้ทำให้เกิดความสับสน cp -alกำลังสร้างลิงก์ไปยังไฟล์ต้นฉบับแทนที่จะคัดลอกไฟล์ต้นฉบับ ตัวเลขของคุณควรสะท้อนเช่นโดยแสดงว่าไฟล์ A ในรูปที่ 2 เป็นไฟล์เดียวกัน
daniel kullmann

7

คุณสามารถใช้ 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

  1. ติดตั้ง rsnapshot (มีอยู่ในศูนย์ซอฟต์แวร์)

  2. กำหนดค่า 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
  1. กำหนดไดเรกทอรีสำรองปลายทางของคุณใน /etc/rsnapshot.conf ที่แสดงด้านล่าง ในตัวอย่างนี้

    / home - ไดเรกทอรีต้นทางที่ควรสำรอง localhost / - ไดเรกทอรีปลายทางที่สำรองข้อมูลจะถูกเก็บไว้ โปรดทราบว่าไดเรกทอรีนี้จะถูกสร้างขึ้นภายใต้ไดเรกทอรี /.snapshots/{internal.n}/ ดังที่แสดงในขั้นตอนสุดท้าย

    nano /etc/rsnapshot.conf

    สำรองข้อมูล / home / localhost /

  2. ทดสอบการกำหนดค่า rsnapshot

ทำการทดสอบการกำหนดค่าเพื่อให้แน่ใจว่า rsnapshot ตั้งค่าไว้อย่างถูกต้องและพร้อมที่จะทำการสำรองข้อมูล linux rsync

# rsnapshot configtest
Syntax OK
  1. ตรวจสอบการกำหนดค่าการสำรองข้อมูล 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/
  1. ตรวจสอบการกำหนดค่าการสำรองข้อมูล 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
  1. เพิ่มรายการ 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

โดยส่วนตัวฉันมักจะใช้ระบบออฟไลน์ถ้าฉันต้องการสร้างไฟล์การกู้คืนแบบไม่เจาะจง


2
คำตอบทั้งหมดของคุณดูดีมากไม่มีปัญหาและทั้งหมด แต่ไม่ใช่สิ่งที่ฉันขอวิธีการใด ๆ จะไม่กู้คืน MBR และddไม่เพิ่มขึ้น นี่ไม่ใช่สิ่งที่ฉันขอ 10% สุดท้ายอาจน่าสนใจที่จะมองหา แต่การถ่ายโอนข้อมูลที่เหลือทั้งหมดไม่ได้เป็นเช่นนั้นจริงๆ
Bruno Pereira

รายละเอียดข้างต้นจัดการกับระบบไฟล์ (เป็นระบบไฟล์) และฉันได้เพิ่มกระบวนการ dd เพื่อจัดการกับ MBR
cprofitt

3

มี 2 ​​วิธีในการบล็อกการสำรองข้อมูลแบบส่วนเพิ่ม

  • สแนปชอตของระบบไฟล์
  • ภาพรวมของโปรแกรม

สแนปชอตของระบบไฟล์

ทั้งZFSและBTRFSจัดเตรียมสแน็ปช็อตที่เพิ่มขึ้นตามบล็อก ( BTRFS , ZFS (หน้า 25) ) คุณสามารถมีไดรฟ์ที่คุณ rsync เป็น ZFS หรือ BTRFS และสแน็ปช็อต

นอกจากนี้ยังมีสแน็ปช็อต LVM (กล่าวถึงโดย cprofitt) ที่ให้สแนปชอตที่เพิ่มขึ้นตามบล็อกเดียวกัน

ภาพรวมของโปรแกรม

มีโปรแกรมสำรองข้อมูลหลายโปรแกรมแต่มีเพียงไม่กี่จุดประสงค์:

ฉันรู้ว่าคุณพูดถึงโดยเฉพาะว่าคุณไม่ได้มองหาบางอย่างที่เหมือนตีสองหน้า แต่ฉันคิดว่าฉันอาจพูดถึงคุณสมบัติบางอย่าง

อย่างไรก็ตามโปรแกรมเหล่านี้ต้องการให้คุณติดตั้งโปรแกรมเหล่านั้นเพื่อกู้คืน ความสวยงามของบางอย่างเช่น rsync คือการติดตั้ง linux เกือบทุกอันจะมี rsync (เช่นแกนเล็ก ๆ (การกระจาย 10MB) หายไป) โดยค่าเริ่มต้น

การตีสองหน้า

มันแค่เก็บค่า diff (ระดับบล็อก) จากนั้นทำการบีบอัดและเข้ารหัสมัน สิ่งนี้นำไปสู่การจัดเก็บที่น้อยกว่าวิธี rsync อย่างไรก็ตาม (อย่างน้อยฉันก็เห็น) ระบบไฟล์จะต้องถูกสร้างขึ้นใหม่ซึ่งจะใช้เวลา (ถ้าคุณใช้การสำรองข้อมูลเพิ่มขึ้นด้วยและขึ้นอยู่กับเวลา สำรองข้อมูลเต็มรูปแบบล่าสุด)

หน้าคนอธิบายวิธีการทำงาน

rdiff สำรอง

โปรแกรมไคลเอนต์ - เซิร์ฟเวอร์ที่สร้างเช่นเดียวกับที่ซ้ำกันระดับบล็อกแตกต่างกันอย่างไรก็ตามมันเก็บการเปลี่ยนแปลงจากจุดคืนค่าล่าสุดดังนั้นภาพรวมล่าสุดเป็นวิธีที่เร็วที่สุดในการกู้คืน การย้อนเวลากลับไป (ไม่ใช่ภาพรวมสุดท้าย) ต้องการการวิเคราะห์ที่แตกต่างกันมากขึ้นและช้าลง

บางคนเปรียบเทียบ rdiff-backup กับ rsnapshot (ดูเหมือนจะเป็นวิธีอัตโนมัติของ rsync mentod) เกือบทุกวิธีการชำระเงินมุ่งเน้นการใช้ rdiff ผ่านเครือข่าย แต่ฉันพบหนึ่งซึ่งกล่าวถึงวิธีที่จะทำใน localhost


ตกลงฉันชอบสิ่งนี้สนใจที่จะอธิบายวิธีการทำงานกับการกู้คืนพาร์ทิชันหรือไม่ เช่นถ้าฉันแบ่งดิสก์ฉันจะกู้คืนระบบที่สมบูรณ์ของฉันออกจากสแนปช็อตโดยไม่ต้องสร้างพาร์ติชันด้วยตนเอง ฯลฯ ได้อย่างไรเพื่อไม่ให้มีรายละเอียดมากหรือรวมสคริปต์เพียงแค่ชื่อคำสั่งบางอย่างและสิ่งที่พวกเขาจะทำ
Bruno Pereira

ฉันไม่เคยมีประสบการณ์กับระบบเหล่านี้ฉันพบสิ่งเหล่านี้จากการทำวิจัยโดยใช้ Google เท่านั้น (เหตุใดจึงเป็นลิงก์เท่านั้น) เช่นฉันได้เรียนรู้สิ่งที่duplicityเป็นจริง
Portablejim

3

คุณควรดูที่ddar ( โฮมเพจ )

มันเพิ่มขึ้นในแง่ของการไม่ถ่ายโอนส่วนที่เหมือนกันของสแน็ปช็อต มันไม่ได้เพิ่มขึ้นในความหมายดั้งเดิมของคำเนื่องจากมันเกี่ยวข้องกับสแนปชอต

หมายเหตุ: ฉันไม่ได้ลองด้วยตัวเอง (แต่ฉันเชื่อใจผู้แต่ง) มันอาจจะไม่ทำสิ่งที่คุณต้องการให้สำเร็จนอกกรอบ แต่ก็ยังมีวิธีแก้ปัญหาที่คล้ายกันมากกว่านี้ในหน้า (เช่นZFS ) ดังนั้นเพื่อเป็นจุดเริ่มต้นมันอาจพิสูจน์ได้ว่ามีประโยชน์


1
ฉันเป็นผู้เขียนของ ddar (ขอบคุณสำหรับการกล่าวถึง!) หากฉันเข้าใจคำถามอย่างถูกต้องการส่งสแน็ปช็อต LVM ให้ชุดจะทำตามที่ร้องขอ อย่างที่คุณพูดมันเกี่ยวข้องกับสแนปชอตมากกว่าส่วนเพิ่ม แต่สแน็ปช็อตจะมีผลเช่นเดียวกันกับข้อดีที่สแนปชอตเก่าสามารถเอาออกได้ตามต้องการโดยไม่กระทบกับสแนปชอตใหม่
Robie Basak

@robie ฉันจะได้รับการฝึกอบรมเพื่อดูว่ามันจะทำงานอย่างไรคุณสามารถทำแนวทางเล็ก ๆ ให้ฉันหรือผู้ใช้ที่อาจกำลังมองหาวิธีแก้ปัญหานี้หรือไม่?
Bruno Pereira

1

ฉันคิดว่าคุณสามารถทำได้ด้วย LVM ในทางทฤษฎีเท่านั้นและมันจะทำให้ฮาร์ดดิสก์จำนวนมากเสียเปล่า ทฤษฎีของฉันคือคุณสามารถทำให้ระบบรูทของคุณอยู่บนโลจิคัลวอลุ่มจากนั้นถ้าคุณต้องการทำการทดสอบคุณสามารถสร้างสแน็ปช็อตและรีสตาร์ทเครื่องโดยใช้โวลุ่มใหม่

LVM snapshots ต้องการไดรฟ์ข้อมูลดั้งเดิมให้ทำงาน นี่เป็นเพราะไดรฟ์ข้อมูลใหม่เก็บความแตกต่างระหว่างสแน็ปช็อตและระบบไฟล์จริง

หากคุณออกจากระบบในสถานะนี้คุณจะเริ่มสิ้นเปลืองเนื้อที่ดิสก์เนื่องจากการเปลี่ยนแปลงระบบไฟล์ใหม่ ฉันไม่ทราบว่ามีวิธีการรวม snapshoted และ filesytem ที่ชัดเจนหรือไม่ แน่นอนคุณสามารถไปยังโลจิคัลวอลุ่มอื่น แต่สำหรับสิ่งนี้คุณจะต้องใช้พื้นที่สองเท่าของระบบไฟล์ของคุณบวกกับความแตกต่างระหว่าง "จุดกู้คืน" ของคุณและสถานะปัจจุบัน

และทั้งหมดนี้ต้องเริ่มต้นใหม่และอยู่ไกลจากการเป็นไปโดยอัตโนมัติ

มันควรจะเป็นเช่นกันว่าระบบไฟล์ที่ทันสมัยหลาย ๆ ตัวไปในลักษณะนี้เช่น zfs บนระบบโซลาริสหรือ btrfs ทดลอง


1

อันนี้ค่อนข้างเหนือหัวของฉัน แต่ดูเหมือนว่าส่วนหนึ่งของสิ่งที่คุณต้องการจะทำสำรองข้อมูลบางส่วนของไฟล์ไบนารี (เช่นไฟล์ภาพพาร์ทิชัน) มีแพ็คเกจที่ออกแบบมาเพื่อทำสิ่งนั้น (ฉันเพิ่งอ่านเกี่ยวกับมัน - ไม่ได้ลอง)

ลองดูที่ bup

https://github.com/apenwarr/bup

มันอาจให้ความคิดกับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.