Mặc dù các ảnh chụp nhanh được gắn khác nhau sẽ hoạt động, có vẻ như nó có thể bị chậm khủng khiếp trong nhiều trường hợp.
Có btrfs chức năng cụ thể cho khác biệt snapshot? (Tôi không thể tìm thấy bất kỳ tài liệu nào)
Mặc dù các ảnh chụp nhanh được gắn khác nhau sẽ hoạt động, có vẻ như nó có thể bị chậm khủng khiếp trong nhiều trường hợp.
Có btrfs chức năng cụ thể cho khác biệt snapshot? (Tôi không thể tìm thấy bất kỳ tài liệu nào)
Câu trả lời:
Có vẻ như bạn đang tìm kiếm gửi / nhận btrfs , sẽ xuất hiện trong Linux 3.6. Các send
lệnh tạo file bản ghi của sự khác nhau giữa hai bức ảnh chụp, và các receive
lệnh áp dụng các thay đổi từ một tập tin. Lưu ý rằng gửi / nhận sử dụng định dạng tệp tùy chỉnh, vì vậy tệp sẽ không giống hệt như giả sử, diff hoặc tar.
Tôi đang chạy Debian ổn định mà không có btrfs send
, vì vậy tôi đã tìm đến một giải pháp bằng cách sử dụng btrfs subvolume find-new
.
Nếu bạn có snapshot1 và snapshot2 và bạn muốn biết điều gì đã thay đổi trong phần sau, snapshot 2, vì snapshot1 đã được tạo, bạn có thể sử dụng tập lệnh bên dưới cung cấp
btrfs-diff oldsnapshot/ newsnapshot/
sẽ liệt kê tất cả các tệp đã thay đổi trong newsnapshot / kể từ 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
Để giải thích: btrfs subvolume find-new
tìm các tệp đã thay đổi sau một 'thế hệ' ảnh chụp cụ thể. Nó cũng báo cáo số thế hệ hiện tại.
ví dụ: chụp ảnh nhanh hàng ngày của trường hợp subvolume:
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
Điều gì đã thay đổi giữa snap1 và snap2?
$ btrfs-diff snap1/ snap2/
bar1
foo2
Vì vậy, chúng ta có thể thấy tệp mới, xem tệp đã sửa đổi, nhưng việc xóa không được báo cáo . Điều này là do lệnh báo cáo về các tệp tồn tại, chứ không phải các tệp hiện không có.
Điều gì đã thay đổi giữa snap2 và subvolume sống?
$ btrfs-diff snap2/ live/
foo3
các tập tin đổi tên không được báo cáo . Dữ liệu của nó không thay đổi.
Bây giờ nếu chúng ta thêm dữ liệu vào tệp đã đổi tên
date >>live/bar2
btrfs-diff snap2/ live/
bar2
foo3
OK, có ý nghĩa. Nhưng hãy tạo một tập tin mới
date >live/lala
btrfs-diff snap2/ live/
bar2
foo3
hả lala ở đâu . Nếu bạn thêm một tập tin khác, lala
xuất hiện. Vì vậy, hành vi này là một chút kỳ lạ. Đó có lẽ là lý do tại sao wiki nói:
Cách tiếp cận tìm kiếm mới có một số hạn chế nghiêm trọng và do đó không thực sự có thể sử dụng được cho những thứ như gửi / nhận.
Tuy nhiên, sự kỳ lạ xuất hiện khi bạn so sánh một subvolume trực tiếp với trạng thái trước đó, chứ không phải khi bạn so sánh các ảnh chụp nhanh (chỉ đọc). Vì vậy, điều này vẫn có thể hữu ích trừ khi bạn muốn xác định các tệp đã bị xóa.
Điều này được hỗ trợ bởi các công cụ tiện lợi chụp nhanh snapper
.
sudo snapper -c config diff 445..446
Tất nhiên điều này đòi hỏi bạn phải sử dụng snapper
cho ảnh chụp nhanh của bạn.
Id chụp nhanh này có thể được tìm thấy bằng cách sử dụng snapper list -a
. Thật không may tại thời điểm viết snapper không hỗ trợ các snapshot danh sách cho một cấu hình duy nhất, mặc dù những con số này có thể được tìm thấy từ các tên subvolume.
A
chứaa
, hãy viếtb
trong ảnh chụp nhanh và sau đó thay đổi lạia
, tệp hoàn toàn không thay đổi.