ในขณะที่การติดตั้งสแนปชอตที่แตกต่างกันนั้นใช้งานได้ดูเหมือนว่ามันจะช้าอย่างน่ากลัวในหลายกรณี
มีฟังก์ชั่นเฉพาะของ btrfs ในการกระจายสแนปชอตหรือไม่? (ฉันไม่พบสิ่งใดในเอกสาร)
ในขณะที่การติดตั้งสแนปชอตที่แตกต่างกันนั้นใช้งานได้ดูเหมือนว่ามันจะช้าอย่างน่ากลัวในหลายกรณี
มีฟังก์ชั่นเฉพาะของ btrfs ในการกระจายสแนปชอตหรือไม่? (ฉันไม่พบสิ่งใดในเอกสาร)
คำตอบ:
ดูเหมือนว่าคุณกำลังมองหาส่ง / รับ btrfsซึ่งจะปรากฏใน Linux 3.6 send
คำสั่งสร้างแฟ้มบันทึกของความแตกต่างระหว่างสองภาพรวมและreceive
คำสั่งใช้การเปลี่ยนแปลงจากแฟ้ม โปรดทราบว่าการส่ง / รับใช้รูปแบบไฟล์ที่กำหนดเองดังนั้นไฟล์จะไม่เหมือนกับพูด, diff หรือ tar
ผมทำงานที่มั่นคง Debian ซึ่งไม่ได้มีดังนั้นฉันมองไปที่การแก้ปัญหาโดยใช้btrfs send
btrfs subvolume find-new
หากคุณมี snapshot1 และ snapshot2 และคุณต้องการทราบว่ามีการเปลี่ยนแปลงอะไรในภายหลังหนึ่ง snapshot 2 เนื่องจาก snapshot1 ถูกสร้างขึ้นคุณสามารถใช้สคริปต์ด้านล่างซึ่งมี
btrfs-diff oldsnapshot/ newsnapshot/
ซึ่งจะแสดงรายการไฟล์ทั้งหมดที่มีการเปลี่ยนแปลงใน newsnapshot / ตั้งแต่ oldsnapshot /
#!/bin/bash
usage() { echo $@ >2; echo "Usage: $0 <older-snapshot> <newer-snapshot>" >2; exit 1; }
[ $# -eq 2 ] || usage "Incorrect invocation";
SNAPSHOT_OLD=$1;
SNAPSHOT_NEW=$2;
[ -d $SNAPSHOT_OLD ] || usage "$SNAPSHOT_OLD does not exist";
[ -d $SNAPSHOT_NEW ] || usage "$SNAPSHOT_NEW does not exist";
OLD_TRANSID=`btrfs subvolume find-new "$SNAPSHOT_OLD" 9999999`
OLD_TRANSID=${OLD_TRANSID#transid marker was }
[ -n "$OLD_TRANSID" -a "$OLD_TRANSID" -gt 0 ] || usage "Failed to find generation for $SNAPSHOT_NEW"
btrfs subvolume find-new "$SNAPSHOT_NEW" $OLD_TRANSID | sed '$d' | cut -f17- -d' ' | sort | uniq
เพื่ออธิบาย: btrfs subvolume find-new
ค้นหาไฟล์ที่เปลี่ยนแปลงหลังจากสแน็ปช็อต 'รุ่น' ที่เฉพาะเจาะจง นอกจากนี้ยังรายงานหมายเลขรุ่นปัจจุบัน
เช่นใช้สแน็ปช็อตรายวันของเคสย่อย:
mkdir test && cd test
btrfs subvolume create live
date >live/foo1
date >live/bar1
btrfs subvolume snapshot live/ snap1
date >live/foo2 # new file
date >>live/bar1 # modify file
rm live/foo1 # delete file
btrfs subvolume snapshot live/ snap2
date >live/foo3 # new file
mv live/bar{1,2} # rename file
rm live/foo2 # delete file
เกิดอะไรขึ้นระหว่าง snap1 และ snap2
$ btrfs-diff snap1/ snap2/
bar1
foo2
ดังนั้นเราจึงสามารถดูไฟล์ใหม่ดูไฟล์ที่ถูกแก้ไขที่แต่ลบไม่ได้รายงาน นี่เป็นเพราะคำสั่งรายงานไฟล์ที่มีอยู่ไม่ใช่ไฟล์ที่ไม่มีอยู่ในขณะนี้
เกิดอะไรขึ้นระหว่าง snap2 และ subvolume สด
$ btrfs-diff snap2/ live/
foo3
ไฟล์เปลี่ยนชื่อไม่ได้รายงาน ข้อมูลไม่เปลี่ยนแปลง
ตอนนี้ถ้าเราเพิ่มข้อมูลลงในไฟล์ที่ถูกเปลี่ยนชื่อ
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
ตกลงทำให้รู้สึก แต่มาสร้างไฟล์ใหม่กันเถอะ
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
เอ๊ะ! ลาลาอยู่ที่ไหน . หากคุณเพิ่มไฟล์อื่นlala
ปรากฏขึ้น ดังนั้นพฤติกรรมนี้ค่อนข้างแปลก ซึ่งอาจเป็นสาเหตุที่ wiki พูดว่า:
วิธีการค้นหาใหม่มีข้อ จำกัด ที่ร้ายแรงดังนั้นจึงไม่สามารถใช้งานได้กับบางสิ่งบางอย่างเช่นการส่ง / รับ
อย่างไรก็ตามความแปลกประหลาดเกิดขึ้นเมื่อคุณเปรียบเทียบ subvolume สดกับสถานะก่อนหน้านี้ไม่ใช่เมื่อคุณเปรียบเทียบสแนปชอต (อ่านอย่างเดียว) ดังนั้นสิ่งนี้อาจมีประโยชน์เว้นแต่คุณต้องการระบุไฟล์ที่ถูกลบด้วย
snapper
นี้ได้รับการสนับสนุนโดยเครื่องมืออำนวยความสะดวกภาพรวม
sudo snapper -c config diff 445..446
หลักสูตรนี้คุณต้องใช้ snapper
แนปชอตของคุณ
snapper list -a
รหัสภาพรวมนี้สามารถพบได้โดยใช้ น่าเสียดายที่ตอนที่เขียนปลากะพงไม่สนับสนุนสแน็ปช็อตรายการสำหรับการตั้งค่าครั้งเดียวถึงแม้ว่าตัวเลขเหล่านี้สามารถพบได้จากชื่อ subvolume
A
ที่มีa
เขียนb
ในภาพรวมและต่อมาเปลี่ยนกลับไปเป็นa
ไฟล์ไม่ได้จริงๆเปลี่ยนที่ทุกคน