Chúng tôi đang chạy một tập lệnh sao lưu, trước tiên sao chép tệp vào đích và sau đó chạy tar
trên nó
DIR2BCK='/foo/bar'
TMPDIR=$(mktemp -d)
rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1
tar czf /tmp/foo.backup.tar ${TMPDIR}
Sau khi chạy lệnh cuối cùng này, đôi khi cảnh báo sau được hiển thị:
/tmp/tmp.blqspkA136: tệp đã thay đổi khi chúng tôi đọc nó
Chúng tôi sao chép đích đến một thư mục tạm thời chính xác để tránh thay đổi tệp tại thời điểm nén. Hành vi này cũng có thể tái tạo khi sử dụng cp
lệnh thay vì rsync
. Cả đời tôi nghĩ những lệnh này là đồng bộ, nhưng cảnh báo này dường như cho thấy điều ngược lại.
Nếu tôi đặt một sleep
lệnh giữa rsync
/ cp
và tar
dòng, cảnh báo không hiển thị, nhưng tôi coi đây là một giải pháp không hoàn toàn sạch sẽ.
Một số sự thật:
- Tôi đã thử thêm một
sync
lệnh giữarsync
vàtar
các lệnh có cùng kết quả. Theo đề xuất của @jcbermu, tôi cũng đã thử thay đổi tập lệnh để hai dòng là:
rsync -a ${DIR2BCK} ${TMPDIR}/ > /dev/null 2>&1 & wait
Tôi chạy tập lệnh nhiều lần và một số trong số họ thể hiện hành vi tương tự, tuyên bố tập tin đã thay đổi khi sao chép.
Hệ thống tập tin được sử dụng là EXT4 cho cả
${TMPDIR}
và${DIR2BCK}
.${DIR2BCK}
là trên một hệ thống tập tin từ xa, thực sự đây là một điểm gắn kết samba của một máy từ xa.${TMPDIR}
là trên hệ thống tập tin cục bộ. Tuy nhiên, thay đổi${DIR2BCK}
đến hệ thống tập tin cục bộ làm cho không có sự khác biệt.- Tất cả các hệ thống tập tin đều dựa trên phần cứng RAID-5.
Những lệnh này có thực sự đồng bộ không? Nếu không, có cách nào để làm cho chúng như vậy, hoặc một lệnh thay thế?
tar
bắt đầu rsync
/ cp
dường như chưa kết thúc sao chép và cảnh báo được hiển thị. Tôi giả sử các lệnh này là đồng bộ, đó là lý do tại sao tôi ngạc nhiên.
sync
không giúp được gì ở đây Bạn không truy cập dữ liệu thô trên thiết bị. // Vui lòng cung cấp thông tin về hệ thống tập tin nào cả $TMPDIR
và $DIR2BCK
cư trú trên.